@pcircle/memesh 4.2.0 → 4.2.2
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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/README.de.md +5 -2
- package/README.es.md +5 -2
- package/README.fr.md +5 -2
- package/README.ja.md +5 -2
- package/README.ko.md +5 -2
- package/README.md +5 -2
- package/README.pt.md +5 -2
- package/README.th.md +5 -2
- package/README.vi.md +5 -2
- package/README.zh-CN.md +5 -2
- package/README.zh-TW.md +5 -2
- package/dashboard/dist/index.html +9 -9
- package/dist/cli/view.js +7 -1
- package/dist/cli/view.js.map +1 -1
- package/dist/core/analytics.d.ts +17 -0
- package/dist/core/analytics.d.ts.map +1 -1
- package/dist/core/analytics.js +40 -0
- package/dist/core/analytics.js.map +1 -1
- package/dist/core/kg-backfill.d.ts +10 -1
- package/dist/core/kg-backfill.d.ts.map +1 -1
- package/dist/core/kg-backfill.js +167 -2
- package/dist/core/kg-backfill.js.map +1 -1
- package/dist/mcp/launcher.d.ts +3 -0
- package/dist/mcp/launcher.d.ts.map +1 -0
- package/dist/mcp/launcher.js +37 -0
- package/dist/mcp/launcher.js.map +1 -0
- package/dist/skills-manifest.json +4 -4
- package/dist/transports/cli/cli.js +10 -0
- 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 +12 -1
- package/dist/transports/http/server.js.map +1 -1
- package/dist/transports/schemas.d.ts +4 -4
- package/dist/transports/schemas.d.ts.map +1 -1
- package/dist/transports/schemas.js +7 -3
- package/dist/transports/schemas.js.map +1 -1
- package/package.json +5 -3
- package/scripts/hooks/session-summary.js +2 -3
- package/scripts/postinstall-rebuild.mjs +41 -0
|
@@ -9,23 +9,23 @@
|
|
|
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 i of document.querySelectorAll('link[rel="modulepreload"]'))o(i);new MutationObserver(i=>{for(const r of i)if(r.type==="childList")for(const g of r.addedNodes)g.tagName==="LINK"&&g.rel==="modulepreload"&&o(g)}).observe(document,{childList:!0,subtree:!0});function n(i){const r={};return i.integrity&&(r.integrity=i.integrity),i.referrerPolicy&&(r.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?r.credentials="include":i.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function o(i){if(i.ep)return;i.ep=!0;const r=n(i);fetch(i.href,r)}})();var mt,X,xs,Re,Ut,ws,Ms,ft,it,Ve,_s,Pt,_t,St,ct={},dt=[],en=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,pt=Array.isArray;function Pe(t,s){for(var n in s)t[n]=s[n];return t}function Rt(t){t&&t.parentNode&&t.parentNode.removeChild(t)}function tn(t,s,n){var o,i,r,g={};for(r in s)r=="key"?o=s[r]:r=="ref"?i=s[r]:g[r]=s[r];if(arguments.length>2&&(g.children=arguments.length>3?mt.call(arguments,2):n),typeof t=="function"&&t.defaultProps!=null)for(r in t.defaultProps)g[r]===void 0&&(g[r]=t.defaultProps[r]);return rt(t,g,o,i,null)}function rt(t,s,n,o,i){var r={type:t,props:s,key:n,ref:o,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:i??++xs,__i:-1,__u:0};return i==null&&X.vnode!=null&&X.vnode(r),r}function ae(t){return t.children}function ot(t,s){this.props=t,this.context=s}function Oe(t,s){if(s==null)return t.__?Oe(t.__,t.__i+1):null;for(var n;s<t.__k.length;s++)if((n=t.__k[s])!=null&&n.__e!=null)return n.__e;return typeof t.type=="function"?Oe(t):null}function sn(t){if(t.__P&&t.__d){var s=t.__v,n=s.__e,o=[],i=[],r=Pe({},s);r.__v=s.__v+1,X.vnode&&X.vnode(r),Et(t.__P,r,s,t.__n,t.__P.namespaceURI,32&s.__u?[n]:null,o,n??Oe(s),!!(32&s.__u),i),r.__v=s.__v,r.__.__k[r.__i]=r,Ts(o,r,i),s.__e=s.__=null,r.__e!=n&&Ss(r)}}function Ss(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}),Ss(t)}function qt(t){(!t.__d&&(t.__d=!0)&&Re.push(t)&&!ut.__r++||Ut!=X.debounceRendering)&&((Ut=X.debounceRendering)||ws)(ut)}function ut(){try{for(var t,s=1;Re.length;)Re.length>s&&Re.sort(Ms),t=Re.shift(),s=Re.length,sn(t)}finally{Re.length=ut.__r=0}}function Cs(t,s,n,o,i,r,g,d,l,u,f){var c,p,h,m,y,v,w,b=o&&o.__k||dt,E=s.length;for(l=nn(n,s,b,l,E),c=0;c<E;c++)(h=n.__k[c])!=null&&(p=h.__i!=-1&&b[h.__i]||ct,h.__i=c,v=Et(t,h,p,i,r,g,d,l,u,f),m=h.__e,h.ref&&p.ref!=h.ref&&(p.ref&&Ft(p.ref,null,h),f.push(h.ref,h.__c||m,h)),y==null&&m!=null&&(y=m),(w=!!(4&h.__u))||p.__k===h.__k?(l=Ls(h,l,t,w),w&&p.__e&&(p.__e=null)):typeof h.type=="function"&&v!==void 0?l=v:m&&(l=m.nextSibling),h.__u&=-7);return n.__e=y,l}function nn(t,s,n,o,i){var r,g,d,l,u,f=n.length,c=f,p=0;for(t.__k=new Array(i),r=0;r<i;r++)(g=s[r])!=null&&typeof g!="boolean"&&typeof g!="function"?(typeof g=="string"||typeof g=="number"||typeof g=="bigint"||g.constructor==String?g=t.__k[r]=rt(null,g,null,null,null):pt(g)?g=t.__k[r]=rt(ae,{children:g},null,null,null):g.constructor===void 0&&g.__b>0?g=t.__k[r]=rt(g.type,g.props,g.key,g.ref?g.ref:null,g.__v):t.__k[r]=g,l=r+p,g.__=t,g.__b=t.__b+1,d=null,(u=g.__i=an(g,n,l,c))!=-1&&(c--,(d=n[u])&&(d.__u|=2)),d==null||d.__v==null?(u==-1&&(i>f?p--:i<f&&p++),typeof g.type!="function"&&(g.__u|=4)):u!=l&&(u==l-1?p--:u==l+1?p++:(u>l?p--:p++,g.__u|=4))):t.__k[r]=null;if(c)for(r=0;r<f;r++)(d=n[r])!=null&&(2&d.__u)==0&&(d.__e==o&&(o=Oe(d)),Ps(d,d));return o}function Ls(t,s,n,o){var i,r;if(typeof t.type=="function"){for(i=t.__k,r=0;i&&r<i.length;r++)i[r]&&(i[r].__=t,s=Ls(i[r],s,n,o));return s}t.__e!=s&&(o&&(s&&t.type&&!s.parentNode&&(s=Oe(t)),n.insertBefore(t.__e,s||null)),s=t.__e);do s=s&&s.nextSibling;while(s!=null&&s.nodeType==8);return s}function an(t,s,n,o){var i,r,g,d=t.key,l=t.type,u=s[n],f=u!=null&&(2&u.__u)==0;if(u===null&&d==null||f&&d==u.key&&l==u.type)return n;if(o>(f?1:0)){for(i=n-1,r=n+1;i>=0||r<s.length;)if((u=s[g=i>=0?i--:r++])!=null&&(2&u.__u)==0&&d==u.key&&l==u.type)return g}return-1}function Vt(t,s,n){s[0]=="-"?t.setProperty(s,n??""):t[s]=n==null?"":typeof n!="number"||en.test(s)?n:n+"px"}function Qe(t,s,n,o,i){var r,g;e:if(s=="style")if(typeof n=="string")t.style.cssText=n;else{if(typeof o=="string"&&(t.style.cssText=o=""),o)for(s in o)n&&s in n||Vt(t.style,s,"");if(n)for(s in n)o&&n[s]==o[s]||Vt(t.style,s,n[s])}else if(s[0]=="o"&&s[1]=="n")r=s!=(s=s.replace(_s,"$1")),g=s.toLowerCase(),s=g in t||s=="onFocusOut"||s=="onFocusIn"?g.slice(2):s.slice(2),t.l||(t.l={}),t.l[s+r]=n,n?o?n[Ve]=o[Ve]:(n[Ve]=Pt,t.addEventListener(s,r?St:_t,r)):t.removeEventListener(s,r?St:_t,r);else{if(i=="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]=n??"";break e}catch{}typeof n=="function"||(n==null||n===!1&&s[4]!="-"?t.removeAttribute(s):t.setAttribute(s,s=="popover"&&n==1?"":n))}}function $t(t){return function(s){if(this.l){var n=this.l[s.type+t];if(s[it]==null)s[it]=Pt++;else if(s[it]<n[Ve])return;return n(X.event?X.event(s):s)}}}function Et(t,s,n,o,i,r,g,d,l,u){var f,c,p,h,m,y,v,w,b,E,T,B,j,Z,V,te=s.type;if(s.constructor!==void 0)return null;128&n.__u&&(l=!!(32&n.__u),r=[d=s.__e=n.__e]),(f=X.__b)&&f(s);e:if(typeof te=="function")try{if(w=s.props,b=te.prototype&&te.prototype.render,E=(f=te.contextType)&&o[f.__c],T=f?E?E.props.value:f.__:o,n.__c?v=(c=s.__c=n.__c).__=c.__E:(b?s.__c=c=new te(w,T):(s.__c=c=new ot(w,T),c.constructor=te,c.render=on),E&&E.sub(c),c.state||(c.state={}),c.__n=o,p=c.__d=!0,c.__h=[],c._sb=[]),b&&c.__s==null&&(c.__s=c.state),b&&te.getDerivedStateFromProps!=null&&(c.__s==c.state&&(c.__s=Pe({},c.__s)),Pe(c.__s,te.getDerivedStateFromProps(w,c.__s))),h=c.props,m=c.state,c.__v=s,p)b&&te.getDerivedStateFromProps==null&&c.componentWillMount!=null&&c.componentWillMount(),b&&c.componentDidMount!=null&&c.__h.push(c.componentDidMount);else{if(b&&te.getDerivedStateFromProps==null&&w!==h&&c.componentWillReceiveProps!=null&&c.componentWillReceiveProps(w,T),s.__v==n.__v||!c.__e&&c.shouldComponentUpdate!=null&&c.shouldComponentUpdate(w,c.__s,T)===!1){s.__v!=n.__v&&(c.props=w,c.state=c.__s,c.__d=!1),s.__e=n.__e,s.__k=n.__k,s.__k.some(function(ne){ne&&(ne.__=s)}),dt.push.apply(c.__h,c._sb),c._sb=[],c.__h.length&&g.push(c);break e}c.componentWillUpdate!=null&&c.componentWillUpdate(w,c.__s,T),b&&c.componentDidUpdate!=null&&c.__h.push(function(){c.componentDidUpdate(h,m,y)})}if(c.context=T,c.props=w,c.__P=t,c.__e=!1,B=X.__r,j=0,b)c.state=c.__s,c.__d=!1,B&&B(s),f=c.render(c.props,c.state,c.context),dt.push.apply(c.__h,c._sb),c._sb=[];else do c.__d=!1,B&&B(s),f=c.render(c.props,c.state,c.context),c.state=c.__s;while(c.__d&&++j<25);c.state=c.__s,c.getChildContext!=null&&(o=Pe(Pe({},o),c.getChildContext())),b&&!p&&c.getSnapshotBeforeUpdate!=null&&(y=c.getSnapshotBeforeUpdate(h,m)),Z=f!=null&&f.type===ae&&f.key==null?As(f.props.children):f,d=Cs(t,pt(Z)?Z:[Z],s,n,o,i,r,g,d,l,u),c.base=s.__e,s.__u&=-161,c.__h.length&&g.push(c),v&&(c.__E=c.__=null)}catch(ne){if(s.__v=null,l||r!=null)if(ne.then){for(s.__u|=l?160:128;d&&d.nodeType==8&&d.nextSibling;)d=d.nextSibling;r[r.indexOf(d)]=null,s.__e=d}else{for(V=r.length;V--;)Rt(r[V]);Ct(s)}else s.__e=n.__e,s.__k=n.__k,ne.then||Ct(s);X.__e(ne,s,n)}else r==null&&s.__v==n.__v?(s.__k=n.__k,s.__e=n.__e):d=s.__e=rn(n.__e,s,n,o,i,r,g,l,u);return(f=X.diffed)&&f(s),128&s.__u?void 0:d}function Ct(t){t&&(t.__c&&(t.__c.__e=!0),t.__k&&t.__k.some(Ct))}function Ts(t,s,n){for(var o=0;o<n.length;o++)Ft(n[o],n[++o],n[++o]);X.__c&&X.__c(s,t),t.some(function(i){try{t=i.__h,i.__h=[],t.some(function(r){r.call(i)})}catch(r){X.__e(r,i.__v)}})}function As(t){return typeof t!="object"||t==null||t.__b>0?t:pt(t)?t.map(As):Pe({},t)}function rn(t,s,n,o,i,r,g,d,l){var u,f,c,p,h,m,y,v=n.props||ct,w=s.props,b=s.type;if(b=="svg"?i="http://www.w3.org/2000/svg":b=="math"?i="http://www.w3.org/1998/Math/MathML":i||(i="http://www.w3.org/1999/xhtml"),r!=null){for(u=0;u<r.length;u++)if((h=r[u])&&"setAttribute"in h==!!b&&(b?h.localName==b:h.nodeType==3)){t=h,r[u]=null;break}}if(t==null){if(b==null)return document.createTextNode(w);t=document.createElementNS(i,b,w.is&&w),d&&(X.__m&&X.__m(s,r),d=!1),r=null}if(b==null)v===w||d&&t.data==w||(t.data=w);else{if(r=r&&mt.call(t.childNodes),!d&&r!=null)for(v={},u=0;u<t.attributes.length;u++)v[(h=t.attributes[u]).name]=h.value;for(u in v)h=v[u],u=="dangerouslySetInnerHTML"?c=h:u=="children"||u in w||u=="value"&&"defaultValue"in w||u=="checked"&&"defaultChecked"in w||Qe(t,u,null,h,i);for(u in w)h=w[u],u=="children"?p=h:u=="dangerouslySetInnerHTML"?f=h:u=="value"?m=h:u=="checked"?y=h:d&&typeof h!="function"||v[u]===h||Qe(t,u,h,v[u],i);if(f)d||c&&(f.__html==c.__html||f.__html==t.innerHTML)||(t.innerHTML=f.__html),s.__k=[];else if(c&&(t.innerHTML=""),Cs(s.type=="template"?t.content:t,pt(p)?p:[p],s,n,o,b=="foreignObject"?"http://www.w3.org/1999/xhtml":i,r,g,r?r[0]:n.__k&&Oe(n,0),d,l),r!=null)for(u=r.length;u--;)Rt(r[u]);d||(u="value",b=="progress"&&m==null?t.removeAttribute("value"):m!=null&&(m!==t[u]||b=="progress"&&!m||b=="option"&&m!=v[u])&&Qe(t,u,m,v[u],i),u="checked",y!=null&&y!=t[u]&&Qe(t,u,y,v[u],i))}return t}function Ft(t,s,n){try{if(typeof t=="function"){var o=typeof t.__u=="function";o&&t.__u(),o&&s==null||(t.__u=t(s))}else t.current=s}catch(i){X.__e(i,n)}}function Ps(t,s,n){var o,i;if(X.unmount&&X.unmount(t),(o=t.ref)&&(o.current&&o.current!=t.__e||Ft(o,null,s)),(o=t.__c)!=null){if(o.componentWillUnmount)try{o.componentWillUnmount()}catch(r){X.__e(r,s)}o.base=o.__P=null}if(o=t.__k)for(i=0;i<o.length;i++)o[i]&&Ps(o[i],s,n||typeof t.type!="function");n||Rt(t.__e),t.__c=t.__=t.__e=void 0}function on(t,s,n){return this.constructor(t,n)}function ln(t,s,n){var o,i,r,g;s==document&&(s=document.documentElement),X.__&&X.__(t,s),i=(o=!1)?null:s.__k,r=[],g=[],Et(s,t=s.__k=tn(ae,null,[t]),i||ct,ct,s.namespaceURI,i?null:s.firstChild?mt.call(s.childNodes):null,r,i?i.__e:s.firstChild,o,g),Ts(r,t,g)}mt=dt.slice,X={__e:function(t,s,n,o){for(var i,r,g;s=s.__;)if((i=s.__c)&&!i.__)try{if((r=i.constructor)&&r.getDerivedStateFromError!=null&&(i.setState(r.getDerivedStateFromError(t)),g=i.__d),i.componentDidCatch!=null&&(i.componentDidCatch(t,o||{}),g=i.__d),g)return i.__E=i}catch(d){t=d}throw t}},xs=0,ot.prototype.setState=function(t,s){var n;n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=Pe({},this.state),typeof t=="function"&&(t=t(Pe({},n),this.props)),t&&Pe(n,t),t!=null&&this.__v&&(s&&this._sb.push(s),qt(this))},ot.prototype.forceUpdate=function(t){this.__v&&(this.__e=!0,t&&this.__h.push(t),qt(this))},ot.prototype.render=ae,Re=[],ws=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,Ms=function(t,s){return t.__v.__b-s.__v.__b},ut.__r=0,ft=Math.random().toString(8),it="__d"+ft,Ve="__a"+ft,_s=/(PointerCapture)$|Capture$/i,Pt=0,_t=$t(!1),St=$t(!0);var cn=0;function e(t,s,n,o,i,r){s||(s={});var g,d,l=s;if("ref"in l)for(d in l={},s)d=="ref"?g=s[d]:l[d]=s[d];var u={type:t,props:l,key:n,ref:g,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--cn,__i:-1,__u:0,__source:i,__self:r};if(typeof t=="function"&&(g=t.defaultProps))for(d in g)l[d]===void 0&&(l[d]=g[d]);return X.vnode&&X.vnode(u),u}var $e,re,bt,Gt,Ge=0,Rs=[],le=X,Kt=le.__b,Yt=le.__r,Xt=le.diffed,Zt=le.__c,Qt=le.unmount,Jt=le.__;function Dt(t,s){le.__h&&le.__h(re,t,Ge||s),Ge=0;var n=re.__H||(re.__H={__:[],__h:[]});return t>=n.__.length&&n.__.push({}),n.__[t]}function x(t){return Ge=1,dn(Fs,t)}function dn(t,s,n){var o=Dt($e++,2);if(o.t=t,!o.__c&&(o.__=[Fs(void 0,s),function(d){var l=o.__N?o.__N[0]:o.__[0],u=o.t(l,d);l!==u&&(o.__N=[u,o.__[1]],o.__c.setState({}))}],o.__c=re,!re.__f)){var i=function(d,l,u){if(!o.__c.__H)return!0;var f=o.__c.__H.__.filter(function(p){return p.__c});if(f.every(function(p){return!p.__N}))return!r||r.call(this,d,l,u);var c=o.__c.props!==d;return f.some(function(p){if(p.__N){var h=p.__[0];p.__=p.__N,p.__N=void 0,h!==p.__[0]&&(c=!0)}}),r&&r.call(this,d,l,u)||c};re.__f=!0;var r=re.shouldComponentUpdate,g=re.componentWillUpdate;re.componentWillUpdate=function(d,l,u){if(this.__e){var f=r;r=void 0,i(d,l,u),r=f}g&&g.call(this,d,l,u)},re.shouldComponentUpdate=i}return o.__N||o.__}function J(t,s){var n=Dt($e++,3);!le.__s&&Es(n.__H,s)&&(n.__=t,n.u=s,re.__H.__h.push(n))}function ie(t){return Ge=5,Ce(function(){return{current:t}},[])}function Ce(t,s){var n=Dt($e++,7);return Es(n.__H,s)&&(n.__=t(),n.__H=s,n.__h=t),n.__}function ye(t,s){return Ge=8,Ce(function(){return t},s)}function un(){for(var t;t=Rs.shift();){var s=t.__H;if(t.__P&&s)try{s.__h.some(lt),s.__h.some(Lt),s.__h=[]}catch(n){s.__h=[],le.__e(n,t.__v)}}}le.__b=function(t){re=null,Kt&&Kt(t)},le.__=function(t,s){t&&s.__k&&s.__k.__m&&(t.__m=s.__k.__m),Jt&&Jt(t,s)},le.__r=function(t){Yt&&Yt(t),$e=0;var s=(re=t.__c).__H;s&&(bt===re?(s.__h=[],re.__h=[],s.__.some(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(s.__h.some(lt),s.__h.some(Lt),s.__h=[],$e=0)),bt=re},le.diffed=function(t){Xt&&Xt(t);var s=t.__c;s&&s.__H&&(s.__H.__h.length&&(Rs.push(s)!==1&&Gt===le.requestAnimationFrame||((Gt=le.requestAnimationFrame)||gn)(un)),s.__H.__.some(function(n){n.u&&(n.__H=n.u),n.u=void 0})),bt=re=null},le.__c=function(t,s){s.some(function(n){try{n.__h.some(lt),n.__h=n.__h.filter(function(o){return!o.__||Lt(o)})}catch(o){s.some(function(i){i.__h&&(i.__h=[])}),s=[],le.__e(o,n.__v)}}),Zt&&Zt(t,s)},le.unmount=function(t){Qt&&Qt(t);var s,n=t.__c;n&&n.__H&&(n.__H.__.some(function(o){try{lt(o)}catch(i){s=i}}),n.__H=void 0,s&&le.__e(s,n.__v))};var es=typeof requestAnimationFrame=="function";function gn(t){var s,n=function(){clearTimeout(o),es&&cancelAnimationFrame(s),setTimeout(t)},o=setTimeout(n,35);es&&(s=requestAnimationFrame(n))}function lt(t){var s=re,n=t.__c;typeof n=="function"&&(t.__c=void 0,n()),re=s}function Lt(t){var s=re;t.__c=t.__(),re=s}function Es(t,s){return!t||t.length!==s.length||s.some(function(n,o){return n!==t[o]})}function Fs(t,s){return typeof s=="function"?s(t):s}const gt={en:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Connected","header.disconnected":"Disconnected","header.connecting":"Connecting…","header.memories":"memories","tab.insights":"Insights","telemetry.title":"LLM activity","telemetry.lastNDays":"last {n}d","telemetry.loading":"loading…","telemetry.empty":"No LLM activity recorded in this window. Smart-Mode flows write rows automatically once dream / consolidator / failure-analyzer run.","telemetry.callsCount":"{n} calls","telemetry.attemptsCount":"{n} attempts","telemetry.successRate":"success","telemetry.medianLatency":"median latency","telemetry.fallbackUsed":"fallback used {n}× ({pct} of calls)","telemetry.byProvider":"by provider","telemetry.errors":"errors","tab.search":"Search","tab.browse":"Browse","tab.analytics":"Analytics","tab.manage":"Manage","tab.graph":"Knowledge Graph","tab.lessons":"Lessons","tab.settings":"Settings","insights.title":"What memesh did for you","insights.subtitle":"auto-generated weekly recaps and patterns waiting for review","insights.statPending":"pending","insights.statApplied":"applied","insights.statRejected":"rejected","insights.filter.pending":"Pending","insights.filter.applied":"Applied","insights.filter.rejected":"Rejected","insights.filter.all":"All","insights.refresh":"Refresh","insights.loading":"loading…","insights.emptyPending":"No pending insights. Run `memesh dream run` to generate weekly recaps.","insights.emptyNoLlm":"Configure an LLM provider in Settings to enable weekly recaps and pattern detection.","insights.emptyOther":"Nothing here.","insights.sources":"sources","insights.status.pending":"pending","insights.status.applied":"applied","insights.status.rejected":"rejected","insights.viewDetail":"View detail","insights.collapse":"Collapse","insights.accept":"Accept","insights.applying":"Applying…","insights.reject":"Reject","insights.generatedBy":"Generated by","insights.promptVersion":"Prompt version","insights.observations":"Summary observations","insights.tags":"Tags","insights.sourceIds":"Sources","insights.validationWarnings":"Flagged claims (LLM validator)","insights.validationClaim":"Claim","insights.validationReason":"Reason","insights.runDream":"Run weekly recap","insights.runDreamWithValidate":"Run with validator (slower, higher quality)","banner.pendingInsights":"{n} new insight{s} waiting for your review →","banner.dismiss":"Dismiss","banner.viewAll":"View all","pattern.title":"Pattern","pattern.evidenceCount":"{n} evidence","pattern.severity":"Severity","pattern.severity.high":"high","pattern.severity.medium":"medium","pattern.severity.low":"low","pattern.description":"Pattern description","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.llmOptional.title":"LLM is optional","settings.llmOptional.body":"memesh works without an LLM. The default Core mode covers full-text recall, manual remember/recall, the dashboard, and session capture via hooks.","settings.llmOptional.coreLabel":"Without LLM (Core mode)","settings.llmOptional.coreFeatures":"FTS5 keyword search (95.40% R@5 on LongMemEval-S), manual remember/recall, dashboard, hooks-based session capture","settings.llmOptional.smartLabel":"With LLM (Smart mode)","settings.llmOptional.smartFeatures":"auto lesson_learned from session failures, auto-tagging of new entities, weekly recap + pattern detection","settings.apiKey":"API Key","settings.model":"Model (optional)","settings.save":"Save","settings.saving":"Saving…","settings.saved":"Saved.","settings.removeProvider":"Remove provider","settings.removeProviderHint":"Drops apiKey + model. Falls back to env-var auto-detect or Core Mode (no LLM).","settings.removeProviderConfirm":"Remove the configured LLM provider? This drops the saved API key and model. memesh will fall back to env-var auto-detection (ANTHROPIC_API_KEY > OPENAI_API_KEY > OLLAMA_HOST) or run in Core Mode if no credential is found.","settings.providerRemoved":"Provider removed. memesh now runs in Core Mode or via env-var auto-detect.","settings.test":"Test","settings.testing":"Testing…","settings.testPassed":"✓ Connection OK · {count} models available","settings.testFailed":"Connection test failed","settings.suggested":"suggested","settings.testRequired":"Test connection before saving","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.updateDeprecatedNoTarget":"Deprecated — no upgrade target yet","settings.updateDeprecatedTitle":"⚠️ MeMesh {version} is DEPRECATED by maintainers.","settings.updatePartialTitle":"⚠️ Update check partial","settings.updatePartialDescription":"{message}. Deprecation status is unknown for this session — re-run the check while online.","settings.updatePartialSummary":"Partial — deprecation status unknown","settings.updateDeprecatedTargetUnknown":"Deprecated — checking for upgrade target","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.interactHint":"Click a node to focus · drag empty area to pan · scroll to zoom","graph.resetView":"Reset view","graph.resetViewHint":"Reset zoom and pan","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","feedback.submitting":"Gathering diagnostics…","doctorBanner.warnTitle":"Heads up — memesh setup needs attention","doctorBanner.failTitle":"memesh setup is incomplete","doctorBanner.dismiss":"Dismiss","doctorBanner.getHelp":"Get help","doctorBanner.helpHint":"Opens a GitHub issue with the diagnostics pre-filled","doctorBanner.preambleForIssue":"memesh doctor reported the following on my install:","doctor.capabilities.summary":"LLM/embedding configuration detected","doctor.capabilities.fix":'Configure via "memesh config set llm.provider <provider>"',"doctor.config.summary":"Config file status","doctor.config.fix":'Fix or remove the config file, then run "memesh config list"',"doctor.dashboard.summary":"Dashboard artifact exists","doctor.dashboard.fix":'Run "npm run build:dashboard" to rebuild the dashboard',"doctor.database.summary":"Database accessibility status","doctor.database.fix":'Check database permissions, path, or run "memesh doctor" for detailed diagnosis',"doctor.hook-activity.summary":"No recent memesh-attributed activity (last 24h)","doctor.hook-activity.fix":"Open a Claude Code session that uses ≥3 tools and ends naturally (not user_interrupt), or commit something. Then reopen the dashboard.","doctor.hook-scripts.summary":"Hook script files verification","doctor.hook-scripts.fix":"Reinstall MeMesh or restore missing hook files from package","doctor.hook-wiring.summary":"Hooks integration status in Claude Code","doctor.hook-wiring.fix":'Run "memesh install-hooks" to wire hooks into Claude Code settings',"doctor.hooks-config.summary":"Hooks configuration file status","doctor.hooks-config.fix":"Reinstall MeMesh or restore .claude-plugin/hooks.json","doctor.http-probe.summary":"HTTP server availability check","doctor.http-probe.fix":"Check if port is available or database is accessible","doctor.install_id.summary":"Anonymous install ID status","doctor.install_id.fix":'Run "memesh" once to generate install ID',"doctor.install-channel.summary":"Installation method detection","doctor.install-channel.fix":"No action needed","doctor.mcp-config.summary":"MCP server configuration status","doctor.mcp-config.fix":"Restore .mcp.json from package or reinstall MeMesh","doctor.skills-manifest.summary":"Skills directory structure validation","doctor.skills-manifest.fix":"Reinstall MeMesh or restore .claude-plugin/skills directory","doctor.update_status.summary":"Update available: {version}","doctor.update_status.fix":'Run "memesh update" to upgrade',"doctor.update_status.prerelease":"Running pre-release version ({current}), npm latest is {latest}","doctor.vector_index.summary":"Search index needs rebuilding","doctor.vector_index.fix":'Run "memesh reindex" to restore full search',"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","time.justNow":"Just now","time.hoursAgo":"{count}h ago","time.today":"Today","time.yesterday":"Yesterday","time.daysAgo":"{count}d ago","time.lastWeek":"Last week","time.weeksAgo":"{count}w ago","time.lastMonth":"Last month","time.monthsAgo":"{count}mo ago","memory.access.frequent":"Frequent · {count} recalls","memory.access.recalls":"{count} recalls","memory.access.never":"Never recalled","cluster.knowledge":"Knowledge","cluster.activity":"Activity","cluster.session":"Sessions","cluster.reference":"Reference","cluster.all":"All","browse.filterCategory":"Category","browse.filterTime":"Time","browse.filterValue":"Value","browse.filterProject":"Project","browse.filterSort":"Sort","browse.timeToday":"Today","browse.timeWeek":"This week","browse.timeMonth":"This month","browse.timeOlder":"Older","browse.valueRecalled":"✓ Used","browse.valueNever":"Never recalled","browse.sortMostRecalled":"Most recalled","browse.sortRecent":"Recently used","browse.sortCreated":"Created","browse.emptyFilter":"No memories in this category — try a different filter","lessons.tabFailure":"Failure lessons","lessons.tabPlan":"Plan records","lessons.tabFreeform":"Notes","lessons.totalRecalls":"Total recalls","lessons.stepsLabel":"steps","lessons.commitsCount":"{count} commits","lessons.unstructured":"(No structured fields — see raw memory)","lessons.searchPlaceholder":"Search error / root cause / fix / name…","lessons.allProjects":"All projects","lessons.showing":"Showing {visible} / {total}","lessons.noMatch":'No memories matching "{query}"',"lessons.emptyCategory":"No memories in this category","lessons.moreItems":"+{count} more","roadmap.title":"Project Roadmap","roadmap.summary":"{count} memories · {first} → {last}","roadmap.switchToList":"↩ List view","roadmap.switchToRoadmap":"🗺️ Roadmap view","roadmap.emptyProject":"No memories in this project yet.","loop.label":"Memory loop","loop.subtitleHas":"knowledge memories reused in the past 7 days","loop.subtitleNone":"No knowledge memories reused this week — try recalling a lesson","loop.approxNote":"Approximation — full tracking starts after upgrade.","loop.sparkLabel":"Last 30 days","roadmap.milestones":"Milestones","roadmap.keyLessons":"Key lessons","radar.title":"Knowledge coverage radar","radar.caption":"Active knowledge memories<br/>(session and commit excluded)","radar.axis.lessons":"Lessons","radar.axis.decisions":"Decisions","radar.axis.patterns":"Patterns","radar.axis.bugs":"Bug fixes","radar.axis.processes":"Processes","radar.axis.architecture":"Architecture","ageMatrix.title":"Memory age distribution","ageMatrix.low":"Low","ageMatrix.high":"High","ageMatrix.legend":"colour depth = memory density","ageMatrix.typeColumn":"Type","header.signalModeOn":"Signal","header.signalModeOff":"All","header.signalModeOnHint":"Hiding session and commit noise. Click to show everything.","header.signalModeOffHint":"Showing all memories including session and commit noise. Click to hide noise.","roadmap.phases":"Phases","onboarding.title":"Welcome to MeMesh","onboarding.body":"Your memory store is empty. Start with a curated 30-entity tour or stash your first lesson.","onboarding.llmHint":"No LLM required. Everything below works on FTS5 alone (95.40% R@5). An LLM is optional for auto-lesson generation — configure later in Settings.","onboarding.seedButton":"Try the demo tour","onboarding.seedingButton":"Seeding…","onboarding.seedHint":"Adds 30 memories you can wipe later — no terminal needed","onboarding.cliReference":"Prefer the CLI?","onboarding.hintDemo":"Seeds 30 demo memories you can wipe later","onboarding.hintReset":"Removes everything tagged metadata.demo","onboarding.resetButton":"Reset demo","onboarding.resettingButton":"Resetting…","onboarding.resetConfirm":"Remove all demo memories? Real entries you saved will be kept.","onboarding.dismiss":"Dismiss","ageMatrix.bucket.week":"This week","ageMatrix.bucket.month":"This month","ageMatrix.bucket.quarter":"This quarter","ageMatrix.bucket.older":"Older","ageMatrix.type.lesson_learned":"Lesson","ageMatrix.type.lesson":"Lesson","ageMatrix.type.mistake":"Mistake","ageMatrix.type.decision":"Decision","ageMatrix.type.architecture_decision":"Arch decision","ageMatrix.type.pattern":"Pattern","ageMatrix.type.technical_pattern":"Tech pattern","ageMatrix.type.best_practice":"Best practice","ageMatrix.type.bug_fix":"Bug fix","ageMatrix.type.workflow_checkpoint":"Workflow milestone","ageMatrix.type.process":"Process","ageMatrix.type.architecture":"Architecture","ageMatrix.type.feature":"Feature","settings.behaviourTitle":"Behaviour","settings.autoUpdateLabel":"Auto-update policy","settings.autoUpdateOff":"Off — manual only","settings.autoUpdatePatch":"Patch — auto-apply X.Y.Z+1","settings.autoUpdateMinor":"Minor — auto-apply X.Y+1.0","settings.autoUpdateMajor":"Major — auto-apply any bump","settings.autoUpdateHint":"Triggered after every session ends. Env MEMESH_AUTO_UPDATE wins when set.","settings.agenticLabel":"Enable agentic orchestration (experimental)","settings.agenticHint":"Surfaces background-agent nudges on Bash and shows the verifiability banner. Opt-in only.","errors.timeout":"Request timed out"},"zh-TW":{"brand.subtitle":"powered by pcircle.ai","header.connected":"已連線","header.disconnected":"已斷線","header.connecting":"連線中…","header.memories":"筆記憶","tab.insights":"洞察","telemetry.title":"LLM activity","telemetry.lastNDays":"last {n}d","telemetry.loading":"loading…","telemetry.empty":"No LLM activity recorded in this window. Smart-Mode flows write rows automatically once dream / consolidator / failure-analyzer run.","telemetry.callsCount":"{n} calls","telemetry.attemptsCount":"{n} attempts","telemetry.successRate":"success","telemetry.medianLatency":"median latency","telemetry.fallbackUsed":"fallback used {n}× ({pct} of calls)","telemetry.byProvider":"by provider","telemetry.errors":"errors","tab.search":"搜尋","insights.title":"memesh 為你做了什麼","insights.subtitle":"自動產生的週報整理與發現的模式,等你 review","insights.statPending":"待審","insights.statApplied":"已採用","insights.statRejected":"已拒絕","insights.filter.pending":"待審","insights.filter.applied":"已採用","insights.filter.rejected":"已拒絕","insights.filter.all":"全部","insights.refresh":"重新整理","insights.loading":"讀取中…","insights.emptyPending":"目前沒有待審 insight。可執行 `memesh dream run` 產生週報整理。","insights.emptyNoLlm":"Configure an LLM provider in Settings to enable weekly recaps and pattern detection.","insights.emptyOther":"沒有資料。","insights.sources":"sources","insights.status.pending":"待審","insights.status.applied":"已採用","insights.status.rejected":"已拒絕","insights.viewDetail":"查看詳情","insights.collapse":"收合","insights.accept":"採用","insights.applying":"套用中…","insights.reject":"拒絕","insights.generatedBy":"產生模型","insights.promptVersion":"Prompt 版本","insights.observations":"摘要觀察","insights.tags":"標籤","insights.sourceIds":"來源 entities","insights.validationWarnings":"可疑陳述(LLM 驗證器)","insights.validationClaim":"陳述","insights.validationReason":"原因","insights.runDream":"執行週報","insights.runDreamWithValidate":"執行(含驗證器,較慢但品質更高)","banner.pendingInsights":"有 {n} 則新洞察等你審閱 →","banner.dismiss":"關閉","banner.viewAll":"查看全部","pattern.title":"模式","pattern.evidenceCount":"{n} 個證據","pattern.severity":"嚴重度","pattern.severity.high":"高","pattern.severity.medium":"中","pattern.severity.low":"低","pattern.description":"模式說明","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.llmOptional.title":"LLM 是選用的","settings.llmOptional.body":"memesh 不需要 LLM 也能運作。預設的核心模式已涵蓋全文回憶、手動 remember/recall、儀表板,以及透過 hook 自動捕捉 session。","settings.llmOptional.coreLabel":"沒有 LLM(核心模式)","settings.llmOptional.coreFeatures":"FTS5 關鍵字搜尋(LongMemEval-S 上 95.40% R@5)、手動 remember/recall、儀表板、hook 自動捕捉 session","settings.llmOptional.smartLabel":"有 LLM(智慧模式)","settings.llmOptional.smartFeatures":"自動從 session 失敗萃取 lesson_learned、新 entity 自動標籤、週報整理 + 模式發現","settings.apiKey":"API 金鑰","settings.model":"模型(選填)","settings.save":"儲存","settings.saving":"儲存中…","settings.saved":"已儲存","settings.removeProvider":"移除 LLM 設定","settings.removeProviderHint":"移除 apiKey 和 model 設定。將回退到環境變數自動偵測或 Core Mode(無 LLM)。","settings.removeProviderConfirm":"確定要移除已配置的 LLM provider?這會清除已儲存的 API key 和 model 設定。memesh 將回退到環境變數自動偵測(ANTHROPIC_API_KEY > OPENAI_API_KEY > OLLAMA_HOST)或在沒有任何憑證時以 Core Mode 運作。","settings.providerRemoved":"已移除 provider。memesh 現以 Core Mode 或環境變數自動偵測運作。","settings.test":"測試連線","settings.testing":"測試中…","settings.testPassed":"✓ 連線成功 · 找到 {count} 個可用模型","settings.testFailed":"連線測試失敗","settings.suggested":"推薦","settings.testRequired":"請先測試連線後再儲存","settings.language":"語言","settings.searchMode":"搜尋模式","settings.none":"無","settings.updates":"更新","settings.updateChecking":"正在檢查更新…","settings.updateUnavailable":"目前無法檢查更新","settings.updateNoSuccessfulChecks":"目前還沒有成功的更新檢查紀錄","settings.upToDate":"已是最新版本","settings.updateAvailable":"有可用更新","settings.updateStale":"目前顯示的是可能過期的快取狀態","settings.updateCachedFallback":"目前使用上次成功的快取結果","settings.updateDeprecatedNoTarget":"已停用 — 暫無可升級目標","settings.updateDeprecatedTitle":"⚠️ MeMesh {version} 已被維護者標示為停用 (DEPRECATED)。","settings.updatePartialTitle":"⚠️ 更新檢查未完整","settings.updatePartialDescription":"{message}。本次無法確認停用狀態 — 待網路恢復後請重新檢查。","settings.updatePartialSummary":"部分檢查 — 停用狀態未確認","settings.updateDeprecatedTargetUnknown":"已停用 — 升級目標查詢中","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.interactHint":"點擊節點聚焦 · 拖曳空白處平移 · 滾輪縮放","graph.resetView":"重設視圖","graph.resetViewHint":"重設縮放與位置","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","feedback.submitting":"收集診斷資訊中…","doctorBanner.warnTitle":"提醒 — memesh 設定有需要注意的地方","doctorBanner.failTitle":"memesh 設定不完整","doctorBanner.dismiss":"關閉","doctorBanner.getHelp":"取得協助","doctorBanner.helpHint":"會開啟一個已填好診斷資訊的 GitHub issue","doctorBanner.preambleForIssue":"memesh doctor 在我的安裝上回報以下狀況:","doctor.capabilities.summary":"LLM/嵌入配置已偵測","doctor.capabilities.fix":'透過 "memesh config set llm.provider <provider>" 配置',"doctor.config.summary":"配置檔案狀態","doctor.config.fix":'修復或移除配置檔案,然後執行 "memesh config list"',"doctor.dashboard.summary":"儀表板檔案存在","doctor.dashboard.fix":'執行 "npm run build:dashboard" 重建儀表板',"doctor.database.summary":"資料庫存取狀態","doctor.database.fix":'檢查資料庫權限、路徑,或執行 "memesh doctor" 取得詳細診斷',"doctor.hook-activity.summary":"過去 24 小時內未偵測到 memesh 活動","doctor.hook-activity.fix":"開啟一個使用工具的 Claude Code session,或提交一次後重新打開儀表板","doctor.hook-scripts.summary":"Hook 腳本檔案驗證","doctor.hook-scripts.fix":"重新安裝 MeMesh 或從套件還原缺失的 hook 檔案","doctor.hook-wiring.summary":"Claude Code 中的 Hooks 整合狀態","doctor.hook-wiring.fix":'執行 "memesh install-hooks" 將 hooks 接線至 Claude Code 設定',"doctor.hooks-config.summary":"Hooks 配置檔案狀態","doctor.hooks-config.fix":"重新安裝 MeMesh 或還原 .claude-plugin/hooks.json","doctor.http-probe.summary":"HTTP 伺服器可用性檢查","doctor.http-probe.fix":"檢查連接埠是否可用或資料庫是否可存取","doctor.install_id.summary":"匿名安裝 ID 狀態","doctor.install_id.fix":'執行一次 "memesh" 以產生安裝 ID',"doctor.install-channel.summary":"安裝方式偵測","doctor.install-channel.fix":"無需操作","doctor.mcp-config.summary":"MCP 伺服器配置狀態","doctor.mcp-config.fix":"從套件還原 .mcp.json 或重新安裝 MeMesh","doctor.skills-manifest.summary":"Skills 目錄結構驗證","doctor.skills-manifest.fix":"重新安裝 MeMesh 或還原 .claude-plugin/skills 目錄","doctor.update_status.summary":"有新版本:{version}","doctor.update_status.fix":'執行 "memesh update" 進行更新',"doctor.update_status.prerelease":"正在使用預發布版本({current}),npm 最新版為 {latest}","doctor.vector_index.summary":"搜尋索引需要重建","doctor.vector_index.fix":'執行 "memesh reindex" 即可修復',"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":"發生未知錯誤","time.justNow":"剛剛","time.hoursAgo":"{count} 小時前","time.today":"今天","time.yesterday":"昨天","time.daysAgo":"{count} 天前","time.lastWeek":"上週","time.weeksAgo":"{count} 週前","time.lastMonth":"上個月","time.monthsAgo":"{count} 個月前","memory.access.frequent":"常用 · {count} 次","memory.access.recalls":"{count} 次回憶","memory.access.never":"從未回憶","cluster.knowledge":"知識","cluster.activity":"活動","cluster.session":"工作記錄","cluster.reference":"參考","cluster.all":"全部","browse.filterCategory":"類別","browse.filterTime":"時間","browse.filterValue":"價值","browse.filterProject":"專案","browse.filterSort":"排序","browse.timeToday":"今天","browse.timeWeek":"本週","browse.timeMonth":"本月","browse.timeOlder":"更早","browse.valueRecalled":"✓ 用過","browse.valueNever":"從未回憶","browse.sortMostRecalled":"最常回憶","browse.sortRecent":"最近使用","browse.sortCreated":"建立時間","browse.emptyFilter":"此分類沒有記憶 — 試試切換類別或時間","lessons.tabFailure":"失敗教訓","lessons.tabPlan":"計畫紀錄","lessons.tabFreeform":"筆記","lessons.totalRecalls":"總回憶次數","lessons.stepsLabel":"步驟","lessons.commitsCount":"{count} 個 commit","lessons.unstructured":"(此教訓沒有結構化欄位,請查看原始記憶)","lessons.searchPlaceholder":"搜尋 error / root cause / fix / 名稱…","lessons.allProjects":"全部專案","lessons.showing":"顯示 {visible} / {total} 筆","lessons.noMatch":"無符合「{query}」的記憶","lessons.emptyCategory":"此類別沒有記憶","lessons.moreItems":"+{count} 條","roadmap.title":"專案路線圖","roadmap.summary":"{count} 筆記憶 · {first} → {last}","roadmap.switchToList":"↩ 清單檢視","roadmap.switchToRoadmap":"🗺️ 路線圖檢視","roadmap.emptyProject":"此專案尚無記憶。","loop.label":"記憶循環","loop.subtitleHas":"本週被回憶的知識類型記憶","loop.subtitleNone":"本週尚無知識被回憶 — 試試喚起一則教訓","loop.approxNote":"近似值 — 完整追蹤從升級後開始累積","loop.sparkLabel":"最近 30 天","roadmap.milestones":"里程碑","roadmap.keyLessons":"重要教訓","radar.title":"知識覆蓋雷達","radar.caption":"顯示有效知識記憶<br/>(排除 session 和 commit)","radar.axis.lessons":"教訓","radar.axis.decisions":"決策","radar.axis.patterns":"模式","radar.axis.bugs":"問題修復","radar.axis.processes":"流程","radar.axis.architecture":"架構","ageMatrix.title":"記憶年齡分佈","ageMatrix.low":"低","ageMatrix.high":"高","ageMatrix.legend":"顏色深度 = 記憶密度","ageMatrix.typeColumn":"類型","header.signalModeOn":"訊號","header.signalModeOff":"全部","header.signalModeOnHint":"已隱藏 session 與 commit 等雜訊。點擊顯示全部。","header.signalModeOffHint":"顯示包含 session 與 commit 在內的所有記憶。點擊隱藏雜訊。","roadmap.phases":"階段","onboarding.title":"歡迎使用 MeMesh","onboarding.body":"你的記憶庫還是空的。從 30 筆精選範例開始體驗,或直接存下你的第一則教訓。","onboarding.llmHint":"不需要 LLM。所有功能都靠 FTS5 運作(95.40% R@5)。LLM 只用在自動產生教訓,可以之後再到設定頁開啟。","onboarding.seedButton":"一鍵載入示範資料","onboarding.seedingButton":"載入中…","onboarding.seedHint":"直接在這裡載入 30 筆,之後可一鍵清除,不用切到終端機","onboarding.cliReference":"習慣 CLI?","onboarding.hintDemo":"植入 30 筆示範記憶,之後可一鍵清除","onboarding.hintReset":"移除所有 metadata.demo 標記的記憶","onboarding.resetButton":"清除示範資料","onboarding.resettingButton":"清除中…","onboarding.resetConfirm":"確定要移除所有示範記憶?你自己存的內容會保留。","onboarding.dismiss":"關閉","ageMatrix.bucket.week":"本週","ageMatrix.bucket.month":"本月","ageMatrix.bucket.quarter":"本季","ageMatrix.bucket.older":"更早","ageMatrix.type.lesson_learned":"教訓","ageMatrix.type.lesson":"教訓","ageMatrix.type.mistake":"錯誤","ageMatrix.type.decision":"決策","ageMatrix.type.architecture_decision":"架構決策","ageMatrix.type.pattern":"模式","ageMatrix.type.technical_pattern":"技術模式","ageMatrix.type.best_practice":"最佳實踐","ageMatrix.type.bug_fix":"問題修復","ageMatrix.type.workflow_checkpoint":"流程里程碑","ageMatrix.type.process":"流程","ageMatrix.type.architecture":"架構","ageMatrix.type.feature":"功能","settings.behaviourTitle":"行為設定","settings.autoUpdateLabel":"自動更新策略","settings.autoUpdateOff":"關閉 — 僅手動","settings.autoUpdatePatch":"Patch — 自動套用 X.Y.Z+1","settings.autoUpdateMinor":"Minor — 自動套用 X.Y+1.0","settings.autoUpdateMajor":"Major — 自動套用任何版本升級","settings.autoUpdateHint":"每次 session 結束後觸發。MEMESH_AUTO_UPDATE 環境變數優先。","settings.agenticLabel":"啟用 agentic orchestration(實驗性)","settings.agenticHint":"在 Bash 操作時顯示背景代理建議,並啟用可驗證性提示橫幅。Opt-in。","errors.timeout":"請求逾時"},"zh-CN":{"brand.subtitle":"powered by pcircle.ai","header.connected":"已连接","header.disconnected":"已断开","header.connecting":"连接中…","header.memories":"条记忆","tab.insights":"洞察","telemetry.title":"LLM activity","telemetry.lastNDays":"last {n}d","telemetry.loading":"loading…","telemetry.empty":"No LLM activity recorded in this window. Smart-Mode flows write rows automatically once dream / consolidator / failure-analyzer run.","telemetry.callsCount":"{n} calls","telemetry.attemptsCount":"{n} attempts","telemetry.successRate":"success","telemetry.medianLatency":"median latency","telemetry.fallbackUsed":"fallback used {n}× ({pct} of calls)","telemetry.byProvider":"by provider","telemetry.errors":"errors","tab.search":"搜索","insights.title":"memesh 为你做了什么","insights.subtitle":"自动生成的周报整理与发现的模式,等你 review","insights.statPending":"待审","insights.statApplied":"已采用","insights.statRejected":"已拒绝","insights.filter.pending":"待审","insights.filter.applied":"已采用","insights.filter.rejected":"已拒绝","insights.filter.all":"全部","insights.refresh":"刷新","insights.loading":"读取中…","insights.emptyPending":"目前没有待审 insight。可执行 `memesh dream run` 生成周报整理。","insights.emptyNoLlm":"Configure an LLM provider in Settings to enable weekly recaps and pattern detection.","insights.emptyOther":"没有数据。","insights.sources":"sources","insights.status.pending":"待审","insights.status.applied":"已采用","insights.status.rejected":"已拒绝","insights.viewDetail":"查看详情","insights.collapse":"收起","insights.accept":"采用","insights.applying":"应用中…","insights.reject":"拒绝","insights.generatedBy":"生成模型","insights.promptVersion":"Prompt 版本","insights.observations":"摘要观察","insights.tags":"标签","insights.sourceIds":"来源 entities","insights.validationWarnings":"可疑陈述(LLM 验证器)","insights.validationClaim":"陈述","insights.validationReason":"原因","insights.runDream":"执行周报","insights.runDreamWithValidate":"执行(含验证器,较慢但质量更高)","banner.pendingInsights":"有 {n} 则新洞察等你审阅 →","banner.dismiss":"关闭","banner.viewAll":"查看全部","pattern.title":"模式","pattern.evidenceCount":"{n} 个证据","pattern.severity":"严重度","pattern.severity.high":"高","pattern.severity.medium":"中","pattern.severity.low":"低","pattern.description":"模式说明","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.llmOptional.title":"LLM 是可选的","settings.llmOptional.body":"memesh 不需要 LLM 也能运作。默认的核心模式已涵盖全文回忆、手动 remember/recall、仪表板,以及通过 hook 自动捕捉 session。","settings.llmOptional.coreLabel":"没有 LLM(核心模式)","settings.llmOptional.coreFeatures":"FTS5 关键字搜索(LongMemEval-S 上 95.40% R@5)、手动 remember/recall、仪表板、hook 自动捕捉 session","settings.llmOptional.smartLabel":"有 LLM(智能模式)","settings.llmOptional.smartFeatures":"自动从 session 失败萃取 lesson_learned、新 entity 自动标签、周报整理 + 模式发现","settings.apiKey":"API 密钥","settings.model":"模型(选填)","settings.save":"保存","settings.saving":"保存中…","settings.saved":"已保存","settings.removeProvider":"Remove provider","settings.removeProviderHint":"Drops apiKey + model. Falls back to env-var auto-detect or Core Mode (no LLM).","settings.removeProviderConfirm":"Remove the configured LLM provider? This drops the saved API key and model. memesh will fall back to env-var auto-detection (ANTHROPIC_API_KEY > OPENAI_API_KEY > OLLAMA_HOST) or run in Core Mode if no credential is found.","settings.providerRemoved":"Provider removed. memesh now runs in Core Mode or via env-var auto-detect.","settings.test":"测试连接","settings.testing":"测试中…","settings.testPassed":"✓ 连接成功 · 找到 {count} 个可用模型","settings.testFailed":"连接测试失败","settings.suggested":"推荐","settings.testRequired":"请先测试连接后再保存","settings.language":"语言","settings.searchMode":"搜索模式","settings.none":"无","settings.updates":"更新","settings.updateChecking":"正在检查更新…","settings.updateUnavailable":"暂时无法检查更新","settings.updateNoSuccessfulChecks":"目前还没有成功的更新检查记录","settings.upToDate":"已是最新版本","settings.updateAvailable":"有可用更新","settings.updateStale":"当前显示的是可能过期的缓存状态","settings.updateCachedFallback":"当前使用上次成功的缓存结果","settings.updateDeprecatedNoTarget":"已停用 — 暂无可升级目标","settings.updateDeprecatedTitle":"⚠️ MeMesh {version} 已被维护者标记为停用 (DEPRECATED)。","settings.updatePartialTitle":"⚠️ 更新检查未完整","settings.updatePartialDescription":"{message}。本次无法确认停用状态 — 待网络恢复后请重新检查。","settings.updatePartialSummary":"部分检查 — 停用状态未确认","settings.updateDeprecatedTargetUnknown":"已停用 — 升级目标查询中","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.interactHint":"点击节点聚焦 · 拖动空白处平移 · 滚轮缩放","graph.resetView":"重置视图","graph.resetViewHint":"重置缩放与位置","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","feedback.submitting":"收集诊断信息中…","doctorBanner.warnTitle":"提醒 — memesh 设置有需要注意的地方","doctorBanner.failTitle":"memesh 设置不完整","doctorBanner.dismiss":"关闭","doctorBanner.getHelp":"获取帮助","doctorBanner.helpHint":"会打开一个已填好诊断信息的 GitHub issue","doctorBanner.preambleForIssue":"memesh doctor 在我的安装上报告以下情况:","doctor.capabilities.summary":"LLM/embedding configuration detected","doctor.capabilities.fix":'Configure via "memesh config set llm.provider <provider>"',"doctor.config.summary":"Config file status","doctor.config.fix":'Fix or remove the config file, then run "memesh config list"',"doctor.dashboard.summary":"Dashboard artifact exists","doctor.dashboard.fix":'Run "npm run build:dashboard" to rebuild the dashboard',"doctor.database.summary":"Database accessibility status","doctor.database.fix":'Check database permissions, path, or run "memesh doctor" for detailed diagnosis',"doctor.hook-activity.summary":"过去 24 小时内未检测到 memesh 相关活动","doctor.hook-activity.fix":"开启一个使用 ≥3 个工具的 Claude Code session,或提交一次,然后重新打开仪表板","doctor.hook-scripts.summary":"Hook script files verification","doctor.hook-scripts.fix":"Reinstall MeMesh or restore missing hook files from package","doctor.hook-wiring.summary":"Hooks integration status in Claude Code","doctor.hook-wiring.fix":'Run "memesh install-hooks" to wire hooks into Claude Code settings',"doctor.hooks-config.summary":"Hooks configuration file status","doctor.hooks-config.fix":"Reinstall MeMesh or restore .claude-plugin/hooks.json","doctor.http-probe.summary":"HTTP server availability check","doctor.http-probe.fix":"Check if port is available or database is accessible","doctor.install_id.summary":"Anonymous install ID status","doctor.install_id.fix":'Run "memesh" once to generate install ID',"doctor.install-channel.summary":"Installation method detection","doctor.install-channel.fix":"No action needed","doctor.mcp-config.summary":"MCP server configuration status","doctor.mcp-config.fix":"Restore .mcp.json from package or reinstall MeMesh","doctor.skills-manifest.summary":"Skills directory structure validation","doctor.skills-manifest.fix":"Reinstall MeMesh or restore .claude-plugin/skills directory","doctor.update_status.summary":"Update available: {version}","doctor.update_status.fix":'Run "memesh update" to upgrade',"doctor.update_status.prerelease":"Running pre-release version ({current}), npm latest is {latest}","doctor.vector_index.summary":"Search index needs rebuilding","doctor.vector_index.fix":'Run "memesh reindex" to restore full search',"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":"发生未知错误","time.justNow":"刚刚","time.hoursAgo":"{count} 小时前","time.today":"今天","time.yesterday":"昨天","time.daysAgo":"{count} 天前","time.lastWeek":"上周","time.weeksAgo":"{count} 周前","time.lastMonth":"上个月","time.monthsAgo":"{count} 个月前","memory.access.frequent":"常用 · {count} 次","memory.access.recalls":"{count} 次回忆","memory.access.never":"从未回忆","cluster.knowledge":"知识","cluster.activity":"活动","cluster.session":"工作记录","cluster.reference":"参考","cluster.all":"全部","browse.filterCategory":"类别","browse.filterTime":"时间","browse.filterValue":"价值","browse.filterProject":"项目","browse.filterSort":"排序","browse.timeToday":"今天","browse.timeWeek":"本周","browse.timeMonth":"本月","browse.timeOlder":"更早","browse.valueRecalled":"✓ 用过","browse.valueNever":"从未回忆","browse.sortMostRecalled":"最常回忆","browse.sortRecent":"最近使用","browse.sortCreated":"创建时间","browse.emptyFilter":"此分类没有记忆 — 试试切换类别或时间","lessons.tabFailure":"失败教训","lessons.tabPlan":"计划记录","lessons.tabFreeform":"笔记","lessons.totalRecalls":"总回忆次数","lessons.stepsLabel":"步骤","lessons.commitsCount":"{count} 个 commit","lessons.unstructured":"(此教训没有结构化字段,请查看原始记忆)","lessons.searchPlaceholder":"搜索 error / root cause / fix / 名称…","lessons.allProjects":"全部项目","lessons.showing":"显示 {visible} / {total} 条","lessons.noMatch":'无符合"{query}"的记忆',"lessons.emptyCategory":"此类别没有记忆","lessons.moreItems":"+{count} 条","roadmap.title":"项目路线图","roadmap.summary":"{count} 条记忆 · {first} → {last}","roadmap.switchToList":"↩ 列表视图","roadmap.switchToRoadmap":"🗺️ 路线图视图","roadmap.emptyProject":"此项目尚无记忆。","loop.label":"记忆循环","loop.subtitleHas":"本周被回忆的知识类型记忆","loop.subtitleNone":"本周尚无知识被回忆 — 试试唤起一则教训","loop.approxNote":"近似值 — 完整追踪从升级后开始累积","loop.sparkLabel":"最近 30 天","roadmap.milestones":"里程碑","roadmap.keyLessons":"重要教训","radar.title":"知识覆盖雷达","radar.caption":"显示有效知识记忆<br/>(排除 session 和 commit)","radar.axis.lessons":"教训","radar.axis.decisions":"决策","radar.axis.patterns":"模式","radar.axis.bugs":"问题修复","radar.axis.processes":"流程","radar.axis.architecture":"架构","ageMatrix.title":"记忆年龄分布","ageMatrix.low":"低","ageMatrix.high":"高","ageMatrix.legend":"颜色深度 = 记忆密度","ageMatrix.typeColumn":"类型","header.signalModeOn":"信号","header.signalModeOff":"全部","header.signalModeOnHint":"已隐藏 session 与 commit 等噪音。点击显示全部。","header.signalModeOffHint":"显示包含 session 与 commit 在内的所有记忆。点击隐藏噪音。","roadmap.phases":"阶段","onboarding.title":"欢迎使用 MeMesh","onboarding.body":"你的记忆库还是空的。从 30 条精选示例开始体验,或直接存下你的第一则教训。","onboarding.llmHint":"不需要 LLM。所有功能都靠 FTS5 运作(95.40% R@5)。LLM 只用在自动产生教训,可以之后再到设置页开启。","onboarding.seedButton":"一键载入示范数据","onboarding.seedingButton":"载入中…","onboarding.seedHint":"直接在这里载入 30 条,之后可一键清除,不用切到终端","onboarding.cliReference":"习惯 CLI?","onboarding.hintDemo":"植入 30 条示范记忆,之后可一键清除","onboarding.hintReset":"移除所有 metadata.demo 标记的记忆","onboarding.resetButton":"清除示范数据","onboarding.resettingButton":"清除中…","onboarding.resetConfirm":"确定要移除所有示范记忆?你自己存的内容会保留。","onboarding.dismiss":"关闭","ageMatrix.bucket.week":"本周","ageMatrix.bucket.month":"本月","ageMatrix.bucket.quarter":"本季","ageMatrix.bucket.older":"更早","ageMatrix.type.lesson_learned":"教训","ageMatrix.type.lesson":"教训","ageMatrix.type.mistake":"错误","ageMatrix.type.decision":"决策","ageMatrix.type.architecture_decision":"架构决策","ageMatrix.type.pattern":"模式","ageMatrix.type.technical_pattern":"技术模式","ageMatrix.type.best_practice":"最佳实践","ageMatrix.type.bug_fix":"问题修复","ageMatrix.type.workflow_checkpoint":"流程里程碑","ageMatrix.type.process":"流程","ageMatrix.type.architecture":"架构","ageMatrix.type.feature":"功能","settings.behaviourTitle":"行为设置","settings.autoUpdateLabel":"自动更新策略","settings.autoUpdateOff":"关闭 — 仅手动","settings.autoUpdatePatch":"Patch — 自动应用 X.Y.Z+1","settings.autoUpdateMinor":"Minor — 自动应用 X.Y+1.0","settings.autoUpdateMajor":"Major — 自动应用任何版本升级","settings.autoUpdateHint":"每次 session 结束后触发。MEMESH_AUTO_UPDATE 环境变量优先。","settings.agenticLabel":"启用 agentic orchestration(实验性)","settings.agenticHint":"在 Bash 操作时显示后台代理建议,并启用可验证性提示横幅。Opt-in。","errors.timeout":"请求超时"},ja:{"brand.subtitle":"powered by pcircle.ai","header.connected":"接続中","header.disconnected":"切断","header.connecting":"接続しています…","header.memories":"件のメモリ","tab.insights":"Insights","telemetry.title":"LLM アクティビティ","telemetry.lastNDays":"直近 {n} 日","telemetry.loading":"読み込み中…","telemetry.empty":"この期間に LLM アクティビティの記録はありません。dream / consolidator / failure-analyzer が動作すると、Smart-Mode フローが自動的に行を書き込みます。","telemetry.callsCount":"{n} 回の呼び出し","telemetry.attemptsCount":"{n} 回の試行","telemetry.successRate":"成功率","telemetry.medianLatency":"レイテンシ中央値","telemetry.fallbackUsed":"フォールバック使用 {n} 回(呼び出しの {pct})","telemetry.byProvider":"プロバイダ別","telemetry.errors":"エラー","insights.title":"memesh が行ったこと","insights.subtitle":"自動生成された weekly recap と検出された pattern。レビュー待ち","insights.statPending":"pending","insights.statApplied":"applied","insights.statRejected":"rejected","insights.filter.pending":"Pending","insights.filter.applied":"Applied","insights.filter.rejected":"Rejected","insights.filter.all":"すべて","insights.refresh":"更新","insights.loading":"読み込み中…","insights.emptyPending":"pending の insight はありません。`memesh dream run` で weekly recap を生成できます。","insights.emptyNoLlm":"weekly recap と pattern 検出を有効にするには、設定で LLM プロバイダを構成してください。","insights.emptyOther":"データがありません。","insights.sources":"ソース","insights.status.pending":"pending","insights.status.applied":"applied","insights.status.rejected":"rejected","insights.viewDetail":"詳細を見る","insights.collapse":"折りたたむ","insights.accept":"採用","insights.applying":"適用中…","insights.reject":"拒否","insights.generatedBy":"生成モデル","insights.promptVersion":"Prompt バージョン","insights.observations":"要約観察","insights.tags":"タグ","insights.sourceIds":"ソース entity","insights.validationWarnings":"疑わしい主張(LLM validator)","insights.validationClaim":"主張","insights.validationReason":"理由","insights.runDream":"weekly recap を実行","insights.runDreamWithValidate":"validator 付きで実行(遅いが高品質)","banner.pendingInsights":"{n} 件の新しい insight がレビュー待ち →","banner.dismiss":"閉じる","banner.viewAll":"すべて表示","pattern.title":"Pattern","pattern.evidenceCount":"{n} 件の証拠","pattern.severity":"重大度","pattern.severity.high":"高","pattern.severity.medium":"中","pattern.severity.low":"低","pattern.description":"Pattern の説明","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.llmOptional.title":"LLM はオプションです","settings.llmOptional.body":"memesh は LLM なしでも動作します。デフォルトのコアモードは全文リコール、手動の remember/recall、ダッシュボード、フックによるセッション自動キャプチャをカバーします。","settings.llmOptional.coreLabel":"LLM なし(コアモード)","settings.llmOptional.coreFeatures":"FTS5 キーワード検索(LongMemEval-S で 95.40% R@5)、手動 remember/recall、ダッシュボード、フックによるセッションキャプチャ","settings.llmOptional.smartLabel":"LLM あり(スマートモード)","settings.llmOptional.smartFeatures":"セッション失敗から lesson_learned を自動抽出、新規エンティティの自動タグ付け、週次まとめとパターン検出","settings.apiKey":"APIキー","settings.model":"モデル(任意)","settings.save":"保存","settings.saving":"保存中…","settings.saved":"保存しました","settings.removeProvider":"Remove provider","settings.removeProviderHint":"Drops apiKey + model. Falls back to env-var auto-detect or Core Mode (no LLM).","settings.removeProviderConfirm":"Remove the configured LLM provider? This drops the saved API key and model. memesh will fall back to env-var auto-detection (ANTHROPIC_API_KEY > OPENAI_API_KEY > OLLAMA_HOST) or run in Core Mode if no credential is found.","settings.providerRemoved":"Provider removed. memesh now runs in Core Mode or via env-var auto-detect.","settings.test":"接続テスト","settings.testing":"テスト中…","settings.testPassed":"✓ 接続成功 · {count} 個のモデルが利用可能","settings.testFailed":"接続テストに失敗しました","settings.suggested":"推奨","settings.testRequired":"保存前に接続をテストしてください","settings.language":"言語","settings.searchMode":"検索モード","settings.none":"なし","settings.updates":"アップデート","settings.updateChecking":"更新を確認中…","settings.updateUnavailable":"現在は更新を確認できません","settings.updateNoSuccessfulChecks":"まだ一度も更新確認に成功していません","settings.upToDate":"最新です","settings.updateAvailable":"更新があります","settings.updateStale":"表示中のキャッシュ結果は古い可能性があります","settings.updateCachedFallback":"前回成功したキャッシュ結果を使用しています","settings.updateDeprecatedNoTarget":"非推奨 — まだアップグレード先がありません","settings.updateDeprecatedTitle":"⚠️ MeMesh {version} はメンテナーによって非推奨 (DEPRECATED) としてマークされています。","settings.updatePartialTitle":"⚠️ 更新チェックが部分的に失敗しました","settings.updatePartialDescription":"{message}。このセッションでは非推奨ステータスを確認できません — オンラインに復帰してから再実行してください。","settings.updatePartialSummary":"部分的 — 非推奨ステータス未確認","settings.updateDeprecatedTargetUnknown":"非推奨 — アップグレード先を確認中","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.interactHint":"ノードをクリックしてフォーカス · 空白をドラッグでパン · スクロールでズーム","graph.resetView":"ビューをリセット","graph.resetViewHint":"ズームと位置をリセット","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 を作成","feedback.submitting":"診断情報を収集中…","doctorBanner.warnTitle":"お知らせ — memesh のセットアップに注意が必要です","doctorBanner.failTitle":"memesh のセットアップが不完全です","doctorBanner.dismiss":"閉じる","doctorBanner.getHelp":"サポートを受ける","doctorBanner.helpHint":"診断情報が事前入力された GitHub Issue を開きます","doctorBanner.preambleForIssue":"memesh doctor が私のインストールで以下を検出しました:","doctor.capabilities.summary":"LLM/embedding configuration detected","doctor.capabilities.fix":'Configure via "memesh config set llm.provider <provider>"',"doctor.config.summary":"Config file status","doctor.config.fix":'Fix or remove the config file, then run "memesh config list"',"doctor.dashboard.summary":"Dashboard artifact exists","doctor.dashboard.fix":'Run "npm run build:dashboard" to rebuild the dashboard',"doctor.database.summary":"Database accessibility status","doctor.database.fix":'Check database permissions, path, or run "memesh doctor" for detailed diagnosis',"doctor.hook-activity.summary":"過去24時間にmemesh関連のアクティビティはありません","doctor.hook-activity.fix":"3つ以上のツールを使うClaude Codeセッションを開く、もしくはコミットを行ってから、ダッシュボードを再度開いてください","doctor.hook-scripts.summary":"Hook script files verification","doctor.hook-scripts.fix":"Reinstall MeMesh or restore missing hook files from package","doctor.hook-wiring.summary":"Hooks integration status in Claude Code","doctor.hook-wiring.fix":'Run "memesh install-hooks" to wire hooks into Claude Code settings',"doctor.hooks-config.summary":"Hooks configuration file status","doctor.hooks-config.fix":"Reinstall MeMesh or restore .claude-plugin/hooks.json","doctor.http-probe.summary":"HTTP server availability check","doctor.http-probe.fix":"Check if port is available or database is accessible","doctor.install_id.summary":"Anonymous install ID status","doctor.install_id.fix":'Run "memesh" once to generate install ID',"doctor.install-channel.summary":"Installation method detection","doctor.install-channel.fix":"No action needed","doctor.mcp-config.summary":"MCP server configuration status","doctor.mcp-config.fix":"Restore .mcp.json from package or reinstall MeMesh","doctor.skills-manifest.summary":"Skills directory structure validation","doctor.skills-manifest.fix":"Reinstall MeMesh or restore .claude-plugin/skills directory","doctor.update_status.summary":"Update available: {version}","doctor.update_status.fix":'Run "memesh update" to upgrade',"doctor.update_status.prerelease":"Running pre-release version ({current}), npm latest is {latest}","doctor.vector_index.summary":"Search index needs rebuilding","doctor.vector_index.fix":'Run "memesh reindex" to restore full search',"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":"不明なエラー","time.justNow":"たった今","time.hoursAgo":"{count} 時間前","time.today":"今日","time.yesterday":"昨日","time.daysAgo":"{count} 日前","time.lastWeek":"先週","time.weeksAgo":"{count} 週前","time.lastMonth":"先月","time.monthsAgo":"{count} ヶ月前","memory.access.frequent":"頻繁 · {count} 回","memory.access.recalls":"{count} 回呼出","memory.access.never":"未使用","cluster.knowledge":"知識","cluster.activity":"アクティビティ","cluster.session":"セッション","cluster.reference":"参照","cluster.all":"すべて","browse.filterCategory":"カテゴリ","browse.filterTime":"時間","browse.filterValue":"価値","browse.filterProject":"プロジェクト","browse.filterSort":"並べ替え","browse.timeToday":"今日","browse.timeWeek":"今週","browse.timeMonth":"今月","browse.timeOlder":"それ以前","browse.valueRecalled":"✓ 使用済み","browse.valueNever":"未使用","browse.sortMostRecalled":"使用頻度順","browse.sortRecent":"最近の使用順","browse.sortCreated":"作成日順","browse.emptyFilter":"このカテゴリには記憶がありません — フィルタを変更してみてください","lessons.tabFailure":"失敗教訓","lessons.tabPlan":"プラン記録","lessons.tabFreeform":"ノート","lessons.totalRecalls":"合計呼出回数","lessons.stepsLabel":"ステップ","lessons.commitsCount":"{count} コミット","lessons.unstructured":"(構造化フィールドなし — 元のメモリを参照)","lessons.searchPlaceholder":"検索 error / root cause / fix / 名前…","lessons.allProjects":"すべてのプロジェクト","lessons.showing":"{visible} / {total} 件を表示","lessons.noMatch":"「{query}」に一致する記憶なし","lessons.emptyCategory":"このカテゴリには記憶がありません","lessons.moreItems":"あと {count} 件","roadmap.title":"プロジェクトロードマップ","roadmap.summary":"{count} 件の記憶 · {first} → {last}","roadmap.switchToList":"↩ リスト表示","roadmap.switchToRoadmap":"🗺️ ロードマップ表示","roadmap.emptyProject":"このプロジェクトにはまだ記憶がありません。","loop.label":"メモリループ","loop.subtitleHas":"過去 7 日間に呼び出された知識メモリ","loop.subtitleNone":"今週はまだ呼び出された知識がありません — 教訓を呼び出してみてください","loop.approxNote":"近似値 — 完全な追跡はアップグレード後に開始","loop.sparkLabel":"過去 30 日","roadmap.milestones":"マイルストーン","roadmap.keyLessons":"重要な教訓","radar.title":"知識カバレッジレーダー","radar.caption":"有効な知識メモリ<br/>(session と commit を除く)","radar.axis.lessons":"教訓","radar.axis.decisions":"決定","radar.axis.patterns":"パターン","radar.axis.bugs":"バグ修正","radar.axis.processes":"プロセス","radar.axis.architecture":"アーキテクチャ","ageMatrix.title":"メモリ年齢分布","ageMatrix.low":"低","ageMatrix.high":"高","ageMatrix.legend":"色の濃さ = メモリ密度","ageMatrix.typeColumn":"タイプ","header.signalModeOn":"シグナル","header.signalModeOff":"すべて","header.signalModeOnHint":"session と commit のノイズを非表示。クリックで全表示。","header.signalModeOffHint":"session と commit を含む全メモリを表示中。クリックでノイズを非表示。","roadmap.phases":"フェーズ","onboarding.title":"MeMesh へようこそ","onboarding.body":"メモリは空です。30 件のキュレーション済みツアーで始めるか、最初の教訓を記録してください。","onboarding.llmHint":"LLM は不要です。すべての機能は FTS5 のみで動作します(95.40% R@5)。LLM は自動レッスン生成のオプションで、後から設定で有効化できます。","onboarding.seedButton":"デモツアーを開始","onboarding.seedingButton":"読み込み中…","onboarding.seedHint":"端末を開かずに 30 件追加。後でいつでも削除可能","onboarding.cliReference":"CLI を使う場合","onboarding.hintDemo":"30 件のデモメモリを投入(後で削除可)","onboarding.hintReset":"metadata.demo タグの全エンティティを削除","onboarding.resetButton":"デモを削除","onboarding.resettingButton":"削除中…","onboarding.resetConfirm":"デモメモリをすべて削除しますか?自分で保存したものは残ります。","onboarding.dismiss":"閉じる","ageMatrix.bucket.week":"今週","ageMatrix.bucket.month":"今月","ageMatrix.bucket.quarter":"今四半期","ageMatrix.bucket.older":"それ以前","ageMatrix.type.lesson_learned":"教訓","ageMatrix.type.lesson":"教訓","ageMatrix.type.mistake":"ミス","ageMatrix.type.decision":"決定","ageMatrix.type.architecture_decision":"アーキ決定","ageMatrix.type.pattern":"パターン","ageMatrix.type.technical_pattern":"技術パターン","ageMatrix.type.best_practice":"ベストプラクティス","ageMatrix.type.bug_fix":"バグ修正","ageMatrix.type.workflow_checkpoint":"ワークフロー","ageMatrix.type.process":"プロセス","ageMatrix.type.architecture":"アーキテクチャ","ageMatrix.type.feature":"機能","settings.behaviourTitle":"動作設定","settings.autoUpdateLabel":"自動更新ポリシー","settings.autoUpdateOff":"オフ — 手動のみ","settings.autoUpdatePatch":"Patch — X.Y.Z+1 を自動適用","settings.autoUpdateMinor":"Minor — X.Y+1.0 を自動適用","settings.autoUpdateMajor":"Major — 任意のバンプを自動適用","settings.autoUpdateHint":"セッション終了後にトリガー。MEMESH_AUTO_UPDATE 環境変数が優先。","settings.agenticLabel":"agentic orchestration を有効化(実験的)","settings.agenticHint":"Bash 操作時にバックグラウンドエージェントの提案を表示。Opt-in。","errors.timeout":"リクエストがタイムアウトしました"},ko:{"brand.subtitle":"powered by pcircle.ai","header.connected":"연결됨","header.disconnected":"연결 끊김","header.connecting":"연결 중…","header.memories":"개의 기억","tab.insights":"Insights","telemetry.title":"LLM 활동","telemetry.lastNDays":"최근 {n}일","telemetry.loading":"불러오는 중…","telemetry.empty":"이 기간에 기록된 LLM 활동이 없습니다. dream / consolidator / failure-analyzer가 실행되면 Smart-Mode 플로우가 자동으로 행을 기록합니다.","telemetry.callsCount":"{n} 회 호출","telemetry.attemptsCount":"{n} 회 시도","telemetry.successRate":"성공률","telemetry.medianLatency":"지연 시간 중앙값","telemetry.fallbackUsed":"fallback {n}회 사용 (호출의 {pct})","telemetry.byProvider":"프로바이더별","telemetry.errors":"오류","insights.title":"memesh가 한 일","insights.subtitle":"자동 생성된 weekly recap과 발견된 pattern. 검토 대기 중","insights.statPending":"pending","insights.statApplied":"applied","insights.statRejected":"rejected","insights.filter.pending":"Pending","insights.filter.applied":"Applied","insights.filter.rejected":"Rejected","insights.filter.all":"전체","insights.refresh":"새로고침","insights.loading":"불러오는 중…","insights.emptyPending":"pending insight가 없습니다. `memesh dream run`으로 weekly recap을 생성할 수 있습니다.","insights.emptyNoLlm":"weekly recap과 pattern 감지를 사용하려면 설정에서 LLM 프로바이더를 구성하세요.","insights.emptyOther":"데이터가 없습니다.","insights.sources":"소스","insights.status.pending":"pending","insights.status.applied":"applied","insights.status.rejected":"rejected","insights.viewDetail":"자세히 보기","insights.collapse":"접기","insights.accept":"채택","insights.applying":"적용 중…","insights.reject":"거부","insights.generatedBy":"생성 모델","insights.promptVersion":"Prompt 버전","insights.observations":"요약 관찰","insights.tags":"태그","insights.sourceIds":"소스 entity","insights.validationWarnings":"의심스러운 주장 (LLM validator)","insights.validationClaim":"주장","insights.validationReason":"이유","insights.runDream":"weekly recap 실행","insights.runDreamWithValidate":"validator 포함 실행 (느리지만 품질 높음)","banner.pendingInsights":"{n}개의 새 insight가 검토를 기다리고 있습니다 →","banner.dismiss":"닫기","banner.viewAll":"전체 보기","pattern.title":"Pattern","pattern.evidenceCount":"{n}개의 증거","pattern.severity":"심각도","pattern.severity.high":"높음","pattern.severity.medium":"중간","pattern.severity.low":"낮음","pattern.description":"Pattern 설명","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.llmOptional.title":"LLM은 선택 사항입니다","settings.llmOptional.body":"memesh는 LLM 없이도 작동합니다. 기본 코어 모드는 전체 텍스트 회상, 수동 remember/recall, 대시보드, 훅 기반 세션 캡처를 모두 지원합니다.","settings.llmOptional.coreLabel":"LLM 없이(코어 모드)","settings.llmOptional.coreFeatures":"FTS5 키워드 검색(LongMemEval-S에서 95.40% R@5), 수동 remember/recall, 대시보드, 훅 기반 세션 캡처","settings.llmOptional.smartLabel":"LLM 사용(스마트 모드)","settings.llmOptional.smartFeatures":"세션 실패에서 lesson_learned 자동 추출, 새 엔티티 자동 태깅, 주간 요약과 패턴 감지","settings.apiKey":"API 키","settings.model":"모델 (선택)","settings.save":"저장","settings.saving":"저장 중…","settings.saved":"저장되었습니다","settings.removeProvider":"Remove provider","settings.removeProviderHint":"Drops apiKey + model. Falls back to env-var auto-detect or Core Mode (no LLM).","settings.removeProviderConfirm":"Remove the configured LLM provider? This drops the saved API key and model. memesh will fall back to env-var auto-detection (ANTHROPIC_API_KEY > OPENAI_API_KEY > OLLAMA_HOST) or run in Core Mode if no credential is found.","settings.providerRemoved":"Provider removed. memesh now runs in Core Mode or via env-var auto-detect.","settings.test":"연결 테스트","settings.testing":"테스트 중…","settings.testPassed":"✓ 연결 성공 · 사용 가능한 모델 {count}개","settings.testFailed":"연결 테스트 실패","settings.suggested":"추천","settings.testRequired":"저장하기 전에 연결을 테스트하세요","settings.language":"언어","settings.searchMode":"검색 모드","settings.none":"없음","settings.updates":"업데이트","settings.updateChecking":"업데이트 확인 중…","settings.updateUnavailable":"지금은 업데이트를 확인할 수 없습니다","settings.updateNoSuccessfulChecks":"아직 성공한 업데이트 확인 기록이 없습니다","settings.upToDate":"최신 버전입니다","settings.updateAvailable":"업데이트가 있습니다","settings.updateStale":"표시 중인 캐시 상태가 오래되었을 수 있습니다","settings.updateCachedFallback":"마지막으로 성공한 캐시 결과를 사용 중입니다","settings.updateDeprecatedNoTarget":"사용 중단됨 — 아직 업그레이드 대상이 없음","settings.updateDeprecatedTitle":"⚠️ MeMesh {version}이(가) 메인테이너에 의해 사용 중단(DEPRECATED)으로 표시되었습니다.","settings.updatePartialTitle":"⚠️ 업데이트 확인이 부분적으로 실패했습니다","settings.updatePartialDescription":"{message}. 이 세션에서는 사용 중단 상태를 확인할 수 없습니다 — 온라인 상태에서 다시 실행하세요.","settings.updatePartialSummary":"부분 확인됨 — 사용 중단 상태 미확인","settings.updateDeprecatedTargetUnknown":"사용 중단됨 — 업그레이드 대상 확인 중","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.interactHint":"노드 클릭으로 포커스 · 빈 영역 드래그로 이동 · 스크롤로 확대/축소","graph.resetView":"뷰 재설정","graph.resetViewHint":"확대/축소 및 위치 재설정","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 열기","feedback.submitting":"진단 정보 수집 중…","doctorBanner.warnTitle":"알림 — memesh 설정에 주의가 필요합니다","doctorBanner.failTitle":"memesh 설정이 완전하지 않습니다","doctorBanner.dismiss":"닫기","doctorBanner.getHelp":"도움 받기","doctorBanner.helpHint":"진단 정보가 미리 입력된 GitHub Issue를 엽니다","doctorBanner.preambleForIssue":"memesh doctor가 내 설치에서 다음을 발견했습니다:","doctor.capabilities.summary":"LLM/embedding configuration detected","doctor.capabilities.fix":'Configure via "memesh config set llm.provider <provider>"',"doctor.config.summary":"Config file status","doctor.config.fix":'Fix or remove the config file, then run "memesh config list"',"doctor.dashboard.summary":"Dashboard artifact exists","doctor.dashboard.fix":'Run "npm run build:dashboard" to rebuild the dashboard',"doctor.database.summary":"Database accessibility status","doctor.database.fix":'Check database permissions, path, or run "memesh doctor" for detailed diagnosis',"doctor.hook-activity.summary":"지난 24시간 동안 memesh 관련 활동이 없었습니다","doctor.hook-activity.fix":"도구를 3개 이상 사용하는 Claude Code 세션을 열거나 커밋한 후, 대시보드를 다시 여세요","doctor.hook-scripts.summary":"Hook script files verification","doctor.hook-scripts.fix":"Reinstall MeMesh or restore missing hook files from package","doctor.hook-wiring.summary":"Hooks integration status in Claude Code","doctor.hook-wiring.fix":'Run "memesh install-hooks" to wire hooks into Claude Code settings',"doctor.hooks-config.summary":"Hooks configuration file status","doctor.hooks-config.fix":"Reinstall MeMesh or restore .claude-plugin/hooks.json","doctor.http-probe.summary":"HTTP server availability check","doctor.http-probe.fix":"Check if port is available or database is accessible","doctor.install_id.summary":"Anonymous install ID status","doctor.install_id.fix":'Run "memesh" once to generate install ID',"doctor.install-channel.summary":"Installation method detection","doctor.install-channel.fix":"No action needed","doctor.mcp-config.summary":"MCP server configuration status","doctor.mcp-config.fix":"Restore .mcp.json from package or reinstall MeMesh","doctor.skills-manifest.summary":"Skills directory structure validation","doctor.skills-manifest.fix":"Reinstall MeMesh or restore .claude-plugin/skills directory","doctor.update_status.summary":"Update available: {version}","doctor.update_status.fix":'Run "memesh update" to upgrade',"doctor.update_status.prerelease":"Running pre-release version ({current}), npm latest is {latest}","doctor.vector_index.summary":"Search index needs rebuilding","doctor.vector_index.fix":'Run "memesh reindex" to restore full search',"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":"알 수 없는 오류","time.justNow":"방금","time.hoursAgo":"{count}시간 전","time.today":"오늘","time.yesterday":"어제","time.daysAgo":"{count}일 전","time.lastWeek":"지난주","time.weeksAgo":"{count}주 전","time.lastMonth":"지난달","time.monthsAgo":"{count}개월 전","memory.access.frequent":"자주 사용 · {count}회","memory.access.recalls":"{count}회 회상","memory.access.never":"회상 안 됨","cluster.knowledge":"지식","cluster.activity":"활동","cluster.session":"세션","cluster.reference":"참조","cluster.all":"전체","browse.filterCategory":"카테고리","browse.filterTime":"시간","browse.filterValue":"가치","browse.filterProject":"프로젝트","browse.filterSort":"정렬","browse.timeToday":"오늘","browse.timeWeek":"이번 주","browse.timeMonth":"이번 달","browse.timeOlder":"이전","browse.valueRecalled":"✓ 사용됨","browse.valueNever":"회상 안 됨","browse.sortMostRecalled":"자주 회상","browse.sortRecent":"최근 사용","browse.sortCreated":"생성 시간","browse.emptyFilter":"이 카테고리에 기억이 없습니다 — 필터를 변경해 보세요","lessons.tabFailure":"실패 교훈","lessons.tabPlan":"계획 기록","lessons.tabFreeform":"메모","lessons.totalRecalls":"총 회상 횟수","lessons.stepsLabel":"단계","lessons.commitsCount":"{count}개 커밋","lessons.unstructured":"(구조화된 필드 없음 — 원본 기억 참조)","lessons.searchPlaceholder":"error / root cause / fix / 이름 검색…","lessons.allProjects":"모든 프로젝트","lessons.showing":"{visible} / {total}개 표시","lessons.noMatch":'"{query}"와 일치하는 기억 없음',"lessons.emptyCategory":"이 카테고리에 기억이 없습니다","lessons.moreItems":"+{count}개","roadmap.title":"프로젝트 로드맵","roadmap.summary":"{count}개 기억 · {first} → {last}","roadmap.switchToList":"↩ 목록 보기","roadmap.switchToRoadmap":"🗺️ 로드맵 보기","roadmap.emptyProject":"이 프로젝트에는 아직 기억이 없습니다.","loop.label":"기억 루프","loop.subtitleHas":"지난 7일간 회상된 지식 기억","loop.subtitleNone":"이번 주 회상된 지식이 없습니다 — 교훈을 떠올려 보세요","loop.approxNote":"근사치 — 완전한 추적은 업그레이드 후 시작됩니다","loop.sparkLabel":"지난 30일","roadmap.milestones":"마일스톤","roadmap.keyLessons":"주요 교훈","radar.title":"지식 커버리지 레이더","radar.caption":"활성 지식 기억<br/>(session 과 commit 제외)","radar.axis.lessons":"교훈","radar.axis.decisions":"결정","radar.axis.patterns":"패턴","radar.axis.bugs":"버그 수정","radar.axis.processes":"프로세스","radar.axis.architecture":"아키텍처","ageMatrix.title":"기억 연령 분포","ageMatrix.low":"낮음","ageMatrix.high":"높음","ageMatrix.legend":"색상 깊이 = 기억 밀도","ageMatrix.typeColumn":"유형","header.signalModeOn":"시그널","header.signalModeOff":"전체","header.signalModeOnHint":"session 과 commit 노이즈 숨김. 클릭하면 모두 표시.","header.signalModeOffHint":"session 과 commit 을 포함한 모든 기억 표시. 클릭하면 노이즈 숨김.","roadmap.phases":"단계","onboarding.title":"MeMesh 에 오신 것을 환영합니다","onboarding.body":"기억 저장소가 비어 있습니다. 30개 큐레이션된 투어로 시작하거나 첫 교훈을 저장하세요.","onboarding.llmHint":"LLM 불필요. 모든 기능은 FTS5만으로 작동합니다(95.40% R@5). LLM은 자동 교훈 생성을 위한 선택 사항이며, 나중에 설정에서 활성화할 수 있습니다.","onboarding.seedButton":"데모 투어 시작","onboarding.seedingButton":"시드 중…","onboarding.seedHint":"터미널 없이 여기서 30개 추가, 나중에 한 번에 삭제 가능","onboarding.cliReference":"CLI 를 선호하시나요?","onboarding.hintDemo":"30개 데모 기억을 시드(나중에 제거 가능)","onboarding.hintReset":"metadata.demo 태그가 있는 모든 항목 제거","onboarding.resetButton":"데모 제거","onboarding.resettingButton":"제거 중…","onboarding.resetConfirm":"모든 데모 기억을 제거하시겠습니까? 직접 저장한 항목은 유지됩니다.","onboarding.dismiss":"닫기","ageMatrix.bucket.week":"이번 주","ageMatrix.bucket.month":"이번 달","ageMatrix.bucket.quarter":"이번 분기","ageMatrix.bucket.older":"이전","ageMatrix.type.lesson_learned":"교훈","ageMatrix.type.lesson":"교훈","ageMatrix.type.mistake":"실수","ageMatrix.type.decision":"결정","ageMatrix.type.architecture_decision":"아키 결정","ageMatrix.type.pattern":"패턴","ageMatrix.type.technical_pattern":"기술 패턴","ageMatrix.type.best_practice":"베스트 프랙티스","ageMatrix.type.bug_fix":"버그 수정","ageMatrix.type.workflow_checkpoint":"워크플로 마일스톤","ageMatrix.type.process":"프로세스","ageMatrix.type.architecture":"아키텍처","ageMatrix.type.feature":"기능","settings.behaviourTitle":"동작 설정","settings.autoUpdateLabel":"자동 업데이트 정책","settings.autoUpdateOff":"끔 — 수동만","settings.autoUpdatePatch":"Patch — X.Y.Z+1 자동 적용","settings.autoUpdateMinor":"Minor — X.Y+1.0 자동 적용","settings.autoUpdateMajor":"Major — 모든 버전 변경 자동 적용","settings.autoUpdateHint":"세션 종료 후 트리거. MEMESH_AUTO_UPDATE 환경 변수가 우선.","settings.agenticLabel":"agentic orchestration 활성화 (실험적)","settings.agenticHint":"Bash 작업 시 백그라운드 에이전트 제안 표시. Opt-in.","errors.timeout":"요청 시간이 초과되었습니다"},pt:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Conectado","header.disconnected":"Desconectado","header.connecting":"Conectando…","header.memories":"memórias","tab.insights":"Insights","telemetry.title":"Atividade do LLM","telemetry.lastNDays":"últimos {n}d","telemetry.loading":"carregando…","telemetry.empty":"Nenhuma atividade do LLM registrada nessa janela. Os fluxos do Smart-Mode gravam linhas automaticamente assim que dream / consolidator / failure-analyzer forem executados.","telemetry.callsCount":"{n} chamadas","telemetry.attemptsCount":"{n} tentativas","telemetry.successRate":"sucesso","telemetry.medianLatency":"latência mediana","telemetry.fallbackUsed":"fallback usado {n}× ({pct} das chamadas)","telemetry.byProvider":"por provedor","telemetry.errors":"erros","insights.title":"O que o memesh fez por você","insights.subtitle":"recaps semanais e patterns gerados automaticamente, aguardando revisão","insights.statPending":"pending","insights.statApplied":"applied","insights.statRejected":"rejected","insights.filter.pending":"Pending","insights.filter.applied":"Applied","insights.filter.rejected":"Rejected","insights.filter.all":"Todos","insights.refresh":"Atualizar","insights.loading":"carregando…","insights.emptyPending":"Nenhum insight pending. Execute `memesh dream run` para gerar weekly recaps.","insights.emptyNoLlm":"Configure um provedor de LLM nas Configurações para habilitar weekly recaps e detecção de patterns.","insights.emptyOther":"Nada aqui.","insights.sources":"fontes","insights.status.pending":"pending","insights.status.applied":"applied","insights.status.rejected":"rejected","insights.viewDetail":"Ver detalhes","insights.collapse":"Recolher","insights.accept":"Aceitar","insights.applying":"Aplicando…","insights.reject":"Rejeitar","insights.generatedBy":"Gerado por","insights.promptVersion":"Versão do prompt","insights.observations":"Observações resumidas","insights.tags":"Tags","insights.sourceIds":"Fontes","insights.validationWarnings":"Afirmações sinalizadas (LLM validator)","insights.validationClaim":"Afirmação","insights.validationReason":"Motivo","insights.runDream":"Executar weekly recap","insights.runDreamWithValidate":"Executar com validator (mais lento, maior qualidade)","banner.pendingInsights":"{n} novo(s) insight{s} aguardando sua revisão →","banner.dismiss":"Dispensar","banner.viewAll":"Ver todos","pattern.title":"Pattern","pattern.evidenceCount":"{n} evidência(s)","pattern.severity":"Severidade","pattern.severity.high":"alta","pattern.severity.medium":"média","pattern.severity.low":"baixa","pattern.description":"Descrição do pattern","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.llmOptional.title":"O LLM é opcional","settings.llmOptional.body":"memesh funciona sem LLM. O modo Core padrão cobre busca textual, remember/recall manual, dashboard e captura de sessão via hooks.","settings.llmOptional.coreLabel":"Sem LLM (modo Core)","settings.llmOptional.coreFeatures":"busca por palavra-chave FTS5 (95,40% R@5 no LongMemEval-S), remember/recall manual, dashboard, captura de sessão via hooks","settings.llmOptional.smartLabel":"Com LLM (modo Smart)","settings.llmOptional.smartFeatures":"lesson_learned automático a partir de falhas de sessão, auto-tag de novas entidades, resumo semanal + detecção de padrões","settings.apiKey":"Chave API","settings.model":"Modelo (opcional)","settings.save":"Salvar","settings.saving":"Salvando…","settings.saved":"Salvo.","settings.removeProvider":"Remove provider","settings.removeProviderHint":"Drops apiKey + model. Falls back to env-var auto-detect or Core Mode (no LLM).","settings.removeProviderConfirm":"Remove the configured LLM provider? This drops the saved API key and model. memesh will fall back to env-var auto-detection (ANTHROPIC_API_KEY > OPENAI_API_KEY > OLLAMA_HOST) or run in Core Mode if no credential is found.","settings.providerRemoved":"Provider removed. memesh now runs in Core Mode or via env-var auto-detect.","settings.test":"Testar","settings.testing":"Testando…","settings.testPassed":"✓ Conexão OK · {count} modelos disponíveis","settings.testFailed":"Falha no teste de conexão","settings.suggested":"sugerido","settings.testRequired":"Teste a conexão antes de salvar","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.updateDeprecatedNoTarget":"Obsoleto — sem destino de atualização ainda","settings.updateDeprecatedTitle":"⚠️ MeMesh {version} foi marcado como OBSOLETO pelos mantenedores.","settings.updatePartialTitle":"⚠️ Verificação de atualização parcial","settings.updatePartialDescription":"{message}. O status de obsolescência é desconhecido nesta sessão — execute a verificação novamente quando estiver online.","settings.updatePartialSummary":"Parcial — status de obsolescência desconhecido","settings.updateDeprecatedTargetUnknown":"Obsoleto — verificando destino de atualização","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.interactHint":"Clique num nó para focar · arraste área vazia para deslocar · role para zoom","graph.resetView":"Redefinir vista","graph.resetViewHint":"Redefinir zoom e posição","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","feedback.submitting":"Coletando diagnóstico…","doctorBanner.warnTitle":"Atenção — a configuração do memesh precisa de revisão","doctorBanner.failTitle":"A configuração do memesh está incompleta","doctorBanner.dismiss":"Fechar","doctorBanner.getHelp":"Obter ajuda","doctorBanner.helpHint":"Abre um GitHub issue com o diagnóstico pré-preenchido","doctorBanner.preambleForIssue":"O memesh doctor relatou o seguinte na minha instalação:","doctor.capabilities.summary":"LLM/embedding configuration detected","doctor.capabilities.fix":'Configure via "memesh config set llm.provider <provider>"',"doctor.config.summary":"Config file status","doctor.config.fix":'Fix or remove the config file, then run "memesh config list"',"doctor.dashboard.summary":"Dashboard artifact exists","doctor.dashboard.fix":'Run "npm run build:dashboard" to rebuild the dashboard',"doctor.database.summary":"Database accessibility status","doctor.database.fix":'Check database permissions, path, or run "memesh doctor" for detailed diagnosis',"doctor.hook-activity.summary":"Nenhuma atividade atribuída ao memesh nas últimas 24h","doctor.hook-activity.fix":"Abra uma sessão Claude Code que use ≥3 ferramentas, ou faça um commit, e reabra o painel","doctor.hook-scripts.summary":"Hook script files verification","doctor.hook-scripts.fix":"Reinstall MeMesh or restore missing hook files from package","doctor.hook-wiring.summary":"Hooks integration status in Claude Code","doctor.hook-wiring.fix":'Run "memesh install-hooks" to wire hooks into Claude Code settings',"doctor.hooks-config.summary":"Hooks configuration file status","doctor.hooks-config.fix":"Reinstall MeMesh or restore .claude-plugin/hooks.json","doctor.http-probe.summary":"HTTP server availability check","doctor.http-probe.fix":"Check if port is available or database is accessible","doctor.install_id.summary":"Anonymous install ID status","doctor.install_id.fix":'Run "memesh" once to generate install ID',"doctor.install-channel.summary":"Installation method detection","doctor.install-channel.fix":"No action needed","doctor.mcp-config.summary":"MCP server configuration status","doctor.mcp-config.fix":"Restore .mcp.json from package or reinstall MeMesh","doctor.skills-manifest.summary":"Skills directory structure validation","doctor.skills-manifest.fix":"Reinstall MeMesh or restore .claude-plugin/skills directory","doctor.update_status.summary":"Update available: {version}","doctor.update_status.fix":'Run "memesh update" to upgrade',"doctor.update_status.prerelease":"Running pre-release version ({current}), npm latest is {latest}","doctor.vector_index.summary":"Search index needs rebuilding","doctor.vector_index.fix":'Run "memesh reindex" to restore full search',"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","time.justNow":"Agora","time.hoursAgo":"Há {count}h","time.today":"Hoje","time.yesterday":"Ontem","time.daysAgo":"Há {count}d","time.lastWeek":"Semana passada","time.weeksAgo":"Há {count}sem","time.lastMonth":"Mês passado","time.monthsAgo":"Há {count}m","memory.access.frequent":"Frequente · {count} usos","memory.access.recalls":"{count} usos","memory.access.never":"Nunca usado","cluster.knowledge":"Conhecimento","cluster.activity":"Atividade","cluster.session":"Sessões","cluster.reference":"Referência","cluster.all":"Todos","browse.filterCategory":"Categoria","browse.filterTime":"Tempo","browse.filterValue":"Valor","browse.filterProject":"Projeto","browse.filterSort":"Ordenar","browse.timeToday":"Hoje","browse.timeWeek":"Esta semana","browse.timeMonth":"Este mês","browse.timeOlder":"Mais antigo","browse.valueRecalled":"✓ Usado","browse.valueNever":"Nunca usado","browse.sortMostRecalled":"Mais usado","browse.sortRecent":"Recente","browse.sortCreated":"Criado em","browse.emptyFilter":"Sem memórias nesta categoria — tente outro filtro","lessons.tabFailure":"Lições de falha","lessons.tabPlan":"Registros de plano","lessons.tabFreeform":"Notas","lessons.totalRecalls":"Total de recalls","lessons.stepsLabel":"passos","lessons.commitsCount":"{count} commits","lessons.unstructured":"(Sem campos estruturados — ver memória bruta)","lessons.searchPlaceholder":"Buscar error / root cause / fix / nome…","lessons.allProjects":"Todos os projetos","lessons.showing":"Mostrando {visible} / {total}","lessons.noMatch":'Sem memórias correspondendo a "{query}"',"lessons.emptyCategory":"Sem memórias nesta categoria","lessons.moreItems":"+{count} mais","roadmap.title":"Roadmap do Projeto","roadmap.summary":"{count} memórias · {first} → {last}","roadmap.switchToList":"↩ Lista","roadmap.switchToRoadmap":"🗺️ Roadmap","roadmap.emptyProject":"Sem memórias neste projeto ainda.","loop.label":"Loop de memória","loop.subtitleHas":"memórias de conhecimento reutilizadas nos últimos 7 dias","loop.subtitleNone":"Nenhuma memória de conhecimento reutilizada esta semana","loop.approxNote":"Aproximação — rastreamento completo começa após atualização.","loop.sparkLabel":"Últimos 30 dias","roadmap.milestones":"Marcos","roadmap.keyLessons":"Lições principais","radar.title":"Radar de cobertura","radar.caption":"Memórias de conhecimento ativas<br/>(session e commit excluídos)","radar.axis.lessons":"Lições","radar.axis.decisions":"Decisões","radar.axis.patterns":"Padrões","radar.axis.bugs":"Correções","radar.axis.processes":"Processos","radar.axis.architecture":"Arquitetura","ageMatrix.title":"Distribuição de idade","ageMatrix.low":"Baixa","ageMatrix.high":"Alta","ageMatrix.legend":"profundidade da cor = densidade","ageMatrix.typeColumn":"Tipo","header.signalModeOn":"Sinal","header.signalModeOff":"Tudo","header.signalModeOnHint":"Ocultando ruído de session e commit. Clique para mostrar tudo.","header.signalModeOffHint":"Mostrando todas as memórias incluindo ruído. Clique para ocultar.","roadmap.phases":"Fases","onboarding.title":"Bem-vindo ao MeMesh","onboarding.body":"Seu armazenamento de memória está vazio. Comece com um tour de 30 entidades curadas ou registre sua primeira lição.","onboarding.llmHint":"LLM não é necessário. Tudo funciona apenas com FTS5 (95.40% R@5). LLM é opcional para geração automática de lições — configure depois em Configurações.","onboarding.seedButton":"Experimentar o tour","onboarding.seedingButton":"Carregando…","onboarding.seedHint":"Adiciona 30 memórias aqui mesmo — sem precisar do terminal","onboarding.cliReference":"Prefere a CLI?","onboarding.hintDemo":"Insere 30 memórias de demonstração que você pode limpar depois","onboarding.hintReset":"Remove tudo marcado com metadata.demo","onboarding.resetButton":"Resetar demo","onboarding.resettingButton":"Removendo…","onboarding.resetConfirm":"Remover todas as memórias de demonstração? Suas entradas reais serão mantidas.","onboarding.dismiss":"Fechar","ageMatrix.bucket.week":"Esta semana","ageMatrix.bucket.month":"Este mês","ageMatrix.bucket.quarter":"Este trimestre","ageMatrix.bucket.older":"Mais antigo","ageMatrix.type.lesson_learned":"Lição","ageMatrix.type.lesson":"Lição","ageMatrix.type.mistake":"Erro","ageMatrix.type.decision":"Decisão","ageMatrix.type.architecture_decision":"Decisão arq.","ageMatrix.type.pattern":"Padrão","ageMatrix.type.technical_pattern":"Padrão técnico","ageMatrix.type.best_practice":"Melhor prática","ageMatrix.type.bug_fix":"Correção","ageMatrix.type.workflow_checkpoint":"Checkpoint","ageMatrix.type.process":"Processo","ageMatrix.type.architecture":"Arquitetura","ageMatrix.type.feature":"Funcionalidade","settings.behaviourTitle":"Comportamento","settings.autoUpdateLabel":"Política de auto-atualização","settings.autoUpdateOff":"Desligado — apenas manual","settings.autoUpdatePatch":"Patch — aplica X.Y.Z+1","settings.autoUpdateMinor":"Minor — aplica X.Y+1.0","settings.autoUpdateMajor":"Major — aplica qualquer bump","settings.autoUpdateHint":"Acionado após cada sessão. MEMESH_AUTO_UPDATE tem prioridade.","settings.agenticLabel":"Ativar agentic orchestration (experimental)","settings.agenticHint":"Mostra sugestões de agente em Bash. Opt-in apenas.","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.insights":"Insights","telemetry.title":"Activité du LLM","telemetry.lastNDays":"{n} derniers jours","telemetry.loading":"chargement…","telemetry.empty":"Aucune activité du LLM enregistrée sur cette période. Les flux Smart-Mode écrivent automatiquement des lignes dès que dream / consolidator / failure-analyzer s’exécutent.","telemetry.callsCount":"{n} appels","telemetry.attemptsCount":"{n} tentatives","telemetry.successRate":"succès","telemetry.medianLatency":"latence médiane","telemetry.fallbackUsed":"fallback utilisé {n}× ({pct} des appels)","telemetry.byProvider":"par fournisseur","telemetry.errors":"erreurs","insights.title":"Ce que memesh a fait pour vous","insights.subtitle":"recaps hebdomadaires et patterns générés automatiquement, en attente de revue","insights.statPending":"pending","insights.statApplied":"applied","insights.statRejected":"rejected","insights.filter.pending":"Pending","insights.filter.applied":"Applied","insights.filter.rejected":"Rejected","insights.filter.all":"Tous","insights.refresh":"Actualiser","insights.loading":"chargement…","insights.emptyPending":"Aucun insight pending. Exécutez `memesh dream run` pour générer un weekly recap.","insights.emptyNoLlm":"Configurez un fournisseur LLM dans les paramètres pour activer les weekly recaps et la détection de patterns.","insights.emptyOther":"Rien ici.","insights.sources":"sources","insights.status.pending":"pending","insights.status.applied":"applied","insights.status.rejected":"rejected","insights.viewDetail":"Voir le détail","insights.collapse":"Réduire","insights.accept":"Accepter","insights.applying":"Application…","insights.reject":"Rejeter","insights.generatedBy":"Généré par","insights.promptVersion":"Version du prompt","insights.observations":"Observations résumées","insights.tags":"Tags","insights.sourceIds":"Sources","insights.validationWarnings":"Affirmations signalées (LLM validator)","insights.validationClaim":"Affirmation","insights.validationReason":"Raison","insights.runDream":"Lancer le weekly recap","insights.runDreamWithValidate":"Lancer avec validator (plus lent, meilleure qualité)","banner.pendingInsights":"{n} nouveau(x) insight{s} en attente de revue →","banner.dismiss":"Ignorer","banner.viewAll":"Tout voir","pattern.title":"Pattern","pattern.evidenceCount":"{n} preuve(s)","pattern.severity":"Sévérité","pattern.severity.high":"élevée","pattern.severity.medium":"moyenne","pattern.severity.low":"faible","pattern.description":"Description du pattern","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.llmOptional.title":"Le LLM est optionnel","settings.llmOptional.body":"memesh fonctionne sans LLM. Le mode Core par défaut couvre la recherche plein texte, remember/recall manuel, le tableau de bord et la capture de session via les hooks.","settings.llmOptional.coreLabel":"Sans LLM (mode Core)","settings.llmOptional.coreFeatures":"recherche par mot-clé FTS5 (95,40 % R@5 sur LongMemEval-S), remember/recall manuel, tableau de bord, capture de session via hooks","settings.llmOptional.smartLabel":"Avec LLM (mode Smart)","settings.llmOptional.smartFeatures":"lesson_learned automatique à partir des échecs de session, auto-tag des nouvelles entités, récap hebdomadaire + détection de motifs","settings.apiKey":"Clé API","settings.model":"Modèle (optionnel)","settings.save":"Enregistrer","settings.saving":"Enregistrement…","settings.saved":"Enregistré.","settings.removeProvider":"Remove provider","settings.removeProviderHint":"Drops apiKey + model. Falls back to env-var auto-detect or Core Mode (no LLM).","settings.removeProviderConfirm":"Remove the configured LLM provider? This drops the saved API key and model. memesh will fall back to env-var auto-detection (ANTHROPIC_API_KEY > OPENAI_API_KEY > OLLAMA_HOST) or run in Core Mode if no credential is found.","settings.providerRemoved":"Provider removed. memesh now runs in Core Mode or via env-var auto-detect.","settings.test":"Tester","settings.testing":"Test en cours…","settings.testPassed":"✓ Connexion OK · {count} modèles disponibles","settings.testFailed":"Échec du test de connexion","settings.suggested":"suggéré","settings.testRequired":"Testez la connexion avant d'enregistrer","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.updateDeprecatedNoTarget":"Obsolète — pas encore de cible de mise à niveau","settings.updateDeprecatedTitle":"⚠️ MeMesh {version} est marqué OBSOLÈTE par les mainteneurs.","settings.updatePartialTitle":"⚠️ Vérification de mise à jour partielle","settings.updatePartialDescription":"{message}. Le statut d'obsolescence est inconnu pour cette session — relancez la vérification une fois en ligne.","settings.updatePartialSummary":"Partielle — statut d'obsolescence inconnu","settings.updateDeprecatedTargetUnknown":"Obsolète — recherche de la cible de mise à niveau","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.interactHint":"Cliquez sur un nœud pour cibler · glissez une zone vide pour déplacer · molette pour zoomer","graph.resetView":"Réinitialiser la vue","graph.resetViewHint":"Réinitialiser zoom et position","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","feedback.submitting":"Collecte des diagnostics…","doctorBanner.warnTitle":"Attention — la configuration de memesh nécessite une vérification","doctorBanner.failTitle":"La configuration de memesh est incomplète","doctorBanner.dismiss":"Fermer","doctorBanner.getHelp":"Obtenir de l'aide","doctorBanner.helpHint":"Ouvre un GitHub issue avec le diagnostic pré-rempli","doctorBanner.preambleForIssue":"memesh doctor a signalé ce qui suit sur mon installation :","doctor.capabilities.summary":"LLM/embedding configuration detected","doctor.capabilities.fix":'Configure via "memesh config set llm.provider <provider>"',"doctor.config.summary":"Config file status","doctor.config.fix":'Fix or remove the config file, then run "memesh config list"',"doctor.dashboard.summary":"Dashboard artifact exists","doctor.dashboard.fix":'Run "npm run build:dashboard" to rebuild the dashboard',"doctor.database.summary":"Database accessibility status","doctor.database.fix":'Check database permissions, path, or run "memesh doctor" for detailed diagnosis',"doctor.hook-activity.summary":"Aucune activité memesh ces dernières 24 heures","doctor.hook-activity.fix":"Ouvrez une session Claude Code utilisant ≥3 outils, ou faites un commit, puis rouvrez le tableau de bord","doctor.hook-scripts.summary":"Hook script files verification","doctor.hook-scripts.fix":"Reinstall MeMesh or restore missing hook files from package","doctor.hook-wiring.summary":"Hooks integration status in Claude Code","doctor.hook-wiring.fix":'Run "memesh install-hooks" to wire hooks into Claude Code settings',"doctor.hooks-config.summary":"Hooks configuration file status","doctor.hooks-config.fix":"Reinstall MeMesh or restore .claude-plugin/hooks.json","doctor.http-probe.summary":"HTTP server availability check","doctor.http-probe.fix":"Check if port is available or database is accessible","doctor.install_id.summary":"Anonymous install ID status","doctor.install_id.fix":'Run "memesh" once to generate install ID',"doctor.install-channel.summary":"Installation method detection","doctor.install-channel.fix":"No action needed","doctor.mcp-config.summary":"MCP server configuration status","doctor.mcp-config.fix":"Restore .mcp.json from package or reinstall MeMesh","doctor.skills-manifest.summary":"Skills directory structure validation","doctor.skills-manifest.fix":"Reinstall MeMesh or restore .claude-plugin/skills directory","doctor.update_status.summary":"Update available: {version}","doctor.update_status.fix":'Run "memesh update" to upgrade',"doctor.update_status.prerelease":"Running pre-release version ({current}), npm latest is {latest}","doctor.vector_index.summary":"Search index needs rebuilding","doctor.vector_index.fix":'Run "memesh reindex" to restore full search',"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","time.justNow":"À l'instant","time.hoursAgo":"Il y a {count}h","time.today":"Aujourd'hui","time.yesterday":"Hier","time.daysAgo":"Il y a {count}j","time.lastWeek":"Semaine dernière","time.weeksAgo":"Il y a {count}sem","time.lastMonth":"Mois dernier","time.monthsAgo":"Il y a {count}mo","memory.access.frequent":"Fréquent · {count} rappels","memory.access.recalls":"{count} rappels","memory.access.never":"Jamais rappelé","cluster.knowledge":"Connaissance","cluster.activity":"Activité","cluster.session":"Sessions","cluster.reference":"Référence","cluster.all":"Tout","browse.filterCategory":"Catégorie","browse.filterTime":"Temps","browse.filterValue":"Valeur","browse.filterProject":"Projet","browse.filterSort":"Trier","browse.timeToday":"Aujourd'hui","browse.timeWeek":"Cette semaine","browse.timeMonth":"Ce mois-ci","browse.timeOlder":"Plus ancien","browse.valueRecalled":"✓ Utilisé","browse.valueNever":"Jamais rappelé","browse.sortMostRecalled":"Plus rappelé","browse.sortRecent":"Récent","browse.sortCreated":"Créé","browse.emptyFilter":"Aucune mémoire dans cette catégorie — essayez un autre filtre","lessons.tabFailure":"Leçons d'échec","lessons.tabPlan":"Enregistrements de plan","lessons.tabFreeform":"Notes","lessons.totalRecalls":"Rappels totaux","lessons.stepsLabel":"étapes","lessons.commitsCount":"{count} commits","lessons.unstructured":"(Pas de champs structurés — voir mémoire brute)","lessons.searchPlaceholder":"Rechercher error / root cause / fix / nom…","lessons.allProjects":"Tous les projets","lessons.showing":"Affichage {visible} / {total}","lessons.noMatch":"Aucune mémoire correspondant à « {query} »","lessons.emptyCategory":"Aucune mémoire dans cette catégorie","lessons.moreItems":"+{count} de plus","roadmap.title":"Feuille de Route","roadmap.summary":"{count} mémoires · {first} → {last}","roadmap.switchToList":"↩ Vue Liste","roadmap.switchToRoadmap":"🗺️ Vue Roadmap","roadmap.emptyProject":"Aucune mémoire dans ce projet pour l'instant.","loop.label":"Boucle mémoire","loop.subtitleHas":"mémoires de connaissances rappelées ces 7 derniers jours","loop.subtitleNone":"Aucune mémoire rappelée cette semaine","loop.approxNote":"Approximation — suivi complet à partir de la mise à jour.","loop.sparkLabel":"30 derniers jours","roadmap.milestones":"Jalons","roadmap.keyLessons":"Leçons clés","radar.title":"Radar de couverture","radar.caption":"Mémoires actives<br/>(session et commit exclus)","radar.axis.lessons":"Leçons","radar.axis.decisions":"Décisions","radar.axis.patterns":"Patterns","radar.axis.bugs":"Bugs corrigés","radar.axis.processes":"Processus","radar.axis.architecture":"Architecture","ageMatrix.title":"Distribution par âge","ageMatrix.low":"Faible","ageMatrix.high":"Élevé","ageMatrix.legend":"profondeur = densité","ageMatrix.typeColumn":"Type","header.signalModeOn":"Signal","header.signalModeOff":"Tout","header.signalModeOnHint":"Masque le bruit session/commit. Cliquez pour tout afficher.","header.signalModeOffHint":"Affiche toutes les mémoires y compris le bruit. Cliquez pour masquer.","roadmap.phases":"Phases","onboarding.title":"Bienvenue dans MeMesh","onboarding.body":"Votre mémoire est vide. Commencez par une visite de 30 entités ou enregistrez votre première leçon.","onboarding.llmHint":"Aucun LLM requis. Tout fonctionne avec FTS5 seul (95,40 % R@5). Un LLM est facultatif pour la génération automatique de leçons — configurez-le plus tard dans Paramètres.","onboarding.seedButton":"Lancer la visite démo","onboarding.seedingButton":"Chargement…","onboarding.seedHint":"Ajoute 30 mémoires ici même — pas besoin de terminal","onboarding.cliReference":"Vous préférez la CLI ?","onboarding.hintDemo":"Sème 30 mémoires de démonstration (effaçables plus tard)","onboarding.hintReset":"Supprime tout ce qui est marqué metadata.demo","onboarding.resetButton":"Réinitialiser la démo","onboarding.resettingButton":"Suppression…","onboarding.resetConfirm":"Supprimer toutes les mémoires de démo ? Vos entrées personnelles seront conservées.","onboarding.dismiss":"Fermer","ageMatrix.bucket.week":"Cette semaine","ageMatrix.bucket.month":"Ce mois","ageMatrix.bucket.quarter":"Ce trimestre","ageMatrix.bucket.older":"Plus ancien","ageMatrix.type.lesson_learned":"Leçon","ageMatrix.type.lesson":"Leçon","ageMatrix.type.mistake":"Erreur","ageMatrix.type.decision":"Décision","ageMatrix.type.architecture_decision":"Décision arch.","ageMatrix.type.pattern":"Pattern","ageMatrix.type.technical_pattern":"Pattern tech.","ageMatrix.type.best_practice":"Bonne pratique","ageMatrix.type.bug_fix":"Correction","ageMatrix.type.workflow_checkpoint":"Jalon","ageMatrix.type.process":"Processus","ageMatrix.type.architecture":"Architecture","ageMatrix.type.feature":"Fonctionnalité","settings.behaviourTitle":"Comportement","settings.autoUpdateLabel":"Politique de mise à jour auto","settings.autoUpdateOff":"Désactivé — manuel uniquement","settings.autoUpdatePatch":"Patch — applique X.Y.Z+1","settings.autoUpdateMinor":"Minor — applique X.Y+1.0","settings.autoUpdateMajor":"Major — applique toute mise à jour","settings.autoUpdateHint":"Déclenché à la fin de chaque session. MEMESH_AUTO_UPDATE a priorité.","settings.agenticLabel":"Activer agentic orchestration (expérimental)","settings.agenticHint":"Affiche des suggestions d'agent en Bash. Opt-in.","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.insights":"Insights","telemetry.title":"LLM-Aktivität","telemetry.lastNDays":"letzte {n} Tage","telemetry.loading":"lädt…","telemetry.empty":"In diesem Zeitraum wurde keine LLM-Aktivität aufgezeichnet. Smart-Mode-Flows schreiben automatisch Einträge, sobald dream / consolidator / failure-analyzer laufen.","telemetry.callsCount":"{n} Aufrufe","telemetry.attemptsCount":"{n} Versuche","telemetry.successRate":"Erfolg","telemetry.medianLatency":"mediane Latenz","telemetry.fallbackUsed":"Fallback {n}× verwendet ({pct} der Aufrufe)","telemetry.byProvider":"nach Provider","telemetry.errors":"Fehler","insights.title":"Was memesh für dich getan hat","insights.subtitle":"automatisch generierte weekly recaps und erkannte patterns – warten auf Review","insights.statPending":"pending","insights.statApplied":"applied","insights.statRejected":"rejected","insights.filter.pending":"Pending","insights.filter.applied":"Applied","insights.filter.rejected":"Rejected","insights.filter.all":"Alle","insights.refresh":"Aktualisieren","insights.loading":"lädt…","insights.emptyPending":"Keine pending Insights. Führe `memesh dream run` aus, um einen weekly recap zu erzeugen.","insights.emptyNoLlm":"Konfiguriere einen LLM-Provider in den Einstellungen, um weekly recaps und Pattern-Erkennung zu aktivieren.","insights.emptyOther":"Nichts hier.","insights.sources":"Quellen","insights.status.pending":"pending","insights.status.applied":"applied","insights.status.rejected":"rejected","insights.viewDetail":"Details anzeigen","insights.collapse":"Einklappen","insights.accept":"Übernehmen","insights.applying":"Wird angewendet…","insights.reject":"Ablehnen","insights.generatedBy":"Erzeugt von","insights.promptVersion":"Prompt-Version","insights.observations":"Zusammenfassende Beobachtungen","insights.tags":"Tags","insights.sourceIds":"Quell-Entities","insights.validationWarnings":"Markierte Aussagen (LLM-validator)","insights.validationClaim":"Aussage","insights.validationReason":"Grund","insights.runDream":"Weekly recap ausführen","insights.runDreamWithValidate":"Mit validator ausführen (langsamer, höhere Qualität)","banner.pendingInsights":"{n} neue(r) Insight(s) wartet auf dein Review →","banner.dismiss":"Schließen","banner.viewAll":"Alle anzeigen","pattern.title":"Pattern","pattern.evidenceCount":"{n} Belege","pattern.severity":"Schweregrad","pattern.severity.high":"hoch","pattern.severity.medium":"mittel","pattern.severity.low":"niedrig","pattern.description":"Pattern-Beschreibung","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.llmOptional.title":"LLM ist optional","settings.llmOptional.body":"memesh funktioniert ohne LLM. Der Standard-Core-Modus bietet Volltextsuche, manuelles remember/recall, Dashboard und Session-Erfassung über Hooks.","settings.llmOptional.coreLabel":"Ohne LLM (Core-Modus)","settings.llmOptional.coreFeatures":"FTS5-Stichwortsuche (95,40 % R@5 auf LongMemEval-S), manuelles remember/recall, Dashboard, Session-Erfassung via Hooks","settings.llmOptional.smartLabel":"Mit LLM (Smart-Modus)","settings.llmOptional.smartFeatures":"automatische lesson_learned aus Session-Fehlern, Auto-Tagging neuer Entitäten, Wochen-Recap + Mustererkennung","settings.apiKey":"API-Schlüssel","settings.model":"Modell (optional)","settings.save":"Speichern","settings.saving":"Speichern…","settings.saved":"Gespeichert.","settings.removeProvider":"Remove provider","settings.removeProviderHint":"Drops apiKey + model. Falls back to env-var auto-detect or Core Mode (no LLM).","settings.removeProviderConfirm":"Remove the configured LLM provider? This drops the saved API key and model. memesh will fall back to env-var auto-detection (ANTHROPIC_API_KEY > OPENAI_API_KEY > OLLAMA_HOST) or run in Core Mode if no credential is found.","settings.providerRemoved":"Provider removed. memesh now runs in Core Mode or via env-var auto-detect.","settings.test":"Testen","settings.testing":"Teste…","settings.testPassed":"✓ Verbindung OK · {count} Modelle verfügbar","settings.testFailed":"Verbindungstest fehlgeschlagen","settings.suggested":"empfohlen","settings.testRequired":"Bitte Verbindung vor dem Speichern testen","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.updateDeprecatedNoTarget":"Veraltet — noch kein Upgrade-Ziel verfügbar","settings.updateDeprecatedTitle":"⚠️ MeMesh {version} wurde von den Maintainern als VERALTET markiert.","settings.updatePartialTitle":"⚠️ Update-Prüfung unvollständig","settings.updatePartialDescription":"{message}. Veraltungsstatus ist in dieser Sitzung unbekannt — Prüfung online erneut ausführen.","settings.updatePartialSummary":"Teilweise — Veraltungsstatus unbekannt","settings.updateDeprecatedTargetUnknown":"Veraltet — Upgrade-Ziel wird ermittelt","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.interactHint":"Knoten anklicken für Fokus · leere Fläche ziehen zum Schwenken · scrollen zum Zoomen","graph.resetView":"Ansicht zurücksetzen","graph.resetViewHint":"Zoom und Position zurücksetzen","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","feedback.submitting":"Diagnose wird erfasst…","doctorBanner.warnTitle":"Hinweis — die memesh-Einrichtung muss überprüft werden","doctorBanner.failTitle":"memesh-Einrichtung ist unvollständig","doctorBanner.dismiss":"Schließen","doctorBanner.getHelp":"Hilfe bekommen","doctorBanner.helpHint":"Öffnet ein GitHub Issue mit vorausgefülltem Diagnosebericht","doctorBanner.preambleForIssue":"memesh doctor hat in meiner Installation Folgendes gemeldet:","doctor.capabilities.summary":"LLM/embedding configuration detected","doctor.capabilities.fix":'Configure via "memesh config set llm.provider <provider>"',"doctor.config.summary":"Config file status","doctor.config.fix":'Fix or remove the config file, then run "memesh config list"',"doctor.dashboard.summary":"Dashboard artifact exists","doctor.dashboard.fix":'Run "npm run build:dashboard" to rebuild the dashboard',"doctor.database.summary":"Database accessibility status","doctor.database.fix":'Check database permissions, path, or run "memesh doctor" for detailed diagnosis',"doctor.hook-activity.summary":"Keine memesh-Aktivität in den letzten 24 Stunden","doctor.hook-activity.fix":"Starten Sie eine Claude-Code-Session mit ≥3 Tools oder committen Sie etwas und öffnen Sie das Dashboard erneut","doctor.hook-scripts.summary":"Hook script files verification","doctor.hook-scripts.fix":"Reinstall MeMesh or restore missing hook files from package","doctor.hook-wiring.summary":"Hooks integration status in Claude Code","doctor.hook-wiring.fix":'Run "memesh install-hooks" to wire hooks into Claude Code settings',"doctor.hooks-config.summary":"Hooks configuration file status","doctor.hooks-config.fix":"Reinstall MeMesh or restore .claude-plugin/hooks.json","doctor.http-probe.summary":"HTTP server availability check","doctor.http-probe.fix":"Check if port is available or database is accessible","doctor.install_id.summary":"Anonymous install ID status","doctor.install_id.fix":'Run "memesh" once to generate install ID',"doctor.install-channel.summary":"Installation method detection","doctor.install-channel.fix":"No action needed","doctor.mcp-config.summary":"MCP server configuration status","doctor.mcp-config.fix":"Restore .mcp.json from package or reinstall MeMesh","doctor.skills-manifest.summary":"Skills directory structure validation","doctor.skills-manifest.fix":"Reinstall MeMesh or restore .claude-plugin/skills directory","doctor.update_status.summary":"Update available: {version}","doctor.update_status.fix":'Run "memesh update" to upgrade',"doctor.update_status.prerelease":"Running pre-release version ({current}), npm latest is {latest}","doctor.vector_index.summary":"Search index needs rebuilding","doctor.vector_index.fix":'Run "memesh reindex" to restore full search',"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","time.justNow":"Gerade eben","time.hoursAgo":"Vor {count} Std","time.today":"Heute","time.yesterday":"Gestern","time.daysAgo":"Vor {count} T","time.lastWeek":"Letzte Woche","time.weeksAgo":"Vor {count} W","time.lastMonth":"Letzter Monat","time.monthsAgo":"Vor {count} M","memory.access.frequent":"Häufig · {count} Abrufe","memory.access.recalls":"{count} Abrufe","memory.access.never":"Nie abgerufen","cluster.knowledge":"Wissen","cluster.activity":"Aktivität","cluster.session":"Sitzungen","cluster.reference":"Referenz","cluster.all":"Alle","browse.filterCategory":"Kategorie","browse.filterTime":"Zeit","browse.filterValue":"Wert","browse.filterProject":"Projekt","browse.filterSort":"Sortieren","browse.timeToday":"Heute","browse.timeWeek":"Diese Woche","browse.timeMonth":"Dieser Monat","browse.timeOlder":"Älter","browse.valueRecalled":"✓ Verwendet","browse.valueNever":"Nie abgerufen","browse.sortMostRecalled":"Häufigste","browse.sortRecent":"Zuletzt","browse.sortCreated":"Erstellt","browse.emptyFilter":"Keine Erinnerungen in dieser Kategorie — anderen Filter probieren","lessons.tabFailure":"Fehler-Lektionen","lessons.tabPlan":"Plan-Aufzeichnungen","lessons.tabFreeform":"Notizen","lessons.totalRecalls":"Abrufe gesamt","lessons.stepsLabel":"Schritte","lessons.commitsCount":"{count} Commits","lessons.unstructured":"(Keine strukturierten Felder — siehe Rohspeicher)","lessons.searchPlaceholder":"Suche error / root cause / fix / Name…","lessons.allProjects":"Alle Projekte","lessons.showing":"{visible} / {total} angezeigt","lessons.noMatch":'Keine Erinnerungen zu „{query}"',"lessons.emptyCategory":"Keine Erinnerungen in dieser Kategorie","lessons.moreItems":"+{count} weitere","roadmap.title":"Projekt-Roadmap","roadmap.summary":"{count} Erinnerungen · {first} → {last}","roadmap.switchToList":"↩ Listenansicht","roadmap.switchToRoadmap":"🗺️ Roadmap-Ansicht","roadmap.emptyProject":"Noch keine Erinnerungen in diesem Projekt.","loop.label":"Memory-Loop","loop.subtitleHas":"Wissens-Erinnerungen in den letzten 7 Tagen wiederverwendet","loop.subtitleNone":"Diese Woche keine Wissens-Erinnerungen abgerufen","loop.approxNote":"Annäherung — vollständige Verfolgung beginnt nach Upgrade.","loop.sparkLabel":"Letzte 30 Tage","roadmap.milestones":"Meilensteine","roadmap.keyLessons":"Wichtige Lektionen","radar.title":"Wissensabdeckung","radar.caption":"Aktive Wissens-Erinnerungen<br/>(session und commit ausgeschlossen)","radar.axis.lessons":"Lektionen","radar.axis.decisions":"Entscheidungen","radar.axis.patterns":"Muster","radar.axis.bugs":"Bugfixes","radar.axis.processes":"Prozesse","radar.axis.architecture":"Architektur","ageMatrix.title":"Altersverteilung","ageMatrix.low":"Niedrig","ageMatrix.high":"Hoch","ageMatrix.legend":"Farbtiefe = Dichte","ageMatrix.typeColumn":"Typ","header.signalModeOn":"Signal","header.signalModeOff":"Alle","header.signalModeOnHint":"Session-/Commit-Rauschen ausgeblendet. Klick zeigt alles.","header.signalModeOffHint":"Alle Erinnerungen inklusive Rauschen. Klick blendet aus.","roadmap.phases":"Phasen","onboarding.title":"Willkommen bei MeMesh","onboarding.body":"Ihr Memory-Store ist leer. Starten Sie mit einer kuratierten 30-Entitäts-Tour oder speichern Sie Ihre erste Lektion.","onboarding.llmHint":"Kein LLM erforderlich. Alles funktioniert nur mit FTS5 (95,40 % R@5). Ein LLM ist optional für automatische Lektionsgenerierung — später in den Einstellungen konfigurieren.","onboarding.seedButton":"Demo-Tour starten","onboarding.seedingButton":"Wird geladen…","onboarding.seedHint":"Fügt direkt hier 30 Erinnerungen hinzu — kein Terminal nötig","onboarding.cliReference":"Lieber per CLI?","onboarding.hintDemo":"Fügt 30 Demo-Erinnerungen ein (später löschbar)","onboarding.hintReset":"Entfernt alle mit metadata.demo markierten Einträge","onboarding.resetButton":"Demo zurücksetzen","onboarding.resettingButton":"Wird entfernt…","onboarding.resetConfirm":"Alle Demo-Erinnerungen entfernen? Ihre echten Einträge bleiben erhalten.","onboarding.dismiss":"Schließen","ageMatrix.bucket.week":"Diese Woche","ageMatrix.bucket.month":"Dieser Monat","ageMatrix.bucket.quarter":"Dieses Quartal","ageMatrix.bucket.older":"Älter","ageMatrix.type.lesson_learned":"Lektion","ageMatrix.type.lesson":"Lektion","ageMatrix.type.mistake":"Fehler","ageMatrix.type.decision":"Entscheidung","ageMatrix.type.architecture_decision":"Arch.-Entsch.","ageMatrix.type.pattern":"Muster","ageMatrix.type.technical_pattern":"Tech. Muster","ageMatrix.type.best_practice":"Best Practice","ageMatrix.type.bug_fix":"Bugfix","ageMatrix.type.workflow_checkpoint":"Meilenstein","ageMatrix.type.process":"Prozess","ageMatrix.type.architecture":"Architektur","ageMatrix.type.feature":"Feature","settings.behaviourTitle":"Verhalten","settings.autoUpdateLabel":"Auto-Update-Richtlinie","settings.autoUpdateOff":"Aus — nur manuell","settings.autoUpdatePatch":"Patch — wendet X.Y.Z+1 an","settings.autoUpdateMinor":"Minor — wendet X.Y+1.0 an","settings.autoUpdateMajor":"Major — wendet jede Version an","settings.autoUpdateHint":"Wird nach jeder Sitzung ausgelöst. MEMESH_AUTO_UPDATE hat Vorrang.","settings.agenticLabel":"agentic orchestration aktivieren (experimentell)","settings.agenticHint":"Zeigt Hintergrund-Agent-Vorschläge in Bash. Opt-in.","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.insights":"Insights","telemetry.title":"Hoạt động LLM","telemetry.lastNDays":"{n} ngày qua","telemetry.loading":"đang tải…","telemetry.empty":"Không có hoạt động LLM nào được ghi nhận trong khoảng thời gian này. Các flow Smart-Mode sẽ tự động ghi dữ liệu khi dream / consolidator / failure-analyzer chạy.","telemetry.callsCount":"{n} lệnh gọi","telemetry.attemptsCount":"{n} lần thử","telemetry.successRate":"thành công","telemetry.medianLatency":"độ trễ trung vị","telemetry.fallbackUsed":"fallback dùng {n}× ({pct} số lệnh gọi)","telemetry.byProvider":"theo nhà cung cấp","telemetry.errors":"lỗi","insights.title":"memesh đã làm gì cho bạn","insights.subtitle":"các weekly recap và pattern được tạo tự động, đang chờ bạn xem xét","insights.statPending":"pending","insights.statApplied":"applied","insights.statRejected":"rejected","insights.filter.pending":"Pending","insights.filter.applied":"Applied","insights.filter.rejected":"Rejected","insights.filter.all":"Tất cả","insights.refresh":"Làm mới","insights.loading":"đang tải…","insights.emptyPending":"Không có insight nào pending. Chạy `memesh dream run` để tạo weekly recap.","insights.emptyNoLlm":"Cấu hình một nhà cung cấp LLM trong phần Cài đặt để bật weekly recap và phát hiện pattern.","insights.emptyOther":"Không có gì ở đây.","insights.sources":"nguồn","insights.status.pending":"pending","insights.status.applied":"applied","insights.status.rejected":"rejected","insights.viewDetail":"Xem chi tiết","insights.collapse":"Thu gọn","insights.accept":"Chấp nhận","insights.applying":"Đang áp dụng…","insights.reject":"Từ chối","insights.generatedBy":"Tạo bởi","insights.promptVersion":"Phiên bản prompt","insights.observations":"Tóm tắt quan sát","insights.tags":"Thẻ","insights.sourceIds":"Entity nguồn","insights.validationWarnings":"Nhận định bị gắn cờ (LLM validator)","insights.validationClaim":"Nhận định","insights.validationReason":"Lý do","insights.runDream":"Chạy weekly recap","insights.runDreamWithValidate":"Chạy kèm validator (chậm hơn, chất lượng cao hơn)","banner.pendingInsights":"{n} insight mới đang chờ bạn xem xét →","banner.dismiss":"Bỏ qua","banner.viewAll":"Xem tất cả","pattern.title":"Pattern","pattern.evidenceCount":"{n} bằng chứng","pattern.severity":"Mức nghiêm trọng","pattern.severity.high":"cao","pattern.severity.medium":"trung bình","pattern.severity.low":"thấp","pattern.description":"Mô tả pattern","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.llmOptional.title":"LLM là tùy chọn","settings.llmOptional.body":"memesh hoạt động mà không cần LLM. Chế độ Core mặc định bao gồm tìm kiếm toàn văn, remember/recall thủ công, dashboard và ghi nhận session qua hooks.","settings.llmOptional.coreLabel":"Không có LLM (chế độ Core)","settings.llmOptional.coreFeatures":"tìm kiếm từ khóa FTS5 (95,40% R@5 trên LongMemEval-S), remember/recall thủ công, dashboard, ghi nhận session qua hooks","settings.llmOptional.smartLabel":"Có LLM (chế độ Smart)","settings.llmOptional.smartFeatures":"tự động tạo lesson_learned từ lỗi session, tự động gắn nhãn entity mới, tóm tắt tuần + nhận diện mẫu hình","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.","settings.removeProvider":"Remove provider","settings.removeProviderHint":"Drops apiKey + model. Falls back to env-var auto-detect or Core Mode (no LLM).","settings.removeProviderConfirm":"Remove the configured LLM provider? This drops the saved API key and model. memesh will fall back to env-var auto-detection (ANTHROPIC_API_KEY > OPENAI_API_KEY > OLLAMA_HOST) or run in Core Mode if no credential is found.","settings.providerRemoved":"Provider removed. memesh now runs in Core Mode or via env-var auto-detect.","settings.test":"Kiểm tra","settings.testing":"Đang kiểm tra…","settings.testPassed":"✓ Kết nối OK · {count} mô hình có sẵn","settings.testFailed":"Kiểm tra kết nối thất bại","settings.suggested":"đề xuất","settings.testRequired":"Vui lòng kiểm tra kết nối trước khi lưu","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.updateDeprecatedNoTarget":"Đã ngừng dùng — chưa có phiên bản nâng cấp","settings.updateDeprecatedTitle":"⚠️ MeMesh {version} đã bị maintainer đánh dấu NGỪNG DÙNG (DEPRECATED).","settings.updatePartialTitle":"⚠️ Kiểm tra cập nhật chưa hoàn tất","settings.updatePartialDescription":"{message}. Phiên này chưa thể xác định trạng thái ngừng dùng — hãy chạy lại khi có mạng.","settings.updatePartialSummary":"Một phần — chưa xác nhận trạng thái ngừng dùng","settings.updateDeprecatedTargetUnknown":"Đã ngừng dùng — đang tìm phiên bản nâng cấp","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.interactHint":"Nhấp một nút để tập trung · kéo vùng trống để di chuyển · cuộn để thu phóng","graph.resetView":"Đặt lại chế độ xem","graph.resetViewHint":"Đặt lại thu phóng và vị trí","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","feedback.submitting":"Đang thu thập chẩn đoán…","doctorBanner.warnTitle":"Lưu ý — cài đặt memesh cần được xem lại","doctorBanner.failTitle":"Cài đặt memesh chưa hoàn tất","doctorBanner.dismiss":"Đóng","doctorBanner.getHelp":"Nhận trợ giúp","doctorBanner.helpHint":"Mở một GitHub issue với chẩn đoán đã điền sẵn","doctorBanner.preambleForIssue":"memesh doctor báo cáo những vấn đề sau trên cài đặt của tôi:","doctor.capabilities.summary":"LLM/embedding configuration detected","doctor.capabilities.fix":'Configure via "memesh config set llm.provider <provider>"',"doctor.config.summary":"Config file status","doctor.config.fix":'Fix or remove the config file, then run "memesh config list"',"doctor.dashboard.summary":"Dashboard artifact exists","doctor.dashboard.fix":'Run "npm run build:dashboard" to rebuild the dashboard',"doctor.database.summary":"Database accessibility status","doctor.database.fix":'Check database permissions, path, or run "memesh doctor" for detailed diagnosis',"doctor.hook-activity.summary":"Không có hoạt động memesh trong 24 giờ qua","doctor.hook-activity.fix":"Mở một phiên Claude Code sử dụng ≥3 công cụ, hoặc thực hiện một commit, rồi mở lại bảng điều khiển","doctor.hook-scripts.summary":"Hook script files verification","doctor.hook-scripts.fix":"Reinstall MeMesh or restore missing hook files from package","doctor.hook-wiring.summary":"Hooks integration status in Claude Code","doctor.hook-wiring.fix":'Run "memesh install-hooks" to wire hooks into Claude Code settings',"doctor.hooks-config.summary":"Hooks configuration file status","doctor.hooks-config.fix":"Reinstall MeMesh or restore .claude-plugin/hooks.json","doctor.http-probe.summary":"HTTP server availability check","doctor.http-probe.fix":"Check if port is available or database is accessible","doctor.install_id.summary":"Anonymous install ID status","doctor.install_id.fix":'Run "memesh" once to generate install ID',"doctor.install-channel.summary":"Installation method detection","doctor.install-channel.fix":"No action needed","doctor.mcp-config.summary":"MCP server configuration status","doctor.mcp-config.fix":"Restore .mcp.json from package or reinstall MeMesh","doctor.skills-manifest.summary":"Skills directory structure validation","doctor.skills-manifest.fix":"Reinstall MeMesh or restore .claude-plugin/skills directory","doctor.update_status.summary":"Update available: {version}","doctor.update_status.fix":'Run "memesh update" to upgrade',"doctor.update_status.prerelease":"Running pre-release version ({current}), npm latest is {latest}","doctor.vector_index.summary":"Search index needs rebuilding","doctor.vector_index.fix":'Run "memesh reindex" to restore full search',"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","time.justNow":"Vừa xong","time.hoursAgo":"{count} giờ trước","time.today":"Hôm nay","time.yesterday":"Hôm qua","time.daysAgo":"{count} ngày trước","time.lastWeek":"Tuần trước","time.weeksAgo":"{count} tuần trước","time.lastMonth":"Tháng trước","time.monthsAgo":"{count} tháng trước","memory.access.frequent":"Thường dùng · {count} lần","memory.access.recalls":"{count} lần","memory.access.never":"Chưa dùng","cluster.knowledge":"Kiến thức","cluster.activity":"Hoạt động","cluster.session":"Phiên","cluster.reference":"Tham chiếu","cluster.all":"Tất cả","browse.filterCategory":"Danh mục","browse.filterTime":"Thời gian","browse.filterValue":"Giá trị","browse.filterProject":"Dự án","browse.filterSort":"Sắp xếp","browse.timeToday":"Hôm nay","browse.timeWeek":"Tuần này","browse.timeMonth":"Tháng này","browse.timeOlder":"Cũ hơn","browse.valueRecalled":"✓ Đã dùng","browse.valueNever":"Chưa dùng","browse.sortMostRecalled":"Dùng nhiều nhất","browse.sortRecent":"Gần đây","browse.sortCreated":"Tạo lúc","browse.emptyFilter":"Không có ký ức trong danh mục này — thử bộ lọc khác","lessons.tabFailure":"Bài học thất bại","lessons.tabPlan":"Bản ghi kế hoạch","lessons.tabFreeform":"Ghi chú","lessons.totalRecalls":"Tổng lần nhớ lại","lessons.stepsLabel":"bước","lessons.commitsCount":"{count} commits","lessons.unstructured":"(Không có trường có cấu trúc — xem bộ nhớ thô)","lessons.searchPlaceholder":"Tìm error / root cause / fix / tên…","lessons.allProjects":"Tất cả dự án","lessons.showing":"Hiển thị {visible} / {total}","lessons.noMatch":'Không có ký ức khớp với "{query}"',"lessons.emptyCategory":"Không có ký ức trong danh mục này","lessons.moreItems":"+{count} nữa","roadmap.title":"Lộ Trình Dự Án","roadmap.summary":"{count} ký ức · {first} → {last}","roadmap.switchToList":"↩ Xem danh sách","roadmap.switchToRoadmap":"🗺️ Xem lộ trình","roadmap.emptyProject":"Chưa có ký ức nào trong dự án này.","loop.label":"Vòng lặp ký ức","loop.subtitleHas":"ký ức kiến thức được nhớ lại trong 7 ngày qua","loop.subtitleNone":"Tuần này chưa có ký ức nào được nhớ lại","loop.approxNote":"Xấp xỉ — theo dõi đầy đủ bắt đầu sau khi nâng cấp.","loop.sparkLabel":"30 ngày qua","roadmap.milestones":"Cột mốc","roadmap.keyLessons":"Bài học chính","radar.title":"Radar phủ kiến thức","radar.caption":"Ký ức kiến thức hoạt động<br/>(không tính session và commit)","radar.axis.lessons":"Bài học","radar.axis.decisions":"Quyết định","radar.axis.patterns":"Mẫu","radar.axis.bugs":"Sửa lỗi","radar.axis.processes":"Quy trình","radar.axis.architecture":"Kiến trúc","ageMatrix.title":"Phân bố tuổi ký ức","ageMatrix.low":"Thấp","ageMatrix.high":"Cao","ageMatrix.legend":"độ đậm = mật độ","ageMatrix.typeColumn":"Loại","header.signalModeOn":"Tín hiệu","header.signalModeOff":"Tất cả","header.signalModeOnHint":"Ẩn nhiễu session và commit. Nhấp để hiện tất cả.","header.signalModeOffHint":"Đang hiện tất cả ký ức bao gồm nhiễu. Nhấp để ẩn.","roadmap.phases":"Giai đoạn","onboarding.title":"Chào mừng đến với MeMesh","onboarding.body":"Bộ nhớ của bạn đang trống. Bắt đầu với tour 30 thực thể được tuyển chọn hoặc lưu bài học đầu tiên.","onboarding.llmHint":"Không cần LLM. Mọi thứ đều hoạt động chỉ với FTS5 (95,40% R@5). LLM là tùy chọn để tự động tạo bài học — có thể cấu hình sau trong Cài đặt.","onboarding.seedButton":"Bắt đầu tour demo","onboarding.seedingButton":"Đang nạp…","onboarding.seedHint":"Thêm 30 ký ức ngay tại đây — không cần mở terminal","onboarding.cliReference":"Thích dùng CLI?","onboarding.hintDemo":"Khởi tạo 30 ký ức demo, có thể xóa sau","onboarding.hintReset":"Xóa tất cả mục có metadata.demo","onboarding.resetButton":"Xóa demo","onboarding.resettingButton":"Đang xóa…","onboarding.resetConfirm":"Xóa toàn bộ ký ức demo? Các mục bạn tự lưu vẫn được giữ lại.","onboarding.dismiss":"Đóng","ageMatrix.bucket.week":"Tuần này","ageMatrix.bucket.month":"Tháng này","ageMatrix.bucket.quarter":"Quý này","ageMatrix.bucket.older":"Cũ hơn","ageMatrix.type.lesson_learned":"Bài học","ageMatrix.type.lesson":"Bài học","ageMatrix.type.mistake":"Sai sót","ageMatrix.type.decision":"Quyết định","ageMatrix.type.architecture_decision":"QĐ kiến trúc","ageMatrix.type.pattern":"Mẫu","ageMatrix.type.technical_pattern":"Mẫu kỹ thuật","ageMatrix.type.best_practice":"Best practice","ageMatrix.type.bug_fix":"Sửa lỗi","ageMatrix.type.workflow_checkpoint":"Mốc","ageMatrix.type.process":"Quy trình","ageMatrix.type.architecture":"Kiến trúc","ageMatrix.type.feature":"Tính năng","settings.behaviourTitle":"Hành vi","settings.autoUpdateLabel":"Chính sách tự động cập nhật","settings.autoUpdateOff":"Tắt — chỉ thủ công","settings.autoUpdatePatch":"Patch — áp dụng X.Y.Z+1","settings.autoUpdateMinor":"Minor — áp dụng X.Y+1.0","settings.autoUpdateMajor":"Major — áp dụng mọi cấp","settings.autoUpdateHint":"Kích hoạt sau mỗi phiên. MEMESH_AUTO_UPDATE ưu tiên.","settings.agenticLabel":"Bật agentic orchestration (thử nghiệm)","settings.agenticHint":"Hiển thị gợi ý agent trong Bash. Opt-in.","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.insights":"Insights","telemetry.title":"Actividad del LLM","telemetry.lastNDays":"últimos {n}d","telemetry.loading":"cargando…","telemetry.empty":"No se registró actividad del LLM en esta ventana. Los flujos Smart-Mode escriben filas automáticamente cuando se ejecutan dream / consolidator / failure-analyzer.","telemetry.callsCount":"{n} llamadas","telemetry.attemptsCount":"{n} intentos","telemetry.successRate":"éxito","telemetry.medianLatency":"latencia mediana","telemetry.fallbackUsed":"fallback usado {n}× ({pct} de las llamadas)","telemetry.byProvider":"por proveedor","telemetry.errors":"errores","insights.title":"Lo que memesh hizo por ti","insights.subtitle":"recaps semanales y patterns generados automáticamente, esperando revisión","insights.statPending":"pending","insights.statApplied":"applied","insights.statRejected":"rejected","insights.filter.pending":"Pending","insights.filter.applied":"Applied","insights.filter.rejected":"Rejected","insights.filter.all":"Todos","insights.refresh":"Actualizar","insights.loading":"cargando…","insights.emptyPending":"No hay insights pending. Ejecuta `memesh dream run` para generar weekly recaps.","insights.emptyNoLlm":"Configura un proveedor de LLM en Ajustes para activar weekly recaps y detección de patterns.","insights.emptyOther":"Nada por aquí.","insights.sources":"fuentes","insights.status.pending":"pending","insights.status.applied":"applied","insights.status.rejected":"rejected","insights.viewDetail":"Ver detalle","insights.collapse":"Contraer","insights.accept":"Aceptar","insights.applying":"Aplicando…","insights.reject":"Rechazar","insights.generatedBy":"Generado por","insights.promptVersion":"Versión del prompt","insights.observations":"Observaciones resumidas","insights.tags":"Etiquetas","insights.sourceIds":"Fuentes","insights.validationWarnings":"Afirmaciones marcadas (LLM validator)","insights.validationClaim":"Afirmación","insights.validationReason":"Motivo","insights.runDream":"Ejecutar weekly recap","insights.runDreamWithValidate":"Ejecutar con validator (más lento, mayor calidad)","banner.pendingInsights":"{n} nuevo(s) insight{s} esperando tu revisión →","banner.dismiss":"Descartar","banner.viewAll":"Ver todos","pattern.title":"Pattern","pattern.evidenceCount":"{n} evidencia(s)","pattern.severity":"Severidad","pattern.severity.high":"alta","pattern.severity.medium":"media","pattern.severity.low":"baja","pattern.description":"Descripción del pattern","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.llmOptional.title":"LLM es opcional","settings.llmOptional.body":"memesh funciona sin LLM. El modo Core por defecto cubre búsqueda de texto completo, remember/recall manual, dashboard y captura de sesión mediante hooks.","settings.llmOptional.coreLabel":"Sin LLM (modo Core)","settings.llmOptional.coreFeatures":"búsqueda por palabra clave FTS5 (95,40 % R@5 en LongMemEval-S), remember/recall manual, dashboard, captura de sesión vía hooks","settings.llmOptional.smartLabel":"Con LLM (modo Smart)","settings.llmOptional.smartFeatures":"lesson_learned automático a partir de fallos de sesión, auto-etiquetado de nuevas entidades, resumen semanal + detección de patrones","settings.apiKey":"Clave API","settings.model":"Modelo (opcional)","settings.save":"Guardar","settings.saving":"Guardando…","settings.saved":"Guardado.","settings.removeProvider":"Remove provider","settings.removeProviderHint":"Drops apiKey + model. Falls back to env-var auto-detect or Core Mode (no LLM).","settings.removeProviderConfirm":"Remove the configured LLM provider? This drops the saved API key and model. memesh will fall back to env-var auto-detection (ANTHROPIC_API_KEY > OPENAI_API_KEY > OLLAMA_HOST) or run in Core Mode if no credential is found.","settings.providerRemoved":"Provider removed. memesh now runs in Core Mode or via env-var auto-detect.","settings.test":"Probar","settings.testing":"Probando…","settings.testPassed":"✓ Conexión OK · {count} modelos disponibles","settings.testFailed":"Error en la prueba de conexión","settings.suggested":"sugerido","settings.testRequired":"Pruebe la conexión antes de guardar","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.updateDeprecatedNoTarget":"Obsoleto — aún sin destino de actualización","settings.updateDeprecatedTitle":"⚠️ MeMesh {version} fue marcado como OBSOLETO por los mantenedores.","settings.updatePartialTitle":"⚠️ Verificación de actualización parcial","settings.updatePartialDescription":"{message}. El estado de obsolescencia es desconocido en esta sesión — vuelva a ejecutar la verificación cuando esté en línea.","settings.updatePartialSummary":"Parcial — estado de obsolescencia desconocido","settings.updateDeprecatedTargetUnknown":"Obsoleto — buscando destino de actualización","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.interactHint":"Clic en un nodo para enfocar · arrastra el área vacía para desplazar · rueda para zoom","graph.resetView":"Restablecer vista","graph.resetViewHint":"Restablecer zoom y posición","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","feedback.submitting":"Recopilando diagnóstico…","doctorBanner.warnTitle":"Atención — la configuración de memesh necesita revisión","doctorBanner.failTitle":"La configuración de memesh está incompleta","doctorBanner.dismiss":"Cerrar","doctorBanner.getHelp":"Obtener ayuda","doctorBanner.helpHint":"Abre un issue en GitHub con el diagnóstico ya rellenado","doctorBanner.preambleForIssue":"memesh doctor informó lo siguiente en mi instalación:","doctor.capabilities.summary":"LLM/embedding configuration detected","doctor.capabilities.fix":'Configure via "memesh config set llm.provider <provider>"',"doctor.config.summary":"Config file status","doctor.config.fix":'Fix or remove the config file, then run "memesh config list"',"doctor.dashboard.summary":"Dashboard artifact exists","doctor.dashboard.fix":'Run "npm run build:dashboard" to rebuild the dashboard',"doctor.database.summary":"Database accessibility status","doctor.database.fix":'Check database permissions, path, or run "memesh doctor" for detailed diagnosis',"doctor.hook-activity.summary":"Sin actividad de memesh en las últimas 24 h","doctor.hook-activity.fix":"Abra una sesión de Claude Code que use ≥3 herramientas, o haga un commit, y vuelva a abrir el panel","doctor.hook-scripts.summary":"Hook script files verification","doctor.hook-scripts.fix":"Reinstall MeMesh or restore missing hook files from package","doctor.hook-wiring.summary":"Hooks integration status in Claude Code","doctor.hook-wiring.fix":'Run "memesh install-hooks" to wire hooks into Claude Code settings',"doctor.hooks-config.summary":"Hooks configuration file status","doctor.hooks-config.fix":"Reinstall MeMesh or restore .claude-plugin/hooks.json","doctor.http-probe.summary":"HTTP server availability check","doctor.http-probe.fix":"Check if port is available or database is accessible","doctor.install_id.summary":"Anonymous install ID status","doctor.install_id.fix":'Run "memesh" once to generate install ID',"doctor.install-channel.summary":"Installation method detection","doctor.install-channel.fix":"No action needed","doctor.mcp-config.summary":"MCP server configuration status","doctor.mcp-config.fix":"Restore .mcp.json from package or reinstall MeMesh","doctor.skills-manifest.summary":"Skills directory structure validation","doctor.skills-manifest.fix":"Reinstall MeMesh or restore .claude-plugin/skills directory","doctor.update_status.summary":"Update available: {version}","doctor.update_status.fix":'Run "memesh update" to upgrade',"doctor.update_status.prerelease":"Running pre-release version ({current}), npm latest is {latest}","doctor.vector_index.summary":"Search index needs rebuilding","doctor.vector_index.fix":'Run "memesh reindex" to restore full search',"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","time.justNow":"Ahora","time.hoursAgo":"Hace {count}h","time.today":"Hoy","time.yesterday":"Ayer","time.daysAgo":"Hace {count}d","time.lastWeek":"Semana pasada","time.weeksAgo":"Hace {count}sem","time.lastMonth":"Mes pasado","time.monthsAgo":"Hace {count}mes","memory.access.frequent":"Frecuente · {count} usos","memory.access.recalls":"{count} usos","memory.access.never":"Nunca usado","cluster.knowledge":"Conocimiento","cluster.activity":"Actividad","cluster.session":"Sesiones","cluster.reference":"Referencia","cluster.all":"Todo","browse.filterCategory":"Categoría","browse.filterTime":"Tiempo","browse.filterValue":"Valor","browse.filterProject":"Proyecto","browse.filterSort":"Ordenar","browse.timeToday":"Hoy","browse.timeWeek":"Esta semana","browse.timeMonth":"Este mes","browse.timeOlder":"Más antiguo","browse.valueRecalled":"✓ Usado","browse.valueNever":"Nunca usado","browse.sortMostRecalled":"Más usado","browse.sortRecent":"Reciente","browse.sortCreated":"Creado","browse.emptyFilter":"Sin memorias en esta categoría — prueba otro filtro","lessons.tabFailure":"Lecciones de fallo","lessons.tabPlan":"Registros de plan","lessons.tabFreeform":"Notas","lessons.totalRecalls":"Recuperaciones totales","lessons.stepsLabel":"pasos","lessons.commitsCount":"{count} commits","lessons.unstructured":"(Sin campos estructurados — ver memoria sin procesar)","lessons.searchPlaceholder":"Buscar error / root cause / fix / nombre…","lessons.allProjects":"Todos los proyectos","lessons.showing":"Mostrando {visible} / {total}","lessons.noMatch":'Sin memorias coincidiendo con "{query}"',"lessons.emptyCategory":"Sin memorias en esta categoría","lessons.moreItems":"+{count} más","roadmap.title":"Hoja de Ruta","roadmap.summary":"{count} memorias · {first} → {last}","roadmap.switchToList":"↩ Vista de Lista","roadmap.switchToRoadmap":"🗺️ Vista de Hoja de Ruta","roadmap.emptyProject":"Sin memorias en este proyecto todavía.","loop.label":"Bucle de memoria","loop.subtitleHas":"memorias de conocimiento reusadas en los últimos 7 días","loop.subtitleNone":"Ninguna memoria reutilizada esta semana","loop.approxNote":"Aproximación — seguimiento completo comienza después de la actualización.","loop.sparkLabel":"Últimos 30 días","roadmap.milestones":"Hitos","roadmap.keyLessons":"Lecciones clave","radar.title":"Radar de cobertura","radar.caption":"Memorias de conocimiento activas<br/>(session y commit excluidos)","radar.axis.lessons":"Lecciones","radar.axis.decisions":"Decisiones","radar.axis.patterns":"Patrones","radar.axis.bugs":"Correcciones","radar.axis.processes":"Procesos","radar.axis.architecture":"Arquitectura","ageMatrix.title":"Distribución por edad","ageMatrix.low":"Bajo","ageMatrix.high":"Alto","ageMatrix.legend":"profundidad = densidad","ageMatrix.typeColumn":"Tipo","header.signalModeOn":"Señal","header.signalModeOff":"Todo","header.signalModeOnHint":"Ocultando ruido de session y commit. Clic para mostrar todo.","header.signalModeOffHint":"Mostrando todas las memorias incluido ruido. Clic para ocultar.","roadmap.phases":"Fases","onboarding.title":"Bienvenido a MeMesh","onboarding.body":"Tu almacén de memoria está vacío. Empieza con un tour de 30 entidades curadas o guarda tu primera lección.","onboarding.llmHint":"No se requiere LLM. Todo funciona solo con FTS5 (95,40 % R@5). Un LLM es opcional para la generación automática de lecciones — configúralo más tarde en Configuración.","onboarding.seedButton":"Iniciar el tour demo","onboarding.seedingButton":"Cargando…","onboarding.seedHint":"Añade 30 memorias aquí mismo — sin abrir terminal","onboarding.cliReference":"¿Prefieres la CLI?","onboarding.hintDemo":"Siembra 30 memorias demo que puedes limpiar después","onboarding.hintReset":"Elimina todo lo marcado con metadata.demo","onboarding.resetButton":"Resetear demo","onboarding.resettingButton":"Eliminando…","onboarding.resetConfirm":"¿Eliminar todas las memorias demo? Tus entradas reales se conservarán.","onboarding.dismiss":"Cerrar","ageMatrix.bucket.week":"Esta semana","ageMatrix.bucket.month":"Este mes","ageMatrix.bucket.quarter":"Este trimestre","ageMatrix.bucket.older":"Más antiguo","ageMatrix.type.lesson_learned":"Lección","ageMatrix.type.lesson":"Lección","ageMatrix.type.mistake":"Error","ageMatrix.type.decision":"Decisión","ageMatrix.type.architecture_decision":"Dec. arq.","ageMatrix.type.pattern":"Patrón","ageMatrix.type.technical_pattern":"Patrón téc.","ageMatrix.type.best_practice":"Buena práctica","ageMatrix.type.bug_fix":"Corrección","ageMatrix.type.workflow_checkpoint":"Hito","ageMatrix.type.process":"Proceso","ageMatrix.type.architecture":"Arquitectura","ageMatrix.type.feature":"Característica","settings.behaviourTitle":"Comportamiento","settings.autoUpdateLabel":"Política de auto-actualización","settings.autoUpdateOff":"Apagado — solo manual","settings.autoUpdatePatch":"Patch — aplica X.Y.Z+1","settings.autoUpdateMinor":"Minor — aplica X.Y+1.0","settings.autoUpdateMajor":"Major — aplica cualquier cambio","settings.autoUpdateHint":"Activado tras cada sesión. MEMESH_AUTO_UPDATE tiene prioridad.","settings.agenticLabel":"Activar agentic orchestration (experimental)","settings.agenticHint":"Muestra sugerencias de agente en Bash. Opt-in.","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.insights":"Insights","telemetry.title":"กิจกรรม LLM","telemetry.lastNDays":"{n} วันล่าสุด","telemetry.loading":"กำลังโหลด…","telemetry.empty":"ไม่มีบันทึกกิจกรรม LLM ในช่วงเวลานี้ ฟลาว Smart-Mode จะเขียนข้อมูลโดยอัตโนมัติเมื่อ dream / consolidator / failure-analyzer ทำงาน","telemetry.callsCount":"{n} การเรียก","telemetry.attemptsCount":"{n} ครั้งที่พยายาม","telemetry.successRate":"สำเร็จ","telemetry.medianLatency":"เวลาตอบสนองมัธยฐาน","telemetry.fallbackUsed":"ใช้ fallback {n}× ({pct} ของการเรียก)","telemetry.byProvider":"ตามผู้ให้บริการ","telemetry.errors":"ข้อผิดพลาด","insights.title":"memesh ทำอะไรให้คุณบ้าง","insights.subtitle":"weekly recap และ pattern ที่ระบบสร้างอัตโนมัติ รอให้คุณตรวจสอบ","insights.statPending":"pending","insights.statApplied":"applied","insights.statRejected":"rejected","insights.filter.pending":"Pending","insights.filter.applied":"Applied","insights.filter.rejected":"Rejected","insights.filter.all":"ทั้งหมด","insights.refresh":"รีเฟรช","insights.loading":"กำลังโหลด…","insights.emptyPending":"ไม่มี insight ที่ pending รัน `memesh dream run` เพื่อสร้าง weekly recap","insights.emptyNoLlm":"ตั้งค่าผู้ให้บริการ LLM ในหน้าการตั้งค่าเพื่อเปิดใช้งาน weekly recap และการตรวจจับ pattern","insights.emptyOther":"ไม่มีข้อมูลที่นี่","insights.sources":"แหล่งที่มา","insights.status.pending":"pending","insights.status.applied":"applied","insights.status.rejected":"rejected","insights.viewDetail":"ดูรายละเอียด","insights.collapse":"ย่อ","insights.accept":"ยอมรับ","insights.applying":"กำลังนำไปใช้…","insights.reject":"ปฏิเสธ","insights.generatedBy":"สร้างโดย","insights.promptVersion":"เวอร์ชัน prompt","insights.observations":"สรุปการสังเกต","insights.tags":"แท็ก","insights.sourceIds":"entity ต้นทาง","insights.validationWarnings":"ข้อความที่ถูกตั้งคำถาม (LLM validator)","insights.validationClaim":"ข้อความ","insights.validationReason":"เหตุผล","insights.runDream":"รัน weekly recap","insights.runDreamWithValidate":"รันพร้อม validator (ช้ากว่าแต่คุณภาพสูงกว่า)","banner.pendingInsights":"มี insight ใหม่ {n} รายการรอให้คุณตรวจสอบ →","banner.dismiss":"ปิด","banner.viewAll":"ดูทั้งหมด","pattern.title":"Pattern","pattern.evidenceCount":"หลักฐาน {n} รายการ","pattern.severity":"ระดับความรุนแรง","pattern.severity.high":"สูง","pattern.severity.medium":"กลาง","pattern.severity.low":"ต่ำ","pattern.description":"คำอธิบาย pattern","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.llmOptional.title":"LLM เป็นตัวเลือก","settings.llmOptional.body":"memesh ทำงานได้โดยไม่ต้องใช้ LLM โหมด Core เริ่มต้นครอบคลุมการเรียกคืนข้อความเต็ม remember/recall ด้วยตนเอง แดชบอร์ด และการจับ session ผ่าน hooks","settings.llmOptional.coreLabel":"ไม่มี LLM (โหมด Core)","settings.llmOptional.coreFeatures":"การค้นหาคำสำคัญ FTS5 (95.40% R@5 บน LongMemEval-S), remember/recall ด้วยตนเอง, แดชบอร์ด, การจับ session ผ่าน hooks","settings.llmOptional.smartLabel":"มี LLM (โหมด Smart)","settings.llmOptional.smartFeatures":"lesson_learned อัตโนมัติจากความล้มเหลวของ session, การติดแท็กอัตโนมัติของ entity ใหม่, สรุปประจำสัปดาห์และการตรวจจับรูปแบบ","settings.apiKey":"คีย์ API","settings.model":"โมเดล (ไม่บังคับ)","settings.save":"บันทึก","settings.saving":"กำลังบันทึก…","settings.saved":"บันทึกแล้ว","settings.removeProvider":"Remove provider","settings.removeProviderHint":"Drops apiKey + model. Falls back to env-var auto-detect or Core Mode (no LLM).","settings.removeProviderConfirm":"Remove the configured LLM provider? This drops the saved API key and model. memesh will fall back to env-var auto-detection (ANTHROPIC_API_KEY > OPENAI_API_KEY > OLLAMA_HOST) or run in Core Mode if no credential is found.","settings.providerRemoved":"Provider removed. memesh now runs in Core Mode or via env-var auto-detect.","settings.test":"ทดสอบ","settings.testing":"กำลังทดสอบ…","settings.testPassed":"✓ เชื่อมต่อสำเร็จ · มี {count} โมเดล","settings.testFailed":"การทดสอบการเชื่อมต่อล้มเหลว","settings.suggested":"แนะนำ","settings.testRequired":"โปรดทดสอบการเชื่อมต่อก่อนบันทึก","settings.language":"ภาษา","settings.searchMode":"โหมดการค้นหา","settings.none":"ไม่มี","settings.updates":"การอัปเดต","settings.updateChecking":"กำลังตรวจหาการอัปเดต…","settings.updateUnavailable":"ไม่สามารถตรวจสอบการอัปเดตได้ในขณะนี้","settings.updateNoSuccessfulChecks":"ยังไม่มีการตรวจสอบอัปเดตที่สำเร็จ","settings.upToDate":"เป็นเวอร์ชันล่าสุดแล้ว","settings.updateAvailable":"มีเวอร์ชันอัปเดต","settings.updateStale":"สถานะแคชที่แสดงอาจล้าสมัยแล้ว","settings.updateCachedFallback":"กำลังใช้ผลลัพธ์แคชล่าสุดที่ตรวจสอบสำเร็จ","settings.updateDeprecatedNoTarget":"เลิกใช้แล้ว — ยังไม่มีเวอร์ชันสำหรับอัปเกรด","settings.updateDeprecatedTitle":"⚠️ MeMesh {version} ถูกผู้ดูแลทำเครื่องหมายเป็น DEPRECATED (เลิกใช้แล้ว)","settings.updatePartialTitle":"⚠️ การตรวจสอบอัปเดตไม่สมบูรณ์","settings.updatePartialDescription":"{message}. ไม่สามารถยืนยันสถานะเลิกใช้ในเซสชันนี้ — โปรดเรียกใช้ใหม่เมื่อออนไลน์","settings.updatePartialSummary":"บางส่วน — ไม่ทราบสถานะการเลิกใช้","settings.updateDeprecatedTargetUnknown":"เลิกใช้แล้ว — กำลังหาเวอร์ชันสำหรับอัปเกรด","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.interactHint":"คลิกโหนดเพื่อโฟกัส · ลากพื้นที่ว่างเพื่อเลื่อน · เลื่อนเพื่อซูม","graph.resetView":"รีเซ็ตมุมมอง","graph.resetViewHint":"รีเซ็ตการซูมและตำแหน่ง","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","feedback.submitting":"กำลังรวบรวมการวินิจฉัย…","doctorBanner.warnTitle":"แจ้งเตือน — การตั้งค่า memesh ต้องตรวจสอบ","doctorBanner.failTitle":"การตั้งค่า memesh ยังไม่สมบูรณ์","doctorBanner.dismiss":"ปิด","doctorBanner.getHelp":"ขอความช่วยเหลือ","doctorBanner.helpHint":"เปิด GitHub issue พร้อมข้อมูลการวินิจฉัยที่กรอกไว้แล้ว","doctorBanner.preambleForIssue":"memesh doctor รายงานสิ่งต่อไปนี้บนการติดตั้งของฉัน:","doctor.capabilities.summary":"LLM/embedding configuration detected","doctor.capabilities.fix":'Configure via "memesh config set llm.provider <provider>"',"doctor.config.summary":"Config file status","doctor.config.fix":'Fix or remove the config file, then run "memesh config list"',"doctor.dashboard.summary":"Dashboard artifact exists","doctor.dashboard.fix":'Run "npm run build:dashboard" to rebuild the dashboard',"doctor.database.summary":"Database accessibility status","doctor.database.fix":'Check database permissions, path, or run "memesh doctor" for detailed diagnosis',"doctor.hook-activity.summary":"ไม่พบกิจกรรม memesh ในช่วง 24 ชั่วโมงที่ผ่านมา","doctor.hook-activity.fix":"เปิด Claude Code session ที่ใช้เครื่องมือ ≥3 รายการ หรือทำการ commit แล้วเปิดแดชบอร์ดอีกครั้ง","doctor.hook-scripts.summary":"Hook script files verification","doctor.hook-scripts.fix":"Reinstall MeMesh or restore missing hook files from package","doctor.hook-wiring.summary":"Hooks integration status in Claude Code","doctor.hook-wiring.fix":'Run "memesh install-hooks" to wire hooks into Claude Code settings',"doctor.hooks-config.summary":"Hooks configuration file status","doctor.hooks-config.fix":"Reinstall MeMesh or restore .claude-plugin/hooks.json","doctor.http-probe.summary":"HTTP server availability check","doctor.http-probe.fix":"Check if port is available or database is accessible","doctor.install_id.summary":"Anonymous install ID status","doctor.install_id.fix":'Run "memesh" once to generate install ID',"doctor.install-channel.summary":"Installation method detection","doctor.install-channel.fix":"No action needed","doctor.mcp-config.summary":"MCP server configuration status","doctor.mcp-config.fix":"Restore .mcp.json from package or reinstall MeMesh","doctor.skills-manifest.summary":"Skills directory structure validation","doctor.skills-manifest.fix":"Reinstall MeMesh or restore .claude-plugin/skills directory","doctor.update_status.summary":"Update available: {version}","doctor.update_status.fix":'Run "memesh update" to upgrade',"doctor.update_status.prerelease":"Running pre-release version ({current}), npm latest is {latest}","doctor.vector_index.summary":"Search index needs rebuilding","doctor.vector_index.fix":'Run "memesh reindex" to restore full search',"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":"เกิดข้อผิดพลาดที่ไม่ทราบสาเหตุ","time.justNow":"เมื่อสักครู่","time.hoursAgo":"{count} ชั่วโมงที่แล้ว","time.today":"วันนี้","time.yesterday":"เมื่อวาน","time.daysAgo":"{count} วันที่แล้ว","time.lastWeek":"สัปดาห์ที่แล้ว","time.weeksAgo":"{count} สัปดาห์ที่แล้ว","time.lastMonth":"เดือนที่แล้ว","time.monthsAgo":"{count} เดือนที่แล้ว","memory.access.frequent":"ใช้บ่อย · {count} ครั้ง","memory.access.recalls":"{count} ครั้ง","memory.access.never":"ไม่เคยเรียก","cluster.knowledge":"ความรู้","cluster.activity":"กิจกรรม","cluster.session":"เซสชัน","cluster.reference":"อ้างอิง","cluster.all":"ทั้งหมด","browse.filterCategory":"หมวดหมู่","browse.filterTime":"เวลา","browse.filterValue":"มูลค่า","browse.filterProject":"โปรเจกต์","browse.filterSort":"จัดเรียง","browse.timeToday":"วันนี้","browse.timeWeek":"สัปดาห์นี้","browse.timeMonth":"เดือนนี้","browse.timeOlder":"เก่ากว่า","browse.valueRecalled":"✓ ใช้แล้ว","browse.valueNever":"ไม่เคยเรียก","browse.sortMostRecalled":"ใช้มากที่สุด","browse.sortRecent":"ล่าสุด","browse.sortCreated":"สร้างเมื่อ","browse.emptyFilter":"ไม่มีหน่วยความจำในหมวดนี้ — ลองตัวกรองอื่น","lessons.tabFailure":"บทเรียนความล้มเหลว","lessons.tabPlan":"บันทึกแผน","lessons.tabFreeform":"โน้ต","lessons.totalRecalls":"จำนวนเรียกทั้งหมด","lessons.stepsLabel":"ขั้น","lessons.commitsCount":"{count} commits","lessons.unstructured":"(ไม่มีฟิลด์ที่มีโครงสร้าง — ดูหน่วยความจำดิบ)","lessons.searchPlaceholder":"ค้นหา error / root cause / fix / ชื่อ…","lessons.allProjects":"ทุกโปรเจกต์","lessons.showing":"แสดง {visible} / {total}","lessons.noMatch":'ไม่มีหน่วยความจำตรงกับ "{query}"',"lessons.emptyCategory":"ไม่มีหน่วยความจำในหมวดนี้","lessons.moreItems":"+{count} เพิ่มเติม","roadmap.title":"แผนที่โครงการ","roadmap.summary":"{count} ความทรงจำ · {first} → {last}","roadmap.switchToList":"↩ มุมมองรายการ","roadmap.switchToRoadmap":"🗺️ มุมมองแผนที่","roadmap.emptyProject":"ยังไม่มีความทรงจำในโครงการนี้","loop.label":"ลูปความทรงจำ","loop.subtitleHas":"ความทรงจำเชิงความรู้ที่ถูกเรียกในช่วง 7 วันที่ผ่านมา","loop.subtitleNone":"สัปดาห์นี้ยังไม่มีความทรงจำที่ถูกเรียก","loop.approxNote":"ค่าประมาณ — การติดตามเต็มรูปแบบเริ่มหลังการอัพเกรด","loop.sparkLabel":"30 วันล่าสุด","roadmap.milestones":"เหตุการณ์สำคัญ","roadmap.keyLessons":"บทเรียนสำคัญ","radar.title":"เรดาร์ความครอบคลุม","radar.caption":"ความทรงจำที่ใช้งาน<br/>(ไม่รวม session และ commit)","radar.axis.lessons":"บทเรียน","radar.axis.decisions":"การตัดสินใจ","radar.axis.patterns":"แพทเทิร์น","radar.axis.bugs":"แก้ไขบั๊ก","radar.axis.processes":"กระบวนการ","radar.axis.architecture":"สถาปัตยกรรม","ageMatrix.title":"การกระจายอายุ","ageMatrix.low":"ต่ำ","ageMatrix.high":"สูง","ageMatrix.legend":"ความเข้ม = ความหนาแน่น","ageMatrix.typeColumn":"ประเภท","header.signalModeOn":"สัญญาณ","header.signalModeOff":"ทั้งหมด","header.signalModeOnHint":"ซ่อนสัญญาณรบกวน session และ commit คลิกเพื่อแสดงทั้งหมด","header.signalModeOffHint":"แสดงความทรงจำทั้งหมดรวมถึงสัญญาณรบกวน คลิกเพื่อซ่อน","roadmap.phases":"ระยะ","onboarding.title":"ยินดีต้อนรับสู่ MeMesh","onboarding.body":"ที่เก็บความทรงจำว่างเปล่า เริ่มด้วยทัวร์ 30 รายการที่คัดสรรแล้วหรือบันทึกบทเรียนแรก","onboarding.llmHint":"ไม่ต้องใช้ LLM ทุกอย่างทำงานด้วย FTS5 อย่างเดียว (95.40% R@5) LLM เป็นตัวเลือกสำหรับสร้างบทเรียนอัตโนมัติ ตั้งค่าภายหลังในหน้าตั้งค่าได้","onboarding.seedButton":"เริ่มทัวร์ตัวอย่าง","onboarding.seedingButton":"กำลังโหลด…","onboarding.seedHint":"เพิ่ม 30 ความทรงจำที่นี่เลย — ไม่ต้องเปิดเทอร์มินัล","onboarding.cliReference":"ชอบใช้ CLI ใช่ไหม?","onboarding.hintDemo":"ใส่ 30 ความทรงจำตัวอย่าง ลบทีหลังได้","onboarding.hintReset":"ลบทุกอย่างที่ติด metadata.demo","onboarding.resetButton":"ล้างข้อมูลตัวอย่าง","onboarding.resettingButton":"กำลังลบ…","onboarding.resetConfirm":"ลบความทรงจำตัวอย่างทั้งหมดหรือไม่? รายการที่คุณบันทึกเองจะยังอยู่","onboarding.dismiss":"ปิด","ageMatrix.bucket.week":"สัปดาห์นี้","ageMatrix.bucket.month":"เดือนนี้","ageMatrix.bucket.quarter":"ไตรมาสนี้","ageMatrix.bucket.older":"เก่ากว่า","ageMatrix.type.lesson_learned":"บทเรียน","ageMatrix.type.lesson":"บทเรียน","ageMatrix.type.mistake":"ความผิดพลาด","ageMatrix.type.decision":"การตัดสินใจ","ageMatrix.type.architecture_decision":"ตัดสินใจสถาปัตย์","ageMatrix.type.pattern":"แพทเทิร์น","ageMatrix.type.technical_pattern":"แพทเทิร์นเทคนิค","ageMatrix.type.best_practice":"แนวปฏิบัติที่ดี","ageMatrix.type.bug_fix":"แก้บั๊ก","ageMatrix.type.workflow_checkpoint":"เหตุการณ์สำคัญ","ageMatrix.type.process":"กระบวนการ","ageMatrix.type.architecture":"สถาปัตยกรรม","ageMatrix.type.feature":"ฟีเจอร์","settings.behaviourTitle":"การทำงาน","settings.autoUpdateLabel":"นโยบายอัพเดตอัตโนมัติ","settings.autoUpdateOff":"ปิด — ด้วยตนเองเท่านั้น","settings.autoUpdatePatch":"Patch — ใช้ X.Y.Z+1","settings.autoUpdateMinor":"Minor — ใช้ X.Y+1.0","settings.autoUpdateMajor":"Major — ใช้ทุกระดับ","settings.autoUpdateHint":"ทำงานหลังแต่ละเซสชัน MEMESH_AUTO_UPDATE มีลำดับความสำคัญ","settings.agenticLabel":"เปิดใช้ agentic orchestration (ทดลอง)","settings.agenticHint":"แสดงคำแนะนำ agent ใน Bash. Opt-in.","errors.timeout":"คำขอหมดเวลา"}},hn={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 ht="en";function mn(){const t=localStorage.getItem("memesh-locale");if(t&>[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 n=s.split("-")[0];return gt[n]?n:"en"}function pn(){return ht=mn(),ht}function fn(t){ht=t,localStorage.setItem("memesh-locale",t)}function a(t,s){const n=gt[ht]?.[t]||gt.en[t]||t;return s?n.replace(/\{(\w+)\}/g,(o,i)=>{const r=s[i];return r===void 0?`{${i}}`:String(r)}):n}function bn(){return Object.entries(hn).map(([t,s])=>({code:t,name:s}))}const It="memesh.signalMode",yt="memesh:signal-mode-changed",yn=!0;function vt(){try{const t=localStorage.getItem(It);if(t==="true")return!0;if(t==="false")return!1}catch{}return yn}function vn(t){try{localStorage.setItem(It,String(t))}catch{}}function Ht(){const[t,s]=x(vt);J(()=>{function o(r){const g=r.detail;g&&typeof g.value=="boolean"?s(g.value):s(vt())}function i(r){r.key===It&&s(vt())}return window.addEventListener(yt,o),window.addEventListener("storage",i),()=>{window.removeEventListener(yt,o),window.removeEventListener("storage",i)}},[]);function n(o){vn(o),s(o),window.dispatchEvent(new CustomEvent(yt,{detail:{value:o}}))}return[t,n]}function kn({health:t,error:s}){const[n,o]=Ht();return e("div",{class:"header",children:[e("div",{class:"header-brand",children:[e("h1",{children:"MeMesh LLM Memory"}),e("small",{children:a("brand.subtitle")})]}),e("div",{class:"header-right",children:e("div",{class:"header-meta",children:[e("button",{type:"button",class:"signal-toggle",onClick:()=>o(!n),"aria-pressed":n,title:a(n?"header.signalModeOnHint":"header.signalModeOffHint"),style:{fontSize:11,padding:"4px 10px",borderRadius:12,border:`1px solid ${n?"rgba(0, 214, 180, 0.4)":"rgba(255, 255, 255, 0.08)"}`,background:n?"rgba(0, 214, 180, 0.12)":"transparent",color:n?"var(--accent)":"var(--text-2)",cursor:"pointer",fontFamily:"inherit"},children:[e("span",{style:{marginRight:4},children:n?"●":"○"}),a(n?"header.signalModeOn":"header.signalModeOff")]}),t?e(ae,{children:[e("span",{children:[e("span",{class:"dot dot-ok"}),a("header.connected")]}),e("span",{class:"badge-version",children:["v",t.version," · ",t.entity_count.toLocaleString()," ",a("header.memories")]})]}):s?e("span",{children:[e("span",{class:"dot dot-err"}),a("header.disconnected")]}):e("span",{style:{color:"var(--text-3)"},children:a("header.connecting")})]})})]})}function xn({tabs:t,active:s,onSelect:n}){return e("nav",{class:"nav",children:t.map(({key:o,label:i})=>e("button",{class:`nav-btn ${o===s?"active":""}`,onClick:()=>n(o),children:i},o))})}const wn=1e4,Tt="memesh_token";function Ds(){try{return localStorage.getItem(Tt)}catch{return null}}function Mn(t){try{t?localStorage.setItem(Tt,t):localStorage.removeItem(Tt)}catch{}}class Is extends Error{constructor(){super("auth_required"),this.name="AuthRequiredError"}}async function q(t,s,n){const o=new AbortController,i=setTimeout(()=>o.abort(),wn);try{const r={"Content-Type":"application/json"},g=Ds();g&&(r.Authorization=`Bearer ${g}`);const d={method:t,headers:r,signal:o.signal};n&&(d.body=JSON.stringify(n));const l=await fetch(s,d);if(l.status===401)throw new Is;if(!l.ok)throw new Error(`HTTP ${l.status}`);const u=await l.json();if(!u.success)throw new Error(u.error||a("errors.unknown"));return u.data}catch(r){throw r.name==="AbortError"?new Error(a("errors.timeout")):r}finally{clearTimeout(i)}}async function Hs(){const t=await q("GET","/v1/projects");return Array.isArray(t)?t:[]}async function _n(){return q("GET","/v1/graph")}async function Sn(){const t=await q("GET","/v1/entities?type=lesson_learned&limit=100");return Array.isArray(t)?t:[]}const Cn={lesson_learned:"knowledge",lesson:"knowledge",mistake:"knowledge",decision:"knowledge",architecture_decision:"knowledge",design_decision:"knowledge",pattern:"knowledge",technical_pattern:"knowledge",best_practice:"knowledge",bug_fix:"knowledge",verification_result:"knowledge",test_result:"knowledge",process:"knowledge",architecture:"knowledge",infrastructure:"knowledge",feature:"knowledge",release:"knowledge",refactoring:"knowledge",commit:"activity",session_keypoint:"session",session_identity:"session","session-insight":"session","session-summary":"session","session-identity":"session",weekly_summary:"activity","weekly-summary":"activity",note:"reference",plan:"reference",knowledge:"reference",workflow_checkpoint:"reference"};function ts(t){return Cn[t]??"reference"}function Ee(t,s=new Date){if(!t)return"—";const n=new Date(t);if(Number.isNaN(n.getTime()))return"—";const o=s.getTime()-n.getTime(),i=Math.floor(o/864e5);if(i<0)return n.toLocaleDateString(void 0,{month:"short",day:"numeric"});if(i===0){const r=Math.floor(o/36e5);return r<1?a("time.justNow"):r<24?a("time.hoursAgo",{count:r}):a("time.today")}return i===1?a("time.yesterday"):i<7?a("time.daysAgo",{count:i}):i<14?a("time.lastWeek"):i<30?a("time.weeksAgo",{count:Math.floor(i/7)}):i<60?a("time.lastMonth"):i<365?a("time.monthsAgo",{count:Math.floor(i/30)}):n.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})}function Bs(t,s=new Date){if(!t)return"older";const n=s.getTime()-new Date(t).getTime(),o=Math.floor(n/864e5);return o<1?"today":o<7?"week":o<30?"month":"older"}const ss="project:";function Ue(t){const s=t.tags?.find(n=>n.startsWith(ss));return s?s.slice(ss.length):null}function Ln(t){if(!t||t.length===0)return"";const s=t.filter(o=>o.length>30&&!/^(Steps|Commits|Plan ".+" completed)/.test(o.trim())),n=s.length>0?s:t;return n.slice(0,3).reduce((o,i)=>i.length>o.length?i:o,n[0])}function Ye(t){const s=t??0;return s===0?{count:s,label:a("memory.access.never"),tone:"none"}:s>=20?{count:s,label:a("memory.access.frequent",{count:s}),tone:"high"}:s>=5?{count:s,label:a("memory.access.recalls",{count:s}),tone:"medium"}:{count:s,label:a("memory.access.recalls",{count:s}),tone:"low"}}function Tn(t){if((t.tags??[]).some(r=>r==="plan-completion"||r.startsWith("plan:")))return"plan-completion";const o=(t.observations??[]).join(" ");return/(^|\s)Error:/.test(o)&&(/(^|\s)Fix:/.test(o)||/(^|\s)Root cause:/.test(o))?"failure":"freeform"}const se=1.5;function An(t){switch(t){case"lesson_learned":case"lesson":case"mistake":return"lesson";case"decision":case"architecture_decision":case"design_decision":return"decision";case"pattern":case"technical_pattern":case"best_practice":return"pattern";case"bug_fix":case"verification_result":case"test_result":return"bug";case"architecture":case"infrastructure":return"architecture";case"feature":case"release":case"refactoring":return"feature";case"commit":return"commit";case"session_keypoint":case"session_identity":case"session-insight":case"session-summary":case"session-identity":return"session";case"workflow_checkpoint":return"milestone";case"weekly-summary":case"weekly_summary":return"calendar";case"note":case"plan":case"knowledge":case"process":return"note";default:return"dot"}}const Pn={lesson:e(ae,{children:[e("path",{d:"M6 9.5 a4 4 0 1 1 4 0 v1 a1 1 0 0 1 -1 1 h-2 a1 1 0 0 1 -1 -1 z",fill:"none",stroke:"currentColor",strokeWidth:se,strokeLinejoin:"round"}),e("path",{d:"M7 13 h2",stroke:"currentColor",strokeWidth:se,strokeLinecap:"round"}),e("path",{d:"M7 14.5 h2",stroke:"currentColor",strokeWidth:se,strokeLinecap:"round"})]}),decision:e(ae,{children:[e("circle",{cx:"8",cy:"8",r:"5.5",fill:"none",stroke:"currentColor",strokeWidth:se}),e("circle",{cx:"8",cy:"8",r:"2",fill:"none",stroke:"currentColor",strokeWidth:se}),e("path",{d:"M8 0.5 v3 M8 12.5 v3 M0.5 8 h3 M12.5 8 h3",stroke:"currentColor",strokeWidth:se,strokeLinecap:"round"})]}),pattern:e("path",{d:"M3 3 h4 v1.5 a1.5 1.5 0 0 0 3 0 V3 h3 v3 h-1.5 a1.5 1.5 0 0 0 0 3 H13 v4 h-4 v-1.5 a1.5 1.5 0 0 0 -3 0 V13 H3 v-4 h1.5 a1.5 1.5 0 0 0 0 -3 H3 z",fill:"none",stroke:"currentColor",strokeWidth:se,strokeLinejoin:"round"}),bug:e(ae,{children:[e("ellipse",{cx:"8",cy:"9",rx:"3.5",ry:"4",fill:"none",stroke:"currentColor",strokeWidth:se}),e("path",{d:"M8 5 v-1 M5.5 6.5 L4 5 M10.5 6.5 L12 5 M4.5 9 H2.5 M11.5 9 H13.5 M5 11.5 L3.5 13 M11 11.5 L12.5 13",stroke:"currentColor",strokeWidth:se,strokeLinecap:"round"})]}),architecture:e(ae,{children:[e("rect",{x:"2",y:"9",width:"5",height:"5",rx:"0.5",fill:"none",stroke:"currentColor",strokeWidth:se}),e("rect",{x:"9",y:"9",width:"5",height:"5",rx:"0.5",fill:"none",stroke:"currentColor",strokeWidth:se}),e("rect",{x:"5.5",y:"2",width:"5",height:"5",rx:"0.5",fill:"none",stroke:"currentColor",strokeWidth:se})]}),feature:e(ae,{children:e("path",{d:"M8 2 L9.5 6.5 L14 8 L9.5 9.5 L8 14 L6.5 9.5 L2 8 L6.5 6.5 z",fill:"none",stroke:"currentColor",strokeWidth:se,strokeLinejoin:"round"})}),commit:e(ae,{children:e("path",{d:"M5 2 L4 14 M11 2 L10 14 M2.5 6 H13.5 M2.5 10 H13.5",stroke:"currentColor",strokeWidth:se,strokeLinecap:"round"})}),session:e(ae,{children:[e("circle",{cx:"8",cy:"9",r:"5",fill:"none",stroke:"currentColor",strokeWidth:se}),e("path",{d:"M8 9 V5.5 M8 9 L10.5 11",stroke:"currentColor",strokeWidth:se,strokeLinecap:"round"}),e("path",{d:"M6.5 2 H9.5",stroke:"currentColor",strokeWidth:se,strokeLinecap:"round"})]}),milestone:e(ae,{children:[e("path",{d:"M4 2 V14",stroke:"currentColor",strokeWidth:se,strokeLinecap:"round"}),e("path",{d:"M4 3 H12 L10 6 L12 9 H4 z",fill:"none",stroke:"currentColor",strokeWidth:se,strokeLinejoin:"round"})]}),calendar:e(ae,{children:[e("rect",{x:"2",y:"3",width:"12",height:"11",rx:"1",fill:"none",stroke:"currentColor",strokeWidth:se}),e("path",{d:"M2 6.5 H14 M5 1.5 V4.5 M11 1.5 V4.5",stroke:"currentColor",strokeWidth:se,strokeLinecap:"round"})]}),note:e(ae,{children:[e("path",{d:"M4 2 H10 L13 5 V14 H4 z",fill:"none",stroke:"currentColor",strokeWidth:se,strokeLinejoin:"round"}),e("path",{d:"M10 2 V5 H13",fill:"none",stroke:"currentColor",strokeWidth:se,strokeLinejoin:"round"}),e("path",{d:"M6 8.5 H11 M6 11 H11",stroke:"currentColor",strokeWidth:se,strokeLinecap:"round"})]}),dot:e("circle",{cx:"8",cy:"8",r:"2",fill:"currentColor"})},Rn={lesson:"Lesson",decision:"Decision",pattern:"Pattern",bug:"Bug fix",architecture:"Architecture",feature:"Feature",commit:"Commit",session:"Session",milestone:"Milestone",calendar:"Weekly summary",note:"Note",dot:"Memory"};function Ke({type:t,size:s=16,color:n,ariaLabel:o}){const i=An(t),r=o??Rn[i];return e("svg",{width:s,height:s,viewBox:"0 0 16 16",role:"img","aria-label":r,style:{color:n??"currentColor",flexShrink:0,display:"inline-block",verticalAlign:"text-bottom"},children:[e("title",{children:r}),Pn[i]]})}function ns(t,s){return t.length>s?t.slice(0,s)+"…":t}function En(t){if(!t)return"";const s=new Date(t);if(Number.isNaN(s.getTime()))return t.slice(0,16).replace("T"," ");const n=o=>String(o).padStart(2,"0");return`${s.getFullYear()}-${n(s.getMonth()+1)}-${n(s.getDate())} ${n(s.getHours())}:${n(s.getMinutes())}`}const Fn={high:{bg:"rgba(0, 214, 180, 0.18)",fg:"#00D6B4"},medium:{bg:"rgba(0, 214, 180, 0.10)",fg:"#00D6B4"},low:{bg:"rgba(255, 255, 255, 0.04)",fg:"var(--text-2)"},none:{bg:"rgba(255, 255, 255, 0.03)",fg:"var(--text-3)"}};function je({entity:t,actions:s,highlight:n}){const o=Ln(t.observations)||a("memory.noContent"),i=t.observations?.length??0,r=t.archived||t.status==="archived",g=Ue(t),d=Ye(t.access_count),l=Fn[d.tone],u=Ee(t.last_accessed_at||t.created_at),f=(t.relations?.length??0)>0;return e("div",{class:"mem-row",style:r?{opacity:.45}:void 0,children:[e("div",{class:"mem-time",style:{textAlign:"center"},children:[e("div",{style:{height:20,display:"flex",alignItems:"center",justifyContent:"center",color:"var(--text-2)"},children:e(Ke,{type:t.type,size:18})}),e("div",{style:{fontSize:10,color:"var(--text-3)",marginTop:2},children:u})]}),e("div",{class:"mem-body",children:[e("div",{class:"mem-preview",children:n?e(Dn,{text:ns(o,160),term:n}):ns(o,160)}),e("div",{class:"mem-meta",style:{flexWrap:"wrap",gap:6},children:[e("span",{class:"badge badge-type",children:t.type}),r&&e("span",{class:"badge badge-archived",children:a("memory.archivedBadge")}),g&&e("span",{class:"tag",style:{background:"rgba(0, 214, 180, 0.12)",color:"var(--accent)",display:"inline-flex",alignItems:"center",gap:4},title:"project",children:[e("svg",{width:"11",height:"11",viewBox:"0 0 16 16","aria-hidden":"true",style:{flexShrink:0},children:e("path",{d:"M2 4 a1 1 0 0 1 1 -1 h4 l2 2 h5 a1 1 0 0 1 1 1 v6 a1 1 0 0 1 -1 1 H3 a1 1 0 0 1 -1 -1 z",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinejoin:"round"})}),g]}),d.tone!=="none"&&e("span",{class:"tag",style:{background:l.bg,color:l.fg,fontWeight:d.tone==="high"?600:400},title:`Recalled ${d.count} times`,children:["✓ ",d.label]}),f&&e("span",{class:"tag",style:{opacity:.7},title:"has relations",children:["→ ",t.relations.length]}),e("span",{style:{color:"var(--text-3)",fontSize:11},children:t.name}),e("span",{style:{color:"var(--text-3)",fontSize:10,fontFamily:"var(--mono)",opacity:.85},title:`created ${t.created_at}`,children:["· ",En(t.created_at)]}),i>1&&e("span",{style:{color:"var(--text-3)",fontSize:11},children:["· ",a("memory.factsCount",{count:i})]}),t.tags?.filter(c=>!c.startsWith("project:")&&!/^\d{4}-\d{2}-\d{2}/.test(c)).slice(0,3).map(c=>e("span",{class:"tag",children:c},c))]})]}),s&&e("div",{class:"mem-actions",children:s})]})}function Dn({text:t,term:s}){if(!s)return e(ae,{children:t});const n=[],o=t.toLowerCase(),i=s.toLowerCase();let r=0;for(;r<t.length;){const g=o.indexOf(i,r);if(g===-1){n.push(t.slice(r));break}g>r&&n.push(t.slice(r,g)),n.push(e("mark",{children:t.slice(g,g+i.length)})),r=g+i.length}return e(ae,{children:n})}function In(){const[t,s]=x(""),[n,o]=x(null),[i,r]=x(!1),[g,d]=x("");async function l(){if(t.trim()){r(!0),d("");try{const u=await q("POST","/v1/recall",{query:t.trim(),limit:30}),f=Array.isArray(u)?u:u.entities||[];o(f)}catch(u){d(u.message)}finally{r(!1)}}}return e("div",{children:e("div",{class:"card",children:[e("div",{class:"card-title",children:a("search.title")}),e("div",{class:"search-bar",children:[e("input",{type:"search",placeholder:a("search.placeholder"),value:t,onInput:u=>s(u.target.value),onKeyDown:u=>u.key==="Enter"&&l()}),e("button",{class:"btn btn-primary",onClick:l,disabled:i,children:a(i?"search.searching":"search.button")})]}),!i&&n===null&&!g&&e("div",{class:"empty",style:{padding:"32px 20px",color:"var(--text-3)"},children:e("div",{style:{fontSize:13,lineHeight:1.6},children:a("search.hint")})}),g&&e("div",{class:"error-box",children:g}),i&&e("div",{class:"empty",children:e("div",{class:"loading"})}),!i&&n!==null&&n.length===0&&e("div",{class:"empty",children:[e("span",{class:"empty-icon",children:"🔍"}),a("search.noResults"),' "',t,'"']}),!i&&n&&n.length>0&&e("div",{children:[e("div",{style:{fontSize:12,color:"var(--text-3)",marginBottom:12},children:[n.length," ",n.length!==1?a("search.results"):a("search.result")]}),n.map(u=>e("div",{class:"card",style:{padding:14},children:e(je,{entity:u,highlight:t})},u.id))]})]})})}const Hn=new Set(["release","feature"]),Bn=new Set(["lesson_learned","lesson","mistake","bug_fix"]),zn={release:0,architecture:1,architecture_decision:1,infrastructure:1,plan:2,feature:3,decision:4,design_decision:4,bug_fix:5,refactoring:6,"weekly-summary":7,weekly_summary:7,lesson_learned:8,lesson:8,mistake:8,principle:9,best_practice:10,technical_pattern:10,pattern:10};function jn(t){if(t.length<3)return[];const o=[...t].sort((d,l)=>d.created_at.localeCompare(l.created_at)),i=[];let r=[o[0]];for(let d=1;d<o.length;d++){const l=o[d-1].created_at,u=o[d].created_at;(new Date(u).getTime()-new Date(l).getTime())/864e5<=7?r.push(o[d]):(i.push(r),r=[o[d]])}i.push(r);const g=[];for(const d of i){if(d.length<3)continue;const l=d.map(u=>({e:u,p:zn[u.type]??99})).sort((u,f)=>u.p-f.p)[0];l.p!==99&&g.push({startIso:d[0].created_at,endIso:d[d.length-1].created_at,entityCount:d.length,label:l.e.name,anchorId:l.e.id})}return g}const Nn={release:0,architecture:1,architecture_decision:1,infrastructure:2,plan:3,feature:4,decision:5,design_decision:5,pattern:6,technical_pattern:6,best_practice:7,lesson_learned:8,lesson:8,mistake:8,bug_fix:9,refactoring:10,process:11,workflow_checkpoint:11,note:12,knowledge:13,verification_result:14,test_result:14,"weekly-summary":15,weekly_summary:15,commit:90,session_keypoint:91,session_identity:92,"session-identity":92,"session-insight":93,"session-summary":94};function We(t){return Nn[t]??50}function On(t,s=new Date){const n=new Map;for(const i of t){const r=i.last_accessed_at||i.created_at,g=Bs(r,s);let d,l,u;if(g==="today")d="today",l=a("time.today"),u=Number.MAX_SAFE_INTEGER;else if(g==="week"){const c=r.slice(0,10);d=`week:${c}`,l=Ee(r,s),u=new Date(c).getTime()}else if(g==="month"){const c=r.slice(0,10),p=new Date(c),h=new Date(p);h.setDate(p.getDate()-p.getDay());const m=h.toISOString().slice(0,10);d=`month:${m}`,l=Ee(m,s),u=h.getTime()}else{const c=r.slice(0,7);d=`older:${c}`;const p=new Date(c+"-01");l=p.toLocaleDateString(void 0,{year:"numeric",month:"long"}),u=p.getTime()}let f=n.get(d);f||(f={key:d,label:l,sort:u,entries:[]},n.set(d,f)),f.entries.push(i)}const o=Array.from(n.values()).sort((i,r)=>r.sort-i.sort);for(const i of o)i.entries.sort((r,g)=>{const d=We(r.type)-We(g.type);return d!==0?d:g.created_at.localeCompare(r.created_at)});return o}function Wn({projectName:t,entities:s,onSwitchToList:n}){const[o,i]=x("tree"),r=Ce(()=>{if(s.length===0)return{total:0,first:null,last:null,types:[]};const h=[...s].sort((y,v)=>y.created_at.localeCompare(v.created_at)),m=new Map;for(const y of s)m.set(y.type,(m.get(y.type)??0)+1);return{total:s.length,first:h[0].created_at,last:h[h.length-1].created_at,types:Array.from(m.entries()).sort((y,v)=>v[1]-y[1])}},[s]),g=Ce(()=>On(s),[s]),d=Ce(()=>s.filter(h=>Hn.has(h.type)).sort((h,m)=>m.created_at.localeCompare(h.created_at)).slice(0,6),[s]),l=Ce(()=>s.filter(h=>Bn.has(h.type)).sort((h,m)=>(m.access_count??0)-(h.access_count??0)).slice(0,5),[s]),u=Ce(()=>jn(s),[s]),f=ie(new Map),c=h=>m=>{m?f.current.set(h,m):f.current.delete(h)},p=h=>{const m=f.current.get(h);m&&(m.scrollIntoView({behavior:"smooth",block:"center"}),m.style.transition="background 0.2s",m.style.background="rgba(0, 214, 180, 0.08)",window.setTimeout(()=>{m.style.background=""},1400))};return s.length===0?e("div",{class:"empty",children:[e("span",{class:"empty-icon",style:{display:"inline-flex",alignItems:"center",justifyContent:"center",color:"var(--text-3)"},children:e("svg",{width:"32",height:"32",viewBox:"0 0 16 16","aria-hidden":"true",children:[e("path",{d:"M2 4 L6 2 L10 4 L14 2 V12 L10 14 L6 12 L2 14 z",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinejoin:"round"}),e("path",{d:"M6 2 V12 M10 4 V14",stroke:"currentColor",strokeWidth:"1.5"})]})}),a("roadmap.emptyProject")]}):e("div",{children:[e("div",{style:{padding:"14px 16px",background:"rgba(0, 214, 180, 0.04)",border:"1px solid rgba(0, 214, 180, 0.12)",borderRadius:6,marginBottom:14},children:[e("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",flexWrap:"wrap",gap:8},children:[e("div",{style:{flex:1,minWidth:0},children:[e("div",{style:{fontSize:18,fontWeight:600,color:"var(--text-0)",display:"inline-flex",alignItems:"center",gap:8},children:[e("svg",{width:"18",height:"18",viewBox:"0 0 16 16","aria-hidden":"true",style:{color:"var(--accent)"},children:e("path",{d:"M2 4 a1 1 0 0 1 1 -1 h4 l2 2 h5 a1 1 0 0 1 1 1 v6 a1 1 0 0 1 -1 1 H3 a1 1 0 0 1 -1 -1 z",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinejoin:"round"})}),e("span",{children:t}),e("span",{style:{color:"var(--text-3)",fontWeight:400,fontSize:13},children:["· ",a("roadmap.title")]})]}),e("div",{style:{fontSize:12,color:"var(--text-2)",marginTop:4},children:a("roadmap.summary",{count:r.total,first:r.first?r.first.slice(0,10):"—",last:r.last?r.last.slice(0,10):"—"})})]}),e("div",{style:{display:"flex",gap:8,alignItems:"center",flexShrink:0},children:[e("div",{role:"tablist","aria-label":"Roadmap view",style:{display:"inline-flex",background:"rgba(255,255,255,0.04)",borderRadius:4,padding:2,border:"1px solid var(--border-subtle)"},children:["tree","mindmap"].map(h=>{const m=o===h;return e("button",{role:"tab","aria-selected":m,onClick:()=>i(h),style:{padding:"4px 10px",background:m?"rgba(0,214,180,0.15)":"transparent",color:m?"var(--accent)":"var(--text-2)",border:"none",borderRadius:3,fontSize:11,fontFamily:"inherit",cursor:"pointer",fontWeight:m?600:400},children:h==="tree"?"🌲 Tree":"🧠 Mindmap"},h)})}),n&&e("button",{class:"btn btn-sm",onClick:n,children:a("roadmap.switchToList")})]})]}),r.types.length>0&&e("div",{style:{display:"flex",flexWrap:"wrap",gap:6,marginTop:10},children:[r.types.slice(0,8).map(([h,m])=>e("span",{class:"tag",style:{fontSize:11,background:"rgba(255,255,255,0.04)"},children:[h," ",e("span",{style:{opacity:.6,fontFamily:"var(--mono)"},children:m})]},h)),r.types.length>8&&e("span",{class:"tag",style:{opacity:.5,fontSize:11},children:["+",r.types.length-8]})]})]}),u.length>0&&e("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:14,padding:"12px 14px",border:"1px solid rgba(255, 255, 255, 0.04)",borderRadius:6,background:"rgba(255, 255, 255, 0.02)",overflowX:"auto"},children:[e("span",{style:{fontSize:10,textTransform:"uppercase",letterSpacing:"0.08em",color:"var(--text-3)",fontWeight:600,flexShrink:0},children:a("roadmap.phases")}),u.map((h,m)=>e("button",{onClick:()=>h.anchorId!==void 0&&p(h.anchorId),disabled:h.anchorId===void 0,style:{flexShrink:0,display:"flex",flexDirection:"column",alignItems:"flex-start",gap:2,padding:"6px 10px",background:m===u.length-1?"rgba(0, 214, 180, 0.08)":"transparent",border:"1px solid",borderColor:m===u.length-1?"rgba(0, 214, 180, 0.3)":"var(--border-subtle)",borderRadius:4,color:"var(--text-1)",cursor:h.anchorId!==void 0?"pointer":"default",fontFamily:"inherit",textAlign:"left",minWidth:100},title:`${h.startIso.slice(0,10)} → ${h.endIso.slice(0,10)}`,children:[e("span",{style:{fontSize:11,fontWeight:600,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:240},children:h.label}),e("span",{style:{fontSize:10,color:"var(--text-3)",fontFamily:"var(--mono)"},children:[h.entityCount," · ",Ee(h.startIso)]})]},`${h.startIso}-${h.label}`))]}),o==="mindmap"&&u.length>0&&e(Un,{projectName:t,phases:u,entities:s,onNodeClick:h=>{i("tree"),window.requestAnimationFrame(()=>p(h))}}),o==="mindmap"&&u.length===0&&e("div",{class:"empty",style:{padding:24},children:[a("roadmap.emptyProject")," — mindmap requires ≥3 entities within a 7-day window."]}),o==="tree"&&e("div",{style:{display:"grid",gridTemplateColumns:"minmax(0, 1fr) 280px",gap:16,alignItems:"start"},children:[e("div",{style:{position:"relative",minWidth:0},children:u.length>0?e("div",{style:{position:"relative",paddingLeft:28},children:[e("div",{"aria-hidden":"true",style:{position:"absolute",left:8,top:4,bottom:4,width:2,background:"var(--border-subtle)"}}),(()=>{const h=u.map(()=>[]),m=[];for(const v of s){const w=u.findIndex(b=>v.created_at>=b.startIso&&v.created_at<=b.endIso);w>=0?h[w].push(v):m.push(v)}for(const v of h)v.sort((w,b)=>{const E=We(w.type)-We(b.type);return E!==0?E:b.created_at.localeCompare(w.created_at)});const y=u.map((v,w)=>({phase:v,entries:h[w],idx:w})).reverse();return e(ae,{children:[y.map(({phase:v,entries:w,idx:b},E)=>{const T=E===0;return e("div",{style:{position:"relative",marginBottom:22},children:[e("span",{"aria-hidden":"true",style:{position:"absolute",left:-28,top:4,width:14,height:14,borderRadius:"50%",background:T?"transparent":"var(--accent)",border:"2px solid var(--accent)",boxSizing:"border-box"}}),e("button",{onClick:()=>v.anchorId!==void 0&&p(v.anchorId),disabled:v.anchorId===void 0,style:{display:"flex",flexDirection:"column",alignItems:"flex-start",gap:2,padding:0,background:"transparent",border:"none",color:"inherit",cursor:v.anchorId!==void 0?"pointer":"default",fontFamily:"inherit",textAlign:"left",width:"100%"},children:[e("span",{style:{fontSize:13,fontWeight:600,color:"var(--text-0)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"100%"},children:[v.label,T&&e("span",{style:{marginLeft:8,fontSize:10,color:"var(--accent)",fontFamily:"var(--mono)",fontWeight:500},children:"active"})]}),e("span",{style:{fontSize:11,color:"var(--text-3)",fontFamily:"var(--mono)"},children:[v.startIso.slice(0,10)," → ",v.endIso.slice(0,10)," · ",w.length," ",w.length===1?"entry":"entries"]})]}),e("div",{style:{marginTop:8},children:w.map((B,j)=>{const Z=j===w.length-1;return e("div",{ref:c(B.id),style:{position:"relative",paddingLeft:24,paddingTop:6,paddingBottom:6},children:[e("span",{"aria-hidden":"true",style:{position:"absolute",left:0,top:0,bottom:Z?"50%":0,width:1,background:"var(--border-subtle)"}}),e("span",{"aria-hidden":"true",style:{position:"absolute",left:0,top:"50%",width:18,height:1,background:"var(--border-subtle)",transform:"translateY(-50%)"}}),e(je,{entity:B})]},B.id)})})]},`${v.startIso}-${v.label}`)}),m.length>0&&e("div",{style:{position:"relative",marginBottom:22},children:[e("span",{"aria-hidden":"true",style:{position:"absolute",left:-28,top:4,width:12,height:12,borderRadius:"50%",background:"var(--text-3)",opacity:.4}}),e("div",{style:{fontSize:12,color:"var(--text-2)",fontFamily:"var(--mono)",marginBottom:8},children:["Other (",m.length,")"]}),m.map((v,w)=>{const b=w===m.length-1;return e("div",{ref:c(v.id),style:{position:"relative",paddingLeft:24,paddingTop:6,paddingBottom:6},children:[e("span",{"aria-hidden":"true",style:{position:"absolute",left:0,top:0,bottom:b?"50%":0,width:1,background:"var(--border-subtle)"}}),e("span",{"aria-hidden":"true",style:{position:"absolute",left:0,top:"50%",width:18,height:1,background:"var(--border-subtle)",transform:"translateY(-50%)"}}),e(je,{entity:v})]},v.id)})]})]})})()]}):g.map(h=>e("div",{style:{marginBottom:18},children:[e("div",{style:{display:"flex",alignItems:"center",gap:10,marginBottom:8,paddingBottom:6,borderBottom:"1px solid var(--border-subtle)"},children:[e("span",{style:{fontSize:11,textTransform:"uppercase",letterSpacing:"0.08em",fontWeight:600,color:"var(--accent)",fontFamily:"var(--mono)"},children:h.label}),e("span",{style:{fontSize:11,color:"var(--text-3)"},children:h.entries.length})]}),h.entries.map(m=>e("div",{ref:c(m.id),style:{borderBottom:"1px solid var(--border-subtle)",padding:"12px 0"},children:e(je,{entity:m})},m.id))]},h.key))}),e("div",{style:{display:"flex",flexDirection:"column",gap:14,position:"sticky",top:16},children:[d.length>0&&e("div",{class:"card",style:{padding:14},children:[e("div",{style:{fontSize:11,textTransform:"uppercase",letterSpacing:"0.08em",fontWeight:600,color:"var(--text-2)",marginBottom:10},children:a("roadmap.milestones")}),d.map(h=>e("button",{onClick:()=>p(h.id),style:{display:"flex",alignItems:"flex-start",gap:8,width:"100%",textAlign:"left",padding:"6px 0",background:"transparent",border:"none",borderTop:"1px solid var(--border-subtle)",color:"inherit",cursor:"pointer",fontFamily:"inherit"},children:[e("span",{style:{flexShrink:0,color:"var(--accent)"},children:e(Ke,{type:h.type,size:14})}),e("div",{style:{flex:1,minWidth:0},children:[e("div",{style:{fontSize:12,color:"var(--text-1)",fontWeight:500,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:h.name}),e("div",{style:{fontSize:10,color:"var(--text-3)",marginTop:2},children:Ee(h.created_at)})]})]},h.id))]}),l.length>0&&e("div",{class:"card",style:{padding:14},children:[e("div",{style:{fontSize:11,textTransform:"uppercase",letterSpacing:"0.08em",fontWeight:600,color:"var(--text-2)",marginBottom:10},children:a("roadmap.keyLessons")}),l.map(h=>{const m=Ye(h.access_count);return e("button",{onClick:()=>p(h.id),style:{display:"flex",alignItems:"flex-start",gap:8,width:"100%",textAlign:"left",padding:"6px 0",background:"transparent",border:"none",borderTop:"1px solid var(--border-subtle)",color:"inherit",cursor:"pointer",fontFamily:"inherit"},children:[e("span",{style:{flexShrink:0,color:"var(--text-2)"},children:e(Ke,{type:h.type,size:14})}),e("div",{style:{flex:1,minWidth:0},children:[e("div",{style:{fontSize:12,color:"var(--text-1)",fontWeight:500,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:h.name}),e("div",{style:{fontSize:10,color:m.tone==="high"?"var(--accent)":"var(--text-3)",marginTop:2,fontFamily:"var(--mono)"},children:m.tone!=="none"?m.label:a("memory.access.never")})]})]},h.id)})]})]})]})]})}function Un({projectName:t,phases:s,entities:n,onNodeClick:o}){const i=s.map(()=>[]);for(const H of n){const O=s.findIndex(k=>H.created_at>=k.startIso&&H.created_at<=k.endIso);O>=0&&i[O].push(H)}for(const H of i)H.sort((O,k)=>{const L=We(O.type)-We(k.type);return L!==0?L:k.created_at.localeCompare(O.created_at)});const r=6,g=i.map(H=>({shown:H.slice(0,r),extra:Math.max(0,H.length-r)})),d=900,l=600,u=d/2,f=l/2,c=170,p=230,h=30,m=H=>2*Math.PI*H/s.length-Math.PI/2,y=ie(null),[v,w]=x(1),[b,E]=x(0),[T,B]=x(0),j=ie(v),Z=ie({x:b,y:T});j.current=v,Z.current={x:b,y:T};const V=ie({active:!1,lastX:0,lastY:0}),[te,ne]=x(!1),M=.25,F=4,$=(H,O)=>{const k=y.current;if(!k)return{x:0,y:0};const L=k.getBoundingClientRect();return L.width===0||L.height===0?{x:0,y:0}:{x:(H-L.left)/L.width*d,y:(O-L.top)/L.height*l}};J(()=>{const H=y.current;if(!H)return;const O=k=>{k.preventDefault();const L=j.current,W=Z.current,oe=Math.exp(-k.deltaY*.0015),G=Math.max(M,Math.min(F,L*oe));if(G===L)return;const{x:ve,y:be}=$(k.clientX,k.clientY),_=(ve-W.x)/L,R=(be-W.y)/L;w(G),E(ve-_*G),B(be-R*G)};return H.addEventListener("wheel",O,{passive:!1}),()=>H.removeEventListener("wheel",O)},[]);const ce=H=>{let k=H.target;for(;k&&k!==y.current;){if(k.style?.cursor==="pointer")return;k=k.parentElement}H.preventDefault(),V.current.active=!0,V.current.lastX=H.clientX,V.current.lastY=H.clientY,ne(!0)},ee=H=>{if(!V.current.active)return;const O=y.current;if(!O)return;const k=O.getBoundingClientRect();if(k.width===0||k.height===0)return;const L=(H.clientX-V.current.lastX)/k.width*d,W=(H.clientY-V.current.lastY)/k.height*l;V.current.lastX=H.clientX,V.current.lastY=H.clientY,E(oe=>oe+L),B(oe=>oe+W)},ke=()=>{V.current.active&&(V.current.active=!1,ne(!1))},ue=()=>{w(1),E(0),B(0)};return e("div",{style:{position:"relative",border:"1px solid var(--border-subtle)",borderRadius:6,background:"rgba(255,255,255,0.02)",overflow:"hidden",marginBottom:14},children:[e("button",{onClick:ue,title:"Reset view (also: double-click background)",style:{position:"absolute",top:8,right:8,zIndex:2,padding:"4px 10px",fontSize:11,fontFamily:"inherit",background:"rgba(0,0,0,0.4)",color:"var(--text-1)",border:"1px solid var(--border-subtle)",borderRadius:4,cursor:"pointer"},children:"Reset view"}),e("div",{style:{position:"absolute",bottom:8,left:12,zIndex:2,fontSize:10,fontFamily:"var(--mono)",color:"var(--text-3)",pointerEvents:"none"},children:["scroll to zoom · drag to pan · ",Math.round(v*100),"%"]}),e("svg",{ref:y,viewBox:`0 0 ${d} ${l}`,width:"100%",style:{display:"block",minHeight:600,cursor:te?"grabbing":"grab",userSelect:"none",touchAction:"none"},onMouseDown:ce,onMouseMove:ee,onMouseUp:ke,onMouseLeave:ke,onDblClick:ue,children:e("g",{transform:`translate(${b} ${T}) scale(${v})`,children:[s.map((H,O)=>{const k=m(O),L=u+c*Math.cos(k),W=f+c*Math.sin(k);return e("path",{d:`M ${u} ${f} Q ${(u+L)/2} ${(f+W)/2-10} ${L} ${W}`,fill:"none",stroke:"rgba(0, 214, 180, 0.4)",strokeWidth:1.5},`p-${O}`)}),s.map((H,O)=>{const{shown:k}=g[O],L=m(O),W=u+c*Math.cos(L),oe=f+c*Math.sin(L),G=Math.PI/6;return k.map((ve,be)=>{const _=k.length===1?.5:be/(k.length-1),R=L-G/2+G*_,A=p+h*(be%3),I=u+A*Math.cos(R),N=f+A*Math.sin(R);return e("path",{d:`M ${W} ${oe} Q ${(W+I)/2} ${(oe+N)/2} ${I} ${N}`,fill:"none",stroke:"rgba(255,255,255,0.18)",strokeWidth:1},`e-${O}-${ve.id}`)})}),e("g",{children:[e("circle",{cx:u,cy:f,r:42,fill:"rgba(0, 214, 180, 0.18)",stroke:"var(--accent)",strokeWidth:1.5}),e("text",{x:u,y:f,textAnchor:"middle",dominantBaseline:"central",fontSize:11,fontWeight:600,fill:"var(--text-0)",style:{pointerEvents:"none"},children:t.length>14?t.slice(0,12)+"…":t})]}),s.map((H,O)=>{const k=m(O),L=u+c*Math.cos(k),W=f+c*Math.sin(k),oe=H.label.length>18?H.label.slice(0,16)+"…":H.label;return e("g",{style:{cursor:H.anchorId!==void 0?"pointer":"default"},onClick:()=>H.anchorId!==void 0&&o(H.anchorId),children:[e("circle",{cx:L,cy:W,r:28,fill:"rgba(0, 214, 180, 0.10)",stroke:"var(--accent)",strokeWidth:1.25}),e("text",{x:L,y:W-4,textAnchor:"middle",fontSize:10,fontWeight:600,fill:"var(--text-0)",style:{pointerEvents:"none"},children:[e("tspan",{x:L,dy:0,children:oe}),e("tspan",{x:L,dy:12,fontSize:9,fill:"var(--text-3)",fontWeight:400,children:[H.entityCount," · ",H.startIso.slice(5,10)]})]})]},`phase-${O}`)}),s.map((H,O)=>{const{shown:k,extra:L}=g[O],W=m(O),oe=Math.PI/6;return e("g",{children:[k.map((G,ve)=>{const be=k.length===1?.5:ve/(k.length-1),_=W-oe/2+oe*be,R=p+h*(ve%3),A=u+R*Math.cos(_),I=f+R*Math.sin(_),N=G.name.length>22?G.name.slice(0,20)+"…":G.name;return e("g",{style:{cursor:"pointer"},onClick:()=>o(G.id),children:[e("title",{children:`${G.name} (${G.type})`}),e("circle",{cx:A,cy:I,r:4,fill:"var(--text-2)"}),e("text",{x:A,y:I-8,textAnchor:Math.cos(_)>.2?"start":Math.cos(_)<-.2?"end":"middle",fontSize:9,fill:"var(--text-1)",style:{pointerEvents:"none"},children:N})]},G.id)}),L>0&&(()=>{const G=W+oe/2+.05,ve=p+h*2+10,be=u+ve*Math.cos(G),_=f+ve*Math.sin(G);return e("text",{x:be,y:_,textAnchor:"middle",fontSize:9,fill:"var(--text-3)",fontStyle:"italic",children:["+",L," more"]})})()]},`leaves-${O}`)})]})})]})}const kt="memesh.browse.viewMode",xt=30;function Me({label:t,active:s,onClick:n,count:o}){return e("button",{onClick:n,style:{padding:"4px 10px",borderRadius:14,border:"1px solid",borderColor:s?"rgba(0, 214, 180, 0.5)":"rgba(255,255,255,0.08)",background:s?"rgba(0, 214, 180, 0.15)":"transparent",color:s?"var(--accent)":"var(--text-2)",fontSize:11,cursor:"pointer",whiteSpace:"nowrap",fontFamily:"inherit"},children:[t,o!==void 0&&e("span",{style:{marginLeft:6,opacity:.6,fontFamily:"var(--mono)",fontSize:10},children:o})]})}function as({manage:t}){const[s,n]=x([]),[o,i]=x([]),[r,g]=x(""),[d,l]=x(!0),[u,f]=x(""),[c,p]=x(0),[h]=Ht(),[m,y]=x(h?"knowledge":"all"),[v,w]=x("all"),[b,E]=x("all"),[T,B]=x("all"),[j,Z]=x("most-recalled"),[V,te]=x(()=>{try{return localStorage.getItem(kt)==="list"?"list":"roadmap"}catch{return"roadmap"}});async function ne(){l(!0),f("");try{const[k,L]=await Promise.all([q("GET","/v1/entities?limit=2000&status=all"),Hs().catch(()=>[])]);n(k||[]),i(L),p(0),window.dispatchEvent(new Event("memesh:data-changed"))}catch(k){f(k.message)}finally{l(!1)}}J(()=>{ne()},[]),J(()=>{p(0)},[r,m,v,b,T,j]),J(()=>{(m==="knowledge"||m==="all")&&y(h?"knowledge":"all")},[h]);const M=Ce(()=>{const k={all:0,knowledge:0,activity:0,reference:0,session:0};for(const L of s)L.archived||L.status==="archived"||(k.all++,k[ts(L.type)]++);return k},[s]),F=Ce(()=>{const k=r.toLowerCase();return s.filter(L=>!(m!=="all"&&ts(L.type)!==m||v!=="all"&&Bs(L.last_accessed_at||L.created_at)!==v||b==="recalled"&&(L.access_count??0)===0||b==="never"&&(L.access_count??0)>0||T!=="all"&&Ue(L)!==T||k&&![L.name,L.type,...L.observations??[],...L.tags??[]].join(" ").toLowerCase().includes(k)))},[s,m,v,b,T,r]),$=Ce(()=>{const k=[...F];return j==="most-recalled"?k.sort((L,W)=>(W.access_count??0)-(L.access_count??0)||(W.last_accessed_at??W.created_at).localeCompare(L.last_accessed_at??L.created_at)):j==="created"?k.sort((L,W)=>W.created_at.localeCompare(L.created_at)):k.sort((L,W)=>(W.last_accessed_at??W.created_at).localeCompare(L.last_accessed_at??L.created_at)),k},[F,j]),ce=$.filter(k=>!k.archived&&k.status!=="archived"),ee=$.filter(k=>k.archived||k.status==="archived"),ke=Math.ceil(ce.length/xt),ue=ce.slice(c*xt,(c+1)*xt);async function H(k){if(confirm(a("browse.confirmArchive")))try{await q("POST","/v1/forget",{name:k}),ne()}catch(L){f(a("browse.archiveFailed",{message:L.message}))}}async function O(k){try{await q("POST","/v1/remember",{name:k,type:"restored"}),ne()}catch(L){f(a("browse.restoreFailed",{message:L.message}))}}return e("div",{children:e("div",{class:"card",children:[e("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:12},children:[e("div",{children:[e("div",{class:"card-title",style:{margin:0},children:a(t?"browse.manage":"browse.title")}),!d&&e("div",{style:{fontSize:12,color:"var(--text-3)",marginTop:2},children:[ce.length.toLocaleString()," ",a("browse.active"),ee.length>0?` · ${ee.length} ${a("browse.archived")}`:""]})]}),e("div",{style:{display:"flex",gap:8},children:[e("input",{type:"search",placeholder:a("browse.filter"),value:r,onInput:k=>g(k.target.value),style:{width:240}}),e("button",{class:"btn btn-sm",onClick:ne,title:a("browse.refresh"),children:"↻"})]})]}),e("div",{style:{display:"flex",flexWrap:"wrap",gap:6,marginBottom:6},children:[e("span",{style:{fontSize:11,color:"var(--text-3)",alignSelf:"center",marginRight:4},children:a("browse.filterCategory")}),e(Me,{label:a("cluster.knowledge"),active:m==="knowledge",onClick:()=>y("knowledge"),count:M.knowledge}),e(Me,{label:a("cluster.activity"),active:m==="activity",onClick:()=>y("activity"),count:M.activity}),e(Me,{label:a("cluster.session"),active:m==="session",onClick:()=>y("session"),count:M.session}),e(Me,{label:a("cluster.reference"),active:m==="reference",onClick:()=>y("reference"),count:M.reference}),e(Me,{label:a("cluster.all"),active:m==="all",onClick:()=>y("all"),count:M.all})]}),e("div",{style:{display:"flex",flexWrap:"wrap",gap:6,marginBottom:6},children:[e("span",{style:{fontSize:11,color:"var(--text-3)",alignSelf:"center",marginRight:4},children:a("browse.filterTime")}),e(Me,{label:a("browse.timeToday"),active:v==="today",onClick:()=>w(v==="today"?"all":"today")}),e(Me,{label:a("browse.timeWeek"),active:v==="week",onClick:()=>w(v==="week"?"all":"week")}),e(Me,{label:a("browse.timeMonth"),active:v==="month",onClick:()=>w(v==="month"?"all":"month")}),e(Me,{label:a("browse.timeOlder"),active:v==="older",onClick:()=>w(v==="older"?"all":"older")}),e("span",{style:{width:1,background:"var(--border-subtle)",margin:"0 6px"}}),e("span",{style:{fontSize:11,color:"var(--text-3)",alignSelf:"center",marginRight:4},children:a("browse.filterValue")}),e(Me,{label:a("browse.valueRecalled"),active:b==="recalled",onClick:()=>E(b==="recalled"?"all":"recalled")}),e(Me,{label:a("browse.valueNever"),active:b==="never",onClick:()=>E(b==="never"?"all":"never")})]}),o.length>0&&e("div",{style:{display:"flex",flexWrap:"wrap",gap:6,marginBottom:6},children:[e("span",{style:{fontSize:11,color:"var(--text-3)",alignSelf:"center",marginRight:4},children:a("browse.filterProject")}),e(Me,{label:a("cluster.all"),active:T==="all",onClick:()=>B("all")}),o.map(k=>e(Me,{label:k.name,count:k.count,active:T===k.name,onClick:()=>B(k.name)},k.name))]}),e("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:14,paddingBottom:12,borderBottom:"1px solid var(--border-subtle)"},children:[e("span",{style:{fontSize:11,color:"var(--text-3)"},children:a("browse.filterSort")}),e("select",{value:j,onChange:k=>Z(k.target.value),style:{padding:"3px 8px",fontSize:12},children:[e("option",{value:"most-recalled",children:a("browse.sortMostRecalled")}),e("option",{value:"recent",children:a("browse.sortRecent")}),e("option",{value:"created",children:a("browse.sortCreated")})]})]}),u&&e("div",{class:"error-box",style:{marginBottom:12},children:u}),d&&e("div",{class:"empty",children:e("div",{class:"loading"})}),!d&&T!=="all"&&V==="roadmap"&&!t&&e(Wn,{projectName:T,entities:ce,onSwitchToList:()=>{te("list");try{localStorage.setItem(kt,"list")}catch{}}}),!d&&(T==="all"||V==="list"||t)&&ce.length===0&&e("div",{class:"empty",children:[e("span",{class:"empty-icon",style:{display:"inline-flex",alignItems:"center",justifyContent:"center",color:"var(--text-3)"},children:e("svg",{width:"32",height:"32",viewBox:"0 0 16 16","aria-hidden":"true",children:[e("path",{d:"M2 9 L4 4 H12 L14 9 V13 H2 z",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinejoin:"round"}),e("path",{d:"M2 9 H6 a2 2 0 0 0 4 0 H14",stroke:"currentColor",strokeWidth:"1.5",fill:"none"})]})}),r?`${a("browse.noMatch")} "${r}"`:a("browse.emptyFilter")]}),!d&&(T==="all"||V==="list"||t)&&ue.length>0&&e("div",{children:[T!=="all"&&V==="list"&&!t&&e("div",{style:{display:"flex",justifyContent:"flex-end",marginBottom:8},children:e("button",{class:"btn btn-sm",onClick:()=>{te("roadmap");try{localStorage.setItem(kt,"roadmap")}catch{}},children:a("roadmap.switchToRoadmap")})}),ue.map(k=>e("div",{style:{borderBottom:"1px solid var(--border-subtle)",padding:"14px 0"},children:e(je,{entity:k,highlight:r,actions:t?e("button",{class:"btn btn-danger btn-sm",onClick:()=>H(k.name),children:a("browse.archive")}):void 0})},k.id)),ke>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:c===0,onClick:()=>p(k=>k-1),children:a("browse.prev")}),e("span",{style:{color:"var(--text-3)",fontFamily:"var(--mono)",fontSize:12},children:[c+1," / ",ke]}),e("button",{class:"btn btn-sm",disabled:c>=ke-1,onClick:()=>p(k=>k+1),children:a("browse.next")})]})]}),!d&&ee.length>0&&t&&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:[a("browse.archived")," (",ee.length,")"]}),ee.slice(0,10).map(k=>e("div",{style:{borderBottom:"1px solid var(--border-subtle)",padding:"14px 0"},children:e(je,{entity:k,highlight:r,actions:e("button",{class:"btn btn-sm",onClick:()=>O(k.name),children:a("browse.restore")})})},k.id)),ee.length>10&&e("div",{style:{fontSize:12,color:"var(--text-3)",padding:"12px 0",textAlign:"center"},children:["+",ee.length-10," ",a("browse.moreArchived")]})]})]})})}function is(t){return t>=80?"var(--success)":t>=60?"var(--accent)":t>=40?"var(--warning)":"var(--danger)"}function qn(t){return t>=80?a("health.excellent"):t>=60?a("health.good"):t>=40?a("health.fair"):a("health.poor")}const Vn=["activity","quality","freshness","lessons"];function $n({score:t,factors:s}){const n=is(t);return e("div",{class:"card",children:[e("div",{class:"card-title",children:a("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 ${n}`,display:"flex",alignItems:"center",justifyContent:"center"},children:e("span",{style:{fontFamily:"var(--mono)",fontSize:"24px",fontWeight:700,color:n,letterSpacing:"-0.02em"},children:t})}),e("span",{style:{marginTop:"6px",fontSize:"11px",fontWeight:500,color:"var(--text-2)"},children:qn(t)})]}),e("div",{style:{flex:1,minWidth:0,display:"flex",flexDirection:"column",gap:"10px"},children:Vn.map(o=>{const i=s[o],r=Math.round(i.score/i.weight*100),g=is(r);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:a(`health.${o}`)}),e("span",{style:{fontFamily:"var(--mono)",fontSize:"11px",color:"var(--text-3)"},children:[r,"%"]})]}),e("div",{style:{height:"4px",borderRadius:"2px",background:"var(--bg-0)",overflow:"hidden"},children:e("div",{style:{height:"100%",width:`${r}%`,borderRadius:"2px",background:g,transition:"width 600ms ease-out"}})})]},o)})})]})]})}const He=220,_e=36,Se=2;function Gn({trend:t}){if(!t||t.length===0)return e("svg",{width:He,height:_e,style:{display:"block"},children:e("line",{x1:0,y1:_e/2,x2:He,y2:_e/2,stroke:"rgba(255,255,255,0.06)",strokeWidth:1})});if(t.length===1){const g=He/2,d=_e/2;return e("svg",{width:He,height:_e,style:{display:"block"},children:[e("line",{x1:Se,y1:_e-Se,x2:He-Se,y2:_e-Se,stroke:"rgba(255,255,255,0.06)",strokeWidth:1}),e("circle",{cx:g,cy:d,r:3,fill:"#00D6B4"})]})}const s=Math.max(1,...t.map(g=>g.count)),n=(He-Se*2)/(t.length-1),o=t.map((g,d)=>{const l=Se+d*n,u=_e-Se-g.count/s*(_e-Se*2);return`${l.toFixed(1)},${u.toFixed(1)}`}),i=`M${o[0]} L${o.slice(1).join(" L")}`,r=`${i} L${Se+(t.length-1)*n},${_e-Se} L${Se},${_e-Se} Z`;return e("svg",{width:He,height:_e,style:{display:"block"},children:[e("path",{d:r,fill:"rgba(0, 214, 180, 0.12)"}),e("path",{d:i,fill:"none",stroke:"#00D6B4",strokeWidth:1.5,strokeLinejoin:"round",strokeLinecap:"round"}),t.map((g,d)=>{const[l,u]=o[d].split(",");return d===t.length-1?e("circle",{cx:l,cy:u,r:2.5,fill:"#00D6B4"},d):null})]})}function Kn({metric:t}){const{reusedThisWeek:s,trend:n,computedFrom:o}=t,i=o==="last_accessed_at_approximation",r=n.slice(0,Math.max(0,n.length-7)).slice(-7).reduce((l,u)=>l+u.count,0),g=n.slice(-7).reduce((l,u)=>l+u.count,0),d=r>0?Math.round((g-r)/r*100):null;return e("div",{class:"card",style:{display:"flex",gap:24,alignItems:"center",flexWrap:"wrap",padding:"20px 24px",background:"linear-gradient(135deg, rgba(0, 214, 180, 0.06) 0%, rgba(0, 214, 180, 0.02) 100%)",border:"1px solid rgba(0, 214, 180, 0.18)"},children:[e("div",{style:{flex:"1 1 200px",minWidth:200},children:[e("div",{style:{fontSize:11,textTransform:"uppercase",letterSpacing:"0.08em",color:"var(--text-2)",fontWeight:600,marginBottom:6},children:a("loop.label")}),e("div",{style:{display:"flex",alignItems:"baseline",gap:12},children:[e("div",{style:{fontSize:84,fontWeight:700,lineHeight:1,color:s>0?"var(--accent)":"var(--text-2)",fontFamily:"Satoshi, system-ui, sans-serif",letterSpacing:"-0.03em"},children:s>0?s.toLocaleString():"—"}),d!==null&&d!==0&&e("span",{style:{fontSize:12,fontWeight:600,fontFamily:"var(--mono)",color:d>0?"#4ADE80":"#F87171"},children:[d>0?"↑":"↓"," ",Math.abs(d),"%"]})]}),e("div",{style:{fontSize:13,color:"var(--text-1)",marginTop:4},children:s>0?a("loop.subtitleHas"):a("loop.subtitleNone")}),i&&e("div",{style:{fontSize:10,color:"var(--text-3)",marginTop:6,fontStyle:"italic"},children:a("loop.approxNote")})]}),e("div",{style:{flex:"0 0 auto",display:"flex",flexDirection:"column",alignItems:"flex-end",gap:4},children:[e(Gn,{trend:n}),e("div",{style:{fontSize:10,color:"var(--text-3)",fontFamily:"var(--mono)"},children:a("loop.sparkLabel")})]})]})}const Je=8,Yn=8,Xn=20,et=8,zs=120,js="rgba(0, 214, 180, 0.3)",Ns="#00D6B4",Zn=1.5,Qn="#4A5260",Jn="9px Satoshi, system-ui, sans-serif";function rs(t,s){t.style.width="";const n=window.devicePixelRatio||1,i=t.getBoundingClientRect().width,r=zs,g=i-et-Yn,d=r-Je-Xn;if(s.length===0||g<=0||d<=0)return;t.width=i*n,t.height=r*n,t.style.width=`${i}px`,t.style.height=`${r}px`;const l=t.getContext("2d");if(!l)return;l.scale(n,n);const u=Math.max(1,...s.map(y=>y.created)),f=Math.max(1,...s.map(y=>y.recalled)),c=Math.max(u,f),p=s.length,h=1,m=Math.max(1,(g-h*(p-1))/p);l.fillStyle=js;for(let y=0;y<p;y++){const w=s[y].created/c*d,b=et+y*(m+h),E=Je+d-w;l.fillRect(b,E,m,w)}l.beginPath(),l.strokeStyle=Ns,l.lineWidth=Zn,l.lineJoin="round",l.lineCap="round";for(let y=0;y<p;y++){const v=s[y],w=et+y*(m+h)+m/2,b=Je+d-v.recalled/c*d;y===0?l.moveTo(w,b):l.lineTo(w,b)}l.stroke(),l.fillStyle=Qn,l.font=Jn,l.textAlign="center",l.textBaseline="top";for(let y=0;y<p;y+=7){const v=s[y],w=v.date.split("-"),b=w.length>=3?`${w[1]}-${w[2]}`:v.date,E=et+y*(m+h)+m/2,T=Je+d+4;l.fillText(b,E,T)}}function ea({data:t}){const s=ie(null);J(()=>{const i=s.current;if(!i)return;rs(i,t);const r=new ResizeObserver(()=>rs(i,t));return r.observe(i),()=>r.disconnect()},[t]);const n=t.reduce((i,r)=>i+r.created,0),o=t.reduce((i,r)=>i+r.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:a("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:js}}),a("timeline.created"),e("span",{style:{fontFamily:"var(--mono)",color:"var(--text-3)",marginLeft:2},children:n})]}),e("span",{style:{display:"flex",alignItems:"center",gap:4},children:[e("span",{style:{display:"inline-block",width:10,height:2,borderRadius:1,background:Ns}}),a("timeline.recalled"),e("span",{style:{fontFamily:"var(--mono)",color:"var(--text-3)",marginLeft:2},children:o})]})]})]}),e("canvas",{ref:s,style:{width:"100%",height:`${zs}px`,display:"block"}})]})}const wt=["week","month","quarter","older"];function ta(t){return a(`ageMatrix.bucket.${t}`)||t}const sa=["lesson_learned","lesson","mistake","decision","architecture_decision","pattern","technical_pattern","best_practice","bug_fix","workflow_checkpoint","process","architecture","feature"];function na(t){return a(`ageMatrix.type.${t}`)||t}function aa(t,s){return t===0||s===0?"rgba(255,255,255,0.03)":`rgba(0, 214, 180, ${(.12+Math.min(t/s,1)*.55).toFixed(2)})`}function ia({data:t}){if(!t||t.length===0)return null;const s=new Map;for(const i of t)s.has(i.type)||s.set(i.type,new Map),s.get(i.type).set(i.bucket,i.count);const n=sa.filter(i=>s.has(i)),o=Math.max(1,...t.map(i=>i.count));return e("div",{class:"card",children:[e("div",{class:"card-title",style:{marginBottom:16},children:a("ageMatrix.title")}),e("div",{style:{overflowX:"auto"},children:e("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:12,tableLayout:"fixed"},children:[e("colgroup",{children:[e("col",{style:{width:"28%"}}),wt.map(i=>e("col",{style:{width:"18%"}},i))]}),e("thead",{children:e("tr",{children:[e("th",{style:{textAlign:"left",padding:"4px 8px",color:"var(--text-2)",fontWeight:400},children:a("ageMatrix.typeColumn")}),wt.map(i=>e("th",{style:{textAlign:"center",padding:"4px 6px",color:"var(--text-2)",fontWeight:400},children:ta(i)},i))]})}),e("tbody",{children:n.map(i=>{const r=s.get(i),g=Array.from(r.values()).reduce((d,l)=>d+l,0);return e("tr",{children:[e("td",{style:{padding:"5px 8px",color:"var(--text-1)",fontSize:11,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:[na(i),e("span",{style:{color:"var(--text-3)",marginLeft:4},children:["(",g,")"]})]}),wt.map(d=>{const l=r.get(d)??0;return e("td",{style:{textAlign:"center",padding:"5px 6px",background:aa(l,o),borderRadius:4,color:l>0?"var(--accent)":"var(--text-3)",fontFamily:"var(--mono)",fontWeight:l>0?600:400,fontSize:11,transition:"background 0.2s"},children:l>0?l:"·"},d)})]},i)})})]})}),e("div",{style:{marginTop:10,fontSize:11,color:"var(--text-3)",display:"flex",alignItems:"center",gap:6},children:[e("span",{children:a("ageMatrix.low")}),[.15,.35,.55,.7].map(i=>e("span",{style:{display:"inline-block",width:14,height:10,borderRadius:2,background:`rgba(0,214,180,${i})`}},i)),e("span",{children:a("ageMatrix.high")}),e("span",{style:{marginLeft:8},children:["— ",a("ageMatrix.legend")]})]})]})}function os(t){return a(`radar.axis.${t}`)||t}const ze=220,Os=ze/2,Ws=ze/2,tt=80,st=14;function nt(t,s){const n=(t-90)*(Math.PI/180);return[Os+s*Math.cos(n),Ws+s*Math.sin(n)]}function ra({data:t}){if(!t||t.length===0)return null;const s=t.length,n=Math.max(1,...t.map(d=>d.count)),o=t.map((d,l)=>360/s*l),i=t.map((d,l)=>{const u=d.count/n,f=st+u*(tt-st);return nt(o[l],f)}),r=i.map((d,l)=>`${l===0?"M":"L"}${d[0].toFixed(1)},${d[1].toFixed(1)}`).join(" ")+" Z",g=[.25,.5,.75,1];return e("div",{class:"card",children:[e("div",{class:"card-title",style:{marginBottom:8},children:a("radar.title")}),e("div",{style:{display:"flex",alignItems:"center",gap:16,flexWrap:"wrap"},children:[e("svg",{width:ze,height:ze,viewBox:`0 0 ${ze} ${ze}`,style:{flexShrink:0},children:[g.map(d=>{const l=o.map(u=>{const f=st+d*(tt-st),[c,p]=nt(u,f);return`${c.toFixed(1)},${p.toFixed(1)}`});return e("polygon",{points:l.join(" "),fill:"none",stroke:"rgba(255,255,255,0.06)",strokeWidth:1},d)}),o.map((d,l)=>{const[u,f]=nt(d,tt);return e("line",{x1:Os,y1:Ws,x2:u.toFixed(1),y2:f.toFixed(1),stroke:"rgba(255,255,255,0.06)",strokeWidth:1},l)}),e("path",{d:r,fill:"rgba(0,214,180,0.15)",stroke:"#00D6B4",strokeWidth:1.5,strokeLinejoin:"round"}),i.map(([d,l],u)=>e("circle",{cx:d.toFixed(1),cy:l.toFixed(1),r:3,fill:"#00D6B4"},u)),t.map((d,l)=>{const u=o[l],[f,c]=nt(u,tt+18),p=os(d.axis);return e("text",{x:f.toFixed(1),y:c.toFixed(1),textAnchor:"middle",dominantBaseline:"middle",fontSize:9,fill:"var(--text-2)",fontFamily:"Satoshi, system-ui, sans-serif",children:p},l)})]}),e("div",{style:{flex:1,minWidth:120},children:[t.map(d=>{const l=n>0?d.count/n:0;return e("div",{style:{marginBottom:8},children:[e("div",{style:{display:"flex",justifyContent:"space-between",fontSize:11,marginBottom:3},children:[e("span",{style:{color:"var(--text-1)"},children:os(d.axis)}),e("span",{style:{color:"var(--accent)",fontFamily:"var(--mono)",fontSize:10},children:d.count})]}),e("div",{style:{height:3,background:"rgba(255,255,255,0.06)",borderRadius:2,overflow:"hidden"},children:e("div",{style:{width:`${(l*100).toFixed(1)}%`,height:"100%",background:"#00D6B4",borderRadius:2,transition:"width 0.3s"}})})]},d.axis)}),e("div",{style:{fontSize:10,color:"var(--text-3)",marginTop:6},children:a("radar.caption")})]})]})]})}function oa({data:t}){const{workSchedule:s,toolPreferences:n,focusAreas:o,workflow:i,strengths:r,learningAreas:g}=t,d=new Map;for(const c of s.hourDistribution)d.set(c.hour,c.count);const l=Math.max(1,...s.hourDistribution.map(c=>c.count)),u=[...s.hourDistribution].sort((c,p)=>p.count-c.count).slice(0,3).map(c=>`${c.hour.toString().padStart(2,"0")}:00`),f=[...s.dayDistribution].sort((c,p)=>p.count-c.count).slice(0,2).map(c=>c.day);return e("div",{class:"card",children:[e("div",{class:"card-title",children:a("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:a("patterns.workSchedule")}),e("div",{style:{display:"flex",gap:2,flexWrap:"wrap"},children:Array.from({length:24},(c,p)=>{const h=d.get(p)||0,m=h/l;return e("div",{title:`${p.toString().padStart(2,"0")}:00 — ${h}`,style:{width:18,height:18,borderRadius:"var(--radius-xs)",background:m>0?`rgba(0, 214, 180, ${.1+m*.7})`:"var(--bg-0)",border:"1px solid var(--border-subtle)",fontSize:8,display:"flex",alignItems:"center",justifyContent:"center",color:m>.5?"var(--bg-0)":"var(--text-3)",fontFamily:"var(--mono)"},children:p},p)})}),e("div",{style:{fontSize:11,color:"var(--text-3)",marginTop:6,fontFamily:"var(--mono)"},children:[a("patterns.peakHours"),": ",u.join(", "),f.length>0&&e("span",{children:[" · ",a("patterns.busiestDays"),": ",f.join(", ")]})]})]}),n.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:a("patterns.tools")}),e("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:n.slice(0,10).map(c=>e("span",{class:"tag",style:{fontSize:11,padding:"2px 8px"},children:[c.tool," ",e("span",{style:{opacity:.5},children:["(",c.sessions,")"]})]},c.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:a("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:i.avgSessionMinutes>0?`${Math.round(i.avgSessionMinutes)}m`:"—"}),e("div",{class:"stat-lbl",children:a("patterns.avgSession")})]}),e("div",{class:"stat",style:{padding:12},children:[e("div",{class:"stat-val",style:{fontSize:18},children:i.totalSessions>0?i.commitsPerSession.toFixed(1):"—"}),e("div",{class:"stat-lbl",children:a("patterns.commitsPerSession")})]})]})]}),o.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:a("patterns.focus")}),e("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:o.slice(0,12).map(c=>e("span",{class:"tag",style:{fontSize:11,padding:"2px 8px"},children:[c.type," ",e("span",{style:{opacity:.5},children:["(",c.count,")"]})]},c.type))})]}),(r.length>0||g.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:a("patterns.strengths")}),r.slice(0,5).map(c=>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:c.type}),e("span",{style:{fontFamily:"var(--mono)",fontSize:11,color:"var(--accent)"},children:[Math.round(c.avgConfidence*100),"%"]})]}),e("div",{style:{height:3,borderRadius:2,background:"var(--bg-0)"},children:e("div",{style:{height:"100%",width:`${Math.round(c.avgConfidence*100)}%`,borderRadius:2,background:"rgba(0, 214, 180, 0.5)",transition:"width 600ms ease-out"}})})]},c.type)),r.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:a("patterns.learning")}),g.slice(0,5).map(c=>e("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:6,fontSize:12},children:[e("span",{style:{color:"var(--text-1)"},children:c.tag}),e("span",{style:{fontFamily:"var(--mono)",fontSize:11,color:"var(--text-3)"},children:c.count})]},c.tag)),g.length===0&&e("div",{style:{fontSize:11,color:"var(--text-3)",fontStyle:"italic"},children:"—"})]})]})]})}const la={dreamer:"Weekly recap (dreamer)",pattern_detector:"Pattern detector",consolidator:"Consolidator",auto_tagger:"Auto-tagger",failure_analyzer:"Failure analyzer"};function ls(t){return`${Math.round(t*100)}%`}function ca(t){return t==null?"—":t<1e3?`${t}ms`:`${(t/1e3).toFixed(1)}s`}function da(){const[t,s]=x(null),[n,o]=x(""),[i,r]=x(!0),[g,d]=x(30);return J(()=>{r(!0),o(""),q("GET",`/v1/telemetry?window=${g}`).then(l=>s(l)).catch(l=>o(l instanceof Error?l.message:String(l))).finally(()=>r(!1))},[g]),e("div",{class:"card",style:{padding:16},children:[e("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",marginBottom:8,flexWrap:"wrap",gap:8},children:[e("span",{class:"card-title",style:{margin:0},children:a("telemetry.title")}),e("div",{style:{display:"flex",gap:4,fontSize:12},children:[7,30,90].map(l=>e("button",{class:"btn btn-ghost",style:{padding:"2px 8px",fontSize:11,border:"1px solid "+(g===l?"var(--accent)":"var(--border)"),color:g===l?"var(--accent)":"var(--text-2)",background:g===l?"rgba(0,214,180,0.10)":"transparent"},onClick:()=>d(l),children:a("telemetry.lastNDays",{n:l})},l))})]}),i&&e("div",{style:{color:"var(--text-3)",fontSize:13},children:a("telemetry.loading")}),n&&e("div",{style:{color:"var(--danger)",fontSize:13},children:n}),!i&&!n&&t&&t.summaries.length===0&&e("div",{style:{color:"var(--text-2)",fontSize:13,padding:8},children:a("telemetry.empty")}),!i&&!n&&t&&t.summaries.length>0&&e("div",{style:{display:"flex",flexDirection:"column",gap:12},children:t.summaries.map(l=>{const u=l.total_attempts>0?l.successes/l.total_attempts:0,f=l.total_calls>0?l.fallback_used/l.total_calls:0,c=la[l.flow]??l.flow,p=Object.entries(l.by_provider),h=Object.entries(l.by_error_class).sort((m,y)=>y[1]-m[1]);return e("div",{style:{padding:12,background:"var(--bg-1)",borderRadius:4,borderLeft:`2px solid ${u>=.9?"var(--accent)":u>=.5?"#FFC800":"#FF5050"}`},children:[e("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",marginBottom:6},children:[e("span",{style:{fontWeight:600},children:c}),e("span",{style:{fontSize:12,color:"var(--text-3)"},children:[a("telemetry.callsCount",{n:l.total_calls})," · ",a("telemetry.attemptsCount",{n:l.total_attempts})]})]}),e("div",{style:{display:"flex",gap:16,flexWrap:"wrap",fontSize:13,marginBottom:6},children:[e("span",{children:[e("span",{style:{color:"var(--text-3)"},children:[a("telemetry.successRate"),": "]}),e("strong",{style:{color:u>=.9?"var(--accent)":u>=.5?"#FFC800":"#FF5050"},children:ls(u)})]}),e("span",{children:[e("span",{style:{color:"var(--text-3)"},children:[a("telemetry.medianLatency"),": "]}),e("strong",{children:ca(l.median_latency_ms)})]}),l.fallback_used>0&&e("span",{style:{color:"#FFC800"},children:["⚠️ ",a("telemetry.fallbackUsed",{n:l.fallback_used,pct:ls(f)})]})]}),p.length>0&&e("div",{style:{fontSize:12,color:"var(--text-2)",marginBottom:4},children:[a("telemetry.byProvider"),":"," ",p.map(([m,y])=>e("span",{class:"tag",style:{marginRight:6,fontSize:11},children:[m," ",y.ok,"/",y.ok+y.fail]},m))]}),h.length>0&&e("div",{style:{fontSize:12,color:"var(--text-2)"},children:[a("telemetry.errors"),":"," ",h.map(([m,y])=>e("span",{class:"tag",style:{marginRight:6,fontSize:11,background:m==="auth"?"rgba(255,80,80,0.12)":"rgba(255,200,0,0.10)",color:m==="auth"?"#FF5050":"#FFC800"},children:[m," ×",y]},m))]})]},l.flow)})})]})}function ua(){const[t,s]=x(null),[n,o]=x(null),[i,r]=x(null),[g,d]=x(!0),l=ye(()=>{d(!0),Promise.all([q("GET","/v1/stats").catch(()=>null),q("GET","/v1/analytics").catch(()=>null),q("GET","/v1/patterns").catch(()=>null)]).then(([u,f,c])=>{s(u),o(f),r(c)}).finally(()=>d(!1))},[]);return J(()=>{l()},[l]),g?e("div",{class:"empty",children:e("div",{class:"loading"})}):!t&&!n?e("div",{class:"error-box",children:[a("common.error"),": ",a("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:a("analytics.totalMemories")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",children:t.totalObservations.toLocaleString()}),e("div",{class:"stat-lbl",children:a("analytics.knowledgeFacts")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",children:t.totalRelations.toLocaleString()}),e("div",{class:"stat-lbl",children:a("analytics.connections")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",children:t.totalTags.toLocaleString()}),e("div",{class:"stat-lbl",children:a("analytics.topics")})]})]}),n&&e("div",{style:{marginTop:8},children:e(Kn,{metric:n.loopMetric})}),n&&e("div",{style:{marginTop:8},children:e($n,{score:n.healthScore,factors:n.healthFactors})}),n&&e("div",{style:{marginTop:8},children:e(ea,{data:n.timeline})}),n&&e("div",{style:{marginTop:8,display:"grid",gridTemplateColumns:"minmax(0, 1.4fr) minmax(0, 1fr)",gap:8},children:[e(ia,{data:n.ageMatrix??[]}),e(ra,{data:n.knowledgeRadar??[]})]}),i&&e("div",{style:{marginTop:8},children:e(oa,{data:i})}),e("div",{style:{marginTop:8},children:e(da,{})}),t&&(()=>{const u=["auto_saved","auto-tracked","session_end","session:","source:","scope:","date:","urgency:"],f=t.tagDistribution.filter(c=>!u.some(p=>c.tag.startsWith(p))&&!/^\d{4}-\d{2}-\d{2}/.test(c.tag));return f.length>0?e("div",{class:"card",style:{marginTop:8},children:[e("div",{class:"card-title",children:a("analytics.topics")}),e("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:f.slice(0,30).map(c=>e("span",{class:"tag",style:{fontSize:Math.max(11,Math.min(15,10+Math.log2(c.count+1)))+"px"},children:[c.tag," ",e("span",{style:{opacity:.5},children:["(",c.count,")"]})]},c.tag))})]}):null})()]})}function cs(t){return t&&t.charAt(0).toUpperCase()+t.slice(1)}function ds(t,s){if(!s)return"—";const n=new Date(s);return Number.isNaN(n.getTime())?s:n.toLocaleString(t)}function ga(t){switch(t){case"npm-global":return a("settings.installNpmGlobal");case"npm-local":return a("settings.installNpmLocal");case"source-checkout":return a("settings.installSourceCheckout");default:return a("settings.installUnknown")}}function ha(t){switch(t){case"npm-global":return a("settings.updateGuidanceNpmGlobal");case"npm-local":return a("settings.updateGuidanceNpmLocal");case"source-checkout":return a("settings.updateGuidanceSourceCheckout");default:return a("settings.updateGuidanceUnknown")}}function ma({locale:t,onLocaleChange:s}){const[n,o]=x(null),[i,r]=x(null),[g,d]=x(""),[l,u]=x(""),[f,c]=x(""),[p,h]=x(""),[m,y]=x(""),[v,w]=x(!1),[b,E]=x(!1),[T,B]=x(""),[j,Z]=x(null),[V,te]=x(!1),[ne,M]=x(!0),[F,$]=x(!0),[ce,ee]=x(!1);async function ke(D=!0,U=!1){U?ee(!0):$(!0);try{const pe=await q("GET",D?"/v1/update-status":"/v1/update-status?cached=1");r(pe)}catch{U||r(null)}finally{U?ee(!1):$(!1)}}J(()=>{let D=!1;return q("GET","/v1/config").then(U=>{o(U);const P=U.config.llm?.provider||"",pe=U.config.llm?.model||"";d(P),c(pe),h(P),y(pe),w(!!U.config.llm?.apiKey)}).finally(()=>M(!1)),(async()=>(await ke(!1),D||ke(!0,!0)))(),()=>{D=!0}},[]);async function ue(){te(!0),B(""),Z(null);try{const D=await q("POST","/v1/config/test",{provider:g,...l?{apiKey:l}:{}});Z(D),D.valid&&!f&&D.suggested&&c(D.suggested)}catch(D){Z({valid:!1,error:D.message})}finally{te(!1)}}function H(D){d(D),Z(null),c("")}function O(D){u(D),Z(null)}async function k(){E(!0),B("");try{const D={provider:g};f&&(D.model=f),l&&(D.apiKey=l),await q("POST","/v1/config",{llm:D}),B(a("settings.saved")),l&&w(!0),u(""),Z(null),h(g),y(f)}catch(D){B(a("common.error")+": "+D.message)}finally{E(!1)}}async function L(){if(confirm(a("settings.removeProviderConfirm"))){E(!0),B("");try{await q("POST","/v1/config",{llm:null}),d(""),c(""),u(""),h(""),y(""),w(!1),Z(null),B(a("settings.providerRemoved"))}catch(D){B(a("common.error")+": "+D.message)}finally{E(!1)}}}if(ne)return e("div",{class:"empty",children:e("div",{class:"loading"})});const W=n?.capabilities,oe=W?.searchLevel?a("settings.smartMode"):a("settings.core"),G=F||ce&&!i,ve=F||ce,be=!!i?.currentVersionDeprecated,_=!!(i?.latestVersion&&i.latestVersion!==i.currentVersion),R=!!(be&&i?.latestVersion&&i.latestVersion===i.currentVersion&&i?.freshness==="fresh"),A=!!(i?.checkSucceeded&&i?.lastError),I=G?a("settings.updateChecking"):i?be?a(_?"settings.updateAvailable":R?"settings.updateDeprecatedNoTarget":"settings.updateDeprecatedTargetUnknown"):i.freshness==="unavailable"?a("settings.updateNoSuccessfulChecks"):!i.checkSucceeded&&i.freshness==="stale"?a("settings.updateStale"):!i.checkSucceeded&&i.freshness==="cached"?a("settings.updateCachedFallback"):i.updateAvailable?a("settings.updateAvailable"):a(A?"settings.updatePartialSummary":"settings.upToDate"):a("settings.updateUnavailable"),N=i?be?"var(--danger)":i.freshness==="unavailable"||!i.checkSucceeded&&i.freshness==="stale"?"var(--warning)":!i.checkSucceeded&&i.freshness==="cached"||i.updateAvailable?"var(--info)":A?"var(--warning)":"var(--success)":"var(--warning)",K=i?.freshness==="stale"?a("settings.updateSourceStale"):i?.source==="cache"?a("settings.updateSourceCached"):i?.source==="fresh"?a("settings.updateSourceFresh"):a("settings.updateSourceUnavailable"),Y=ga(i?.installChannel),me=ha(i?.installChannel),de=G?a("common.loading"):ds(t,i?.lastAttemptAt||null),we=G?a("common.loading"):ds(t,i?.lastSuccessfulCheckAt||null),xe=!!i?.lastSuccessfulCheckAt,Be=!!i?.lastError&&!G;return e("div",{children:[e("div",{class:"card",children:[e("div",{class:"card-title",children:a("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:oe}),e("div",{class:"stat-lbl",children:a("settings.searchMode")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",style:{fontSize:14},children:cs(W?.embeddings||"—")}),e("div",{class:"stat-lbl",children:a("settings.embeddings")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",style:{fontSize:14},children:cs(W?.llm?.provider||a("settings.none"))}),e("div",{class:"stat-lbl",children:a("settings.llmProvider")})]})]})]}),e("div",{class:"card",children:[e("div",{class:"card-title",children:a("settings.llmProvider")}),e("div",{style:{padding:"10px 12px",marginBottom:14,background:"var(--bg-elevated)",border:"1px solid var(--border-subtle)",borderRadius:6,fontSize:12,lineHeight:1.55,color:"var(--text-2)"},children:[e("div",{style:{fontWeight:600,color:"var(--text-1)",marginBottom:4},children:a("settings.llmOptional.title")}),e("div",{style:{marginBottom:6},children:a("settings.llmOptional.body")}),e("div",{children:[e("strong",{children:a("settings.llmOptional.coreLabel")})," — ",a("settings.llmOptional.coreFeatures")]}),e("div",{children:[e("strong",{children:a("settings.llmOptional.smartLabel")})," — ",a("settings.llmOptional.smartFeatures")]})]}),e("form",{onSubmit:D=>{D.preventDefault(),k()},children:[e("div",{style:{display:"flex",gap:16,marginBottom:14},children:[["anthropic","Anthropic (Claude)"],["openai","OpenAI"],["ollama","Ollama (Local)"]].map(([D,U])=>e("label",{style:{display:"flex",alignItems:"center",gap:5,cursor:"pointer",fontSize:13},children:[e("input",{type:"radio",name:"provider",value:D,checked:g===D,onChange:()=>H(D)}),U]},D))}),g&&g!=="ollama"&&e("div",{style:{marginBottom:12},children:[e("label",{style:{fontSize:12,color:"var(--text-2)",display:"block",marginBottom:4},children:a("settings.apiKey")}),e("div",{style:{display:"flex",gap:8},children:[e("input",{type:"password",autoComplete:"off",placeholder:g==="anthropic"?"sk-ant-api03-…":"sk-…",value:l,onInput:D=>O(D.target.value),style:{flex:1}}),e("button",{type:"button",class:"btn",onClick:()=>void ue(),disabled:g===""||V||g!=="ollama"&&l==="",style:{flexShrink:0},children:a(V?"settings.testing":"settings.test")})]})]}),g==="ollama"&&e("div",{style:{marginBottom:12},children:e("button",{type:"button",class:"btn",onClick:()=>void ue(),disabled:V,children:a(V?"settings.testing":"settings.test")})}),j&&e("div",{style:{marginBottom:12,padding:"8px 10px",borderRadius:4,fontSize:12,background:j.valid?"rgba(0, 214, 180, 0.08)":"rgba(255, 107, 107, 0.08)",border:`1px solid ${j.valid?"rgba(0, 214, 180, 0.4)":"rgba(255, 107, 107, 0.4)"}`,color:j.valid?"#00D6B4":"#ff6b6b"},children:j.valid?a("settings.testPassed",{count:j.models?.length??0}):`✗ ${j.error||a("settings.testFailed")}`}),j?.valid&&j.models&&j.models.length>0&&e("div",{style:{marginBottom:14},children:[e("label",{style:{fontSize:12,color:"var(--text-2)",display:"block",marginBottom:4},children:[a("settings.model"),j.suggested&&e("span",{style:{marginLeft:6,color:"var(--text-3)",fontWeight:400},children:["(",a("settings.suggested"),": ",e("span",{style:{color:"var(--accent)"},children:j.suggested}),")"]})]}),e("select",{value:f,onChange:D=>c(D.target.value),style:{width:"100%"},children:j.models.map(D=>e("option",{value:D.id,children:[D.id,D.created?` — ${D.created.slice(0,10)}`:""]},D.id))})]}),(()=>{const U=(g!==p||!!l||f!==m)&&!j?.valid;return e("div",{style:{display:"flex",gap:10,alignItems:"center",flexWrap:"wrap"},children:[e("button",{class:"btn btn-primary",type:"submit",disabled:!g||b||U,children:a(b?"settings.saving":"settings.save")}),v&&e("button",{type:"button",class:"btn",onClick:L,disabled:b,style:{borderColor:"var(--danger)",color:"var(--danger)",background:"transparent"},title:a("settings.removeProviderHint"),children:a("settings.removeProvider")}),U&&e("span",{style:{fontSize:11,color:"var(--text-3)"},children:a("settings.testRequired")}),T&&e("span",{style:{fontSize:12,color:T.startsWith(a("common.error"))?"var(--danger)":"var(--success)"},children:T})]})})()]})]}),e("div",{class:"card",children:[e("div",{class:"card-title",children:a("settings.updates")}),i?.currentVersionDeprecated&&i.deprecationMessage&&e("div",{style:{background:"rgba(255, 107, 107, 0.08)",border:"1px solid rgba(255, 107, 107, 0.4)",borderRadius:4,padding:"10px 12px",marginBottom:12,fontSize:12,color:"var(--text-0)",lineHeight:1.55},"data-testid":"settings-deprecation-warning",children:[e("strong",{style:{color:"#ff6b6b"},children:a("settings.updateDeprecatedTitle",{version:i.currentVersion})}),e("div",{style:{marginTop:4,opacity:.9},children:i.deprecationMessage})]}),i&&i.checkSucceeded&&i.lastError&&e("div",{style:{background:"rgba(255, 200, 87, 0.08)",border:"1px solid rgba(255, 200, 87, 0.4)",borderRadius:4,padding:"10px 12px",marginBottom:12,fontSize:12,color:"var(--text-0)",lineHeight:1.55},"data-testid":"settings-update-partial-warning",children:[e("strong",{style:{color:"var(--warning)"},children:a("settings.updatePartialTitle")}),e("div",{style:{marginTop:4,opacity:.9},children:a("settings.updatePartialDescription",{message:i.lastError??""})})]}),e("div",{style:{display:"flex",justifyContent:"space-between",gap:16,alignItems:"baseline",marginBottom:12,flexWrap:"wrap"},children:[e("div",{style:{color:N,fontSize:13,fontWeight:600},children:I}),e("div",{style:{display:"flex",gap:10,alignItems:"center",flexWrap:"wrap"},children:[!G&&i&&e("div",{style:{fontSize:11,color:"var(--text-2)"},children:K}),e("button",{class:"btn btn-sm",type:"button",onClick:()=>{ke(!0,!!i)},disabled:ve,children:a(ve?"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:a("settings.installMethod")}),e("span",{style:{color:"var(--text-0)"},children:G?a("common.loading"):Y})]}),e("div",{style:{display:"flex",justifyContent:"space-between",gap:16,fontSize:12},children:[e("span",{style:{color:"var(--text-2)"},children:a("settings.currentVersion")}),e("span",{style:{color:"var(--text-0)",fontFamily:"var(--mono)"},children:i?.currentVersion||"—"})]}),e("div",{style:{display:"flex",justifyContent:"space-between",gap:16,fontSize:12},children:[e("span",{style:{color:"var(--text-2)"},children:a("settings.latestVersion")}),e("span",{style:{color:"var(--text-0)",fontFamily:"var(--mono)"},children:i?.latestVersion||"—"})]}),e("div",{style:{display:"flex",justifyContent:"space-between",gap:16,fontSize:12},children:[e("span",{style:{color:"var(--text-2)"},children:a("settings.lastAttempted")}),e("span",{style:{color:"var(--text-0)"},children:de})]}),xe&&e("div",{style:{display:"flex",justifyContent:"space-between",gap:16,fontSize:12},children:[e("span",{style:{color:"var(--text-2)"},children:a("settings.lastSuccessful")}),e("span",{style:{color:"var(--text-0)"},children:we})]}),!F&&e("div",{style:{color:"var(--text-2)",fontSize:12,lineHeight:1.5,marginTop:2},children:me}),Be&&e("div",{style:{color:"var(--warning)",fontSize:12,lineHeight:1.5},children:a("settings.updateLastError",{message:i?.lastError||""})}),i?.recommendedCommand&&e("div",{style:{display:"grid",gap:6,marginTop:4},children:[e("span",{style:{color:"var(--text-2)",fontSize:12},children:a("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:i.recommendedCommand})]})]})]}),e("div",{class:"card",children:[e("div",{class:"card-title",children:a("settings.behaviourTitle")}),e("div",{style:{marginTop:8},children:[e("label",{style:{fontSize:12,color:"var(--text-2)",display:"block",marginBottom:4},children:a("settings.autoUpdateLabel")}),e("select",{value:n?.config.autoUpdate??"off",onChange:async D=>{const U=D.target.value;try{await q("POST","/v1/config",{autoUpdate:U}),o(P=>P&&{...P,config:{...P.config,autoUpdate:U}})}catch{}},style:{fontSize:13,padding:"6px 10px",borderRadius:6,border:"1px solid var(--border)",background:"var(--surface)",color:"var(--text-1)",cursor:"pointer"},children:[e("option",{value:"off",children:a("settings.autoUpdateOff")}),e("option",{value:"patch",children:a("settings.autoUpdatePatch")}),e("option",{value:"minor",children:a("settings.autoUpdateMinor")}),e("option",{value:"major",children:a("settings.autoUpdateMajor")})]}),e("div",{style:{fontSize:11,color:"var(--text-3)",marginTop:4},children:a("settings.autoUpdateHint")})]}),e("div",{style:{marginTop:16,paddingTop:14,borderTop:"1px solid var(--border-subtle)"},children:e("label",{style:{display:"flex",alignItems:"flex-start",gap:8,cursor:"pointer"},children:[e("input",{type:"checkbox",checked:!!n?.config.enableAgenticOrchestration,onChange:async D=>{const U=D.target.checked;try{await q("POST","/v1/config",{enableAgenticOrchestration:U}),o(P=>P&&{...P,config:{...P.config,enableAgenticOrchestration:U}})}catch{}},style:{marginTop:2}}),e("span",{children:[e("span",{style:{fontSize:13,color:"var(--text-1)"},children:a("settings.agenticLabel")}),e("div",{style:{fontSize:11,color:"var(--text-3)",marginTop:2},children:a("settings.agenticHint")})]})]})})]}),e("div",{class:"card",children:[e("div",{class:"card-title",children:a("settings.language")}),e("select",{value:t,onChange:D=>{const U=D.target.value;fn(U),s(U)},style:{fontSize:13,padding:"6px 10px",borderRadius:6,border:"1px solid var(--border)",background:"var(--surface)",color:"var(--text-1)",cursor:"pointer"},children:bn().map(D=>e("option",{value:D.code,children:D.name},D.code))})]})]})}const pa={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"},fa="#B8BEC6";function us(t){return pa[t]||fa}function ba(t){const s=Math.max(0,Math.min(1,(t-.15)/.85)),n=Math.round(248+-248*s),o=Math.round(113+101*s),i=Math.round(113+67*s);return`rgb(${n},${o},${i})`}function ya(t){const s=t??0;return s===0?5:Math.min(14,5+Math.log2(s+1)*2)}function va(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 ka(t){const s=Date.now()-new Date(t).getTime(),n=Math.floor(s/864e5);return n<1?a("graph.ageToday"):n<7?a("graph.ageDaysAgo",{count:n}):n<30?a("graph.ageWeeksAgo",{count:Math.floor(n/7)}):a("graph.ageDaysAgo",{count:n})}const gs=440,at=4;function xa(){const[t,s]=x(null),[n,o]=x(!0),[i,r]=x(""),[g,d]=x({}),[l]=Ht(),[u,f]=x(""),[c,p]=x(null),[h,m]=x(!1),y=ie(null),v=ie([]),w=ie([]),b=ie(0),E=ie({scale:1,panX:0,panY:0}),T=ie({active:!1,startScreenX:0,startScreenY:0,startPanX:0,startPanY:0,moved:!1}),B=ie({node:null,offsetX:0,offsetY:0,startX:0,startY:0,dragged:!1}),j=ie(null),Z=ie({x:0,y:0,node:null}),V=ie(800),te=ie(g),ne=ie(u),M=ie(c),F=ie(h);J(()=>{te.current=g},[g]),J(()=>{if(!t)return;const _=new Set(t.noiseTypes??[]);d(R=>{const A={...R};let I=!1;for(const N of _){const K=!l;A[N]!==K&&(A[N]=K,I=!0)}return I?A:R})},[l,t]),J(()=>{ne.current=u},[u]),J(()=>{M.current=c},[c]),J(()=>{F.current=h},[h]),J(()=>{_n().then(_=>{s(_);const R=new Set(_.noiseTypes??[]),A={};_.entities.forEach(I=>{A[I.type]=A[I.type]??(l?!R.has(I.type):!0)}),d(A)}).catch(_=>r(_.message)).finally(()=>o(!1))},[]),J(()=>{if(!t||n)return;const _=y.current;if(!_)return;const R=_.parentElement?.getBoundingClientRect(),A=R?Math.floor(R.width)-24:800,I=gs,N=window.devicePixelRatio||1;_.width=A*N,_.height=I*N,_.style.width=A+"px",_.style.height=I+"px",V.current=A;const K=new Set;t.relations.forEach(P=>{K.add(P.from),K.add(P.to)});const Y=new Map;t.entities.forEach(P=>{const pe=P.last_accessed_at||P.created_at;Y.set(P.name,{id:P.name,type:P.type,x:Math.random()*A*.8+A*.1,y:Math.random()*I*.8+I*.1,vx:0,vy:0,radius:ya(P.access_count),recency:va(pe),isOrphan:!K.has(P.name),lastDate:pe})}),v.current=Array.from(Y.values()),w.current=t.relations.filter(P=>Y.has(P.from)&&Y.has(P.to));const me=P=>{if(te.current[P.type]===!1)return!1;const C=M.current;return C?P.id===C?!0:w.current.some(Fe=>Fe.from===C&&Fe.to===P.id||Fe.to===C&&Fe.from===P.id):!0},de=P=>{const pe=Y.get(P.from),C=Y.get(P.to);return!pe||!C?!1:me(pe)&&me(C)},we=P=>{const pe=ne.current.toLowerCase();return pe?P.id.toLowerCase().includes(pe):!1};let xe=1;const Be=.005,D=()=>{xe=.3};window.__graphReheat=D;const U=()=>{const P=v.current,pe=w.current,C=_.getContext("2d");if(!C)return;const Le=window.devicePixelRatio||1;xe=Math.max(0,xe-Be);const Fe=xe>0,Bt=.85,Vs=2e3*xe,$s=80,Gs=.02*xe,zt=.02*xe,Ks=P.length>200,jt=A/2,Nt=I/2,Xe=new Map(P.map(S=>[S.id,S]));if(Fe){for(let S=0;S<P.length;S++)for(let z=S+1;z<P.length;z++){const Q=P[z].x-P[S].x,fe=P[z].y-P[S].y,ge=Q*Q+fe*fe;if(Ks&&ge>9e4)continue;const he=Math.sqrt(ge)||1,Te=Vs/(he*he),Ae=Q/he*Te,Ie=fe/he*Te;P[S].vx-=Ae,P[S].vy-=Ie,P[z].vx+=Ae,P[z].vy+=Ie}for(const S of pe){const z=Xe.get(S.from),Q=Xe.get(S.to);if(!z||!Q)continue;const fe=Q.x-z.x,ge=Q.y-z.y,he=Math.sqrt(fe*fe+ge*ge)||1,Te=(he-$s)*Gs,Ae=fe/he*Te,Ie=ge/he*Te;z.vx+=Ae,z.vy+=Ie,Q.vx-=Ae,Q.vy-=Ie}for(const S of P)S.vx+=(jt-S.x)*zt,S.vy+=(Nt-S.y)*zt}let qe=B.current.node;if(qe&&!P.includes(qe)&&(B.current.node=null,qe=null),!(!Fe&&!qe&&P.every(S=>S.vx===0&&S.vy===0)))for(const S of P){if(qe===S)continue;S.vx*=Bt,S.vy*=Bt,Math.abs(S.vx)<.01&&Math.abs(S.vy)<.01&&(S.vx=0,S.vy=0),S.x+=S.vx,S.y+=S.vy;const z=100;S.x<-z?S.x=-z:S.x>A+z&&(S.x=A+z),S.y<-z?S.y=-z:S.y>I+z&&(S.y=I+z)}const Ot=ne.current.toLowerCase();if(Ot){const S=P.filter(z=>z.id.toLowerCase().includes(Ot));if(S.length===1){const z=S[0],Q=jt-z.x,fe=Nt-z.y,ge=.05;for(const he of P)he.x+=Q*ge,he.y+=fe*ge}}C.setTransform(Le,0,0,Le,0,0),C.clearRect(0,0,A,I);const Ze=E.current;C.setTransform(Ze.scale*Le,0,0,Ze.scale*Le,Ze.panX*Le,Ze.panY*Le);const Wt=pe.filter(de),Ys=Wt.length<30;for(const S of Wt){const z=Xe.get(S.from),Q=Xe.get(S.to);if(!z||!Q)continue;const fe=Math.min(z.recency,Q.recency)*.6;if(C.globalAlpha=fe,C.strokeStyle="rgba(0, 214, 180, 0.4)",C.lineWidth=1,C.setLineDash([]),C.beginPath(),C.moveTo(z.x,z.y),C.lineTo(Q.x,Q.y),C.stroke(),Ys){const ge=(z.x+Q.x)/2,he=(z.y+Q.y)/2;C.font="9px Satoshi, system-ui, sans-serif",C.fillStyle="#7A828E",C.fillText(S.type,ge+2,he-2)}}C.globalAlpha=1;const Xs=P.filter(me),Zs=j.current;for(const S of Xs){const z=Zs===S,Q=we(S),fe=M.current===S.id,ge=fe?10:z?9:S.radius,he=z||Q?1:S.recency;if(C.globalAlpha=he,C.beginPath(),C.arc(S.x,S.y,ge,0,Math.PI*2),C.fillStyle=F.current?ba(S.recency):us(S.type),C.fill(),S.isOrphan&&(C.setLineDash([3,3]),C.strokeStyle="#4A5260",C.lineWidth=1,C.stroke(),C.setLineDash([])),Q&&(C.globalAlpha=1,C.strokeStyle="#00F0CA",C.lineWidth=2,C.beginPath(),C.arc(S.x,S.y,ge+3,0,Math.PI*2),C.stroke()),z&&!Q&&(C.globalAlpha=1,C.strokeStyle="#fff",C.lineWidth=2,C.beginPath(),C.arc(S.x,S.y,ge,0,Math.PI*2),C.stroke()),z||Q||fe){C.globalAlpha=1,C.fillStyle="#B8BEC6",C.font="10px Satoshi, system-ui, sans-serif";const Ae=Q||fe?S.id:S.id.length>20?S.id.slice(0,18)+"...":S.id;C.fillText(Ae,S.x+ge+4,S.y+3)}}C.globalAlpha=1;const De=Z.current;if(De.node&&me(De.node)){C.setTransform(Le,0,0,Le,0,0);const S=De.x+12,z=De.y-10,Q=De.node.id,fe=De.node.type,ge=ka(De.node.lastDate),he=Q,Te=`${fe} | ${ge}`;C.font="11px Satoshi, system-ui, sans-serif";const Ae=C.measureText(he).width,Ie=C.measureText(Te).width,Qs=Math.max(Ae,Ie)+12,Js=34;C.fillStyle="rgba(13, 16, 20, 0.92)",C.strokeStyle="rgba(0, 214, 180, 0.3)",C.lineWidth=1,C.beginPath(),C.roundRect(S-4,z-18,Qs,Js,4),C.fill(),C.stroke(),C.fillStyle="#F0F2F4",C.fillText(he,S,z-4),C.fillStyle="#7A828E",C.font="10px Geist Mono, JetBrains Mono, monospace",C.fillText(Te,S,z+10)}b.current=requestAnimationFrame(U)};return b.current=requestAnimationFrame(U),()=>cancelAnimationFrame(b.current)},[t,n]);const $=ye((_,R)=>{const A=v.current,I=te.current,N=M.current,Y=12/(E.current.scale||1),me=Y*Y;for(let de=A.length-1;de>=0;de--){const we=A[de];if(I[we.type]===!1||N&&we.id!==N&&!w.current.some(U=>U.from===N&&U.to===we.id||U.to===N&&U.from===we.id))continue;const xe=we.x-_,Be=we.y-R;if(xe*xe+Be*Be<me)return we}return null},[]),ce=ye(_=>{const R=y.current;if(!R)return{x:0,y:0};const A=R.getBoundingClientRect();return{x:_.clientX-A.left,y:_.clientY-A.top}},[]),ee=ye((_,R)=>{const A=E.current;return{x:(_-A.panX)/A.scale,y:(R-A.panY)/A.scale}},[]),ke=ye(_=>{const R=ce(_),A=ee(R.x,R.y),I=$(A.x,A.y);if(I)window.__graphReheat?.(),B.current={node:I,offsetX:A.x-I.x,offsetY:A.y-I.y,startX:R.x,startY:R.y,dragged:!1},T.current.active=!1;else{const N=E.current;T.current={active:!0,startScreenX:R.x,startScreenY:R.y,startPanX:N.panX,startPanY:N.panY,moved:!1},B.current={node:null,offsetX:0,offsetY:0,startX:R.x,startY:R.y,dragged:!1};const K=y.current;K&&(K.style.cursor="grabbing")}},[$,ce,ee]),ue=ye(_=>{const R=ce(_),A=ee(R.x,R.y),I=B.current,N=T.current;if(I.node){const me=R.x-I.startX,de=R.y-I.startY;me*me+de*de>at*at&&(I.dragged=!0),I.node.x=A.x-I.offsetX,I.node.y=A.y-I.offsetY,I.node.vx=0,I.node.vy=0}else if(N.active){const me=R.x-N.startScreenX,de=R.y-N.startScreenY;me*me+de*de>at*at&&(N.moved=!0),E.current.panX=N.startPanX+me,E.current.panY=N.startPanY+de}const K=$(A.x,A.y);j.current=K,Z.current=K?{x:R.x,y:R.y,node:K}:{x:0,y:0,node:null};const Y=y.current;Y&&(I.node||N.active?Y.style.cursor="grabbing":K?Y.style.cursor=M.current?"pointer":"grab":Y.style.cursor="grab")},[$,ce,ee]),H=ye(_=>{const R=B.current,A=T.current,I=ce(_),N=ee(I.x,I.y);R.node&&!R.dragged?p(Y=>Y===R.node.id?null:R.node.id):!R.node&&A.active&&!A.moved&&($(N.x,N.y)||p(null)),B.current={node:null,offsetX:0,offsetY:0,startX:0,startY:0,dragged:!1},T.current.active=!1,T.current.moved=!1;const K=y.current;if(K){const Y=$(N.x,N.y);K.style.cursor=Y&&M.current?"pointer":"grab"}},[$,ce,ee]),O=ye(()=>{B.current={node:null,offsetX:0,offsetY:0,startX:0,startY:0,dragged:!1},T.current.active=!1,T.current.moved=!1,j.current=null,Z.current={x:0,y:0,node:null};const _=y.current;_&&(_.style.cursor="default")},[]),k=ye(_=>{_.preventDefault();const R=y.current;if(!R)return;const A=R.getBoundingClientRect(),I=_.clientX-A.left,N=_.clientY-A.top,K=E.current,Y=K.scale,me=Math.exp(-_.deltaY*.0015),de=Math.max(.25,Math.min(4,Y*me));if(de===Y)return;const we=(I-K.panX)/Y,xe=(N-K.panY)/Y;K.scale=de,K.panX=I-we*de,K.panY=N-xe*de},[]),L=ye(()=>{E.current={scale:1,panX:0,panY:0}},[]);if(J(()=>{if(n||!t)return;const _=y.current;if(!_)return;const R=A=>k(A);return _.addEventListener("wheel",R,{passive:!1}),()=>_.removeEventListener("wheel",R)},[t,n,k]),n)return e("div",{class:"empty",children:e("div",{class:"loading"})});if(i)return e("div",{class:"error-box",children:[a("common.error"),": ",i]});if(!t)return e("div",{class:"error-box",children:[a("common.error"),": ",a("common.noData")]});const W=new Map;t.entities.forEach(_=>W.set(_.type,(W.get(_.type)||0)+1));const oe=new Set;t.relations.forEach(_=>{oe.add(_.from),oe.add(_.to)});const G=t.entities.filter(_=>!oe.has(_.name)).length,ve=u?t.entities.filter(_=>_.name.toLowerCase().includes(u.toLowerCase())).length:0,be=c?t.entities.find(_=>_.name===c):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:a("graph.entities")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",children:t.relations.length.toLocaleString()}),e("div",{class:"stat-lbl",children:a("graph.relations")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",children:G.toLocaleString()}),e("div",{class:"stat-lbl",children:a("graph.orphans")})]})]}),e("div",{class:"card",style:{padding:12},children:[e("div",{style:{display:"flex",alignItems:"center",gap:12,marginBottom:8,flexWrap:"nowrap",overflowX:"auto",paddingBottom:4,scrollbarWidth:"thin"},children:[e("span",{class:"card-title",style:{margin:0,flexShrink:0},children:a("tab.graph")}),Array.from(W.entries()).map(([_,R])=>{const A=g[_]!==!1,I=us(_);return e("label",{style:{display:"inline-flex",alignItems:"center",gap:4,fontSize:11,color:"#B8BEC6",opacity:A?1:.4,cursor:"pointer",userSelect:"none"},children:[e("input",{type:"checkbox",checked:A,onChange:()=>d(N=>({...N,[_]:!N[_]})),style:{accentColor:I,width:13,height:13,cursor:"pointer"}}),e("span",{style:{width:8,height:8,borderRadius:"50%",background:I,display:"inline-block",flexShrink:0}}),_," (",R,")"]},_)})]}),e("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:8,flexWrap:"wrap"},children:[e("input",{type:"text",placeholder:a("graph.search"),value:u,onInput:_=>f(_.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&&e("span",{style:{fontSize:11,fontFamily:"Geist Mono, JetBrains Mono, monospace",color:"#7A828E"},children:[ve," ",a("graph.matches")]}),e("button",{onClick:L,title:a("graph.resetViewHint"),style:{marginLeft:"auto",padding:"3px 10px",background:"rgba(255,255,255,0.04)",border:"1px solid rgba(255,255,255,0.08)",borderRadius:4,color:"#7A828E",fontSize:11,cursor:"pointer"},children:a("graph.resetView")}),e("button",{onClick:()=>m(_=>!_),style:{padding:"3px 10px",background:h?"rgba(0,214,180,0.15)":"rgba(255,255,255,0.04)",border:`1px solid ${h?"rgba(0,214,180,0.4)":"rgba(255,255,255,0.08)"}`,borderRadius:4,color:h?"#00D6B4":"#7A828E",fontSize:11,cursor:"pointer",display:"flex",alignItems:"center",gap:6},children:[e("span",{style:{display:"inline-block",width:32,height:6,borderRadius:3,background:"linear-gradient(to right, #F87171, #00D6B4)"}}),"Drift"]})]}),be&&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:[a("graph.focusMode"),":"]}),e("span",{style:{color:"#F0F2F4"},children:be.name}),e("button",{onClick:()=>p(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:a("graph.showAll")})]}),!c&&e("div",{style:{fontSize:11,color:"#4A5260",marginBottom:6},children:a("graph.interactHint")}),e("canvas",{ref:y,style:{width:"100%",height:gs,borderRadius:"var(--radius-sm)",background:"#080A0C",cursor:"grab"},onMouseDown:ke,onMouseMove:ue,onMouseUp:H,onMouseLeave:O})]})]})}function Ne({type:t,children:s}){return e("span",{style:{display:"inline-flex",alignItems:"center",gap:6},children:[e(Ke,{type:t,size:16}),s]})}function wa(t){const s=[];let n=null;for(const o of t){const i=o.trim();i.startsWith("Error:")?(n&&s.push(n),n={error:i.slice(6).trim(),rootCause:"",fix:"",prevention:""}):i.startsWith("Root cause:")?(n||(n={error:"",rootCause:"",fix:"",prevention:""}),n.rootCause=i.slice(11).trim()):i.startsWith("Fix:")||i.startsWith("Solution")?(n||(n={error:"",rootCause:"",fix:"",prevention:""}),n.fix=i.replace(/^(Fix|Solution\s*\d*):/i,"").trim()):i.startsWith("Prevention:")&&(n||(n={error:"",rootCause:"",fix:"",prevention:""}),n.prevention=i.slice(11).trim())}return n&&s.push(n),s}function Ma(t){const s=t.observations??[],n=s[0]?.match(/^Plan "(.+?)" completed \((\d+) steps?\)/),o=s.find(r=>r.startsWith("Steps:"))?.slice(6).trim()??"",i=s.find(r=>r.startsWith("Commits:"))?.slice(8).trim()??"";return{planName:n?.[1]??t.name,stepCount:n?parseInt(n[2],10):0,steps:o,commits:i?i.split(",").map(r=>r.trim()).filter(Boolean):[]}}const Mt={critical:"#FF6B6B",major:"#FFB84D",minor:"#60A5FA"};function Us(t){const s=t.tags??[];return s.includes("severity:critical")?"critical":s.includes("severity:major")?"major":s.includes("severity:minor")?"minor":null}function _a({entity:t}){const s=wa(t.observations??[]),n=Us(t),o=Ue(t),i=Ye(t.access_count),r=n?Mt[n]:"var(--border)";return e("div",{class:"card",style:{borderLeft:`3px solid ${r}`,marginBottom:12},children:[e("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",marginBottom:10,flexWrap:"wrap",gap:6},children:[e("div",{class:"card-title",style:{margin:0,flex:1,minWidth:0},children:e(Ne,{type:"lesson_learned",children:t.name})}),e("div",{style:{display:"flex",gap:6,flexShrink:0,flexWrap:"wrap"},children:[o&&e("span",{class:"tag",style:{background:"rgba(0, 214, 180, 0.12)",color:"var(--accent)",display:"inline-flex",alignItems:"center",gap:4},children:[e("svg",{width:"11",height:"11",viewBox:"0 0 16 16","aria-hidden":"true",style:{flexShrink:0},children:e("path",{d:"M2 4 a1 1 0 0 1 1 -1 h4 l2 2 h5 a1 1 0 0 1 1 1 v6 a1 1 0 0 1 -1 1 H3 a1 1 0 0 1 -1 -1 z",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinejoin:"round"})}),o]}),n&&e("span",{class:"badge",style:{background:`${Mt[n]}18`,color:Mt[n]},children:n}),i.tone!=="none"&&e("span",{class:"tag",style:{background:i.tone==="high"?"rgba(0, 214, 180, 0.18)":"rgba(0, 214, 180, 0.10)",color:"var(--accent)",fontWeight:i.tone==="high"?600:400},children:["✓ ",i.label]}),e("span",{style:{fontSize:11,color:"var(--text-3)"},children:Ee(t.last_accessed_at||t.created_at)})]})]}),s.length===0&&e("div",{style:{fontSize:12,color:"var(--text-3)",fontStyle:"italic"},children:a("lessons.unstructured")}),s.map((g,d)=>e("div",{style:{marginTop:d>0?14:0,paddingTop:d>0?14:0,borderTop:d>0?"1px dashed var(--border-subtle)":"none"},children:[g.error&&e("div",{style:{marginBottom:8},children:[e("div",{style:{fontSize:11,fontWeight:600,color:"var(--danger)",marginBottom:2},children:a("lessons.error")}),e("div",{style:{fontSize:13,lineHeight:1.5},children:g.error})]}),g.rootCause&&e("div",{style:{marginBottom:8},children:[e("div",{style:{fontSize:11,fontWeight:600,color:"var(--warning)",marginBottom:2},children:a("lessons.rootCause")}),e("div",{style:{fontSize:13,lineHeight:1.5},children:g.rootCause})]}),g.fix&&e("div",{style:{marginBottom:8},children:[e("div",{style:{fontSize:11,fontWeight:600,color:"var(--success)",marginBottom:2},children:a("lessons.fix")}),e("div",{style:{fontSize:13,lineHeight:1.5},children:g.fix})]}),g.prevention&&e("div",{children:[e("div",{style:{fontSize:11,fontWeight:600,color:"var(--info)",marginBottom:2},children:a("lessons.prevention")}),e("div",{style:{fontSize:13,lineHeight:1.5},children:g.prevention})]})]},d))]})}function Sa({entity:t}){const s=Ma(t),n=Ue(t),o=Ye(t.access_count);return e("div",{class:"card",style:{marginBottom:10},children:[e("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",marginBottom:6,gap:8,flexWrap:"wrap"},children:[e("div",{style:{flex:1,minWidth:0},children:[e("div",{class:"card-title",style:{margin:0},children:e(Ne,{type:"plan",children:s.planName})}),e("div",{style:{fontSize:12,color:"var(--text-3)",marginTop:2},children:[s.stepCount," ",a("lessons.stepsLabel")," · ",a("lessons.commitsCount",{count:s.commits.length})]})]}),e("div",{style:{display:"flex",gap:6,flexShrink:0},children:[n&&e("span",{class:"tag",style:{background:"rgba(0, 214, 180, 0.12)",color:"var(--accent)",display:"inline-flex",alignItems:"center",gap:4},children:[e("svg",{width:"11",height:"11",viewBox:"0 0 16 16","aria-hidden":"true",style:{flexShrink:0},children:e("path",{d:"M2 4 a1 1 0 0 1 1 -1 h4 l2 2 h5 a1 1 0 0 1 1 1 v6 a1 1 0 0 1 -1 1 H3 a1 1 0 0 1 -1 -1 z",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinejoin:"round"})}),n]}),o.tone!=="none"&&e("span",{class:"tag",style:{background:"rgba(0, 214, 180, 0.10)",color:"var(--accent)"},children:["✓ ",o.label]}),e("span",{style:{fontSize:11,color:"var(--text-3)"},children:Ee(t.created_at)})]})]}),s.steps&&e("div",{style:{fontSize:12,color:"var(--text-2)",lineHeight:1.5,marginTop:4},children:s.steps.length>220?s.steps.slice(0,220)+"…":s.steps}),s.commits.length>0&&e("div",{style:{marginTop:8,fontSize:11,color:"var(--text-3)",fontFamily:"var(--mono)"},children:[s.commits.slice(0,4).join(" · "),s.commits.length>4&&e("span",{children:[" · +",s.commits.length-4]})]})]})}function Ca({entity:t}){const s=t.observations??[],n=Ue(t),o=Ye(t.access_count);return e("div",{class:"card",style:{marginBottom:10},children:[e("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",marginBottom:6,gap:8,flexWrap:"wrap"},children:[e("div",{class:"card-title",style:{margin:0,flex:1,minWidth:0},children:e(Ne,{type:"note",children:t.name})}),e("div",{style:{display:"flex",gap:6,flexShrink:0},children:[n&&e("span",{class:"tag",style:{background:"rgba(0, 214, 180, 0.12)",color:"var(--accent)",display:"inline-flex",alignItems:"center",gap:4},children:[e("svg",{width:"11",height:"11",viewBox:"0 0 16 16","aria-hidden":"true",style:{flexShrink:0},children:e("path",{d:"M2 4 a1 1 0 0 1 1 -1 h4 l2 2 h5 a1 1 0 0 1 1 1 v6 a1 1 0 0 1 -1 1 H3 a1 1 0 0 1 -1 -1 z",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinejoin:"round"})}),n]}),o.tone!=="none"&&e("span",{class:"tag",style:{background:"rgba(0, 214, 180, 0.10)",color:"var(--accent)"},children:["✓ ",o.label]}),e("span",{style:{fontSize:11,color:"var(--text-3)"},children:Ee(t.created_at)})]})]}),s.length>0&&e("ul",{style:{fontSize:13,lineHeight:1.6,margin:0,paddingLeft:18,color:"var(--text-1)"},children:[s.slice(0,6).map((i,r)=>e("li",{style:{marginBottom:3},children:i.length>200?i.slice(0,200)+"…":i},r)),s.length>6&&e("li",{style:{color:"var(--text-3)",listStyle:"none"},children:a("lessons.moreItems",{count:s.length-6})})]})]})}function La(){const[t,s]=x([]),[n,o]=x([]),[i,r]=x(!0),[g,d]=x(""),[l,u]=x("failure"),[f,c]=x(""),[p,h]=x("all");J(()=>{Promise.all([Sn(),Hs().catch(()=>[])]).then(([b,E])=>{s(b),o(E)}).catch(b=>d(b.message)).finally(()=>r(!1))},[]);const m=Ce(()=>{const b={failure:[],"plan-completion":[],freeform:[]};for(const E of t)b[Tn(E)].push(E);for(const E of Object.keys(b))b[E].sort((T,B)=>(B.access_count??0)-(T.access_count??0)||B.created_at.localeCompare(T.created_at));return b},[t]),y=Ce(()=>{const b=m[l],E=f.toLowerCase();return b.filter(T=>p!=="all"&&Ue(T)!==p?!1:E?[T.name,...T.observations??[],...T.tags??[]].join(" ").toLowerCase().includes(E):!0)},[m,l,f,p]);if(i)return e("div",{class:"empty",children:e("div",{class:"loading"})});if(g)return e("div",{class:"error-box",children:[a("common.error"),": ",g]});const v=t.reduce((b,E)=>b+(E.access_count??0),0),w=m.failure.filter(b=>Us(b)==="critical").length;return e("div",{children:[e("div",{class:"stats-row",children:[e("div",{class:"stat",children:[e("div",{class:"stat-val",children:m.failure.length}),e("div",{class:"stat-lbl",children:a("lessons.tabFailure")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",style:{color:w>0?"#FF6B6B":void 0},children:w}),e("div",{class:"stat-lbl",children:"Critical"})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",children:m["plan-completion"].length}),e("div",{class:"stat-lbl",children:a("lessons.tabPlan")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",children:v}),e("div",{class:"stat-lbl",children:a("lessons.totalRecalls")})]})]}),e("div",{class:"card",style:{padding:"12px 14px"},children:[e("div",{style:{display:"flex",gap:6,flexWrap:"wrap",marginBottom:10},children:[e("button",{class:"btn btn-sm",style:{background:l==="failure"?"rgba(0, 214, 180, 0.18)":"transparent",borderColor:l==="failure"?"rgba(0, 214, 180, 0.5)":"rgba(255,255,255,0.08)",color:l==="failure"?"var(--accent)":"var(--text-2)"},onClick:()=>u("failure"),children:[e(Ne,{type:"lesson_learned",children:a("lessons.tabFailure")})," ",e("span",{style:{opacity:.6,fontFamily:"var(--mono)",marginLeft:6},children:m.failure.length})]}),e("button",{class:"btn btn-sm",style:{background:l==="plan-completion"?"rgba(0, 214, 180, 0.18)":"transparent",borderColor:l==="plan-completion"?"rgba(0, 214, 180, 0.5)":"rgba(255,255,255,0.08)",color:l==="plan-completion"?"var(--accent)":"var(--text-2)"},onClick:()=>u("plan-completion"),children:[e(Ne,{type:"plan",children:a("lessons.tabPlan")})," ",e("span",{style:{opacity:.6,fontFamily:"var(--mono)",marginLeft:6},children:m["plan-completion"].length})]}),e("button",{class:"btn btn-sm",style:{background:l==="freeform"?"rgba(0, 214, 180, 0.18)":"transparent",borderColor:l==="freeform"?"rgba(0, 214, 180, 0.5)":"rgba(255,255,255,0.08)",color:l==="freeform"?"var(--accent)":"var(--text-2)"},onClick:()=>u("freeform"),children:[e(Ne,{type:"note",children:a("lessons.tabFreeform")})," ",e("span",{style:{opacity:.6,fontFamily:"var(--mono)",marginLeft:6},children:m.freeform.length})]})]}),e("div",{style:{display:"flex",gap:8,alignItems:"center",flexWrap:"wrap"},children:[e("input",{type:"search",placeholder:a("lessons.searchPlaceholder"),value:f,onInput:b=>c(b.target.value),style:{flex:1,minWidth:240,padding:"4px 8px",fontSize:12}}),n.length>0&&e("select",{value:p,onChange:b=>h(b.target.value),style:{padding:"3px 8px",fontSize:12},children:[e("option",{value:"all",children:a("lessons.allProjects")}),n.map(b=>e("option",{value:b.name,children:[b.name," (",b.count,")"]},b.name))]})]}),e("div",{style:{marginTop:8,fontSize:11,color:"var(--text-3)"},children:a("lessons.showing",{visible:y.length,total:m[l].length})})]}),e("div",{style:{marginTop:14},children:y.length===0?e("div",{class:"empty",children:[e("span",{class:"empty-icon",style:{display:"inline-flex",alignItems:"center",justifyContent:"center",color:"var(--text-3)"},children:e(Ke,{type:l==="failure"?"lesson_learned":l==="plan-completion"?"plan":"note",size:28})}),f?a("lessons.noMatch",{query:f}):a("lessons.emptyCategory")]}):y.map(b=>l==="failure"?e(_a,{entity:b},b.id):l==="plan-completion"?e(Sa,{entity:b},b.id):e(Ca,{entity:b},b.id))})]})}function Ta(t){if(!t)return null;for(const s of t){const n=/^severity:(high|medium|low)$/i.exec(s);if(n)return n[1].toLowerCase()}return null}function hs(t){switch(t){case"high":return"var(--danger)";case"medium":return"var(--warning)";case"low":return"var(--text-2)";default:return"var(--text-3)"}}function Aa(t){const{proposal:s,detail:n,expanded:o,inFlight:i,onToggleExpand:r,onAccept:g,onReject:d,formatRelative:l,statusBadgeStyle:u,statusLabel:f}=t,c=s.status==="pending",p=Ta(n?.proposed_digest?.tags),h=u(s.status);return e("div",{class:"card",style:{padding:14,borderLeft:"3px solid var(--warning)",background:"var(--warning-soft)"},children:[e("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:12,flexWrap:"wrap"},children:[e("div",{style:{flex:"1 1 60%",minWidth:240},children:[e("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[e("span",{class:"badge badge-type",style:{textTransform:"none"},children:["#",s.id]}),e("span",{class:"tag",style:{fontSize:11,background:"var(--warning)",color:"#080A0C",fontWeight:600},children:a("pattern.title")}),e("span",{style:{fontWeight:600},children:s.digest_name}),e("span",{class:"tag",style:{fontSize:11},children:s.project}),e("span",{class:"tag",style:{fontSize:11,color:"var(--text-2)"},children:a("pattern.evidenceCount",{n:String(s.source_count)})}),p&&e("span",{class:"tag",style:{fontSize:11,color:hs(p),borderColor:hs(p)},children:[a("pattern.severity"),": ",a(`pattern.severity.${p}`)]}),e("span",{class:"tag",style:{fontSize:11,...h},children:f(s.status)})]}),e("div",{style:{marginTop:6,color:"var(--text-2)",fontSize:13,lineHeight:1.5},children:[s.digest_observations_preview,s.digest_observations_preview==="(empty)"?"":"…"]}),e("div",{style:{marginTop:4,color:"var(--text-3)",fontSize:11},children:l(s.created_at)})]}),e("div",{style:{display:"flex",gap:6,flexShrink:0,flexWrap:"wrap"},children:[e("button",{class:"btn btn-ghost",onClick:()=>r(s.id),disabled:i,"aria-expanded":o,children:a(o?"insights.collapse":"insights.viewDetail")}),c&&e(ae,{children:[e("button",{class:"btn btn-primary",onClick:()=>g(s.id),disabled:i,children:a(i?"insights.applying":"insights.accept")}),e("button",{class:"btn btn-ghost",onClick:()=>d(s.id),disabled:i,style:{color:"var(--danger)"},children:a("insights.reject")})]})]})]}),n&&n.proposed_digest&&e("div",{style:{marginTop:12,padding:12,background:"var(--bg-1)",borderRadius:4,fontSize:13},children:[e("div",{style:{marginBottom:8,color:"var(--text-3)",fontSize:11},children:[a("insights.generatedBy"),": ",e("code",{children:n.llm_model??"unknown"})," "," "," ",a("insights.promptVersion"),": ",e("code",{children:n.prompt_version})]}),Array.isArray(n.proposed_digest.validation_warnings)&&n.proposed_digest.validation_warnings.length>0&&e("div",{style:{marginBottom:10,padding:10,borderRadius:4,borderLeft:"3px solid var(--warning, #FFC800)",background:"rgba(255,200,0,0.08)"},children:[e("div",{style:{fontWeight:600,color:"var(--warning, #FFC800)",marginBottom:6},children:["⚠ ",a("insights.validationWarnings")]}),e("ul",{style:{margin:0,paddingLeft:18},children:n.proposed_digest.validation_warnings.map((m,y)=>e("li",{style:{marginBottom:6,lineHeight:1.5},children:[e("div",{children:[e("span",{style:{color:"var(--text-3)"},children:[a("insights.validationClaim"),": "]}),e("code",{style:{fontSize:12},children:m.claim})]}),e("div",{children:[e("span",{style:{color:"var(--text-3)"},children:[a("insights.validationReason"),": "]}),e("span",{children:m.reason})]})]},y))})]}),e("div",{style:{marginBottom:8},children:[e("strong",{children:[a("pattern.description"),":"]}),e("ol",{style:{margin:"4px 0 0 18px",padding:0},children:n.proposed_digest.observations.map((m,y)=>e("li",{style:{marginBottom:6,lineHeight:1.5},children:m},y))})]}),e("div",{style:{marginBottom:4},children:[e("strong",{children:[a("insights.tags"),":"]})," ",n.proposed_digest.tags.map(m=>e("span",{class:"tag",style:{marginLeft:4,fontSize:11},children:m},m))]}),e("div",{style:{color:"var(--text-3)",fontSize:11,marginTop:6},children:[a("insights.sourceIds"),": ",n.source_ids.length," (",n.source_ids.slice(0,8).join(", "),n.source_ids.length>8?"…":"",")"]})]})]})}function ms(t){if(!t)return"";const s=new Date(t.replace(" ","T")+"Z").getTime();if(Number.isNaN(s))return t;const n=(Date.now()-s)/1e3;return n<60?`${Math.floor(n)}s ago`:n<3600?`${Math.floor(n/60)}m ago`:n<86400?`${Math.floor(n/3600)}h ago`:`${Math.floor(n/86400)}d ago`}function ps(t){switch(t){case"pending":return{background:"rgba(255,200,0,0.12)",color:"#FFC800"};case"applied":return{background:"rgba(0,214,180,0.12)",color:"var(--accent)"};case"rejected":return{background:"rgba(255,80,80,0.12)",color:"#FF5050"};default:return{background:"rgba(160,160,160,0.10)",color:"var(--text-3)"}}}function fs(t){const s=`insights.status.${t}`,n=a(s);return n===s?t:n}function Pa(){const[t,s]=x([]),[n,o]=x("pending"),[i,r]=x(new Map),[g,d]=x(!1),[l,u]=x(""),[f,c]=x(null),[p,h]=x(new Set),[m,y]=x(null),v=ye(async()=>{d(!0),u("");try{const M=await q("GET","/v1/dream/proposals?status=all");s(M??[])}catch(M){u(M instanceof Error?M.message:String(M))}finally{d(!1)}},[]);J(()=>{v()},[v]),J(()=>{q("GET","/v1/config").then(M=>c(!!M?.capabilities?.llm)).catch(()=>c(!1))},[]);const w=n==="all"?t:t.filter(M=>M.status===n),b=ye(async M=>{if(i.has(M)){const F=new Map(i);F.delete(M),r(F);return}try{const F=await q("GET",`/v1/dream/proposals/${M}`),$=new Map(i);$.set(M,F),r($)}catch(F){u(F instanceof Error?F.message:String(F))}},[i]),E=M=>{h(F=>{const $=new Set(F);return $.add(M),$})},T=M=>{h(F=>{const $=new Set(F);return $.delete(M),$})},B=ye(async M=>{E(M);try{await q("POST",`/v1/dream/proposals/${M}/accept`),window.dispatchEvent(new Event("memesh:data-changed")),await v()}catch(F){u(F instanceof Error?F.message:String(F))}finally{T(M)}},[v]),j=ye(async M=>{E(M);try{await q("POST",`/v1/dream/proposals/${M}/reject`,{reason:"rejected via dashboard"}),window.dispatchEvent(new Event("memesh:data-changed")),await v()}catch(F){u(F instanceof Error?F.message:String(F))}finally{T(M)}},[v]),Z=ye(async M=>{y(M),u("");try{await q("POST","/v1/dream/run",{maxLlmCalls:3,validate:M==="validate"}),window.dispatchEvent(new Event("memesh:data-changed")),await v()}catch(F){u(F instanceof Error?F.message:String(F))}finally{y(null)}},[v]),V=t.filter(M=>M.status==="pending").length,te=t.filter(M=>M.status==="applied").length,ne=t.filter(M=>M.status==="rejected").length;return e("div",{style:{display:"flex",flexDirection:"column",gap:16},children:[e("div",{class:"card",style:{padding:16},children:[e("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",flexWrap:"wrap",gap:8},children:[e("h2",{style:{margin:0,fontSize:18},children:a("insights.title")}),e("span",{style:{color:"var(--text-2)",fontSize:13},children:a("insights.subtitle")})]}),e("div",{style:{marginTop:10,display:"flex",gap:16,flexWrap:"wrap",color:"var(--text-2)",fontSize:13},children:[e("span",{children:[e("strong",{style:{color:"var(--accent)"},children:V})," ",a("insights.statPending")]}),e("span",{children:[e("strong",{children:te})," ",a("insights.statApplied")]}),e("span",{children:[e("strong",{children:ne})," ",a("insights.statRejected")]})]}),f&&e("div",{style:{marginTop:12,display:"flex",gap:8,flexWrap:"wrap"},children:[e("button",{class:"btn btn-primary",onClick:()=>Z("plain"),disabled:m!==null,"aria-busy":m==="plain",children:m==="plain"?`${a("insights.runDream")}…`:a("insights.runDream")}),e("button",{class:"btn btn-ghost",onClick:()=>Z("validate"),disabled:m!==null,"aria-busy":m==="validate",children:m==="validate"?`${a("insights.runDreamWithValidate")}…`:a("insights.runDreamWithValidate")})]})]}),e("div",{style:{display:"flex",gap:8,flexWrap:"wrap"},role:"group","aria-label":a("insights.title"),children:[["pending","applied","rejected","all"].map(M=>{const F=n===M;return e("button",{class:"tag","aria-pressed":F,style:{padding:"4px 10px",borderRadius:4,cursor:"pointer",border:"1px solid "+(F?"var(--accent)":"var(--border)"),background:F?"rgba(0,214,180,0.12)":"transparent",color:F?"var(--accent)":"var(--text-2)"},onClick:()=>o(M),children:a(`insights.filter.${M}`)},M)}),e("button",{class:"btn btn-ghost",onClick:v,style:{marginLeft:"auto"},children:a("insights.refresh")})]}),l&&e("div",{class:"card",style:{padding:12,color:"var(--danger)"},children:l}),g&&e("div",{style:{color:"var(--text-3)",fontSize:13},children:a("insights.loading")}),!g&&w.length===0&&e("div",{class:"card",style:{padding:16,textAlign:"center",color:"var(--text-2)"},children:a(n!=="pending"?"insights.emptyOther":f===!1?"insights.emptyNoLlm":"insights.emptyPending")}),w.map(M=>{const F=i.get(M.id),$=i.has(M.id),ce=M.status==="pending",ee=p.has(M.id);if(M.kind==="pattern_emergent")return e(Aa,{proposal:M,detail:F,expanded:$,inFlight:ee,onToggleExpand:b,onAccept:B,onReject:j,formatRelative:ms,statusBadgeStyle:ps,statusLabel:fs},M.id);const ke=M.digest_observations_preview==="(empty)"?"":"…";return e("div",{class:"card",style:{padding:14},children:[e("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:12,flexWrap:"wrap"},children:[e("div",{style:{flex:"1 1 60%",minWidth:240},children:[e("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[e("span",{class:"badge badge-type",style:{textTransform:"none"},children:["#",M.id]}),e("span",{style:{fontWeight:600},children:M.digest_name}),e("span",{class:"tag",style:{fontSize:11},children:M.project}),e("span",{class:"tag",style:{fontSize:11},children:M.cluster_key}),e("span",{class:"tag",style:{fontSize:11,color:"var(--text-2)"},children:[M.source_count," ",a("insights.sources")]}),e("span",{class:"tag",style:{fontSize:11,...ps(M.status)},children:fs(M.status)})]}),e("div",{style:{marginTop:6,color:"var(--text-2)",fontSize:13,lineHeight:1.5},children:[M.digest_observations_preview,ke]}),e("div",{style:{marginTop:4,color:"var(--text-3)",fontSize:11},children:ms(M.created_at)})]}),e("div",{style:{display:"flex",gap:6,flexShrink:0,flexWrap:"wrap"},children:[e("button",{class:"btn btn-ghost",onClick:()=>b(M.id),disabled:ee,"aria-expanded":$,children:a($?"insights.collapse":"insights.viewDetail")}),ce&&e(ae,{children:[e("button",{class:"btn btn-primary",onClick:()=>B(M.id),disabled:ee,children:a(ee?"insights.applying":"insights.accept")}),e("button",{class:"btn btn-ghost",onClick:()=>j(M.id),disabled:ee,style:{color:"#FF5050"},children:a("insights.reject")})]})]})]}),F&&F.proposed_digest&&e("div",{style:{marginTop:12,padding:12,background:"var(--bg-1)",borderRadius:4,fontSize:13},children:[e("div",{style:{marginBottom:8,color:"var(--text-3)",fontSize:11},children:[a("insights.generatedBy"),": ",e("code",{children:F.llm_model??"unknown"})," · ",a("insights.promptVersion"),": ",e("code",{children:F.prompt_version})]}),Array.isArray(F.proposed_digest.validation_warnings)&&F.proposed_digest.validation_warnings.length>0&&e("div",{style:{marginBottom:10,padding:10,borderRadius:4,borderLeft:"3px solid var(--warning, #FFC800)",background:"rgba(255,200,0,0.08)"},children:[e("div",{style:{fontWeight:600,color:"var(--warning, #FFC800)",marginBottom:6},children:["⚠ ",a("insights.validationWarnings")]}),e("ul",{style:{margin:0,paddingLeft:18},children:F.proposed_digest.validation_warnings.map((ue,H)=>e("li",{style:{marginBottom:6,lineHeight:1.5},children:[e("div",{children:[e("span",{style:{color:"var(--text-3)"},children:[a("insights.validationClaim"),": "]}),e("code",{style:{fontSize:12},children:ue.claim})]}),e("div",{children:[e("span",{style:{color:"var(--text-3)"},children:[a("insights.validationReason"),": "]}),e("span",{children:ue.reason})]})]},H))})]}),e("div",{style:{marginBottom:8},children:[e("strong",{children:[a("insights.observations"),":"]}),e("ol",{style:{margin:"4px 0 0 18px",padding:0},children:F.proposed_digest.observations.map((ue,H)=>e("li",{style:{marginBottom:6,lineHeight:1.5},children:ue},H))})]}),e("div",{style:{marginBottom:4},children:[e("strong",{children:[a("insights.tags"),":"]})," ",F.proposed_digest.tags.map(ue=>e("span",{class:"tag",style:{marginLeft:4,fontSize:11},children:ue},ue))]}),e("div",{style:{color:"var(--text-3)",fontSize:11,marginTop:6},children:[a("insights.sourceIds"),": ",F.source_ids.length," entities (",F.source_ids.slice(0,8).join(", "),F.source_ids.length>8?"…":"",")"]})]})]},M.id)})]})}const Ra=["bug","feature","question"],bs={bug:"feedback.bug",feature:"feedback.feature",question:"feedback.question"};function Ea({health:t}){const[s,n]=x(!1),[o,i]=x("bug"),[r,g]=x(""),[d,l]=x(!0),[u,f]=x(!1),c=ie(null);J(()=>{if(!s)return;const m=y=>{c.current&&!c.current.contains(y.target)&&n(!1)};return document.addEventListener("mousedown",m),()=>document.removeEventListener("mousedown",m)},[s]);function p(m){const y=m.checks.find(T=>T.id==="install_id"),b=m.checks.filter(T=>T.id!=="install_id").sort((T,B)=>{const j={fail:0,warn:1,pass:2};return(j[T.status]??3)-(j[B.status]??3)}).map(T=>{const B=T.status==="fail"?"❌":T.status==="warn"?"⚠️":"✅",j=T.fix?` _Fix: ${T.fix}_`:"";return`- ${B} **${T.label}**: ${T.summary}${j}`}),E=y?`
|
|
13
|
-
_Anonymous install ID: \`${(
|
|
14
|
-
`:"";return`**Diagnostics** (overall: ${
|
|
15
|
-
${
|
|
16
|
-
`)}`}const
|
|
12
|
+
<script type="module" crossorigin>(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))o(i);new MutationObserver(i=>{for(const r of i)if(r.type==="childList")for(const u of r.addedNodes)u.tagName==="LINK"&&u.rel==="modulepreload"&&o(u)}).observe(document,{childList:!0,subtree:!0});function n(i){const r={};return i.integrity&&(r.integrity=i.integrity),i.referrerPolicy&&(r.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?r.credentials="include":i.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function o(i){if(i.ep)return;i.ep=!0;const r=n(i);fetch(i.href,r)}})();var mt,Z,ws,Re,Ut,Ms,_s,ft,it,Ve,Ss,Pt,_t,St,ct={},dt=[],tn=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,pt=Array.isArray;function Pe(t,s){for(var n in s)t[n]=s[n];return t}function Rt(t){t&&t.parentNode&&t.parentNode.removeChild(t)}function sn(t,s,n){var o,i,r,u={};for(r in s)r=="key"?o=s[r]:r=="ref"?i=s[r]:u[r]=s[r];if(arguments.length>2&&(u.children=arguments.length>3?mt.call(arguments,2):n),typeof t=="function"&&t.defaultProps!=null)for(r in t.defaultProps)u[r]===void 0&&(u[r]=t.defaultProps[r]);return rt(t,u,o,i,null)}function rt(t,s,n,o,i){var r={type:t,props:s,key:n,ref:o,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:i??++ws,__i:-1,__u:0};return i==null&&Z.vnode!=null&&Z.vnode(r),r}function ae(t){return t.children}function ot(t,s){this.props=t,this.context=s}function Oe(t,s){if(s==null)return t.__?Oe(t.__,t.__i+1):null;for(var n;s<t.__k.length;s++)if((n=t.__k[s])!=null&&n.__e!=null)return n.__e;return typeof t.type=="function"?Oe(t):null}function nn(t){if(t.__P&&t.__d){var s=t.__v,n=s.__e,o=[],i=[],r=Pe({},s);r.__v=s.__v+1,Z.vnode&&Z.vnode(r),Et(t.__P,r,s,t.__n,t.__P.namespaceURI,32&s.__u?[n]:null,o,n??Oe(s),!!(32&s.__u),i),r.__v=s.__v,r.__.__k[r.__i]=r,As(o,r,i),s.__e=s.__=null,r.__e!=n&&Cs(r)}}function Cs(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}),Cs(t)}function qt(t){(!t.__d&&(t.__d=!0)&&Re.push(t)&&!ut.__r++||Ut!=Z.debounceRendering)&&((Ut=Z.debounceRendering)||Ms)(ut)}function ut(){try{for(var t,s=1;Re.length;)Re.length>s&&Re.sort(_s),t=Re.shift(),s=Re.length,nn(t)}finally{Re.length=ut.__r=0}}function Ls(t,s,n,o,i,r,u,d,l,g,p){var c,f,b,h,m,w,k,y=o&&o.__k||dt,A=s.length;for(l=an(n,s,y,l,A),c=0;c<A;c++)(b=n.__k[c])!=null&&(f=b.__i!=-1&&y[b.__i]||ct,b.__i=c,w=Et(t,b,f,i,r,u,d,l,g,p),h=b.__e,b.ref&&f.ref!=b.ref&&(f.ref&&Ft(f.ref,null,b),p.push(b.ref,b.__c||h,b)),m==null&&h!=null&&(m=h),(k=!!(4&b.__u))||f.__k===b.__k?(l=Ts(b,l,t,k),k&&f.__e&&(f.__e=null)):typeof b.type=="function"&&w!==void 0?l=w:h&&(l=h.nextSibling),b.__u&=-7);return n.__e=m,l}function an(t,s,n,o,i){var r,u,d,l,g,p=n.length,c=p,f=0;for(t.__k=new Array(i),r=0;r<i;r++)(u=s[r])!=null&&typeof u!="boolean"&&typeof u!="function"?(typeof u=="string"||typeof u=="number"||typeof u=="bigint"||u.constructor==String?u=t.__k[r]=rt(null,u,null,null,null):pt(u)?u=t.__k[r]=rt(ae,{children:u},null,null,null):u.constructor===void 0&&u.__b>0?u=t.__k[r]=rt(u.type,u.props,u.key,u.ref?u.ref:null,u.__v):t.__k[r]=u,l=r+f,u.__=t,u.__b=t.__b+1,d=null,(g=u.__i=rn(u,n,l,c))!=-1&&(c--,(d=n[g])&&(d.__u|=2)),d==null||d.__v==null?(g==-1&&(i>p?f--:i<p&&f++),typeof u.type!="function"&&(u.__u|=4)):g!=l&&(g==l-1?f--:g==l+1?f++:(g>l?f--:f++,u.__u|=4))):t.__k[r]=null;if(c)for(r=0;r<p;r++)(d=n[r])!=null&&(2&d.__u)==0&&(d.__e==o&&(o=Oe(d)),Rs(d,d));return o}function Ts(t,s,n,o){var i,r;if(typeof t.type=="function"){for(i=t.__k,r=0;i&&r<i.length;r++)i[r]&&(i[r].__=t,s=Ts(i[r],s,n,o));return s}t.__e!=s&&(o&&(s&&t.type&&!s.parentNode&&(s=Oe(t)),n.insertBefore(t.__e,s||null)),s=t.__e);do s=s&&s.nextSibling;while(s!=null&&s.nodeType==8);return s}function rn(t,s,n,o){var i,r,u,d=t.key,l=t.type,g=s[n],p=g!=null&&(2&g.__u)==0;if(g===null&&d==null||p&&d==g.key&&l==g.type)return n;if(o>(p?1:0)){for(i=n-1,r=n+1;i>=0||r<s.length;)if((g=s[u=i>=0?i--:r++])!=null&&(2&g.__u)==0&&d==g.key&&l==g.type)return u}return-1}function Vt(t,s,n){s[0]=="-"?t.setProperty(s,n??""):t[s]=n==null?"":typeof n!="number"||tn.test(s)?n:n+"px"}function Qe(t,s,n,o,i){var r,u;e:if(s=="style")if(typeof n=="string")t.style.cssText=n;else{if(typeof o=="string"&&(t.style.cssText=o=""),o)for(s in o)n&&s in n||Vt(t.style,s,"");if(n)for(s in n)o&&n[s]==o[s]||Vt(t.style,s,n[s])}else if(s[0]=="o"&&s[1]=="n")r=s!=(s=s.replace(Ss,"$1")),u=s.toLowerCase(),s=u in t||s=="onFocusOut"||s=="onFocusIn"?u.slice(2):s.slice(2),t.l||(t.l={}),t.l[s+r]=n,n?o?n[Ve]=o[Ve]:(n[Ve]=Pt,t.addEventListener(s,r?St:_t,r)):t.removeEventListener(s,r?St:_t,r);else{if(i=="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]=n??"";break e}catch{}typeof n=="function"||(n==null||n===!1&&s[4]!="-"?t.removeAttribute(s):t.setAttribute(s,s=="popover"&&n==1?"":n))}}function $t(t){return function(s){if(this.l){var n=this.l[s.type+t];if(s[it]==null)s[it]=Pt++;else if(s[it]<n[Ve])return;return n(Z.event?Z.event(s):s)}}}function Et(t,s,n,o,i,r,u,d,l,g){var p,c,f,b,h,m,w,k,y,A,C,B,z,Q,q,te=s.type;if(s.constructor!==void 0)return null;128&n.__u&&(l=!!(32&n.__u),r=[d=s.__e=n.__e]),(p=Z.__b)&&p(s);e:if(typeof te=="function")try{if(k=s.props,y=te.prototype&&te.prototype.render,A=(p=te.contextType)&&o[p.__c],C=p?A?A.props.value:p.__:o,n.__c?w=(c=s.__c=n.__c).__=c.__E:(y?s.__c=c=new te(k,C):(s.__c=c=new ot(k,C),c.constructor=te,c.render=ln),A&&A.sub(c),c.state||(c.state={}),c.__n=o,f=c.__d=!0,c.__h=[],c._sb=[]),y&&c.__s==null&&(c.__s=c.state),y&&te.getDerivedStateFromProps!=null&&(c.__s==c.state&&(c.__s=Pe({},c.__s)),Pe(c.__s,te.getDerivedStateFromProps(k,c.__s))),b=c.props,h=c.state,c.__v=s,f)y&&te.getDerivedStateFromProps==null&&c.componentWillMount!=null&&c.componentWillMount(),y&&c.componentDidMount!=null&&c.__h.push(c.componentDidMount);else{if(y&&te.getDerivedStateFromProps==null&&k!==b&&c.componentWillReceiveProps!=null&&c.componentWillReceiveProps(k,C),s.__v==n.__v||!c.__e&&c.shouldComponentUpdate!=null&&c.shouldComponentUpdate(k,c.__s,C)===!1){s.__v!=n.__v&&(c.props=k,c.state=c.__s,c.__d=!1),s.__e=n.__e,s.__k=n.__k,s.__k.some(function(ne){ne&&(ne.__=s)}),dt.push.apply(c.__h,c._sb),c._sb=[],c.__h.length&&u.push(c);break e}c.componentWillUpdate!=null&&c.componentWillUpdate(k,c.__s,C),y&&c.componentDidUpdate!=null&&c.__h.push(function(){c.componentDidUpdate(b,h,m)})}if(c.context=C,c.props=k,c.__P=t,c.__e=!1,B=Z.__r,z=0,y)c.state=c.__s,c.__d=!1,B&&B(s),p=c.render(c.props,c.state,c.context),dt.push.apply(c.__h,c._sb),c._sb=[];else do c.__d=!1,B&&B(s),p=c.render(c.props,c.state,c.context),c.state=c.__s;while(c.__d&&++z<25);c.state=c.__s,c.getChildContext!=null&&(o=Pe(Pe({},o),c.getChildContext())),y&&!f&&c.getSnapshotBeforeUpdate!=null&&(m=c.getSnapshotBeforeUpdate(b,h)),Q=p!=null&&p.type===ae&&p.key==null?Ps(p.props.children):p,d=Ls(t,pt(Q)?Q:[Q],s,n,o,i,r,u,d,l,g),c.base=s.__e,s.__u&=-161,c.__h.length&&u.push(c),w&&(c.__E=c.__=null)}catch(ne){if(s.__v=null,l||r!=null)if(ne.then){for(s.__u|=l?160:128;d&&d.nodeType==8&&d.nextSibling;)d=d.nextSibling;r[r.indexOf(d)]=null,s.__e=d}else{for(q=r.length;q--;)Rt(r[q]);Ct(s)}else s.__e=n.__e,s.__k=n.__k,ne.then||Ct(s);Z.__e(ne,s,n)}else r==null&&s.__v==n.__v?(s.__k=n.__k,s.__e=n.__e):d=s.__e=on(n.__e,s,n,o,i,r,u,l,g);return(p=Z.diffed)&&p(s),128&s.__u?void 0:d}function Ct(t){t&&(t.__c&&(t.__c.__e=!0),t.__k&&t.__k.some(Ct))}function As(t,s,n){for(var o=0;o<n.length;o++)Ft(n[o],n[++o],n[++o]);Z.__c&&Z.__c(s,t),t.some(function(i){try{t=i.__h,i.__h=[],t.some(function(r){r.call(i)})}catch(r){Z.__e(r,i.__v)}})}function Ps(t){return typeof t!="object"||t==null||t.__b>0?t:pt(t)?t.map(Ps):Pe({},t)}function on(t,s,n,o,i,r,u,d,l){var g,p,c,f,b,h,m,w=n.props||ct,k=s.props,y=s.type;if(y=="svg"?i="http://www.w3.org/2000/svg":y=="math"?i="http://www.w3.org/1998/Math/MathML":i||(i="http://www.w3.org/1999/xhtml"),r!=null){for(g=0;g<r.length;g++)if((b=r[g])&&"setAttribute"in b==!!y&&(y?b.localName==y:b.nodeType==3)){t=b,r[g]=null;break}}if(t==null){if(y==null)return document.createTextNode(k);t=document.createElementNS(i,y,k.is&&k),d&&(Z.__m&&Z.__m(s,r),d=!1),r=null}if(y==null)w===k||d&&t.data==k||(t.data=k);else{if(r=r&&mt.call(t.childNodes),!d&&r!=null)for(w={},g=0;g<t.attributes.length;g++)w[(b=t.attributes[g]).name]=b.value;for(g in w)b=w[g],g=="dangerouslySetInnerHTML"?c=b:g=="children"||g in k||g=="value"&&"defaultValue"in k||g=="checked"&&"defaultChecked"in k||Qe(t,g,null,b,i);for(g in k)b=k[g],g=="children"?f=b:g=="dangerouslySetInnerHTML"?p=b:g=="value"?h=b:g=="checked"?m=b:d&&typeof b!="function"||w[g]===b||Qe(t,g,b,w[g],i);if(p)d||c&&(p.__html==c.__html||p.__html==t.innerHTML)||(t.innerHTML=p.__html),s.__k=[];else if(c&&(t.innerHTML=""),Ls(s.type=="template"?t.content:t,pt(f)?f:[f],s,n,o,y=="foreignObject"?"http://www.w3.org/1999/xhtml":i,r,u,r?r[0]:n.__k&&Oe(n,0),d,l),r!=null)for(g=r.length;g--;)Rt(r[g]);d||(g="value",y=="progress"&&h==null?t.removeAttribute("value"):h!=null&&(h!==t[g]||y=="progress"&&!h||y=="option"&&h!=w[g])&&Qe(t,g,h,w[g],i),g="checked",m!=null&&m!=t[g]&&Qe(t,g,m,w[g],i))}return t}function Ft(t,s,n){try{if(typeof t=="function"){var o=typeof t.__u=="function";o&&t.__u(),o&&s==null||(t.__u=t(s))}else t.current=s}catch(i){Z.__e(i,n)}}function Rs(t,s,n){var o,i;if(Z.unmount&&Z.unmount(t),(o=t.ref)&&(o.current&&o.current!=t.__e||Ft(o,null,s)),(o=t.__c)!=null){if(o.componentWillUnmount)try{o.componentWillUnmount()}catch(r){Z.__e(r,s)}o.base=o.__P=null}if(o=t.__k)for(i=0;i<o.length;i++)o[i]&&Rs(o[i],s,n||typeof t.type!="function");n||Rt(t.__e),t.__c=t.__=t.__e=void 0}function ln(t,s,n){return this.constructor(t,n)}function cn(t,s,n){var o,i,r,u;s==document&&(s=document.documentElement),Z.__&&Z.__(t,s),i=(o=!1)?null:s.__k,r=[],u=[],Et(s,t=s.__k=sn(ae,null,[t]),i||ct,ct,s.namespaceURI,i?null:s.firstChild?mt.call(s.childNodes):null,r,i?i.__e:s.firstChild,o,u),As(r,t,u)}mt=dt.slice,Z={__e:function(t,s,n,o){for(var i,r,u;s=s.__;)if((i=s.__c)&&!i.__)try{if((r=i.constructor)&&r.getDerivedStateFromError!=null&&(i.setState(r.getDerivedStateFromError(t)),u=i.__d),i.componentDidCatch!=null&&(i.componentDidCatch(t,o||{}),u=i.__d),u)return i.__E=i}catch(d){t=d}throw t}},ws=0,ot.prototype.setState=function(t,s){var n;n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=Pe({},this.state),typeof t=="function"&&(t=t(Pe({},n),this.props)),t&&Pe(n,t),t!=null&&this.__v&&(s&&this._sb.push(s),qt(this))},ot.prototype.forceUpdate=function(t){this.__v&&(this.__e=!0,t&&this.__h.push(t),qt(this))},ot.prototype.render=ae,Re=[],Ms=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,_s=function(t,s){return t.__v.__b-s.__v.__b},ut.__r=0,ft=Math.random().toString(8),it="__d"+ft,Ve="__a"+ft,Ss=/(PointerCapture)$|Capture$/i,Pt=0,_t=$t(!1),St=$t(!0);var dn=0;function e(t,s,n,o,i,r){s||(s={});var u,d,l=s;if("ref"in l)for(d in l={},s)d=="ref"?u=s[d]:l[d]=s[d];var g={type:t,props:l,key:n,ref:u,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--dn,__i:-1,__u:0,__source:i,__self:r};if(typeof t=="function"&&(u=t.defaultProps))for(d in u)l[d]===void 0&&(l[d]=u[d]);return Z.vnode&&Z.vnode(g),g}var $e,re,yt,Gt,Ge=0,Es=[],le=Z,Kt=le.__b,Yt=le.__r,Xt=le.diffed,Zt=le.__c,Qt=le.unmount,Jt=le.__;function Dt(t,s){le.__h&&le.__h(re,t,Ge||s),Ge=0;var n=re.__H||(re.__H={__:[],__h:[]});return t>=n.__.length&&n.__.push({}),n.__[t]}function x(t){return Ge=1,un(Ds,t)}function un(t,s,n){var o=Dt($e++,2);if(o.t=t,!o.__c&&(o.__=[Ds(void 0,s),function(d){var l=o.__N?o.__N[0]:o.__[0],g=o.t(l,d);l!==g&&(o.__N=[g,o.__[1]],o.__c.setState({}))}],o.__c=re,!re.__f)){var i=function(d,l,g){if(!o.__c.__H)return!0;var p=o.__c.__H.__.filter(function(f){return f.__c});if(p.every(function(f){return!f.__N}))return!r||r.call(this,d,l,g);var c=o.__c.props!==d;return p.some(function(f){if(f.__N){var b=f.__[0];f.__=f.__N,f.__N=void 0,b!==f.__[0]&&(c=!0)}}),r&&r.call(this,d,l,g)||c};re.__f=!0;var r=re.shouldComponentUpdate,u=re.componentWillUpdate;re.componentWillUpdate=function(d,l,g){if(this.__e){var p=r;r=void 0,i(d,l,g),r=p}u&&u.call(this,d,l,g)},re.shouldComponentUpdate=i}return o.__N||o.__}function X(t,s){var n=Dt($e++,3);!le.__s&&Fs(n.__H,s)&&(n.__=t,n.u=s,re.__H.__h.push(n))}function ie(t){return Ge=5,_e(function(){return{current:t}},[])}function _e(t,s){var n=Dt($e++,7);return Fs(n.__H,s)&&(n.__=t(),n.__H=s,n.__h=t),n.__}function be(t,s){return Ge=8,_e(function(){return t},s)}function gn(){for(var t;t=Es.shift();){var s=t.__H;if(t.__P&&s)try{s.__h.some(lt),s.__h.some(Lt),s.__h=[]}catch(n){s.__h=[],le.__e(n,t.__v)}}}le.__b=function(t){re=null,Kt&&Kt(t)},le.__=function(t,s){t&&s.__k&&s.__k.__m&&(t.__m=s.__k.__m),Jt&&Jt(t,s)},le.__r=function(t){Yt&&Yt(t),$e=0;var s=(re=t.__c).__H;s&&(yt===re?(s.__h=[],re.__h=[],s.__.some(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(s.__h.some(lt),s.__h.some(Lt),s.__h=[],$e=0)),yt=re},le.diffed=function(t){Xt&&Xt(t);var s=t.__c;s&&s.__H&&(s.__H.__h.length&&(Es.push(s)!==1&&Gt===le.requestAnimationFrame||((Gt=le.requestAnimationFrame)||hn)(gn)),s.__H.__.some(function(n){n.u&&(n.__H=n.u),n.u=void 0})),yt=re=null},le.__c=function(t,s){s.some(function(n){try{n.__h.some(lt),n.__h=n.__h.filter(function(o){return!o.__||Lt(o)})}catch(o){s.some(function(i){i.__h&&(i.__h=[])}),s=[],le.__e(o,n.__v)}}),Zt&&Zt(t,s)},le.unmount=function(t){Qt&&Qt(t);var s,n=t.__c;n&&n.__H&&(n.__H.__.some(function(o){try{lt(o)}catch(i){s=i}}),n.__H=void 0,s&&le.__e(s,n.__v))};var es=typeof requestAnimationFrame=="function";function hn(t){var s,n=function(){clearTimeout(o),es&&cancelAnimationFrame(s),setTimeout(t)},o=setTimeout(n,35);es&&(s=requestAnimationFrame(n))}function lt(t){var s=re,n=t.__c;typeof n=="function"&&(t.__c=void 0,n()),re=s}function Lt(t){var s=re;t.__c=t.__(),re=s}function Fs(t,s){return!t||t.length!==s.length||s.some(function(n,o){return n!==t[o]})}function Ds(t,s){return typeof s=="function"?s(t):s}const gt={en:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Connected","header.disconnected":"Disconnected","header.connecting":"Connecting…","header.memories":"memories","tab.insights":"Insights","telemetry.title":"LLM activity","telemetry.lastNDays":"last {n}d","telemetry.loading":"loading…","telemetry.empty":"No LLM activity recorded in this window. Smart-Mode flows write rows automatically once dream / consolidator / failure-analyzer run.","telemetry.callsCount":"{n} calls","telemetry.attemptsCount":"{n} attempts","telemetry.successRate":"success","telemetry.medianLatency":"median latency","telemetry.fallbackUsed":"fallback used {n}× ({pct} of calls)","telemetry.byProvider":"by provider","telemetry.errors":"errors","tab.search":"Search","tab.browse":"Browse","tab.analytics":"Analytics","tab.manage":"Manage","tab.graph":"Knowledge Graph","tab.lessons":"Lessons","tab.settings":"Settings","insights.title":"Memory insights","insights.subtitle":"auto-generated weekly recaps and patterns waiting for review","insights.statPending":"pending","insights.statApplied":"applied","insights.statRejected":"rejected","insights.filter.pending":"Pending","insights.filter.applied":"Applied","insights.filter.rejected":"Rejected","insights.filter.all":"All","insights.refresh":"Refresh","insights.loading":"loading…","insights.emptyPending":"No pending insights. Run `memesh dream run` to generate weekly recaps.","insights.emptyNoLlm":"Configure an LLM provider in Settings to enable weekly recaps and pattern detection.","insights.emptyOther":"Nothing here.","insights.sources":"sources","insights.status.pending":"pending","insights.status.applied":"applied","insights.status.rejected":"rejected","insights.viewDetail":"View detail","insights.collapse":"Collapse","insights.accept":"Accept","insights.applying":"Applying…","insights.reject":"Reject","insights.generatedBy":"Generated by","insights.promptVersion":"Prompt version","insights.observations":"Summary observations","insights.tags":"Tags","insights.sourceIds":"Sources","insights.validationWarnings":"Flagged claims (LLM validator)","insights.validationClaim":"Claim","insights.validationReason":"Reason","insights.runDream":"Run weekly recap","insights.runDreamWithValidate":"Run with validator (slower, higher quality)","banner.pendingInsights":"{n} new insight{s} waiting for your review →","banner.dismiss":"Dismiss","banner.viewAll":"View all","pattern.title":"Pattern","pattern.evidenceCount":"{n} evidence","pattern.severity":"Severity","pattern.severity.high":"high","pattern.severity.medium":"medium","pattern.severity.low":"low","pattern.description":"Pattern description","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.llmOptional.title":"LLM is optional","settings.llmOptional.body":"memesh works without an LLM. The default Core mode covers full-text recall, manual remember/recall, the dashboard, and session capture via hooks.","settings.llmOptional.coreLabel":"Without LLM (Core mode)","settings.llmOptional.coreFeatures":"FTS5 keyword search (95.40% R@5 on LongMemEval-S), manual remember/recall, dashboard, hooks-based session capture","settings.llmOptional.smartLabel":"With LLM (Smart mode)","settings.llmOptional.smartFeatures":"auto lesson_learned from session failures, auto-tagging of new entities, weekly recap + pattern detection","settings.apiKey":"API Key","settings.model":"Model (optional)","settings.save":"Save","settings.saving":"Saving…","settings.saved":"Saved.","settings.removeProvider":"Remove provider","settings.removeProviderHint":"Drops apiKey + model. Falls back to env-var auto-detect or Core Mode (no LLM).","settings.removeProviderConfirm":"Remove the configured LLM provider? This drops the saved API key and model. memesh will fall back to env-var auto-detection (ANTHROPIC_API_KEY > OPENAI_API_KEY > OLLAMA_HOST) or run in Core Mode if no credential is found.","settings.providerRemoved":"Provider removed. memesh now runs in Core Mode or via env-var auto-detect.","settings.test":"Test","settings.testing":"Testing…","settings.testPassed":"✓ Connection OK · {count} models available","settings.testFailed":"Connection test failed","settings.suggested":"suggested","settings.testRequired":"Test connection before saving","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.updateDeprecatedNoTarget":"Deprecated — no upgrade target yet","settings.updateDeprecatedTitle":"⚠️ MeMesh {version} is DEPRECATED by maintainers.","settings.updatePartialTitle":"⚠️ Update check partial","settings.updatePartialDescription":"{message}. Deprecation status is unknown for this session — re-run the check while online.","settings.updatePartialSummary":"Partial — deprecation status unknown","settings.updateDeprecatedTargetUnknown":"Deprecated — checking for upgrade target","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.interactHint":"Click a node to focus · drag empty area to pan · scroll to zoom","graph.resetView":"Reset view","graph.resetViewHint":"Reset zoom and pan","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","feedback.submitting":"Gathering diagnostics…","doctorBanner.warnTitle":"Heads up — memesh setup needs attention","doctorBanner.failTitle":"memesh setup is incomplete","doctorBanner.dismiss":"Dismiss","doctorBanner.getHelp":"Get help","doctorBanner.helpHint":"Opens a GitHub issue with the diagnostics pre-filled","doctorBanner.preambleForIssue":"memesh doctor reported the following on my install:","doctor.capabilities.summary":"LLM/embedding configuration detected","doctor.capabilities.fix":'Configure via "memesh config set llm.provider <provider>"',"doctor.config.summary":"Config file status","doctor.config.fix":'Fix or remove the config file, then run "memesh config list"',"doctor.dashboard.summary":"Dashboard artifact exists","doctor.dashboard.fix":'Run "npm run build:dashboard" to rebuild the dashboard',"doctor.database.summary":"Database accessibility status","doctor.database.fix":'Check database permissions, path, or run "memesh doctor" for detailed diagnosis',"doctor.hook-activity.summary":"No recent memesh-attributed activity (last 24h)","doctor.hook-activity.fix":"Open a Claude Code session that uses ≥3 tools and ends naturally (not user_interrupt), or commit something. Then reopen the dashboard.","doctor.hook-scripts.summary":"Hook script files verification","doctor.hook-scripts.fix":"Reinstall MeMesh or restore missing hook files from package","doctor.hook-wiring.summary":"Hooks integration status in Claude Code","doctor.hook-wiring.fix":'Run "memesh install-hooks" to wire hooks into Claude Code settings',"doctor.hooks-config.summary":"Hooks configuration file status","doctor.hooks-config.fix":"Reinstall MeMesh or restore .claude-plugin/hooks.json","doctor.http-probe.summary":"HTTP server availability check","doctor.http-probe.fix":"Check if port is available or database is accessible","doctor.install_id.summary":"Anonymous install ID status","doctor.install_id.fix":'Run "memesh" once to generate install ID',"doctor.install-channel.summary":"Installation method detection","doctor.install-channel.fix":"No action needed","doctor.mcp-config.summary":"MCP server configuration status","doctor.mcp-config.fix":"Restore .mcp.json from package or reinstall MeMesh","doctor.skills-manifest.summary":"Skills directory structure validation","doctor.skills-manifest.fix":"Reinstall MeMesh or restore .claude-plugin/skills directory","doctor.update_status.summary":"Update available: {version}","doctor.update_status.fix":'Run "memesh update" to upgrade',"doctor.update_status.prerelease":"Running pre-release version ({current}), npm latest is {latest}","doctor.vector_index.summary":"Search index needs rebuilding","doctor.vector_index.fix":'Run "memesh reindex" to restore full search',"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","time.justNow":"Just now","time.hoursAgo":"{count}h ago","time.today":"Today","time.yesterday":"Yesterday","time.daysAgo":"{count}d ago","time.lastWeek":"Last week","time.weeksAgo":"{count}w ago","time.lastMonth":"Last month","time.monthsAgo":"{count}mo ago","memory.access.frequent":"Frequent · {count} recalls","memory.access.recalls":"{count} recalls","memory.access.never":"Never recalled","cluster.knowledge":"Knowledge","cluster.activity":"Activity","cluster.session":"Sessions","cluster.reference":"Reference","cluster.all":"All","browse.filterCategory":"Category","browse.filterTime":"Time","browse.filterValue":"Value","browse.filterProject":"Project","browse.filterSort":"Sort","browse.timeToday":"Today","browse.timeWeek":"This week","browse.timeMonth":"This month","browse.timeOlder":"Older","browse.valueRecalled":"✓ Used","browse.valueNever":"Never recalled","browse.sortMostRecalled":"Most recalled","browse.sortRecent":"Recently used","browse.sortCreated":"Created","browse.emptyFilter":"No memories in this category — try a different filter","lessons.tabFailure":"Failure lessons","lessons.tabPlan":"Plan records","lessons.tabFreeform":"Notes","lessons.totalRecalls":"Total recalls","lessons.stepsLabel":"steps","lessons.commitsCount":"{count} commits","lessons.unstructured":"(No structured fields — see raw memory)","lessons.searchPlaceholder":"Search error / root cause / fix / name…","lessons.allProjects":"All projects","lessons.showing":"Showing {visible} / {total}","lessons.noMatch":'No memories matching "{query}"',"lessons.emptyCategory":"No memories in this category","lessons.moreItems":"+{count} more","roadmap.title":"Project Roadmap","roadmap.summary":"{count} memories · {first} → {last}","roadmap.switchToList":"↩ List view","roadmap.switchToRoadmap":"🗺️ Roadmap view","roadmap.emptyProject":"No memories in this project yet.","loop.label":"Memory loop","loop.subtitleHas":"knowledge memories reused in the past 7 days","loop.subtitleNone":"No knowledge memories reused this week — try recalling a lesson","loop.approxNote":"Approximation — full tracking starts after upgrade.","loop.sparkLabel":"Last 30 days","roadmap.milestones":"Milestones","roadmap.keyLessons":"Key lessons","radar.title":"Knowledge coverage radar","radar.caption":"Active knowledge memories<br/>(session and commit excluded)","radar.axis.lessons":"Lessons","radar.axis.decisions":"Decisions","radar.axis.patterns":"Patterns","radar.axis.bugs":"Bug fixes","radar.axis.processes":"Processes","radar.axis.architecture":"Architecture","ageMatrix.title":"Memory age distribution","ageMatrix.low":"Low","ageMatrix.high":"High","ageMatrix.legend":"colour depth = memory density","ageMatrix.typeColumn":"Type","header.signalModeOn":"Signal","header.signalModeOff":"All","header.signalModeOnHint":"Hiding session and commit noise. Click to show everything.","header.signalModeOffHint":"Showing all memories including session and commit noise. Click to hide noise.","roadmap.phases":"Phases","onboarding.title":"Welcome to MeMesh","onboarding.body":"Your memory store is empty. Start with a curated 30-entity tour or stash your first lesson.","onboarding.llmHint":"No LLM required. Everything below works on FTS5 alone (95.40% R@5). An LLM is optional for auto-lesson generation — configure later in Settings.","onboarding.seedButton":"Try the demo tour","onboarding.seedingButton":"Seeding…","onboarding.seedHint":"Adds 30 memories you can wipe later — no terminal needed","onboarding.cliReference":"Prefer the CLI?","onboarding.hintDemo":"Seeds 30 demo memories you can wipe later","onboarding.hintReset":"Removes everything tagged metadata.demo","onboarding.resetButton":"Reset demo","onboarding.resettingButton":"Resetting…","onboarding.resetConfirm":"Remove all demo memories? Real entries you saved will be kept.","onboarding.dismiss":"Dismiss","ageMatrix.bucket.week":"This week","ageMatrix.bucket.month":"This month","ageMatrix.bucket.quarter":"This quarter","ageMatrix.bucket.older":"Older","ageMatrix.type.lesson_learned":"Lesson","ageMatrix.type.lesson":"Lesson","ageMatrix.type.mistake":"Mistake","ageMatrix.type.decision":"Decision","ageMatrix.type.architecture_decision":"Arch decision","ageMatrix.type.pattern":"Pattern","ageMatrix.type.technical_pattern":"Tech pattern","ageMatrix.type.best_practice":"Best practice","ageMatrix.type.bug_fix":"Bug fix","ageMatrix.type.workflow_checkpoint":"Workflow milestone","ageMatrix.type.process":"Process","ageMatrix.type.architecture":"Architecture","ageMatrix.type.feature":"Feature","settings.behaviourTitle":"Behaviour","settings.autoUpdateLabel":"Auto-update policy","settings.autoUpdateOff":"Off — manual only","settings.autoUpdatePatch":"Patch — auto-apply X.Y.Z+1","settings.autoUpdateMinor":"Minor — auto-apply X.Y+1.0","settings.autoUpdateMajor":"Major — auto-apply any bump","settings.autoUpdateHint":"Triggered after every session ends. Env MEMESH_AUTO_UPDATE wins when set.","settings.agenticLabel":"Enable agentic orchestration (experimental)","settings.agenticHint":"Surfaces background-agent nudges on Bash and shows the verifiability banner. Opt-in only.","errors.timeout":"Request timed out"},"zh-TW":{"brand.subtitle":"powered by pcircle.ai","header.connected":"已連線","header.disconnected":"已斷線","header.connecting":"連線中…","header.memories":"筆記憶","tab.insights":"洞察","telemetry.title":"LLM activity","telemetry.lastNDays":"last {n}d","telemetry.loading":"loading…","telemetry.empty":"No LLM activity recorded in this window. Smart-Mode flows write rows automatically once dream / consolidator / failure-analyzer run.","telemetry.callsCount":"{n} calls","telemetry.attemptsCount":"{n} attempts","telemetry.successRate":"success","telemetry.medianLatency":"median latency","telemetry.fallbackUsed":"fallback used {n}× ({pct} of calls)","telemetry.byProvider":"by provider","telemetry.errors":"errors","tab.search":"搜尋","insights.title":"memesh 為你做了什麼","insights.subtitle":"自動產生的週報整理與發現的模式,等你 review","insights.statPending":"待審","insights.statApplied":"已採用","insights.statRejected":"已拒絕","insights.filter.pending":"待審","insights.filter.applied":"已採用","insights.filter.rejected":"已拒絕","insights.filter.all":"全部","insights.refresh":"重新整理","insights.loading":"讀取中…","insights.emptyPending":"目前沒有待審 insight。可執行 `memesh dream run` 產生週報整理。","insights.emptyNoLlm":"Configure an LLM provider in Settings to enable weekly recaps and pattern detection.","insights.emptyOther":"沒有資料。","insights.sources":"sources","insights.status.pending":"待審","insights.status.applied":"已採用","insights.status.rejected":"已拒絕","insights.viewDetail":"查看詳情","insights.collapse":"收合","insights.accept":"採用","insights.applying":"套用中…","insights.reject":"拒絕","insights.generatedBy":"產生模型","insights.promptVersion":"Prompt 版本","insights.observations":"摘要觀察","insights.tags":"標籤","insights.sourceIds":"來源 entities","insights.validationWarnings":"可疑陳述(LLM 驗證器)","insights.validationClaim":"陳述","insights.validationReason":"原因","insights.runDream":"執行週報","insights.runDreamWithValidate":"執行(含驗證器,較慢但品質更高)","banner.pendingInsights":"有 {n} 則新洞察等你審閱 →","banner.dismiss":"關閉","banner.viewAll":"查看全部","pattern.title":"模式","pattern.evidenceCount":"{n} 個證據","pattern.severity":"嚴重度","pattern.severity.high":"高","pattern.severity.medium":"中","pattern.severity.low":"低","pattern.description":"模式說明","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.llmOptional.title":"LLM 是選用的","settings.llmOptional.body":"memesh 不需要 LLM 也能運作。預設的核心模式已涵蓋全文回憶、手動 remember/recall、儀表板,以及透過 hook 自動捕捉 session。","settings.llmOptional.coreLabel":"沒有 LLM(核心模式)","settings.llmOptional.coreFeatures":"FTS5 關鍵字搜尋(LongMemEval-S 上 95.40% R@5)、手動 remember/recall、儀表板、hook 自動捕捉 session","settings.llmOptional.smartLabel":"有 LLM(智慧模式)","settings.llmOptional.smartFeatures":"自動從 session 失敗萃取 lesson_learned、新 entity 自動標籤、週報整理 + 模式發現","settings.apiKey":"API 金鑰","settings.model":"模型(選填)","settings.save":"儲存","settings.saving":"儲存中…","settings.saved":"已儲存","settings.removeProvider":"移除 LLM 設定","settings.removeProviderHint":"移除 apiKey 和 model 設定。將回退到環境變數自動偵測或 Core Mode(無 LLM)。","settings.removeProviderConfirm":"確定要移除已配置的 LLM provider?這會清除已儲存的 API key 和 model 設定。memesh 將回退到環境變數自動偵測(ANTHROPIC_API_KEY > OPENAI_API_KEY > OLLAMA_HOST)或在沒有任何憑證時以 Core Mode 運作。","settings.providerRemoved":"已移除 provider。memesh 現以 Core Mode 或環境變數自動偵測運作。","settings.test":"測試連線","settings.testing":"測試中…","settings.testPassed":"✓ 連線成功 · 找到 {count} 個可用模型","settings.testFailed":"連線測試失敗","settings.suggested":"推薦","settings.testRequired":"請先測試連線後再儲存","settings.language":"語言","settings.searchMode":"搜尋模式","settings.none":"無","settings.updates":"更新","settings.updateChecking":"正在檢查更新…","settings.updateUnavailable":"目前無法檢查更新","settings.updateNoSuccessfulChecks":"目前還沒有成功的更新檢查紀錄","settings.upToDate":"已是最新版本","settings.updateAvailable":"有可用更新","settings.updateStale":"目前顯示的是可能過期的快取狀態","settings.updateCachedFallback":"目前使用上次成功的快取結果","settings.updateDeprecatedNoTarget":"已停用 — 暫無可升級目標","settings.updateDeprecatedTitle":"⚠️ MeMesh {version} 已被維護者標示為停用 (DEPRECATED)。","settings.updatePartialTitle":"⚠️ 更新檢查未完整","settings.updatePartialDescription":"{message}。本次無法確認停用狀態 — 待網路恢復後請重新檢查。","settings.updatePartialSummary":"部分檢查 — 停用狀態未確認","settings.updateDeprecatedTargetUnknown":"已停用 — 升級目標查詢中","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.interactHint":"點擊節點聚焦 · 拖曳空白處平移 · 滾輪縮放","graph.resetView":"重設視圖","graph.resetViewHint":"重設縮放與位置","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","feedback.submitting":"收集診斷資訊中…","doctorBanner.warnTitle":"提醒 — memesh 設定有需要注意的地方","doctorBanner.failTitle":"memesh 設定不完整","doctorBanner.dismiss":"關閉","doctorBanner.getHelp":"取得協助","doctorBanner.helpHint":"會開啟一個已填好診斷資訊的 GitHub issue","doctorBanner.preambleForIssue":"memesh doctor 在我的安裝上回報以下狀況:","doctor.capabilities.summary":"LLM/嵌入配置已偵測","doctor.capabilities.fix":'透過 "memesh config set llm.provider <provider>" 配置',"doctor.config.summary":"配置檔案狀態","doctor.config.fix":'修復或移除配置檔案,然後執行 "memesh config list"',"doctor.dashboard.summary":"儀表板檔案存在","doctor.dashboard.fix":'執行 "npm run build:dashboard" 重建儀表板',"doctor.database.summary":"資料庫存取狀態","doctor.database.fix":'檢查資料庫權限、路徑,或執行 "memesh doctor" 取得詳細診斷',"doctor.hook-activity.summary":"過去 24 小時內未偵測到 memesh 活動","doctor.hook-activity.fix":"開啟一個使用工具的 Claude Code session,或提交一次後重新打開儀表板","doctor.hook-scripts.summary":"Hook 腳本檔案驗證","doctor.hook-scripts.fix":"重新安裝 MeMesh 或從套件還原缺失的 hook 檔案","doctor.hook-wiring.summary":"Claude Code 中的 Hooks 整合狀態","doctor.hook-wiring.fix":'執行 "memesh install-hooks" 將 hooks 接線至 Claude Code 設定',"doctor.hooks-config.summary":"Hooks 配置檔案狀態","doctor.hooks-config.fix":"重新安裝 MeMesh 或還原 .claude-plugin/hooks.json","doctor.http-probe.summary":"HTTP 伺服器可用性檢查","doctor.http-probe.fix":"檢查連接埠是否可用或資料庫是否可存取","doctor.install_id.summary":"匿名安裝 ID 狀態","doctor.install_id.fix":'執行一次 "memesh" 以產生安裝 ID',"doctor.install-channel.summary":"安裝方式偵測","doctor.install-channel.fix":"無需操作","doctor.mcp-config.summary":"MCP 伺服器配置狀態","doctor.mcp-config.fix":"從套件還原 .mcp.json 或重新安裝 MeMesh","doctor.skills-manifest.summary":"Skills 目錄結構驗證","doctor.skills-manifest.fix":"重新安裝 MeMesh 或還原 .claude-plugin/skills 目錄","doctor.update_status.summary":"有新版本:{version}","doctor.update_status.fix":'執行 "memesh update" 進行更新',"doctor.update_status.prerelease":"正在使用預發布版本({current}),npm 最新版為 {latest}","doctor.vector_index.summary":"搜尋索引需要重建","doctor.vector_index.fix":'執行 "memesh reindex" 即可修復',"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":"發生未知錯誤","time.justNow":"剛剛","time.hoursAgo":"{count} 小時前","time.today":"今天","time.yesterday":"昨天","time.daysAgo":"{count} 天前","time.lastWeek":"上週","time.weeksAgo":"{count} 週前","time.lastMonth":"上個月","time.monthsAgo":"{count} 個月前","memory.access.frequent":"常用 · {count} 次","memory.access.recalls":"{count} 次回憶","memory.access.never":"從未回憶","cluster.knowledge":"知識","cluster.activity":"活動","cluster.session":"工作記錄","cluster.reference":"參考","cluster.all":"全部","browse.filterCategory":"類別","browse.filterTime":"時間","browse.filterValue":"價值","browse.filterProject":"專案","browse.filterSort":"排序","browse.timeToday":"今天","browse.timeWeek":"本週","browse.timeMonth":"本月","browse.timeOlder":"更早","browse.valueRecalled":"✓ 用過","browse.valueNever":"從未回憶","browse.sortMostRecalled":"最常回憶","browse.sortRecent":"最近使用","browse.sortCreated":"建立時間","browse.emptyFilter":"此分類沒有記憶 — 試試切換類別或時間","lessons.tabFailure":"失敗教訓","lessons.tabPlan":"計畫紀錄","lessons.tabFreeform":"筆記","lessons.totalRecalls":"總回憶次數","lessons.stepsLabel":"步驟","lessons.commitsCount":"{count} 個 commit","lessons.unstructured":"(此教訓沒有結構化欄位,請查看原始記憶)","lessons.searchPlaceholder":"搜尋 error / root cause / fix / 名稱…","lessons.allProjects":"全部專案","lessons.showing":"顯示 {visible} / {total} 筆","lessons.noMatch":"無符合「{query}」的記憶","lessons.emptyCategory":"此類別沒有記憶","lessons.moreItems":"+{count} 條","roadmap.title":"專案路線圖","roadmap.summary":"{count} 筆記憶 · {first} → {last}","roadmap.switchToList":"↩ 清單檢視","roadmap.switchToRoadmap":"🗺️ 路線圖檢視","roadmap.emptyProject":"此專案尚無記憶。","loop.label":"記憶循環","loop.subtitleHas":"本週被回憶的知識類型記憶","loop.subtitleNone":"本週尚無知識被回憶 — 試試喚起一則教訓","loop.approxNote":"近似值 — 完整追蹤從升級後開始累積","loop.sparkLabel":"最近 30 天","roadmap.milestones":"里程碑","roadmap.keyLessons":"重要教訓","radar.title":"知識覆蓋雷達","radar.caption":"顯示有效知識記憶<br/>(排除 session 和 commit)","radar.axis.lessons":"教訓","radar.axis.decisions":"決策","radar.axis.patterns":"模式","radar.axis.bugs":"問題修復","radar.axis.processes":"流程","radar.axis.architecture":"架構","ageMatrix.title":"記憶年齡分佈","ageMatrix.low":"低","ageMatrix.high":"高","ageMatrix.legend":"顏色深度 = 記憶密度","ageMatrix.typeColumn":"類型","header.signalModeOn":"訊號","header.signalModeOff":"全部","header.signalModeOnHint":"已隱藏 session 與 commit 等雜訊。點擊顯示全部。","header.signalModeOffHint":"顯示包含 session 與 commit 在內的所有記憶。點擊隱藏雜訊。","roadmap.phases":"階段","onboarding.title":"歡迎使用 MeMesh","onboarding.body":"你的記憶庫還是空的。從 30 筆精選範例開始體驗,或直接存下你的第一則教訓。","onboarding.llmHint":"不需要 LLM。所有功能都靠 FTS5 運作(95.40% R@5)。LLM 只用在自動產生教訓,可以之後再到設定頁開啟。","onboarding.seedButton":"一鍵載入示範資料","onboarding.seedingButton":"載入中…","onboarding.seedHint":"直接在這裡載入 30 筆,之後可一鍵清除,不用切到終端機","onboarding.cliReference":"習慣 CLI?","onboarding.hintDemo":"植入 30 筆示範記憶,之後可一鍵清除","onboarding.hintReset":"移除所有 metadata.demo 標記的記憶","onboarding.resetButton":"清除示範資料","onboarding.resettingButton":"清除中…","onboarding.resetConfirm":"確定要移除所有示範記憶?你自己存的內容會保留。","onboarding.dismiss":"關閉","ageMatrix.bucket.week":"本週","ageMatrix.bucket.month":"本月","ageMatrix.bucket.quarter":"本季","ageMatrix.bucket.older":"更早","ageMatrix.type.lesson_learned":"教訓","ageMatrix.type.lesson":"教訓","ageMatrix.type.mistake":"錯誤","ageMatrix.type.decision":"決策","ageMatrix.type.architecture_decision":"架構決策","ageMatrix.type.pattern":"模式","ageMatrix.type.technical_pattern":"技術模式","ageMatrix.type.best_practice":"最佳實踐","ageMatrix.type.bug_fix":"問題修復","ageMatrix.type.workflow_checkpoint":"流程里程碑","ageMatrix.type.process":"流程","ageMatrix.type.architecture":"架構","ageMatrix.type.feature":"功能","settings.behaviourTitle":"行為設定","settings.autoUpdateLabel":"自動更新策略","settings.autoUpdateOff":"關閉 — 僅手動","settings.autoUpdatePatch":"Patch — 自動套用 X.Y.Z+1","settings.autoUpdateMinor":"Minor — 自動套用 X.Y+1.0","settings.autoUpdateMajor":"Major — 自動套用任何版本升級","settings.autoUpdateHint":"每次 session 結束後觸發。MEMESH_AUTO_UPDATE 環境變數優先。","settings.agenticLabel":"啟用 agentic orchestration(實驗性)","settings.agenticHint":"在 Bash 操作時顯示背景代理建議,並啟用可驗證性提示橫幅。Opt-in。","errors.timeout":"請求逾時"},"zh-CN":{"brand.subtitle":"powered by pcircle.ai","header.connected":"已连接","header.disconnected":"已断开","header.connecting":"连接中…","header.memories":"条记忆","tab.insights":"洞察","telemetry.title":"LLM activity","telemetry.lastNDays":"last {n}d","telemetry.loading":"loading…","telemetry.empty":"No LLM activity recorded in this window. Smart-Mode flows write rows automatically once dream / consolidator / failure-analyzer run.","telemetry.callsCount":"{n} calls","telemetry.attemptsCount":"{n} attempts","telemetry.successRate":"success","telemetry.medianLatency":"median latency","telemetry.fallbackUsed":"fallback used {n}× ({pct} of calls)","telemetry.byProvider":"by provider","telemetry.errors":"errors","tab.search":"搜索","insights.title":"memesh 为你做了什么","insights.subtitle":"自动生成的周报整理与发现的模式,等你 review","insights.statPending":"待审","insights.statApplied":"已采用","insights.statRejected":"已拒绝","insights.filter.pending":"待审","insights.filter.applied":"已采用","insights.filter.rejected":"已拒绝","insights.filter.all":"全部","insights.refresh":"刷新","insights.loading":"读取中…","insights.emptyPending":"目前没有待审 insight。可执行 `memesh dream run` 生成周报整理。","insights.emptyNoLlm":"Configure an LLM provider in Settings to enable weekly recaps and pattern detection.","insights.emptyOther":"没有数据。","insights.sources":"sources","insights.status.pending":"待审","insights.status.applied":"已采用","insights.status.rejected":"已拒绝","insights.viewDetail":"查看详情","insights.collapse":"收起","insights.accept":"采用","insights.applying":"应用中…","insights.reject":"拒绝","insights.generatedBy":"生成模型","insights.promptVersion":"Prompt 版本","insights.observations":"摘要观察","insights.tags":"标签","insights.sourceIds":"来源 entities","insights.validationWarnings":"可疑陈述(LLM 验证器)","insights.validationClaim":"陈述","insights.validationReason":"原因","insights.runDream":"执行周报","insights.runDreamWithValidate":"执行(含验证器,较慢但质量更高)","banner.pendingInsights":"有 {n} 则新洞察等你审阅 →","banner.dismiss":"关闭","banner.viewAll":"查看全部","pattern.title":"模式","pattern.evidenceCount":"{n} 个证据","pattern.severity":"严重度","pattern.severity.high":"高","pattern.severity.medium":"中","pattern.severity.low":"低","pattern.description":"模式说明","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.llmOptional.title":"LLM 是可选的","settings.llmOptional.body":"memesh 不需要 LLM 也能运作。默认的核心模式已涵盖全文回忆、手动 remember/recall、仪表板,以及通过 hook 自动捕捉 session。","settings.llmOptional.coreLabel":"没有 LLM(核心模式)","settings.llmOptional.coreFeatures":"FTS5 关键字搜索(LongMemEval-S 上 95.40% R@5)、手动 remember/recall、仪表板、hook 自动捕捉 session","settings.llmOptional.smartLabel":"有 LLM(智能模式)","settings.llmOptional.smartFeatures":"自动从 session 失败萃取 lesson_learned、新 entity 自动标签、周报整理 + 模式发现","settings.apiKey":"API 密钥","settings.model":"模型(选填)","settings.save":"保存","settings.saving":"保存中…","settings.saved":"已保存","settings.removeProvider":"Remove provider","settings.removeProviderHint":"Drops apiKey + model. Falls back to env-var auto-detect or Core Mode (no LLM).","settings.removeProviderConfirm":"Remove the configured LLM provider? This drops the saved API key and model. memesh will fall back to env-var auto-detection (ANTHROPIC_API_KEY > OPENAI_API_KEY > OLLAMA_HOST) or run in Core Mode if no credential is found.","settings.providerRemoved":"Provider removed. memesh now runs in Core Mode or via env-var auto-detect.","settings.test":"测试连接","settings.testing":"测试中…","settings.testPassed":"✓ 连接成功 · 找到 {count} 个可用模型","settings.testFailed":"连接测试失败","settings.suggested":"推荐","settings.testRequired":"请先测试连接后再保存","settings.language":"语言","settings.searchMode":"搜索模式","settings.none":"无","settings.updates":"更新","settings.updateChecking":"正在检查更新…","settings.updateUnavailable":"暂时无法检查更新","settings.updateNoSuccessfulChecks":"目前还没有成功的更新检查记录","settings.upToDate":"已是最新版本","settings.updateAvailable":"有可用更新","settings.updateStale":"当前显示的是可能过期的缓存状态","settings.updateCachedFallback":"当前使用上次成功的缓存结果","settings.updateDeprecatedNoTarget":"已停用 — 暂无可升级目标","settings.updateDeprecatedTitle":"⚠️ MeMesh {version} 已被维护者标记为停用 (DEPRECATED)。","settings.updatePartialTitle":"⚠️ 更新检查未完整","settings.updatePartialDescription":"{message}。本次无法确认停用状态 — 待网络恢复后请重新检查。","settings.updatePartialSummary":"部分检查 — 停用状态未确认","settings.updateDeprecatedTargetUnknown":"已停用 — 升级目标查询中","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.interactHint":"点击节点聚焦 · 拖动空白处平移 · 滚轮缩放","graph.resetView":"重置视图","graph.resetViewHint":"重置缩放与位置","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","feedback.submitting":"收集诊断信息中…","doctorBanner.warnTitle":"提醒 — memesh 设置有需要注意的地方","doctorBanner.failTitle":"memesh 设置不完整","doctorBanner.dismiss":"关闭","doctorBanner.getHelp":"获取帮助","doctorBanner.helpHint":"会打开一个已填好诊断信息的 GitHub issue","doctorBanner.preambleForIssue":"memesh doctor 在我的安装上报告以下情况:","doctor.capabilities.summary":"LLM/embedding configuration detected","doctor.capabilities.fix":'Configure via "memesh config set llm.provider <provider>"',"doctor.config.summary":"Config file status","doctor.config.fix":'Fix or remove the config file, then run "memesh config list"',"doctor.dashboard.summary":"Dashboard artifact exists","doctor.dashboard.fix":'Run "npm run build:dashboard" to rebuild the dashboard',"doctor.database.summary":"Database accessibility status","doctor.database.fix":'Check database permissions, path, or run "memesh doctor" for detailed diagnosis',"doctor.hook-activity.summary":"过去 24 小时内未检测到 memesh 相关活动","doctor.hook-activity.fix":"开启一个使用 ≥3 个工具的 Claude Code session,或提交一次,然后重新打开仪表板","doctor.hook-scripts.summary":"Hook script files verification","doctor.hook-scripts.fix":"Reinstall MeMesh or restore missing hook files from package","doctor.hook-wiring.summary":"Hooks integration status in Claude Code","doctor.hook-wiring.fix":'Run "memesh install-hooks" to wire hooks into Claude Code settings',"doctor.hooks-config.summary":"Hooks configuration file status","doctor.hooks-config.fix":"Reinstall MeMesh or restore .claude-plugin/hooks.json","doctor.http-probe.summary":"HTTP server availability check","doctor.http-probe.fix":"Check if port is available or database is accessible","doctor.install_id.summary":"Anonymous install ID status","doctor.install_id.fix":'Run "memesh" once to generate install ID',"doctor.install-channel.summary":"Installation method detection","doctor.install-channel.fix":"No action needed","doctor.mcp-config.summary":"MCP server configuration status","doctor.mcp-config.fix":"Restore .mcp.json from package or reinstall MeMesh","doctor.skills-manifest.summary":"Skills directory structure validation","doctor.skills-manifest.fix":"Reinstall MeMesh or restore .claude-plugin/skills directory","doctor.update_status.summary":"Update available: {version}","doctor.update_status.fix":'Run "memesh update" to upgrade',"doctor.update_status.prerelease":"Running pre-release version ({current}), npm latest is {latest}","doctor.vector_index.summary":"Search index needs rebuilding","doctor.vector_index.fix":'Run "memesh reindex" to restore full search',"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":"发生未知错误","time.justNow":"刚刚","time.hoursAgo":"{count} 小时前","time.today":"今天","time.yesterday":"昨天","time.daysAgo":"{count} 天前","time.lastWeek":"上周","time.weeksAgo":"{count} 周前","time.lastMonth":"上个月","time.monthsAgo":"{count} 个月前","memory.access.frequent":"常用 · {count} 次","memory.access.recalls":"{count} 次回忆","memory.access.never":"从未回忆","cluster.knowledge":"知识","cluster.activity":"活动","cluster.session":"工作记录","cluster.reference":"参考","cluster.all":"全部","browse.filterCategory":"类别","browse.filterTime":"时间","browse.filterValue":"价值","browse.filterProject":"项目","browse.filterSort":"排序","browse.timeToday":"今天","browse.timeWeek":"本周","browse.timeMonth":"本月","browse.timeOlder":"更早","browse.valueRecalled":"✓ 用过","browse.valueNever":"从未回忆","browse.sortMostRecalled":"最常回忆","browse.sortRecent":"最近使用","browse.sortCreated":"创建时间","browse.emptyFilter":"此分类没有记忆 — 试试切换类别或时间","lessons.tabFailure":"失败教训","lessons.tabPlan":"计划记录","lessons.tabFreeform":"笔记","lessons.totalRecalls":"总回忆次数","lessons.stepsLabel":"步骤","lessons.commitsCount":"{count} 个 commit","lessons.unstructured":"(此教训没有结构化字段,请查看原始记忆)","lessons.searchPlaceholder":"搜索 error / root cause / fix / 名称…","lessons.allProjects":"全部项目","lessons.showing":"显示 {visible} / {total} 条","lessons.noMatch":'无符合"{query}"的记忆',"lessons.emptyCategory":"此类别没有记忆","lessons.moreItems":"+{count} 条","roadmap.title":"项目路线图","roadmap.summary":"{count} 条记忆 · {first} → {last}","roadmap.switchToList":"↩ 列表视图","roadmap.switchToRoadmap":"🗺️ 路线图视图","roadmap.emptyProject":"此项目尚无记忆。","loop.label":"记忆循环","loop.subtitleHas":"本周被回忆的知识类型记忆","loop.subtitleNone":"本周尚无知识被回忆 — 试试唤起一则教训","loop.approxNote":"近似值 — 完整追踪从升级后开始累积","loop.sparkLabel":"最近 30 天","roadmap.milestones":"里程碑","roadmap.keyLessons":"重要教训","radar.title":"知识覆盖雷达","radar.caption":"显示有效知识记忆<br/>(排除 session 和 commit)","radar.axis.lessons":"教训","radar.axis.decisions":"决策","radar.axis.patterns":"模式","radar.axis.bugs":"问题修复","radar.axis.processes":"流程","radar.axis.architecture":"架构","ageMatrix.title":"记忆年龄分布","ageMatrix.low":"低","ageMatrix.high":"高","ageMatrix.legend":"颜色深度 = 记忆密度","ageMatrix.typeColumn":"类型","header.signalModeOn":"信号","header.signalModeOff":"全部","header.signalModeOnHint":"已隐藏 session 与 commit 等噪音。点击显示全部。","header.signalModeOffHint":"显示包含 session 与 commit 在内的所有记忆。点击隐藏噪音。","roadmap.phases":"阶段","onboarding.title":"欢迎使用 MeMesh","onboarding.body":"你的记忆库还是空的。从 30 条精选示例开始体验,或直接存下你的第一则教训。","onboarding.llmHint":"不需要 LLM。所有功能都靠 FTS5 运作(95.40% R@5)。LLM 只用在自动产生教训,可以之后再到设置页开启。","onboarding.seedButton":"一键载入示范数据","onboarding.seedingButton":"载入中…","onboarding.seedHint":"直接在这里载入 30 条,之后可一键清除,不用切到终端","onboarding.cliReference":"习惯 CLI?","onboarding.hintDemo":"植入 30 条示范记忆,之后可一键清除","onboarding.hintReset":"移除所有 metadata.demo 标记的记忆","onboarding.resetButton":"清除示范数据","onboarding.resettingButton":"清除中…","onboarding.resetConfirm":"确定要移除所有示范记忆?你自己存的内容会保留。","onboarding.dismiss":"关闭","ageMatrix.bucket.week":"本周","ageMatrix.bucket.month":"本月","ageMatrix.bucket.quarter":"本季","ageMatrix.bucket.older":"更早","ageMatrix.type.lesson_learned":"教训","ageMatrix.type.lesson":"教训","ageMatrix.type.mistake":"错误","ageMatrix.type.decision":"决策","ageMatrix.type.architecture_decision":"架构决策","ageMatrix.type.pattern":"模式","ageMatrix.type.technical_pattern":"技术模式","ageMatrix.type.best_practice":"最佳实践","ageMatrix.type.bug_fix":"问题修复","ageMatrix.type.workflow_checkpoint":"流程里程碑","ageMatrix.type.process":"流程","ageMatrix.type.architecture":"架构","ageMatrix.type.feature":"功能","settings.behaviourTitle":"行为设置","settings.autoUpdateLabel":"自动更新策略","settings.autoUpdateOff":"关闭 — 仅手动","settings.autoUpdatePatch":"Patch — 自动应用 X.Y.Z+1","settings.autoUpdateMinor":"Minor — 自动应用 X.Y+1.0","settings.autoUpdateMajor":"Major — 自动应用任何版本升级","settings.autoUpdateHint":"每次 session 结束后触发。MEMESH_AUTO_UPDATE 环境变量优先。","settings.agenticLabel":"启用 agentic orchestration(实验性)","settings.agenticHint":"在 Bash 操作时显示后台代理建议,并启用可验证性提示横幅。Opt-in。","errors.timeout":"请求超时"},ja:{"brand.subtitle":"powered by pcircle.ai","header.connected":"接続中","header.disconnected":"切断","header.connecting":"接続しています…","header.memories":"件のメモリ","tab.insights":"Insights","telemetry.title":"LLM アクティビティ","telemetry.lastNDays":"直近 {n} 日","telemetry.loading":"読み込み中…","telemetry.empty":"この期間に LLM アクティビティの記録はありません。dream / consolidator / failure-analyzer が動作すると、Smart-Mode フローが自動的に行を書き込みます。","telemetry.callsCount":"{n} 回の呼び出し","telemetry.attemptsCount":"{n} 回の試行","telemetry.successRate":"成功率","telemetry.medianLatency":"レイテンシ中央値","telemetry.fallbackUsed":"フォールバック使用 {n} 回(呼び出しの {pct})","telemetry.byProvider":"プロバイダ別","telemetry.errors":"エラー","insights.title":"memesh が行ったこと","insights.subtitle":"自動生成された weekly recap と検出された pattern。レビュー待ち","insights.statPending":"pending","insights.statApplied":"applied","insights.statRejected":"rejected","insights.filter.pending":"Pending","insights.filter.applied":"Applied","insights.filter.rejected":"Rejected","insights.filter.all":"すべて","insights.refresh":"更新","insights.loading":"読み込み中…","insights.emptyPending":"pending の insight はありません。`memesh dream run` で weekly recap を生成できます。","insights.emptyNoLlm":"weekly recap と pattern 検出を有効にするには、設定で LLM プロバイダを構成してください。","insights.emptyOther":"データがありません。","insights.sources":"ソース","insights.status.pending":"pending","insights.status.applied":"applied","insights.status.rejected":"rejected","insights.viewDetail":"詳細を見る","insights.collapse":"折りたたむ","insights.accept":"採用","insights.applying":"適用中…","insights.reject":"拒否","insights.generatedBy":"生成モデル","insights.promptVersion":"Prompt バージョン","insights.observations":"要約観察","insights.tags":"タグ","insights.sourceIds":"ソース entity","insights.validationWarnings":"疑わしい主張(LLM validator)","insights.validationClaim":"主張","insights.validationReason":"理由","insights.runDream":"weekly recap を実行","insights.runDreamWithValidate":"validator 付きで実行(遅いが高品質)","banner.pendingInsights":"{n} 件の新しい insight がレビュー待ち →","banner.dismiss":"閉じる","banner.viewAll":"すべて表示","pattern.title":"Pattern","pattern.evidenceCount":"{n} 件の証拠","pattern.severity":"重大度","pattern.severity.high":"高","pattern.severity.medium":"中","pattern.severity.low":"低","pattern.description":"Pattern の説明","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.llmOptional.title":"LLM はオプションです","settings.llmOptional.body":"memesh は LLM なしでも動作します。デフォルトのコアモードは全文リコール、手動の remember/recall、ダッシュボード、フックによるセッション自動キャプチャをカバーします。","settings.llmOptional.coreLabel":"LLM なし(コアモード)","settings.llmOptional.coreFeatures":"FTS5 キーワード検索(LongMemEval-S で 95.40% R@5)、手動 remember/recall、ダッシュボード、フックによるセッションキャプチャ","settings.llmOptional.smartLabel":"LLM あり(スマートモード)","settings.llmOptional.smartFeatures":"セッション失敗から lesson_learned を自動抽出、新規エンティティの自動タグ付け、週次まとめとパターン検出","settings.apiKey":"APIキー","settings.model":"モデル(任意)","settings.save":"保存","settings.saving":"保存中…","settings.saved":"保存しました","settings.removeProvider":"Remove provider","settings.removeProviderHint":"Drops apiKey + model. Falls back to env-var auto-detect or Core Mode (no LLM).","settings.removeProviderConfirm":"Remove the configured LLM provider? This drops the saved API key and model. memesh will fall back to env-var auto-detection (ANTHROPIC_API_KEY > OPENAI_API_KEY > OLLAMA_HOST) or run in Core Mode if no credential is found.","settings.providerRemoved":"Provider removed. memesh now runs in Core Mode or via env-var auto-detect.","settings.test":"接続テスト","settings.testing":"テスト中…","settings.testPassed":"✓ 接続成功 · {count} 個のモデルが利用可能","settings.testFailed":"接続テストに失敗しました","settings.suggested":"推奨","settings.testRequired":"保存前に接続をテストしてください","settings.language":"言語","settings.searchMode":"検索モード","settings.none":"なし","settings.updates":"アップデート","settings.updateChecking":"更新を確認中…","settings.updateUnavailable":"現在は更新を確認できません","settings.updateNoSuccessfulChecks":"まだ一度も更新確認に成功していません","settings.upToDate":"最新です","settings.updateAvailable":"更新があります","settings.updateStale":"表示中のキャッシュ結果は古い可能性があります","settings.updateCachedFallback":"前回成功したキャッシュ結果を使用しています","settings.updateDeprecatedNoTarget":"非推奨 — まだアップグレード先がありません","settings.updateDeprecatedTitle":"⚠️ MeMesh {version} はメンテナーによって非推奨 (DEPRECATED) としてマークされています。","settings.updatePartialTitle":"⚠️ 更新チェックが部分的に失敗しました","settings.updatePartialDescription":"{message}。このセッションでは非推奨ステータスを確認できません — オンラインに復帰してから再実行してください。","settings.updatePartialSummary":"部分的 — 非推奨ステータス未確認","settings.updateDeprecatedTargetUnknown":"非推奨 — アップグレード先を確認中","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.interactHint":"ノードをクリックしてフォーカス · 空白をドラッグでパン · スクロールでズーム","graph.resetView":"ビューをリセット","graph.resetViewHint":"ズームと位置をリセット","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 を作成","feedback.submitting":"診断情報を収集中…","doctorBanner.warnTitle":"お知らせ — memesh のセットアップに注意が必要です","doctorBanner.failTitle":"memesh のセットアップが不完全です","doctorBanner.dismiss":"閉じる","doctorBanner.getHelp":"サポートを受ける","doctorBanner.helpHint":"診断情報が事前入力された GitHub Issue を開きます","doctorBanner.preambleForIssue":"memesh doctor が私のインストールで以下を検出しました:","doctor.capabilities.summary":"LLM/embedding configuration detected","doctor.capabilities.fix":'Configure via "memesh config set llm.provider <provider>"',"doctor.config.summary":"Config file status","doctor.config.fix":'Fix or remove the config file, then run "memesh config list"',"doctor.dashboard.summary":"Dashboard artifact exists","doctor.dashboard.fix":'Run "npm run build:dashboard" to rebuild the dashboard',"doctor.database.summary":"Database accessibility status","doctor.database.fix":'Check database permissions, path, or run "memesh doctor" for detailed diagnosis',"doctor.hook-activity.summary":"過去24時間にmemesh関連のアクティビティはありません","doctor.hook-activity.fix":"3つ以上のツールを使うClaude Codeセッションを開く、もしくはコミットを行ってから、ダッシュボードを再度開いてください","doctor.hook-scripts.summary":"Hook script files verification","doctor.hook-scripts.fix":"Reinstall MeMesh or restore missing hook files from package","doctor.hook-wiring.summary":"Hooks integration status in Claude Code","doctor.hook-wiring.fix":'Run "memesh install-hooks" to wire hooks into Claude Code settings',"doctor.hooks-config.summary":"Hooks configuration file status","doctor.hooks-config.fix":"Reinstall MeMesh or restore .claude-plugin/hooks.json","doctor.http-probe.summary":"HTTP server availability check","doctor.http-probe.fix":"Check if port is available or database is accessible","doctor.install_id.summary":"Anonymous install ID status","doctor.install_id.fix":'Run "memesh" once to generate install ID',"doctor.install-channel.summary":"Installation method detection","doctor.install-channel.fix":"No action needed","doctor.mcp-config.summary":"MCP server configuration status","doctor.mcp-config.fix":"Restore .mcp.json from package or reinstall MeMesh","doctor.skills-manifest.summary":"Skills directory structure validation","doctor.skills-manifest.fix":"Reinstall MeMesh or restore .claude-plugin/skills directory","doctor.update_status.summary":"Update available: {version}","doctor.update_status.fix":'Run "memesh update" to upgrade',"doctor.update_status.prerelease":"Running pre-release version ({current}), npm latest is {latest}","doctor.vector_index.summary":"Search index needs rebuilding","doctor.vector_index.fix":'Run "memesh reindex" to restore full search',"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":"不明なエラー","time.justNow":"たった今","time.hoursAgo":"{count} 時間前","time.today":"今日","time.yesterday":"昨日","time.daysAgo":"{count} 日前","time.lastWeek":"先週","time.weeksAgo":"{count} 週前","time.lastMonth":"先月","time.monthsAgo":"{count} ヶ月前","memory.access.frequent":"頻繁 · {count} 回","memory.access.recalls":"{count} 回呼出","memory.access.never":"未使用","cluster.knowledge":"知識","cluster.activity":"アクティビティ","cluster.session":"セッション","cluster.reference":"参照","cluster.all":"すべて","browse.filterCategory":"カテゴリ","browse.filterTime":"時間","browse.filterValue":"価値","browse.filterProject":"プロジェクト","browse.filterSort":"並べ替え","browse.timeToday":"今日","browse.timeWeek":"今週","browse.timeMonth":"今月","browse.timeOlder":"それ以前","browse.valueRecalled":"✓ 使用済み","browse.valueNever":"未使用","browse.sortMostRecalled":"使用頻度順","browse.sortRecent":"最近の使用順","browse.sortCreated":"作成日順","browse.emptyFilter":"このカテゴリには記憶がありません — フィルタを変更してみてください","lessons.tabFailure":"失敗教訓","lessons.tabPlan":"プラン記録","lessons.tabFreeform":"ノート","lessons.totalRecalls":"合計呼出回数","lessons.stepsLabel":"ステップ","lessons.commitsCount":"{count} コミット","lessons.unstructured":"(構造化フィールドなし — 元のメモリを参照)","lessons.searchPlaceholder":"検索 error / root cause / fix / 名前…","lessons.allProjects":"すべてのプロジェクト","lessons.showing":"{visible} / {total} 件を表示","lessons.noMatch":"「{query}」に一致する記憶なし","lessons.emptyCategory":"このカテゴリには記憶がありません","lessons.moreItems":"あと {count} 件","roadmap.title":"プロジェクトロードマップ","roadmap.summary":"{count} 件の記憶 · {first} → {last}","roadmap.switchToList":"↩ リスト表示","roadmap.switchToRoadmap":"🗺️ ロードマップ表示","roadmap.emptyProject":"このプロジェクトにはまだ記憶がありません。","loop.label":"メモリループ","loop.subtitleHas":"過去 7 日間に呼び出された知識メモリ","loop.subtitleNone":"今週はまだ呼び出された知識がありません — 教訓を呼び出してみてください","loop.approxNote":"近似値 — 完全な追跡はアップグレード後に開始","loop.sparkLabel":"過去 30 日","roadmap.milestones":"マイルストーン","roadmap.keyLessons":"重要な教訓","radar.title":"知識カバレッジレーダー","radar.caption":"有効な知識メモリ<br/>(session と commit を除く)","radar.axis.lessons":"教訓","radar.axis.decisions":"決定","radar.axis.patterns":"パターン","radar.axis.bugs":"バグ修正","radar.axis.processes":"プロセス","radar.axis.architecture":"アーキテクチャ","ageMatrix.title":"メモリ年齢分布","ageMatrix.low":"低","ageMatrix.high":"高","ageMatrix.legend":"色の濃さ = メモリ密度","ageMatrix.typeColumn":"タイプ","header.signalModeOn":"シグナル","header.signalModeOff":"すべて","header.signalModeOnHint":"session と commit のノイズを非表示。クリックで全表示。","header.signalModeOffHint":"session と commit を含む全メモリを表示中。クリックでノイズを非表示。","roadmap.phases":"フェーズ","onboarding.title":"MeMesh へようこそ","onboarding.body":"メモリは空です。30 件のキュレーション済みツアーで始めるか、最初の教訓を記録してください。","onboarding.llmHint":"LLM は不要です。すべての機能は FTS5 のみで動作します(95.40% R@5)。LLM は自動レッスン生成のオプションで、後から設定で有効化できます。","onboarding.seedButton":"デモツアーを開始","onboarding.seedingButton":"読み込み中…","onboarding.seedHint":"端末を開かずに 30 件追加。後でいつでも削除可能","onboarding.cliReference":"CLI を使う場合","onboarding.hintDemo":"30 件のデモメモリを投入(後で削除可)","onboarding.hintReset":"metadata.demo タグの全エンティティを削除","onboarding.resetButton":"デモを削除","onboarding.resettingButton":"削除中…","onboarding.resetConfirm":"デモメモリをすべて削除しますか?自分で保存したものは残ります。","onboarding.dismiss":"閉じる","ageMatrix.bucket.week":"今週","ageMatrix.bucket.month":"今月","ageMatrix.bucket.quarter":"今四半期","ageMatrix.bucket.older":"それ以前","ageMatrix.type.lesson_learned":"教訓","ageMatrix.type.lesson":"教訓","ageMatrix.type.mistake":"ミス","ageMatrix.type.decision":"決定","ageMatrix.type.architecture_decision":"アーキ決定","ageMatrix.type.pattern":"パターン","ageMatrix.type.technical_pattern":"技術パターン","ageMatrix.type.best_practice":"ベストプラクティス","ageMatrix.type.bug_fix":"バグ修正","ageMatrix.type.workflow_checkpoint":"ワークフロー","ageMatrix.type.process":"プロセス","ageMatrix.type.architecture":"アーキテクチャ","ageMatrix.type.feature":"機能","settings.behaviourTitle":"動作設定","settings.autoUpdateLabel":"自動更新ポリシー","settings.autoUpdateOff":"オフ — 手動のみ","settings.autoUpdatePatch":"Patch — X.Y.Z+1 を自動適用","settings.autoUpdateMinor":"Minor — X.Y+1.0 を自動適用","settings.autoUpdateMajor":"Major — 任意のバンプを自動適用","settings.autoUpdateHint":"セッション終了後にトリガー。MEMESH_AUTO_UPDATE 環境変数が優先。","settings.agenticLabel":"agentic orchestration を有効化(実験的)","settings.agenticHint":"Bash 操作時にバックグラウンドエージェントの提案を表示。Opt-in。","errors.timeout":"リクエストがタイムアウトしました"},ko:{"brand.subtitle":"powered by pcircle.ai","header.connected":"연결됨","header.disconnected":"연결 끊김","header.connecting":"연결 중…","header.memories":"개의 기억","tab.insights":"Insights","telemetry.title":"LLM 활동","telemetry.lastNDays":"최근 {n}일","telemetry.loading":"불러오는 중…","telemetry.empty":"이 기간에 기록된 LLM 활동이 없습니다. dream / consolidator / failure-analyzer가 실행되면 Smart-Mode 플로우가 자동으로 행을 기록합니다.","telemetry.callsCount":"{n} 회 호출","telemetry.attemptsCount":"{n} 회 시도","telemetry.successRate":"성공률","telemetry.medianLatency":"지연 시간 중앙값","telemetry.fallbackUsed":"fallback {n}회 사용 (호출의 {pct})","telemetry.byProvider":"프로바이더별","telemetry.errors":"오류","insights.title":"memesh가 한 일","insights.subtitle":"자동 생성된 weekly recap과 발견된 pattern. 검토 대기 중","insights.statPending":"pending","insights.statApplied":"applied","insights.statRejected":"rejected","insights.filter.pending":"Pending","insights.filter.applied":"Applied","insights.filter.rejected":"Rejected","insights.filter.all":"전체","insights.refresh":"새로고침","insights.loading":"불러오는 중…","insights.emptyPending":"pending insight가 없습니다. `memesh dream run`으로 weekly recap을 생성할 수 있습니다.","insights.emptyNoLlm":"weekly recap과 pattern 감지를 사용하려면 설정에서 LLM 프로바이더를 구성하세요.","insights.emptyOther":"데이터가 없습니다.","insights.sources":"소스","insights.status.pending":"pending","insights.status.applied":"applied","insights.status.rejected":"rejected","insights.viewDetail":"자세히 보기","insights.collapse":"접기","insights.accept":"채택","insights.applying":"적용 중…","insights.reject":"거부","insights.generatedBy":"생성 모델","insights.promptVersion":"Prompt 버전","insights.observations":"요약 관찰","insights.tags":"태그","insights.sourceIds":"소스 entity","insights.validationWarnings":"의심스러운 주장 (LLM validator)","insights.validationClaim":"주장","insights.validationReason":"이유","insights.runDream":"weekly recap 실행","insights.runDreamWithValidate":"validator 포함 실행 (느리지만 품질 높음)","banner.pendingInsights":"{n}개의 새 insight가 검토를 기다리고 있습니다 →","banner.dismiss":"닫기","banner.viewAll":"전체 보기","pattern.title":"Pattern","pattern.evidenceCount":"{n}개의 증거","pattern.severity":"심각도","pattern.severity.high":"높음","pattern.severity.medium":"중간","pattern.severity.low":"낮음","pattern.description":"Pattern 설명","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.llmOptional.title":"LLM은 선택 사항입니다","settings.llmOptional.body":"memesh는 LLM 없이도 작동합니다. 기본 코어 모드는 전체 텍스트 회상, 수동 remember/recall, 대시보드, 훅 기반 세션 캡처를 모두 지원합니다.","settings.llmOptional.coreLabel":"LLM 없이(코어 모드)","settings.llmOptional.coreFeatures":"FTS5 키워드 검색(LongMemEval-S에서 95.40% R@5), 수동 remember/recall, 대시보드, 훅 기반 세션 캡처","settings.llmOptional.smartLabel":"LLM 사용(스마트 모드)","settings.llmOptional.smartFeatures":"세션 실패에서 lesson_learned 자동 추출, 새 엔티티 자동 태깅, 주간 요약과 패턴 감지","settings.apiKey":"API 키","settings.model":"모델 (선택)","settings.save":"저장","settings.saving":"저장 중…","settings.saved":"저장되었습니다","settings.removeProvider":"Remove provider","settings.removeProviderHint":"Drops apiKey + model. Falls back to env-var auto-detect or Core Mode (no LLM).","settings.removeProviderConfirm":"Remove the configured LLM provider? This drops the saved API key and model. memesh will fall back to env-var auto-detection (ANTHROPIC_API_KEY > OPENAI_API_KEY > OLLAMA_HOST) or run in Core Mode if no credential is found.","settings.providerRemoved":"Provider removed. memesh now runs in Core Mode or via env-var auto-detect.","settings.test":"연결 테스트","settings.testing":"테스트 중…","settings.testPassed":"✓ 연결 성공 · 사용 가능한 모델 {count}개","settings.testFailed":"연결 테스트 실패","settings.suggested":"추천","settings.testRequired":"저장하기 전에 연결을 테스트하세요","settings.language":"언어","settings.searchMode":"검색 모드","settings.none":"없음","settings.updates":"업데이트","settings.updateChecking":"업데이트 확인 중…","settings.updateUnavailable":"지금은 업데이트를 확인할 수 없습니다","settings.updateNoSuccessfulChecks":"아직 성공한 업데이트 확인 기록이 없습니다","settings.upToDate":"최신 버전입니다","settings.updateAvailable":"업데이트가 있습니다","settings.updateStale":"표시 중인 캐시 상태가 오래되었을 수 있습니다","settings.updateCachedFallback":"마지막으로 성공한 캐시 결과를 사용 중입니다","settings.updateDeprecatedNoTarget":"사용 중단됨 — 아직 업그레이드 대상이 없음","settings.updateDeprecatedTitle":"⚠️ MeMesh {version}이(가) 메인테이너에 의해 사용 중단(DEPRECATED)으로 표시되었습니다.","settings.updatePartialTitle":"⚠️ 업데이트 확인이 부분적으로 실패했습니다","settings.updatePartialDescription":"{message}. 이 세션에서는 사용 중단 상태를 확인할 수 없습니다 — 온라인 상태에서 다시 실행하세요.","settings.updatePartialSummary":"부분 확인됨 — 사용 중단 상태 미확인","settings.updateDeprecatedTargetUnknown":"사용 중단됨 — 업그레이드 대상 확인 중","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.interactHint":"노드 클릭으로 포커스 · 빈 영역 드래그로 이동 · 스크롤로 확대/축소","graph.resetView":"뷰 재설정","graph.resetViewHint":"확대/축소 및 위치 재설정","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 열기","feedback.submitting":"진단 정보 수집 중…","doctorBanner.warnTitle":"알림 — memesh 설정에 주의가 필요합니다","doctorBanner.failTitle":"memesh 설정이 완전하지 않습니다","doctorBanner.dismiss":"닫기","doctorBanner.getHelp":"도움 받기","doctorBanner.helpHint":"진단 정보가 미리 입력된 GitHub Issue를 엽니다","doctorBanner.preambleForIssue":"memesh doctor가 내 설치에서 다음을 발견했습니다:","doctor.capabilities.summary":"LLM/embedding configuration detected","doctor.capabilities.fix":'Configure via "memesh config set llm.provider <provider>"',"doctor.config.summary":"Config file status","doctor.config.fix":'Fix or remove the config file, then run "memesh config list"',"doctor.dashboard.summary":"Dashboard artifact exists","doctor.dashboard.fix":'Run "npm run build:dashboard" to rebuild the dashboard',"doctor.database.summary":"Database accessibility status","doctor.database.fix":'Check database permissions, path, or run "memesh doctor" for detailed diagnosis',"doctor.hook-activity.summary":"지난 24시간 동안 memesh 관련 활동이 없었습니다","doctor.hook-activity.fix":"도구를 3개 이상 사용하는 Claude Code 세션을 열거나 커밋한 후, 대시보드를 다시 여세요","doctor.hook-scripts.summary":"Hook script files verification","doctor.hook-scripts.fix":"Reinstall MeMesh or restore missing hook files from package","doctor.hook-wiring.summary":"Hooks integration status in Claude Code","doctor.hook-wiring.fix":'Run "memesh install-hooks" to wire hooks into Claude Code settings',"doctor.hooks-config.summary":"Hooks configuration file status","doctor.hooks-config.fix":"Reinstall MeMesh or restore .claude-plugin/hooks.json","doctor.http-probe.summary":"HTTP server availability check","doctor.http-probe.fix":"Check if port is available or database is accessible","doctor.install_id.summary":"Anonymous install ID status","doctor.install_id.fix":'Run "memesh" once to generate install ID',"doctor.install-channel.summary":"Installation method detection","doctor.install-channel.fix":"No action needed","doctor.mcp-config.summary":"MCP server configuration status","doctor.mcp-config.fix":"Restore .mcp.json from package or reinstall MeMesh","doctor.skills-manifest.summary":"Skills directory structure validation","doctor.skills-manifest.fix":"Reinstall MeMesh or restore .claude-plugin/skills directory","doctor.update_status.summary":"Update available: {version}","doctor.update_status.fix":'Run "memesh update" to upgrade',"doctor.update_status.prerelease":"Running pre-release version ({current}), npm latest is {latest}","doctor.vector_index.summary":"Search index needs rebuilding","doctor.vector_index.fix":'Run "memesh reindex" to restore full search',"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":"알 수 없는 오류","time.justNow":"방금","time.hoursAgo":"{count}시간 전","time.today":"오늘","time.yesterday":"어제","time.daysAgo":"{count}일 전","time.lastWeek":"지난주","time.weeksAgo":"{count}주 전","time.lastMonth":"지난달","time.monthsAgo":"{count}개월 전","memory.access.frequent":"자주 사용 · {count}회","memory.access.recalls":"{count}회 회상","memory.access.never":"회상 안 됨","cluster.knowledge":"지식","cluster.activity":"활동","cluster.session":"세션","cluster.reference":"참조","cluster.all":"전체","browse.filterCategory":"카테고리","browse.filterTime":"시간","browse.filterValue":"가치","browse.filterProject":"프로젝트","browse.filterSort":"정렬","browse.timeToday":"오늘","browse.timeWeek":"이번 주","browse.timeMonth":"이번 달","browse.timeOlder":"이전","browse.valueRecalled":"✓ 사용됨","browse.valueNever":"회상 안 됨","browse.sortMostRecalled":"자주 회상","browse.sortRecent":"최근 사용","browse.sortCreated":"생성 시간","browse.emptyFilter":"이 카테고리에 기억이 없습니다 — 필터를 변경해 보세요","lessons.tabFailure":"실패 교훈","lessons.tabPlan":"계획 기록","lessons.tabFreeform":"메모","lessons.totalRecalls":"총 회상 횟수","lessons.stepsLabel":"단계","lessons.commitsCount":"{count}개 커밋","lessons.unstructured":"(구조화된 필드 없음 — 원본 기억 참조)","lessons.searchPlaceholder":"error / root cause / fix / 이름 검색…","lessons.allProjects":"모든 프로젝트","lessons.showing":"{visible} / {total}개 표시","lessons.noMatch":'"{query}"와 일치하는 기억 없음',"lessons.emptyCategory":"이 카테고리에 기억이 없습니다","lessons.moreItems":"+{count}개","roadmap.title":"프로젝트 로드맵","roadmap.summary":"{count}개 기억 · {first} → {last}","roadmap.switchToList":"↩ 목록 보기","roadmap.switchToRoadmap":"🗺️ 로드맵 보기","roadmap.emptyProject":"이 프로젝트에는 아직 기억이 없습니다.","loop.label":"기억 루프","loop.subtitleHas":"지난 7일간 회상된 지식 기억","loop.subtitleNone":"이번 주 회상된 지식이 없습니다 — 교훈을 떠올려 보세요","loop.approxNote":"근사치 — 완전한 추적은 업그레이드 후 시작됩니다","loop.sparkLabel":"지난 30일","roadmap.milestones":"마일스톤","roadmap.keyLessons":"주요 교훈","radar.title":"지식 커버리지 레이더","radar.caption":"활성 지식 기억<br/>(session 과 commit 제외)","radar.axis.lessons":"교훈","radar.axis.decisions":"결정","radar.axis.patterns":"패턴","radar.axis.bugs":"버그 수정","radar.axis.processes":"프로세스","radar.axis.architecture":"아키텍처","ageMatrix.title":"기억 연령 분포","ageMatrix.low":"낮음","ageMatrix.high":"높음","ageMatrix.legend":"색상 깊이 = 기억 밀도","ageMatrix.typeColumn":"유형","header.signalModeOn":"시그널","header.signalModeOff":"전체","header.signalModeOnHint":"session 과 commit 노이즈 숨김. 클릭하면 모두 표시.","header.signalModeOffHint":"session 과 commit 을 포함한 모든 기억 표시. 클릭하면 노이즈 숨김.","roadmap.phases":"단계","onboarding.title":"MeMesh 에 오신 것을 환영합니다","onboarding.body":"기억 저장소가 비어 있습니다. 30개 큐레이션된 투어로 시작하거나 첫 교훈을 저장하세요.","onboarding.llmHint":"LLM 불필요. 모든 기능은 FTS5만으로 작동합니다(95.40% R@5). LLM은 자동 교훈 생성을 위한 선택 사항이며, 나중에 설정에서 활성화할 수 있습니다.","onboarding.seedButton":"데모 투어 시작","onboarding.seedingButton":"시드 중…","onboarding.seedHint":"터미널 없이 여기서 30개 추가, 나중에 한 번에 삭제 가능","onboarding.cliReference":"CLI 를 선호하시나요?","onboarding.hintDemo":"30개 데모 기억을 시드(나중에 제거 가능)","onboarding.hintReset":"metadata.demo 태그가 있는 모든 항목 제거","onboarding.resetButton":"데모 제거","onboarding.resettingButton":"제거 중…","onboarding.resetConfirm":"모든 데모 기억을 제거하시겠습니까? 직접 저장한 항목은 유지됩니다.","onboarding.dismiss":"닫기","ageMatrix.bucket.week":"이번 주","ageMatrix.bucket.month":"이번 달","ageMatrix.bucket.quarter":"이번 분기","ageMatrix.bucket.older":"이전","ageMatrix.type.lesson_learned":"교훈","ageMatrix.type.lesson":"교훈","ageMatrix.type.mistake":"실수","ageMatrix.type.decision":"결정","ageMatrix.type.architecture_decision":"아키 결정","ageMatrix.type.pattern":"패턴","ageMatrix.type.technical_pattern":"기술 패턴","ageMatrix.type.best_practice":"베스트 프랙티스","ageMatrix.type.bug_fix":"버그 수정","ageMatrix.type.workflow_checkpoint":"워크플로 마일스톤","ageMatrix.type.process":"프로세스","ageMatrix.type.architecture":"아키텍처","ageMatrix.type.feature":"기능","settings.behaviourTitle":"동작 설정","settings.autoUpdateLabel":"자동 업데이트 정책","settings.autoUpdateOff":"끔 — 수동만","settings.autoUpdatePatch":"Patch — X.Y.Z+1 자동 적용","settings.autoUpdateMinor":"Minor — X.Y+1.0 자동 적용","settings.autoUpdateMajor":"Major — 모든 버전 변경 자동 적용","settings.autoUpdateHint":"세션 종료 후 트리거. MEMESH_AUTO_UPDATE 환경 변수가 우선.","settings.agenticLabel":"agentic orchestration 활성화 (실험적)","settings.agenticHint":"Bash 작업 시 백그라운드 에이전트 제안 표시. Opt-in.","errors.timeout":"요청 시간이 초과되었습니다"},pt:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Conectado","header.disconnected":"Desconectado","header.connecting":"Conectando…","header.memories":"memórias","tab.insights":"Insights","telemetry.title":"Atividade do LLM","telemetry.lastNDays":"últimos {n}d","telemetry.loading":"carregando…","telemetry.empty":"Nenhuma atividade do LLM registrada nessa janela. Os fluxos do Smart-Mode gravam linhas automaticamente assim que dream / consolidator / failure-analyzer forem executados.","telemetry.callsCount":"{n} chamadas","telemetry.attemptsCount":"{n} tentativas","telemetry.successRate":"sucesso","telemetry.medianLatency":"latência mediana","telemetry.fallbackUsed":"fallback usado {n}× ({pct} das chamadas)","telemetry.byProvider":"por provedor","telemetry.errors":"erros","insights.title":"O que o memesh fez por você","insights.subtitle":"recaps semanais e patterns gerados automaticamente, aguardando revisão","insights.statPending":"pending","insights.statApplied":"applied","insights.statRejected":"rejected","insights.filter.pending":"Pending","insights.filter.applied":"Applied","insights.filter.rejected":"Rejected","insights.filter.all":"Todos","insights.refresh":"Atualizar","insights.loading":"carregando…","insights.emptyPending":"Nenhum insight pending. Execute `memesh dream run` para gerar weekly recaps.","insights.emptyNoLlm":"Configure um provedor de LLM nas Configurações para habilitar weekly recaps e detecção de patterns.","insights.emptyOther":"Nada aqui.","insights.sources":"fontes","insights.status.pending":"pending","insights.status.applied":"applied","insights.status.rejected":"rejected","insights.viewDetail":"Ver detalhes","insights.collapse":"Recolher","insights.accept":"Aceitar","insights.applying":"Aplicando…","insights.reject":"Rejeitar","insights.generatedBy":"Gerado por","insights.promptVersion":"Versão do prompt","insights.observations":"Observações resumidas","insights.tags":"Tags","insights.sourceIds":"Fontes","insights.validationWarnings":"Afirmações sinalizadas (LLM validator)","insights.validationClaim":"Afirmação","insights.validationReason":"Motivo","insights.runDream":"Executar weekly recap","insights.runDreamWithValidate":"Executar com validator (mais lento, maior qualidade)","banner.pendingInsights":"{n} novo(s) insight{s} aguardando sua revisão →","banner.dismiss":"Dispensar","banner.viewAll":"Ver todos","pattern.title":"Pattern","pattern.evidenceCount":"{n} evidência(s)","pattern.severity":"Severidade","pattern.severity.high":"alta","pattern.severity.medium":"média","pattern.severity.low":"baixa","pattern.description":"Descrição do pattern","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.llmOptional.title":"O LLM é opcional","settings.llmOptional.body":"memesh funciona sem LLM. O modo Core padrão cobre busca textual, remember/recall manual, dashboard e captura de sessão via hooks.","settings.llmOptional.coreLabel":"Sem LLM (modo Core)","settings.llmOptional.coreFeatures":"busca por palavra-chave FTS5 (95,40% R@5 no LongMemEval-S), remember/recall manual, dashboard, captura de sessão via hooks","settings.llmOptional.smartLabel":"Com LLM (modo Smart)","settings.llmOptional.smartFeatures":"lesson_learned automático a partir de falhas de sessão, auto-tag de novas entidades, resumo semanal + detecção de padrões","settings.apiKey":"Chave API","settings.model":"Modelo (opcional)","settings.save":"Salvar","settings.saving":"Salvando…","settings.saved":"Salvo.","settings.removeProvider":"Remove provider","settings.removeProviderHint":"Drops apiKey + model. Falls back to env-var auto-detect or Core Mode (no LLM).","settings.removeProviderConfirm":"Remove the configured LLM provider? This drops the saved API key and model. memesh will fall back to env-var auto-detection (ANTHROPIC_API_KEY > OPENAI_API_KEY > OLLAMA_HOST) or run in Core Mode if no credential is found.","settings.providerRemoved":"Provider removed. memesh now runs in Core Mode or via env-var auto-detect.","settings.test":"Testar","settings.testing":"Testando…","settings.testPassed":"✓ Conexão OK · {count} modelos disponíveis","settings.testFailed":"Falha no teste de conexão","settings.suggested":"sugerido","settings.testRequired":"Teste a conexão antes de salvar","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.updateDeprecatedNoTarget":"Obsoleto — sem destino de atualização ainda","settings.updateDeprecatedTitle":"⚠️ MeMesh {version} foi marcado como OBSOLETO pelos mantenedores.","settings.updatePartialTitle":"⚠️ Verificação de atualização parcial","settings.updatePartialDescription":"{message}. O status de obsolescência é desconhecido nesta sessão — execute a verificação novamente quando estiver online.","settings.updatePartialSummary":"Parcial — status de obsolescência desconhecido","settings.updateDeprecatedTargetUnknown":"Obsoleto — verificando destino de atualização","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.interactHint":"Clique num nó para focar · arraste área vazia para deslocar · role para zoom","graph.resetView":"Redefinir vista","graph.resetViewHint":"Redefinir zoom e posição","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","feedback.submitting":"Coletando diagnóstico…","doctorBanner.warnTitle":"Atenção — a configuração do memesh precisa de revisão","doctorBanner.failTitle":"A configuração do memesh está incompleta","doctorBanner.dismiss":"Fechar","doctorBanner.getHelp":"Obter ajuda","doctorBanner.helpHint":"Abre um GitHub issue com o diagnóstico pré-preenchido","doctorBanner.preambleForIssue":"O memesh doctor relatou o seguinte na minha instalação:","doctor.capabilities.summary":"LLM/embedding configuration detected","doctor.capabilities.fix":'Configure via "memesh config set llm.provider <provider>"',"doctor.config.summary":"Config file status","doctor.config.fix":'Fix or remove the config file, then run "memesh config list"',"doctor.dashboard.summary":"Dashboard artifact exists","doctor.dashboard.fix":'Run "npm run build:dashboard" to rebuild the dashboard',"doctor.database.summary":"Database accessibility status","doctor.database.fix":'Check database permissions, path, or run "memesh doctor" for detailed diagnosis',"doctor.hook-activity.summary":"Nenhuma atividade atribuída ao memesh nas últimas 24h","doctor.hook-activity.fix":"Abra uma sessão Claude Code que use ≥3 ferramentas, ou faça um commit, e reabra o painel","doctor.hook-scripts.summary":"Hook script files verification","doctor.hook-scripts.fix":"Reinstall MeMesh or restore missing hook files from package","doctor.hook-wiring.summary":"Hooks integration status in Claude Code","doctor.hook-wiring.fix":'Run "memesh install-hooks" to wire hooks into Claude Code settings',"doctor.hooks-config.summary":"Hooks configuration file status","doctor.hooks-config.fix":"Reinstall MeMesh or restore .claude-plugin/hooks.json","doctor.http-probe.summary":"HTTP server availability check","doctor.http-probe.fix":"Check if port is available or database is accessible","doctor.install_id.summary":"Anonymous install ID status","doctor.install_id.fix":'Run "memesh" once to generate install ID',"doctor.install-channel.summary":"Installation method detection","doctor.install-channel.fix":"No action needed","doctor.mcp-config.summary":"MCP server configuration status","doctor.mcp-config.fix":"Restore .mcp.json from package or reinstall MeMesh","doctor.skills-manifest.summary":"Skills directory structure validation","doctor.skills-manifest.fix":"Reinstall MeMesh or restore .claude-plugin/skills directory","doctor.update_status.summary":"Update available: {version}","doctor.update_status.fix":'Run "memesh update" to upgrade',"doctor.update_status.prerelease":"Running pre-release version ({current}), npm latest is {latest}","doctor.vector_index.summary":"Search index needs rebuilding","doctor.vector_index.fix":'Run "memesh reindex" to restore full search',"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","time.justNow":"Agora","time.hoursAgo":"Há {count}h","time.today":"Hoje","time.yesterday":"Ontem","time.daysAgo":"Há {count}d","time.lastWeek":"Semana passada","time.weeksAgo":"Há {count}sem","time.lastMonth":"Mês passado","time.monthsAgo":"Há {count}m","memory.access.frequent":"Frequente · {count} usos","memory.access.recalls":"{count} usos","memory.access.never":"Nunca usado","cluster.knowledge":"Conhecimento","cluster.activity":"Atividade","cluster.session":"Sessões","cluster.reference":"Referência","cluster.all":"Todos","browse.filterCategory":"Categoria","browse.filterTime":"Tempo","browse.filterValue":"Valor","browse.filterProject":"Projeto","browse.filterSort":"Ordenar","browse.timeToday":"Hoje","browse.timeWeek":"Esta semana","browse.timeMonth":"Este mês","browse.timeOlder":"Mais antigo","browse.valueRecalled":"✓ Usado","browse.valueNever":"Nunca usado","browse.sortMostRecalled":"Mais usado","browse.sortRecent":"Recente","browse.sortCreated":"Criado em","browse.emptyFilter":"Sem memórias nesta categoria — tente outro filtro","lessons.tabFailure":"Lições de falha","lessons.tabPlan":"Registros de plano","lessons.tabFreeform":"Notas","lessons.totalRecalls":"Total de recalls","lessons.stepsLabel":"passos","lessons.commitsCount":"{count} commits","lessons.unstructured":"(Sem campos estruturados — ver memória bruta)","lessons.searchPlaceholder":"Buscar error / root cause / fix / nome…","lessons.allProjects":"Todos os projetos","lessons.showing":"Mostrando {visible} / {total}","lessons.noMatch":'Sem memórias correspondendo a "{query}"',"lessons.emptyCategory":"Sem memórias nesta categoria","lessons.moreItems":"+{count} mais","roadmap.title":"Roadmap do Projeto","roadmap.summary":"{count} memórias · {first} → {last}","roadmap.switchToList":"↩ Lista","roadmap.switchToRoadmap":"🗺️ Roadmap","roadmap.emptyProject":"Sem memórias neste projeto ainda.","loop.label":"Loop de memória","loop.subtitleHas":"memórias de conhecimento reutilizadas nos últimos 7 dias","loop.subtitleNone":"Nenhuma memória de conhecimento reutilizada esta semana","loop.approxNote":"Aproximação — rastreamento completo começa após atualização.","loop.sparkLabel":"Últimos 30 dias","roadmap.milestones":"Marcos","roadmap.keyLessons":"Lições principais","radar.title":"Radar de cobertura","radar.caption":"Memórias de conhecimento ativas<br/>(session e commit excluídos)","radar.axis.lessons":"Lições","radar.axis.decisions":"Decisões","radar.axis.patterns":"Padrões","radar.axis.bugs":"Correções","radar.axis.processes":"Processos","radar.axis.architecture":"Arquitetura","ageMatrix.title":"Distribuição de idade","ageMatrix.low":"Baixa","ageMatrix.high":"Alta","ageMatrix.legend":"profundidade da cor = densidade","ageMatrix.typeColumn":"Tipo","header.signalModeOn":"Sinal","header.signalModeOff":"Tudo","header.signalModeOnHint":"Ocultando ruído de session e commit. Clique para mostrar tudo.","header.signalModeOffHint":"Mostrando todas as memórias incluindo ruído. Clique para ocultar.","roadmap.phases":"Fases","onboarding.title":"Bem-vindo ao MeMesh","onboarding.body":"Seu armazenamento de memória está vazio. Comece com um tour de 30 entidades curadas ou registre sua primeira lição.","onboarding.llmHint":"LLM não é necessário. Tudo funciona apenas com FTS5 (95.40% R@5). LLM é opcional para geração automática de lições — configure depois em Configurações.","onboarding.seedButton":"Experimentar o tour","onboarding.seedingButton":"Carregando…","onboarding.seedHint":"Adiciona 30 memórias aqui mesmo — sem precisar do terminal","onboarding.cliReference":"Prefere a CLI?","onboarding.hintDemo":"Insere 30 memórias de demonstração que você pode limpar depois","onboarding.hintReset":"Remove tudo marcado com metadata.demo","onboarding.resetButton":"Resetar demo","onboarding.resettingButton":"Removendo…","onboarding.resetConfirm":"Remover todas as memórias de demonstração? Suas entradas reais serão mantidas.","onboarding.dismiss":"Fechar","ageMatrix.bucket.week":"Esta semana","ageMatrix.bucket.month":"Este mês","ageMatrix.bucket.quarter":"Este trimestre","ageMatrix.bucket.older":"Mais antigo","ageMatrix.type.lesson_learned":"Lição","ageMatrix.type.lesson":"Lição","ageMatrix.type.mistake":"Erro","ageMatrix.type.decision":"Decisão","ageMatrix.type.architecture_decision":"Decisão arq.","ageMatrix.type.pattern":"Padrão","ageMatrix.type.technical_pattern":"Padrão técnico","ageMatrix.type.best_practice":"Melhor prática","ageMatrix.type.bug_fix":"Correção","ageMatrix.type.workflow_checkpoint":"Checkpoint","ageMatrix.type.process":"Processo","ageMatrix.type.architecture":"Arquitetura","ageMatrix.type.feature":"Funcionalidade","settings.behaviourTitle":"Comportamento","settings.autoUpdateLabel":"Política de auto-atualização","settings.autoUpdateOff":"Desligado — apenas manual","settings.autoUpdatePatch":"Patch — aplica X.Y.Z+1","settings.autoUpdateMinor":"Minor — aplica X.Y+1.0","settings.autoUpdateMajor":"Major — aplica qualquer bump","settings.autoUpdateHint":"Acionado após cada sessão. MEMESH_AUTO_UPDATE tem prioridade.","settings.agenticLabel":"Ativar agentic orchestration (experimental)","settings.agenticHint":"Mostra sugestões de agente em Bash. Opt-in apenas.","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.insights":"Insights","telemetry.title":"Activité du LLM","telemetry.lastNDays":"{n} derniers jours","telemetry.loading":"chargement…","telemetry.empty":"Aucune activité du LLM enregistrée sur cette période. Les flux Smart-Mode écrivent automatiquement des lignes dès que dream / consolidator / failure-analyzer s’exécutent.","telemetry.callsCount":"{n} appels","telemetry.attemptsCount":"{n} tentatives","telemetry.successRate":"succès","telemetry.medianLatency":"latence médiane","telemetry.fallbackUsed":"fallback utilisé {n}× ({pct} des appels)","telemetry.byProvider":"par fournisseur","telemetry.errors":"erreurs","insights.title":"Ce que memesh a fait pour vous","insights.subtitle":"recaps hebdomadaires et patterns générés automatiquement, en attente de revue","insights.statPending":"pending","insights.statApplied":"applied","insights.statRejected":"rejected","insights.filter.pending":"Pending","insights.filter.applied":"Applied","insights.filter.rejected":"Rejected","insights.filter.all":"Tous","insights.refresh":"Actualiser","insights.loading":"chargement…","insights.emptyPending":"Aucun insight pending. Exécutez `memesh dream run` pour générer un weekly recap.","insights.emptyNoLlm":"Configurez un fournisseur LLM dans les paramètres pour activer les weekly recaps et la détection de patterns.","insights.emptyOther":"Rien ici.","insights.sources":"sources","insights.status.pending":"pending","insights.status.applied":"applied","insights.status.rejected":"rejected","insights.viewDetail":"Voir le détail","insights.collapse":"Réduire","insights.accept":"Accepter","insights.applying":"Application…","insights.reject":"Rejeter","insights.generatedBy":"Généré par","insights.promptVersion":"Version du prompt","insights.observations":"Observations résumées","insights.tags":"Tags","insights.sourceIds":"Sources","insights.validationWarnings":"Affirmations signalées (LLM validator)","insights.validationClaim":"Affirmation","insights.validationReason":"Raison","insights.runDream":"Lancer le weekly recap","insights.runDreamWithValidate":"Lancer avec validator (plus lent, meilleure qualité)","banner.pendingInsights":"{n} nouveau(x) insight{s} en attente de revue →","banner.dismiss":"Ignorer","banner.viewAll":"Tout voir","pattern.title":"Pattern","pattern.evidenceCount":"{n} preuve(s)","pattern.severity":"Sévérité","pattern.severity.high":"élevée","pattern.severity.medium":"moyenne","pattern.severity.low":"faible","pattern.description":"Description du pattern","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.llmOptional.title":"Le LLM est optionnel","settings.llmOptional.body":"memesh fonctionne sans LLM. Le mode Core par défaut couvre la recherche plein texte, remember/recall manuel, le tableau de bord et la capture de session via les hooks.","settings.llmOptional.coreLabel":"Sans LLM (mode Core)","settings.llmOptional.coreFeatures":"recherche par mot-clé FTS5 (95,40 % R@5 sur LongMemEval-S), remember/recall manuel, tableau de bord, capture de session via hooks","settings.llmOptional.smartLabel":"Avec LLM (mode Smart)","settings.llmOptional.smartFeatures":"lesson_learned automatique à partir des échecs de session, auto-tag des nouvelles entités, récap hebdomadaire + détection de motifs","settings.apiKey":"Clé API","settings.model":"Modèle (optionnel)","settings.save":"Enregistrer","settings.saving":"Enregistrement…","settings.saved":"Enregistré.","settings.removeProvider":"Remove provider","settings.removeProviderHint":"Drops apiKey + model. Falls back to env-var auto-detect or Core Mode (no LLM).","settings.removeProviderConfirm":"Remove the configured LLM provider? This drops the saved API key and model. memesh will fall back to env-var auto-detection (ANTHROPIC_API_KEY > OPENAI_API_KEY > OLLAMA_HOST) or run in Core Mode if no credential is found.","settings.providerRemoved":"Provider removed. memesh now runs in Core Mode or via env-var auto-detect.","settings.test":"Tester","settings.testing":"Test en cours…","settings.testPassed":"✓ Connexion OK · {count} modèles disponibles","settings.testFailed":"Échec du test de connexion","settings.suggested":"suggéré","settings.testRequired":"Testez la connexion avant d'enregistrer","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.updateDeprecatedNoTarget":"Obsolète — pas encore de cible de mise à niveau","settings.updateDeprecatedTitle":"⚠️ MeMesh {version} est marqué OBSOLÈTE par les mainteneurs.","settings.updatePartialTitle":"⚠️ Vérification de mise à jour partielle","settings.updatePartialDescription":"{message}. Le statut d'obsolescence est inconnu pour cette session — relancez la vérification une fois en ligne.","settings.updatePartialSummary":"Partielle — statut d'obsolescence inconnu","settings.updateDeprecatedTargetUnknown":"Obsolète — recherche de la cible de mise à niveau","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.interactHint":"Cliquez sur un nœud pour cibler · glissez une zone vide pour déplacer · molette pour zoomer","graph.resetView":"Réinitialiser la vue","graph.resetViewHint":"Réinitialiser zoom et position","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","feedback.submitting":"Collecte des diagnostics…","doctorBanner.warnTitle":"Attention — la configuration de memesh nécessite une vérification","doctorBanner.failTitle":"La configuration de memesh est incomplète","doctorBanner.dismiss":"Fermer","doctorBanner.getHelp":"Obtenir de l'aide","doctorBanner.helpHint":"Ouvre un GitHub issue avec le diagnostic pré-rempli","doctorBanner.preambleForIssue":"memesh doctor a signalé ce qui suit sur mon installation :","doctor.capabilities.summary":"LLM/embedding configuration detected","doctor.capabilities.fix":'Configure via "memesh config set llm.provider <provider>"',"doctor.config.summary":"Config file status","doctor.config.fix":'Fix or remove the config file, then run "memesh config list"',"doctor.dashboard.summary":"Dashboard artifact exists","doctor.dashboard.fix":'Run "npm run build:dashboard" to rebuild the dashboard',"doctor.database.summary":"Database accessibility status","doctor.database.fix":'Check database permissions, path, or run "memesh doctor" for detailed diagnosis',"doctor.hook-activity.summary":"Aucune activité memesh ces dernières 24 heures","doctor.hook-activity.fix":"Ouvrez une session Claude Code utilisant ≥3 outils, ou faites un commit, puis rouvrez le tableau de bord","doctor.hook-scripts.summary":"Hook script files verification","doctor.hook-scripts.fix":"Reinstall MeMesh or restore missing hook files from package","doctor.hook-wiring.summary":"Hooks integration status in Claude Code","doctor.hook-wiring.fix":'Run "memesh install-hooks" to wire hooks into Claude Code settings',"doctor.hooks-config.summary":"Hooks configuration file status","doctor.hooks-config.fix":"Reinstall MeMesh or restore .claude-plugin/hooks.json","doctor.http-probe.summary":"HTTP server availability check","doctor.http-probe.fix":"Check if port is available or database is accessible","doctor.install_id.summary":"Anonymous install ID status","doctor.install_id.fix":'Run "memesh" once to generate install ID',"doctor.install-channel.summary":"Installation method detection","doctor.install-channel.fix":"No action needed","doctor.mcp-config.summary":"MCP server configuration status","doctor.mcp-config.fix":"Restore .mcp.json from package or reinstall MeMesh","doctor.skills-manifest.summary":"Skills directory structure validation","doctor.skills-manifest.fix":"Reinstall MeMesh or restore .claude-plugin/skills directory","doctor.update_status.summary":"Update available: {version}","doctor.update_status.fix":'Run "memesh update" to upgrade',"doctor.update_status.prerelease":"Running pre-release version ({current}), npm latest is {latest}","doctor.vector_index.summary":"Search index needs rebuilding","doctor.vector_index.fix":'Run "memesh reindex" to restore full search',"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","time.justNow":"À l'instant","time.hoursAgo":"Il y a {count}h","time.today":"Aujourd'hui","time.yesterday":"Hier","time.daysAgo":"Il y a {count}j","time.lastWeek":"Semaine dernière","time.weeksAgo":"Il y a {count}sem","time.lastMonth":"Mois dernier","time.monthsAgo":"Il y a {count}mo","memory.access.frequent":"Fréquent · {count} rappels","memory.access.recalls":"{count} rappels","memory.access.never":"Jamais rappelé","cluster.knowledge":"Connaissance","cluster.activity":"Activité","cluster.session":"Sessions","cluster.reference":"Référence","cluster.all":"Tout","browse.filterCategory":"Catégorie","browse.filterTime":"Temps","browse.filterValue":"Valeur","browse.filterProject":"Projet","browse.filterSort":"Trier","browse.timeToday":"Aujourd'hui","browse.timeWeek":"Cette semaine","browse.timeMonth":"Ce mois-ci","browse.timeOlder":"Plus ancien","browse.valueRecalled":"✓ Utilisé","browse.valueNever":"Jamais rappelé","browse.sortMostRecalled":"Plus rappelé","browse.sortRecent":"Récent","browse.sortCreated":"Créé","browse.emptyFilter":"Aucune mémoire dans cette catégorie — essayez un autre filtre","lessons.tabFailure":"Leçons d'échec","lessons.tabPlan":"Enregistrements de plan","lessons.tabFreeform":"Notes","lessons.totalRecalls":"Rappels totaux","lessons.stepsLabel":"étapes","lessons.commitsCount":"{count} commits","lessons.unstructured":"(Pas de champs structurés — voir mémoire brute)","lessons.searchPlaceholder":"Rechercher error / root cause / fix / nom…","lessons.allProjects":"Tous les projets","lessons.showing":"Affichage {visible} / {total}","lessons.noMatch":"Aucune mémoire correspondant à « {query} »","lessons.emptyCategory":"Aucune mémoire dans cette catégorie","lessons.moreItems":"+{count} de plus","roadmap.title":"Feuille de Route","roadmap.summary":"{count} mémoires · {first} → {last}","roadmap.switchToList":"↩ Vue Liste","roadmap.switchToRoadmap":"🗺️ Vue Roadmap","roadmap.emptyProject":"Aucune mémoire dans ce projet pour l'instant.","loop.label":"Boucle mémoire","loop.subtitleHas":"mémoires de connaissances rappelées ces 7 derniers jours","loop.subtitleNone":"Aucune mémoire rappelée cette semaine","loop.approxNote":"Approximation — suivi complet à partir de la mise à jour.","loop.sparkLabel":"30 derniers jours","roadmap.milestones":"Jalons","roadmap.keyLessons":"Leçons clés","radar.title":"Radar de couverture","radar.caption":"Mémoires actives<br/>(session et commit exclus)","radar.axis.lessons":"Leçons","radar.axis.decisions":"Décisions","radar.axis.patterns":"Patterns","radar.axis.bugs":"Bugs corrigés","radar.axis.processes":"Processus","radar.axis.architecture":"Architecture","ageMatrix.title":"Distribution par âge","ageMatrix.low":"Faible","ageMatrix.high":"Élevé","ageMatrix.legend":"profondeur = densité","ageMatrix.typeColumn":"Type","header.signalModeOn":"Signal","header.signalModeOff":"Tout","header.signalModeOnHint":"Masque le bruit session/commit. Cliquez pour tout afficher.","header.signalModeOffHint":"Affiche toutes les mémoires y compris le bruit. Cliquez pour masquer.","roadmap.phases":"Phases","onboarding.title":"Bienvenue dans MeMesh","onboarding.body":"Votre mémoire est vide. Commencez par une visite de 30 entités ou enregistrez votre première leçon.","onboarding.llmHint":"Aucun LLM requis. Tout fonctionne avec FTS5 seul (95,40 % R@5). Un LLM est facultatif pour la génération automatique de leçons — configurez-le plus tard dans Paramètres.","onboarding.seedButton":"Lancer la visite démo","onboarding.seedingButton":"Chargement…","onboarding.seedHint":"Ajoute 30 mémoires ici même — pas besoin de terminal","onboarding.cliReference":"Vous préférez la CLI ?","onboarding.hintDemo":"Sème 30 mémoires de démonstration (effaçables plus tard)","onboarding.hintReset":"Supprime tout ce qui est marqué metadata.demo","onboarding.resetButton":"Réinitialiser la démo","onboarding.resettingButton":"Suppression…","onboarding.resetConfirm":"Supprimer toutes les mémoires de démo ? Vos entrées personnelles seront conservées.","onboarding.dismiss":"Fermer","ageMatrix.bucket.week":"Cette semaine","ageMatrix.bucket.month":"Ce mois","ageMatrix.bucket.quarter":"Ce trimestre","ageMatrix.bucket.older":"Plus ancien","ageMatrix.type.lesson_learned":"Leçon","ageMatrix.type.lesson":"Leçon","ageMatrix.type.mistake":"Erreur","ageMatrix.type.decision":"Décision","ageMatrix.type.architecture_decision":"Décision arch.","ageMatrix.type.pattern":"Pattern","ageMatrix.type.technical_pattern":"Pattern tech.","ageMatrix.type.best_practice":"Bonne pratique","ageMatrix.type.bug_fix":"Correction","ageMatrix.type.workflow_checkpoint":"Jalon","ageMatrix.type.process":"Processus","ageMatrix.type.architecture":"Architecture","ageMatrix.type.feature":"Fonctionnalité","settings.behaviourTitle":"Comportement","settings.autoUpdateLabel":"Politique de mise à jour auto","settings.autoUpdateOff":"Désactivé — manuel uniquement","settings.autoUpdatePatch":"Patch — applique X.Y.Z+1","settings.autoUpdateMinor":"Minor — applique X.Y+1.0","settings.autoUpdateMajor":"Major — applique toute mise à jour","settings.autoUpdateHint":"Déclenché à la fin de chaque session. MEMESH_AUTO_UPDATE a priorité.","settings.agenticLabel":"Activer agentic orchestration (expérimental)","settings.agenticHint":"Affiche des suggestions d'agent en Bash. Opt-in.","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.insights":"Insights","telemetry.title":"LLM-Aktivität","telemetry.lastNDays":"letzte {n} Tage","telemetry.loading":"lädt…","telemetry.empty":"In diesem Zeitraum wurde keine LLM-Aktivität aufgezeichnet. Smart-Mode-Flows schreiben automatisch Einträge, sobald dream / consolidator / failure-analyzer laufen.","telemetry.callsCount":"{n} Aufrufe","telemetry.attemptsCount":"{n} Versuche","telemetry.successRate":"Erfolg","telemetry.medianLatency":"mediane Latenz","telemetry.fallbackUsed":"Fallback {n}× verwendet ({pct} der Aufrufe)","telemetry.byProvider":"nach Provider","telemetry.errors":"Fehler","insights.title":"Was memesh für dich getan hat","insights.subtitle":"automatisch generierte weekly recaps und erkannte patterns – warten auf Review","insights.statPending":"pending","insights.statApplied":"applied","insights.statRejected":"rejected","insights.filter.pending":"Pending","insights.filter.applied":"Applied","insights.filter.rejected":"Rejected","insights.filter.all":"Alle","insights.refresh":"Aktualisieren","insights.loading":"lädt…","insights.emptyPending":"Keine pending Insights. Führe `memesh dream run` aus, um einen weekly recap zu erzeugen.","insights.emptyNoLlm":"Konfiguriere einen LLM-Provider in den Einstellungen, um weekly recaps und Pattern-Erkennung zu aktivieren.","insights.emptyOther":"Nichts hier.","insights.sources":"Quellen","insights.status.pending":"pending","insights.status.applied":"applied","insights.status.rejected":"rejected","insights.viewDetail":"Details anzeigen","insights.collapse":"Einklappen","insights.accept":"Übernehmen","insights.applying":"Wird angewendet…","insights.reject":"Ablehnen","insights.generatedBy":"Erzeugt von","insights.promptVersion":"Prompt-Version","insights.observations":"Zusammenfassende Beobachtungen","insights.tags":"Tags","insights.sourceIds":"Quell-Entities","insights.validationWarnings":"Markierte Aussagen (LLM-validator)","insights.validationClaim":"Aussage","insights.validationReason":"Grund","insights.runDream":"Weekly recap ausführen","insights.runDreamWithValidate":"Mit validator ausführen (langsamer, höhere Qualität)","banner.pendingInsights":"{n} neue(r) Insight(s) wartet auf dein Review →","banner.dismiss":"Schließen","banner.viewAll":"Alle anzeigen","pattern.title":"Pattern","pattern.evidenceCount":"{n} Belege","pattern.severity":"Schweregrad","pattern.severity.high":"hoch","pattern.severity.medium":"mittel","pattern.severity.low":"niedrig","pattern.description":"Pattern-Beschreibung","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.llmOptional.title":"LLM ist optional","settings.llmOptional.body":"memesh funktioniert ohne LLM. Der Standard-Core-Modus bietet Volltextsuche, manuelles remember/recall, Dashboard und Session-Erfassung über Hooks.","settings.llmOptional.coreLabel":"Ohne LLM (Core-Modus)","settings.llmOptional.coreFeatures":"FTS5-Stichwortsuche (95,40 % R@5 auf LongMemEval-S), manuelles remember/recall, Dashboard, Session-Erfassung via Hooks","settings.llmOptional.smartLabel":"Mit LLM (Smart-Modus)","settings.llmOptional.smartFeatures":"automatische lesson_learned aus Session-Fehlern, Auto-Tagging neuer Entitäten, Wochen-Recap + Mustererkennung","settings.apiKey":"API-Schlüssel","settings.model":"Modell (optional)","settings.save":"Speichern","settings.saving":"Speichern…","settings.saved":"Gespeichert.","settings.removeProvider":"Remove provider","settings.removeProviderHint":"Drops apiKey + model. Falls back to env-var auto-detect or Core Mode (no LLM).","settings.removeProviderConfirm":"Remove the configured LLM provider? This drops the saved API key and model. memesh will fall back to env-var auto-detection (ANTHROPIC_API_KEY > OPENAI_API_KEY > OLLAMA_HOST) or run in Core Mode if no credential is found.","settings.providerRemoved":"Provider removed. memesh now runs in Core Mode or via env-var auto-detect.","settings.test":"Testen","settings.testing":"Teste…","settings.testPassed":"✓ Verbindung OK · {count} Modelle verfügbar","settings.testFailed":"Verbindungstest fehlgeschlagen","settings.suggested":"empfohlen","settings.testRequired":"Bitte Verbindung vor dem Speichern testen","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.updateDeprecatedNoTarget":"Veraltet — noch kein Upgrade-Ziel verfügbar","settings.updateDeprecatedTitle":"⚠️ MeMesh {version} wurde von den Maintainern als VERALTET markiert.","settings.updatePartialTitle":"⚠️ Update-Prüfung unvollständig","settings.updatePartialDescription":"{message}. Veraltungsstatus ist in dieser Sitzung unbekannt — Prüfung online erneut ausführen.","settings.updatePartialSummary":"Teilweise — Veraltungsstatus unbekannt","settings.updateDeprecatedTargetUnknown":"Veraltet — Upgrade-Ziel wird ermittelt","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.interactHint":"Knoten anklicken für Fokus · leere Fläche ziehen zum Schwenken · scrollen zum Zoomen","graph.resetView":"Ansicht zurücksetzen","graph.resetViewHint":"Zoom und Position zurücksetzen","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","feedback.submitting":"Diagnose wird erfasst…","doctorBanner.warnTitle":"Hinweis — die memesh-Einrichtung muss überprüft werden","doctorBanner.failTitle":"memesh-Einrichtung ist unvollständig","doctorBanner.dismiss":"Schließen","doctorBanner.getHelp":"Hilfe bekommen","doctorBanner.helpHint":"Öffnet ein GitHub Issue mit vorausgefülltem Diagnosebericht","doctorBanner.preambleForIssue":"memesh doctor hat in meiner Installation Folgendes gemeldet:","doctor.capabilities.summary":"LLM/embedding configuration detected","doctor.capabilities.fix":'Configure via "memesh config set llm.provider <provider>"',"doctor.config.summary":"Config file status","doctor.config.fix":'Fix or remove the config file, then run "memesh config list"',"doctor.dashboard.summary":"Dashboard artifact exists","doctor.dashboard.fix":'Run "npm run build:dashboard" to rebuild the dashboard',"doctor.database.summary":"Database accessibility status","doctor.database.fix":'Check database permissions, path, or run "memesh doctor" for detailed diagnosis',"doctor.hook-activity.summary":"Keine memesh-Aktivität in den letzten 24 Stunden","doctor.hook-activity.fix":"Starten Sie eine Claude-Code-Session mit ≥3 Tools oder committen Sie etwas und öffnen Sie das Dashboard erneut","doctor.hook-scripts.summary":"Hook script files verification","doctor.hook-scripts.fix":"Reinstall MeMesh or restore missing hook files from package","doctor.hook-wiring.summary":"Hooks integration status in Claude Code","doctor.hook-wiring.fix":'Run "memesh install-hooks" to wire hooks into Claude Code settings',"doctor.hooks-config.summary":"Hooks configuration file status","doctor.hooks-config.fix":"Reinstall MeMesh or restore .claude-plugin/hooks.json","doctor.http-probe.summary":"HTTP server availability check","doctor.http-probe.fix":"Check if port is available or database is accessible","doctor.install_id.summary":"Anonymous install ID status","doctor.install_id.fix":'Run "memesh" once to generate install ID',"doctor.install-channel.summary":"Installation method detection","doctor.install-channel.fix":"No action needed","doctor.mcp-config.summary":"MCP server configuration status","doctor.mcp-config.fix":"Restore .mcp.json from package or reinstall MeMesh","doctor.skills-manifest.summary":"Skills directory structure validation","doctor.skills-manifest.fix":"Reinstall MeMesh or restore .claude-plugin/skills directory","doctor.update_status.summary":"Update available: {version}","doctor.update_status.fix":'Run "memesh update" to upgrade',"doctor.update_status.prerelease":"Running pre-release version ({current}), npm latest is {latest}","doctor.vector_index.summary":"Search index needs rebuilding","doctor.vector_index.fix":'Run "memesh reindex" to restore full search',"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","time.justNow":"Gerade eben","time.hoursAgo":"Vor {count} Std","time.today":"Heute","time.yesterday":"Gestern","time.daysAgo":"Vor {count} T","time.lastWeek":"Letzte Woche","time.weeksAgo":"Vor {count} W","time.lastMonth":"Letzter Monat","time.monthsAgo":"Vor {count} M","memory.access.frequent":"Häufig · {count} Abrufe","memory.access.recalls":"{count} Abrufe","memory.access.never":"Nie abgerufen","cluster.knowledge":"Wissen","cluster.activity":"Aktivität","cluster.session":"Sitzungen","cluster.reference":"Referenz","cluster.all":"Alle","browse.filterCategory":"Kategorie","browse.filterTime":"Zeit","browse.filterValue":"Wert","browse.filterProject":"Projekt","browse.filterSort":"Sortieren","browse.timeToday":"Heute","browse.timeWeek":"Diese Woche","browse.timeMonth":"Dieser Monat","browse.timeOlder":"Älter","browse.valueRecalled":"✓ Verwendet","browse.valueNever":"Nie abgerufen","browse.sortMostRecalled":"Häufigste","browse.sortRecent":"Zuletzt","browse.sortCreated":"Erstellt","browse.emptyFilter":"Keine Erinnerungen in dieser Kategorie — anderen Filter probieren","lessons.tabFailure":"Fehler-Lektionen","lessons.tabPlan":"Plan-Aufzeichnungen","lessons.tabFreeform":"Notizen","lessons.totalRecalls":"Abrufe gesamt","lessons.stepsLabel":"Schritte","lessons.commitsCount":"{count} Commits","lessons.unstructured":"(Keine strukturierten Felder — siehe Rohspeicher)","lessons.searchPlaceholder":"Suche error / root cause / fix / Name…","lessons.allProjects":"Alle Projekte","lessons.showing":"{visible} / {total} angezeigt","lessons.noMatch":'Keine Erinnerungen zu „{query}"',"lessons.emptyCategory":"Keine Erinnerungen in dieser Kategorie","lessons.moreItems":"+{count} weitere","roadmap.title":"Projekt-Roadmap","roadmap.summary":"{count} Erinnerungen · {first} → {last}","roadmap.switchToList":"↩ Listenansicht","roadmap.switchToRoadmap":"🗺️ Roadmap-Ansicht","roadmap.emptyProject":"Noch keine Erinnerungen in diesem Projekt.","loop.label":"Memory-Loop","loop.subtitleHas":"Wissens-Erinnerungen in den letzten 7 Tagen wiederverwendet","loop.subtitleNone":"Diese Woche keine Wissens-Erinnerungen abgerufen","loop.approxNote":"Annäherung — vollständige Verfolgung beginnt nach Upgrade.","loop.sparkLabel":"Letzte 30 Tage","roadmap.milestones":"Meilensteine","roadmap.keyLessons":"Wichtige Lektionen","radar.title":"Wissensabdeckung","radar.caption":"Aktive Wissens-Erinnerungen<br/>(session und commit ausgeschlossen)","radar.axis.lessons":"Lektionen","radar.axis.decisions":"Entscheidungen","radar.axis.patterns":"Muster","radar.axis.bugs":"Bugfixes","radar.axis.processes":"Prozesse","radar.axis.architecture":"Architektur","ageMatrix.title":"Altersverteilung","ageMatrix.low":"Niedrig","ageMatrix.high":"Hoch","ageMatrix.legend":"Farbtiefe = Dichte","ageMatrix.typeColumn":"Typ","header.signalModeOn":"Signal","header.signalModeOff":"Alle","header.signalModeOnHint":"Session-/Commit-Rauschen ausgeblendet. Klick zeigt alles.","header.signalModeOffHint":"Alle Erinnerungen inklusive Rauschen. Klick blendet aus.","roadmap.phases":"Phasen","onboarding.title":"Willkommen bei MeMesh","onboarding.body":"Ihr Memory-Store ist leer. Starten Sie mit einer kuratierten 30-Entitäts-Tour oder speichern Sie Ihre erste Lektion.","onboarding.llmHint":"Kein LLM erforderlich. Alles funktioniert nur mit FTS5 (95,40 % R@5). Ein LLM ist optional für automatische Lektionsgenerierung — später in den Einstellungen konfigurieren.","onboarding.seedButton":"Demo-Tour starten","onboarding.seedingButton":"Wird geladen…","onboarding.seedHint":"Fügt direkt hier 30 Erinnerungen hinzu — kein Terminal nötig","onboarding.cliReference":"Lieber per CLI?","onboarding.hintDemo":"Fügt 30 Demo-Erinnerungen ein (später löschbar)","onboarding.hintReset":"Entfernt alle mit metadata.demo markierten Einträge","onboarding.resetButton":"Demo zurücksetzen","onboarding.resettingButton":"Wird entfernt…","onboarding.resetConfirm":"Alle Demo-Erinnerungen entfernen? Ihre echten Einträge bleiben erhalten.","onboarding.dismiss":"Schließen","ageMatrix.bucket.week":"Diese Woche","ageMatrix.bucket.month":"Dieser Monat","ageMatrix.bucket.quarter":"Dieses Quartal","ageMatrix.bucket.older":"Älter","ageMatrix.type.lesson_learned":"Lektion","ageMatrix.type.lesson":"Lektion","ageMatrix.type.mistake":"Fehler","ageMatrix.type.decision":"Entscheidung","ageMatrix.type.architecture_decision":"Arch.-Entsch.","ageMatrix.type.pattern":"Muster","ageMatrix.type.technical_pattern":"Tech. Muster","ageMatrix.type.best_practice":"Best Practice","ageMatrix.type.bug_fix":"Bugfix","ageMatrix.type.workflow_checkpoint":"Meilenstein","ageMatrix.type.process":"Prozess","ageMatrix.type.architecture":"Architektur","ageMatrix.type.feature":"Feature","settings.behaviourTitle":"Verhalten","settings.autoUpdateLabel":"Auto-Update-Richtlinie","settings.autoUpdateOff":"Aus — nur manuell","settings.autoUpdatePatch":"Patch — wendet X.Y.Z+1 an","settings.autoUpdateMinor":"Minor — wendet X.Y+1.0 an","settings.autoUpdateMajor":"Major — wendet jede Version an","settings.autoUpdateHint":"Wird nach jeder Sitzung ausgelöst. MEMESH_AUTO_UPDATE hat Vorrang.","settings.agenticLabel":"agentic orchestration aktivieren (experimentell)","settings.agenticHint":"Zeigt Hintergrund-Agent-Vorschläge in Bash. Opt-in.","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.insights":"Insights","telemetry.title":"Hoạt động LLM","telemetry.lastNDays":"{n} ngày qua","telemetry.loading":"đang tải…","telemetry.empty":"Không có hoạt động LLM nào được ghi nhận trong khoảng thời gian này. Các flow Smart-Mode sẽ tự động ghi dữ liệu khi dream / consolidator / failure-analyzer chạy.","telemetry.callsCount":"{n} lệnh gọi","telemetry.attemptsCount":"{n} lần thử","telemetry.successRate":"thành công","telemetry.medianLatency":"độ trễ trung vị","telemetry.fallbackUsed":"fallback dùng {n}× ({pct} số lệnh gọi)","telemetry.byProvider":"theo nhà cung cấp","telemetry.errors":"lỗi","insights.title":"memesh đã làm gì cho bạn","insights.subtitle":"các weekly recap và pattern được tạo tự động, đang chờ bạn xem xét","insights.statPending":"pending","insights.statApplied":"applied","insights.statRejected":"rejected","insights.filter.pending":"Pending","insights.filter.applied":"Applied","insights.filter.rejected":"Rejected","insights.filter.all":"Tất cả","insights.refresh":"Làm mới","insights.loading":"đang tải…","insights.emptyPending":"Không có insight nào pending. Chạy `memesh dream run` để tạo weekly recap.","insights.emptyNoLlm":"Cấu hình một nhà cung cấp LLM trong phần Cài đặt để bật weekly recap và phát hiện pattern.","insights.emptyOther":"Không có gì ở đây.","insights.sources":"nguồn","insights.status.pending":"pending","insights.status.applied":"applied","insights.status.rejected":"rejected","insights.viewDetail":"Xem chi tiết","insights.collapse":"Thu gọn","insights.accept":"Chấp nhận","insights.applying":"Đang áp dụng…","insights.reject":"Từ chối","insights.generatedBy":"Tạo bởi","insights.promptVersion":"Phiên bản prompt","insights.observations":"Tóm tắt quan sát","insights.tags":"Thẻ","insights.sourceIds":"Entity nguồn","insights.validationWarnings":"Nhận định bị gắn cờ (LLM validator)","insights.validationClaim":"Nhận định","insights.validationReason":"Lý do","insights.runDream":"Chạy weekly recap","insights.runDreamWithValidate":"Chạy kèm validator (chậm hơn, chất lượng cao hơn)","banner.pendingInsights":"{n} insight mới đang chờ bạn xem xét →","banner.dismiss":"Bỏ qua","banner.viewAll":"Xem tất cả","pattern.title":"Pattern","pattern.evidenceCount":"{n} bằng chứng","pattern.severity":"Mức nghiêm trọng","pattern.severity.high":"cao","pattern.severity.medium":"trung bình","pattern.severity.low":"thấp","pattern.description":"Mô tả pattern","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.llmOptional.title":"LLM là tùy chọn","settings.llmOptional.body":"memesh hoạt động mà không cần LLM. Chế độ Core mặc định bao gồm tìm kiếm toàn văn, remember/recall thủ công, dashboard và ghi nhận session qua hooks.","settings.llmOptional.coreLabel":"Không có LLM (chế độ Core)","settings.llmOptional.coreFeatures":"tìm kiếm từ khóa FTS5 (95,40% R@5 trên LongMemEval-S), remember/recall thủ công, dashboard, ghi nhận session qua hooks","settings.llmOptional.smartLabel":"Có LLM (chế độ Smart)","settings.llmOptional.smartFeatures":"tự động tạo lesson_learned từ lỗi session, tự động gắn nhãn entity mới, tóm tắt tuần + nhận diện mẫu hình","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.","settings.removeProvider":"Remove provider","settings.removeProviderHint":"Drops apiKey + model. Falls back to env-var auto-detect or Core Mode (no LLM).","settings.removeProviderConfirm":"Remove the configured LLM provider? This drops the saved API key and model. memesh will fall back to env-var auto-detection (ANTHROPIC_API_KEY > OPENAI_API_KEY > OLLAMA_HOST) or run in Core Mode if no credential is found.","settings.providerRemoved":"Provider removed. memesh now runs in Core Mode or via env-var auto-detect.","settings.test":"Kiểm tra","settings.testing":"Đang kiểm tra…","settings.testPassed":"✓ Kết nối OK · {count} mô hình có sẵn","settings.testFailed":"Kiểm tra kết nối thất bại","settings.suggested":"đề xuất","settings.testRequired":"Vui lòng kiểm tra kết nối trước khi lưu","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.updateDeprecatedNoTarget":"Đã ngừng dùng — chưa có phiên bản nâng cấp","settings.updateDeprecatedTitle":"⚠️ MeMesh {version} đã bị maintainer đánh dấu NGỪNG DÙNG (DEPRECATED).","settings.updatePartialTitle":"⚠️ Kiểm tra cập nhật chưa hoàn tất","settings.updatePartialDescription":"{message}. Phiên này chưa thể xác định trạng thái ngừng dùng — hãy chạy lại khi có mạng.","settings.updatePartialSummary":"Một phần — chưa xác nhận trạng thái ngừng dùng","settings.updateDeprecatedTargetUnknown":"Đã ngừng dùng — đang tìm phiên bản nâng cấp","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.interactHint":"Nhấp một nút để tập trung · kéo vùng trống để di chuyển · cuộn để thu phóng","graph.resetView":"Đặt lại chế độ xem","graph.resetViewHint":"Đặt lại thu phóng và vị trí","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","feedback.submitting":"Đang thu thập chẩn đoán…","doctorBanner.warnTitle":"Lưu ý — cài đặt memesh cần được xem lại","doctorBanner.failTitle":"Cài đặt memesh chưa hoàn tất","doctorBanner.dismiss":"Đóng","doctorBanner.getHelp":"Nhận trợ giúp","doctorBanner.helpHint":"Mở một GitHub issue với chẩn đoán đã điền sẵn","doctorBanner.preambleForIssue":"memesh doctor báo cáo những vấn đề sau trên cài đặt của tôi:","doctor.capabilities.summary":"LLM/embedding configuration detected","doctor.capabilities.fix":'Configure via "memesh config set llm.provider <provider>"',"doctor.config.summary":"Config file status","doctor.config.fix":'Fix or remove the config file, then run "memesh config list"',"doctor.dashboard.summary":"Dashboard artifact exists","doctor.dashboard.fix":'Run "npm run build:dashboard" to rebuild the dashboard',"doctor.database.summary":"Database accessibility status","doctor.database.fix":'Check database permissions, path, or run "memesh doctor" for detailed diagnosis',"doctor.hook-activity.summary":"Không có hoạt động memesh trong 24 giờ qua","doctor.hook-activity.fix":"Mở một phiên Claude Code sử dụng ≥3 công cụ, hoặc thực hiện một commit, rồi mở lại bảng điều khiển","doctor.hook-scripts.summary":"Hook script files verification","doctor.hook-scripts.fix":"Reinstall MeMesh or restore missing hook files from package","doctor.hook-wiring.summary":"Hooks integration status in Claude Code","doctor.hook-wiring.fix":'Run "memesh install-hooks" to wire hooks into Claude Code settings',"doctor.hooks-config.summary":"Hooks configuration file status","doctor.hooks-config.fix":"Reinstall MeMesh or restore .claude-plugin/hooks.json","doctor.http-probe.summary":"HTTP server availability check","doctor.http-probe.fix":"Check if port is available or database is accessible","doctor.install_id.summary":"Anonymous install ID status","doctor.install_id.fix":'Run "memesh" once to generate install ID',"doctor.install-channel.summary":"Installation method detection","doctor.install-channel.fix":"No action needed","doctor.mcp-config.summary":"MCP server configuration status","doctor.mcp-config.fix":"Restore .mcp.json from package or reinstall MeMesh","doctor.skills-manifest.summary":"Skills directory structure validation","doctor.skills-manifest.fix":"Reinstall MeMesh or restore .claude-plugin/skills directory","doctor.update_status.summary":"Update available: {version}","doctor.update_status.fix":'Run "memesh update" to upgrade',"doctor.update_status.prerelease":"Running pre-release version ({current}), npm latest is {latest}","doctor.vector_index.summary":"Search index needs rebuilding","doctor.vector_index.fix":'Run "memesh reindex" to restore full search',"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","time.justNow":"Vừa xong","time.hoursAgo":"{count} giờ trước","time.today":"Hôm nay","time.yesterday":"Hôm qua","time.daysAgo":"{count} ngày trước","time.lastWeek":"Tuần trước","time.weeksAgo":"{count} tuần trước","time.lastMonth":"Tháng trước","time.monthsAgo":"{count} tháng trước","memory.access.frequent":"Thường dùng · {count} lần","memory.access.recalls":"{count} lần","memory.access.never":"Chưa dùng","cluster.knowledge":"Kiến thức","cluster.activity":"Hoạt động","cluster.session":"Phiên","cluster.reference":"Tham chiếu","cluster.all":"Tất cả","browse.filterCategory":"Danh mục","browse.filterTime":"Thời gian","browse.filterValue":"Giá trị","browse.filterProject":"Dự án","browse.filterSort":"Sắp xếp","browse.timeToday":"Hôm nay","browse.timeWeek":"Tuần này","browse.timeMonth":"Tháng này","browse.timeOlder":"Cũ hơn","browse.valueRecalled":"✓ Đã dùng","browse.valueNever":"Chưa dùng","browse.sortMostRecalled":"Dùng nhiều nhất","browse.sortRecent":"Gần đây","browse.sortCreated":"Tạo lúc","browse.emptyFilter":"Không có ký ức trong danh mục này — thử bộ lọc khác","lessons.tabFailure":"Bài học thất bại","lessons.tabPlan":"Bản ghi kế hoạch","lessons.tabFreeform":"Ghi chú","lessons.totalRecalls":"Tổng lần nhớ lại","lessons.stepsLabel":"bước","lessons.commitsCount":"{count} commits","lessons.unstructured":"(Không có trường có cấu trúc — xem bộ nhớ thô)","lessons.searchPlaceholder":"Tìm error / root cause / fix / tên…","lessons.allProjects":"Tất cả dự án","lessons.showing":"Hiển thị {visible} / {total}","lessons.noMatch":'Không có ký ức khớp với "{query}"',"lessons.emptyCategory":"Không có ký ức trong danh mục này","lessons.moreItems":"+{count} nữa","roadmap.title":"Lộ Trình Dự Án","roadmap.summary":"{count} ký ức · {first} → {last}","roadmap.switchToList":"↩ Xem danh sách","roadmap.switchToRoadmap":"🗺️ Xem lộ trình","roadmap.emptyProject":"Chưa có ký ức nào trong dự án này.","loop.label":"Vòng lặp ký ức","loop.subtitleHas":"ký ức kiến thức được nhớ lại trong 7 ngày qua","loop.subtitleNone":"Tuần này chưa có ký ức nào được nhớ lại","loop.approxNote":"Xấp xỉ — theo dõi đầy đủ bắt đầu sau khi nâng cấp.","loop.sparkLabel":"30 ngày qua","roadmap.milestones":"Cột mốc","roadmap.keyLessons":"Bài học chính","radar.title":"Radar phủ kiến thức","radar.caption":"Ký ức kiến thức hoạt động<br/>(không tính session và commit)","radar.axis.lessons":"Bài học","radar.axis.decisions":"Quyết định","radar.axis.patterns":"Mẫu","radar.axis.bugs":"Sửa lỗi","radar.axis.processes":"Quy trình","radar.axis.architecture":"Kiến trúc","ageMatrix.title":"Phân bố tuổi ký ức","ageMatrix.low":"Thấp","ageMatrix.high":"Cao","ageMatrix.legend":"độ đậm = mật độ","ageMatrix.typeColumn":"Loại","header.signalModeOn":"Tín hiệu","header.signalModeOff":"Tất cả","header.signalModeOnHint":"Ẩn nhiễu session và commit. Nhấp để hiện tất cả.","header.signalModeOffHint":"Đang hiện tất cả ký ức bao gồm nhiễu. Nhấp để ẩn.","roadmap.phases":"Giai đoạn","onboarding.title":"Chào mừng đến với MeMesh","onboarding.body":"Bộ nhớ của bạn đang trống. Bắt đầu với tour 30 thực thể được tuyển chọn hoặc lưu bài học đầu tiên.","onboarding.llmHint":"Không cần LLM. Mọi thứ đều hoạt động chỉ với FTS5 (95,40% R@5). LLM là tùy chọn để tự động tạo bài học — có thể cấu hình sau trong Cài đặt.","onboarding.seedButton":"Bắt đầu tour demo","onboarding.seedingButton":"Đang nạp…","onboarding.seedHint":"Thêm 30 ký ức ngay tại đây — không cần mở terminal","onboarding.cliReference":"Thích dùng CLI?","onboarding.hintDemo":"Khởi tạo 30 ký ức demo, có thể xóa sau","onboarding.hintReset":"Xóa tất cả mục có metadata.demo","onboarding.resetButton":"Xóa demo","onboarding.resettingButton":"Đang xóa…","onboarding.resetConfirm":"Xóa toàn bộ ký ức demo? Các mục bạn tự lưu vẫn được giữ lại.","onboarding.dismiss":"Đóng","ageMatrix.bucket.week":"Tuần này","ageMatrix.bucket.month":"Tháng này","ageMatrix.bucket.quarter":"Quý này","ageMatrix.bucket.older":"Cũ hơn","ageMatrix.type.lesson_learned":"Bài học","ageMatrix.type.lesson":"Bài học","ageMatrix.type.mistake":"Sai sót","ageMatrix.type.decision":"Quyết định","ageMatrix.type.architecture_decision":"QĐ kiến trúc","ageMatrix.type.pattern":"Mẫu","ageMatrix.type.technical_pattern":"Mẫu kỹ thuật","ageMatrix.type.best_practice":"Best practice","ageMatrix.type.bug_fix":"Sửa lỗi","ageMatrix.type.workflow_checkpoint":"Mốc","ageMatrix.type.process":"Quy trình","ageMatrix.type.architecture":"Kiến trúc","ageMatrix.type.feature":"Tính năng","settings.behaviourTitle":"Hành vi","settings.autoUpdateLabel":"Chính sách tự động cập nhật","settings.autoUpdateOff":"Tắt — chỉ thủ công","settings.autoUpdatePatch":"Patch — áp dụng X.Y.Z+1","settings.autoUpdateMinor":"Minor — áp dụng X.Y+1.0","settings.autoUpdateMajor":"Major — áp dụng mọi cấp","settings.autoUpdateHint":"Kích hoạt sau mỗi phiên. MEMESH_AUTO_UPDATE ưu tiên.","settings.agenticLabel":"Bật agentic orchestration (thử nghiệm)","settings.agenticHint":"Hiển thị gợi ý agent trong Bash. Opt-in.","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.insights":"Insights","telemetry.title":"Actividad del LLM","telemetry.lastNDays":"últimos {n}d","telemetry.loading":"cargando…","telemetry.empty":"No se registró actividad del LLM en esta ventana. Los flujos Smart-Mode escriben filas automáticamente cuando se ejecutan dream / consolidator / failure-analyzer.","telemetry.callsCount":"{n} llamadas","telemetry.attemptsCount":"{n} intentos","telemetry.successRate":"éxito","telemetry.medianLatency":"latencia mediana","telemetry.fallbackUsed":"fallback usado {n}× ({pct} de las llamadas)","telemetry.byProvider":"por proveedor","telemetry.errors":"errores","insights.title":"Lo que memesh hizo por ti","insights.subtitle":"recaps semanales y patterns generados automáticamente, esperando revisión","insights.statPending":"pending","insights.statApplied":"applied","insights.statRejected":"rejected","insights.filter.pending":"Pending","insights.filter.applied":"Applied","insights.filter.rejected":"Rejected","insights.filter.all":"Todos","insights.refresh":"Actualizar","insights.loading":"cargando…","insights.emptyPending":"No hay insights pending. Ejecuta `memesh dream run` para generar weekly recaps.","insights.emptyNoLlm":"Configura un proveedor de LLM en Ajustes para activar weekly recaps y detección de patterns.","insights.emptyOther":"Nada por aquí.","insights.sources":"fuentes","insights.status.pending":"pending","insights.status.applied":"applied","insights.status.rejected":"rejected","insights.viewDetail":"Ver detalle","insights.collapse":"Contraer","insights.accept":"Aceptar","insights.applying":"Aplicando…","insights.reject":"Rechazar","insights.generatedBy":"Generado por","insights.promptVersion":"Versión del prompt","insights.observations":"Observaciones resumidas","insights.tags":"Etiquetas","insights.sourceIds":"Fuentes","insights.validationWarnings":"Afirmaciones marcadas (LLM validator)","insights.validationClaim":"Afirmación","insights.validationReason":"Motivo","insights.runDream":"Ejecutar weekly recap","insights.runDreamWithValidate":"Ejecutar con validator (más lento, mayor calidad)","banner.pendingInsights":"{n} nuevo(s) insight{s} esperando tu revisión →","banner.dismiss":"Descartar","banner.viewAll":"Ver todos","pattern.title":"Pattern","pattern.evidenceCount":"{n} evidencia(s)","pattern.severity":"Severidad","pattern.severity.high":"alta","pattern.severity.medium":"media","pattern.severity.low":"baja","pattern.description":"Descripción del pattern","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.llmOptional.title":"LLM es opcional","settings.llmOptional.body":"memesh funciona sin LLM. El modo Core por defecto cubre búsqueda de texto completo, remember/recall manual, dashboard y captura de sesión mediante hooks.","settings.llmOptional.coreLabel":"Sin LLM (modo Core)","settings.llmOptional.coreFeatures":"búsqueda por palabra clave FTS5 (95,40 % R@5 en LongMemEval-S), remember/recall manual, dashboard, captura de sesión vía hooks","settings.llmOptional.smartLabel":"Con LLM (modo Smart)","settings.llmOptional.smartFeatures":"lesson_learned automático a partir de fallos de sesión, auto-etiquetado de nuevas entidades, resumen semanal + detección de patrones","settings.apiKey":"Clave API","settings.model":"Modelo (opcional)","settings.save":"Guardar","settings.saving":"Guardando…","settings.saved":"Guardado.","settings.removeProvider":"Remove provider","settings.removeProviderHint":"Drops apiKey + model. Falls back to env-var auto-detect or Core Mode (no LLM).","settings.removeProviderConfirm":"Remove the configured LLM provider? This drops the saved API key and model. memesh will fall back to env-var auto-detection (ANTHROPIC_API_KEY > OPENAI_API_KEY > OLLAMA_HOST) or run in Core Mode if no credential is found.","settings.providerRemoved":"Provider removed. memesh now runs in Core Mode or via env-var auto-detect.","settings.test":"Probar","settings.testing":"Probando…","settings.testPassed":"✓ Conexión OK · {count} modelos disponibles","settings.testFailed":"Error en la prueba de conexión","settings.suggested":"sugerido","settings.testRequired":"Pruebe la conexión antes de guardar","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.updateDeprecatedNoTarget":"Obsoleto — aún sin destino de actualización","settings.updateDeprecatedTitle":"⚠️ MeMesh {version} fue marcado como OBSOLETO por los mantenedores.","settings.updatePartialTitle":"⚠️ Verificación de actualización parcial","settings.updatePartialDescription":"{message}. El estado de obsolescencia es desconocido en esta sesión — vuelva a ejecutar la verificación cuando esté en línea.","settings.updatePartialSummary":"Parcial — estado de obsolescencia desconocido","settings.updateDeprecatedTargetUnknown":"Obsoleto — buscando destino de actualización","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.interactHint":"Clic en un nodo para enfocar · arrastra el área vacía para desplazar · rueda para zoom","graph.resetView":"Restablecer vista","graph.resetViewHint":"Restablecer zoom y posición","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","feedback.submitting":"Recopilando diagnóstico…","doctorBanner.warnTitle":"Atención — la configuración de memesh necesita revisión","doctorBanner.failTitle":"La configuración de memesh está incompleta","doctorBanner.dismiss":"Cerrar","doctorBanner.getHelp":"Obtener ayuda","doctorBanner.helpHint":"Abre un issue en GitHub con el diagnóstico ya rellenado","doctorBanner.preambleForIssue":"memesh doctor informó lo siguiente en mi instalación:","doctor.capabilities.summary":"LLM/embedding configuration detected","doctor.capabilities.fix":'Configure via "memesh config set llm.provider <provider>"',"doctor.config.summary":"Config file status","doctor.config.fix":'Fix or remove the config file, then run "memesh config list"',"doctor.dashboard.summary":"Dashboard artifact exists","doctor.dashboard.fix":'Run "npm run build:dashboard" to rebuild the dashboard',"doctor.database.summary":"Database accessibility status","doctor.database.fix":'Check database permissions, path, or run "memesh doctor" for detailed diagnosis',"doctor.hook-activity.summary":"Sin actividad de memesh en las últimas 24 h","doctor.hook-activity.fix":"Abra una sesión de Claude Code que use ≥3 herramientas, o haga un commit, y vuelva a abrir el panel","doctor.hook-scripts.summary":"Hook script files verification","doctor.hook-scripts.fix":"Reinstall MeMesh or restore missing hook files from package","doctor.hook-wiring.summary":"Hooks integration status in Claude Code","doctor.hook-wiring.fix":'Run "memesh install-hooks" to wire hooks into Claude Code settings',"doctor.hooks-config.summary":"Hooks configuration file status","doctor.hooks-config.fix":"Reinstall MeMesh or restore .claude-plugin/hooks.json","doctor.http-probe.summary":"HTTP server availability check","doctor.http-probe.fix":"Check if port is available or database is accessible","doctor.install_id.summary":"Anonymous install ID status","doctor.install_id.fix":'Run "memesh" once to generate install ID',"doctor.install-channel.summary":"Installation method detection","doctor.install-channel.fix":"No action needed","doctor.mcp-config.summary":"MCP server configuration status","doctor.mcp-config.fix":"Restore .mcp.json from package or reinstall MeMesh","doctor.skills-manifest.summary":"Skills directory structure validation","doctor.skills-manifest.fix":"Reinstall MeMesh or restore .claude-plugin/skills directory","doctor.update_status.summary":"Update available: {version}","doctor.update_status.fix":'Run "memesh update" to upgrade',"doctor.update_status.prerelease":"Running pre-release version ({current}), npm latest is {latest}","doctor.vector_index.summary":"Search index needs rebuilding","doctor.vector_index.fix":'Run "memesh reindex" to restore full search',"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","time.justNow":"Ahora","time.hoursAgo":"Hace {count}h","time.today":"Hoy","time.yesterday":"Ayer","time.daysAgo":"Hace {count}d","time.lastWeek":"Semana pasada","time.weeksAgo":"Hace {count}sem","time.lastMonth":"Mes pasado","time.monthsAgo":"Hace {count}mes","memory.access.frequent":"Frecuente · {count} usos","memory.access.recalls":"{count} usos","memory.access.never":"Nunca usado","cluster.knowledge":"Conocimiento","cluster.activity":"Actividad","cluster.session":"Sesiones","cluster.reference":"Referencia","cluster.all":"Todo","browse.filterCategory":"Categoría","browse.filterTime":"Tiempo","browse.filterValue":"Valor","browse.filterProject":"Proyecto","browse.filterSort":"Ordenar","browse.timeToday":"Hoy","browse.timeWeek":"Esta semana","browse.timeMonth":"Este mes","browse.timeOlder":"Más antiguo","browse.valueRecalled":"✓ Usado","browse.valueNever":"Nunca usado","browse.sortMostRecalled":"Más usado","browse.sortRecent":"Reciente","browse.sortCreated":"Creado","browse.emptyFilter":"Sin memorias en esta categoría — prueba otro filtro","lessons.tabFailure":"Lecciones de fallo","lessons.tabPlan":"Registros de plan","lessons.tabFreeform":"Notas","lessons.totalRecalls":"Recuperaciones totales","lessons.stepsLabel":"pasos","lessons.commitsCount":"{count} commits","lessons.unstructured":"(Sin campos estructurados — ver memoria sin procesar)","lessons.searchPlaceholder":"Buscar error / root cause / fix / nombre…","lessons.allProjects":"Todos los proyectos","lessons.showing":"Mostrando {visible} / {total}","lessons.noMatch":'Sin memorias coincidiendo con "{query}"',"lessons.emptyCategory":"Sin memorias en esta categoría","lessons.moreItems":"+{count} más","roadmap.title":"Hoja de Ruta","roadmap.summary":"{count} memorias · {first} → {last}","roadmap.switchToList":"↩ Vista de Lista","roadmap.switchToRoadmap":"🗺️ Vista de Hoja de Ruta","roadmap.emptyProject":"Sin memorias en este proyecto todavía.","loop.label":"Bucle de memoria","loop.subtitleHas":"memorias de conocimiento reusadas en los últimos 7 días","loop.subtitleNone":"Ninguna memoria reutilizada esta semana","loop.approxNote":"Aproximación — seguimiento completo comienza después de la actualización.","loop.sparkLabel":"Últimos 30 días","roadmap.milestones":"Hitos","roadmap.keyLessons":"Lecciones clave","radar.title":"Radar de cobertura","radar.caption":"Memorias de conocimiento activas<br/>(session y commit excluidos)","radar.axis.lessons":"Lecciones","radar.axis.decisions":"Decisiones","radar.axis.patterns":"Patrones","radar.axis.bugs":"Correcciones","radar.axis.processes":"Procesos","radar.axis.architecture":"Arquitectura","ageMatrix.title":"Distribución por edad","ageMatrix.low":"Bajo","ageMatrix.high":"Alto","ageMatrix.legend":"profundidad = densidad","ageMatrix.typeColumn":"Tipo","header.signalModeOn":"Señal","header.signalModeOff":"Todo","header.signalModeOnHint":"Ocultando ruido de session y commit. Clic para mostrar todo.","header.signalModeOffHint":"Mostrando todas las memorias incluido ruido. Clic para ocultar.","roadmap.phases":"Fases","onboarding.title":"Bienvenido a MeMesh","onboarding.body":"Tu almacén de memoria está vacío. Empieza con un tour de 30 entidades curadas o guarda tu primera lección.","onboarding.llmHint":"No se requiere LLM. Todo funciona solo con FTS5 (95,40 % R@5). Un LLM es opcional para la generación automática de lecciones — configúralo más tarde en Configuración.","onboarding.seedButton":"Iniciar el tour demo","onboarding.seedingButton":"Cargando…","onboarding.seedHint":"Añade 30 memorias aquí mismo — sin abrir terminal","onboarding.cliReference":"¿Prefieres la CLI?","onboarding.hintDemo":"Siembra 30 memorias demo que puedes limpiar después","onboarding.hintReset":"Elimina todo lo marcado con metadata.demo","onboarding.resetButton":"Resetear demo","onboarding.resettingButton":"Eliminando…","onboarding.resetConfirm":"¿Eliminar todas las memorias demo? Tus entradas reales se conservarán.","onboarding.dismiss":"Cerrar","ageMatrix.bucket.week":"Esta semana","ageMatrix.bucket.month":"Este mes","ageMatrix.bucket.quarter":"Este trimestre","ageMatrix.bucket.older":"Más antiguo","ageMatrix.type.lesson_learned":"Lección","ageMatrix.type.lesson":"Lección","ageMatrix.type.mistake":"Error","ageMatrix.type.decision":"Decisión","ageMatrix.type.architecture_decision":"Dec. arq.","ageMatrix.type.pattern":"Patrón","ageMatrix.type.technical_pattern":"Patrón téc.","ageMatrix.type.best_practice":"Buena práctica","ageMatrix.type.bug_fix":"Corrección","ageMatrix.type.workflow_checkpoint":"Hito","ageMatrix.type.process":"Proceso","ageMatrix.type.architecture":"Arquitectura","ageMatrix.type.feature":"Característica","settings.behaviourTitle":"Comportamiento","settings.autoUpdateLabel":"Política de auto-actualización","settings.autoUpdateOff":"Apagado — solo manual","settings.autoUpdatePatch":"Patch — aplica X.Y.Z+1","settings.autoUpdateMinor":"Minor — aplica X.Y+1.0","settings.autoUpdateMajor":"Major — aplica cualquier cambio","settings.autoUpdateHint":"Activado tras cada sesión. MEMESH_AUTO_UPDATE tiene prioridad.","settings.agenticLabel":"Activar agentic orchestration (experimental)","settings.agenticHint":"Muestra sugerencias de agente en Bash. Opt-in.","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.insights":"Insights","telemetry.title":"กิจกรรม LLM","telemetry.lastNDays":"{n} วันล่าสุด","telemetry.loading":"กำลังโหลด…","telemetry.empty":"ไม่มีบันทึกกิจกรรม LLM ในช่วงเวลานี้ ฟลาว Smart-Mode จะเขียนข้อมูลโดยอัตโนมัติเมื่อ dream / consolidator / failure-analyzer ทำงาน","telemetry.callsCount":"{n} การเรียก","telemetry.attemptsCount":"{n} ครั้งที่พยายาม","telemetry.successRate":"สำเร็จ","telemetry.medianLatency":"เวลาตอบสนองมัธยฐาน","telemetry.fallbackUsed":"ใช้ fallback {n}× ({pct} ของการเรียก)","telemetry.byProvider":"ตามผู้ให้บริการ","telemetry.errors":"ข้อผิดพลาด","insights.title":"memesh ทำอะไรให้คุณบ้าง","insights.subtitle":"weekly recap และ pattern ที่ระบบสร้างอัตโนมัติ รอให้คุณตรวจสอบ","insights.statPending":"pending","insights.statApplied":"applied","insights.statRejected":"rejected","insights.filter.pending":"Pending","insights.filter.applied":"Applied","insights.filter.rejected":"Rejected","insights.filter.all":"ทั้งหมด","insights.refresh":"รีเฟรช","insights.loading":"กำลังโหลด…","insights.emptyPending":"ไม่มี insight ที่ pending รัน `memesh dream run` เพื่อสร้าง weekly recap","insights.emptyNoLlm":"ตั้งค่าผู้ให้บริการ LLM ในหน้าการตั้งค่าเพื่อเปิดใช้งาน weekly recap และการตรวจจับ pattern","insights.emptyOther":"ไม่มีข้อมูลที่นี่","insights.sources":"แหล่งที่มา","insights.status.pending":"pending","insights.status.applied":"applied","insights.status.rejected":"rejected","insights.viewDetail":"ดูรายละเอียด","insights.collapse":"ย่อ","insights.accept":"ยอมรับ","insights.applying":"กำลังนำไปใช้…","insights.reject":"ปฏิเสธ","insights.generatedBy":"สร้างโดย","insights.promptVersion":"เวอร์ชัน prompt","insights.observations":"สรุปการสังเกต","insights.tags":"แท็ก","insights.sourceIds":"entity ต้นทาง","insights.validationWarnings":"ข้อความที่ถูกตั้งคำถาม (LLM validator)","insights.validationClaim":"ข้อความ","insights.validationReason":"เหตุผล","insights.runDream":"รัน weekly recap","insights.runDreamWithValidate":"รันพร้อม validator (ช้ากว่าแต่คุณภาพสูงกว่า)","banner.pendingInsights":"มี insight ใหม่ {n} รายการรอให้คุณตรวจสอบ →","banner.dismiss":"ปิด","banner.viewAll":"ดูทั้งหมด","pattern.title":"Pattern","pattern.evidenceCount":"หลักฐาน {n} รายการ","pattern.severity":"ระดับความรุนแรง","pattern.severity.high":"สูง","pattern.severity.medium":"กลาง","pattern.severity.low":"ต่ำ","pattern.description":"คำอธิบาย pattern","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.llmOptional.title":"LLM เป็นตัวเลือก","settings.llmOptional.body":"memesh ทำงานได้โดยไม่ต้องใช้ LLM โหมด Core เริ่มต้นครอบคลุมการเรียกคืนข้อความเต็ม remember/recall ด้วยตนเอง แดชบอร์ด และการจับ session ผ่าน hooks","settings.llmOptional.coreLabel":"ไม่มี LLM (โหมด Core)","settings.llmOptional.coreFeatures":"การค้นหาคำสำคัญ FTS5 (95.40% R@5 บน LongMemEval-S), remember/recall ด้วยตนเอง, แดชบอร์ด, การจับ session ผ่าน hooks","settings.llmOptional.smartLabel":"มี LLM (โหมด Smart)","settings.llmOptional.smartFeatures":"lesson_learned อัตโนมัติจากความล้มเหลวของ session, การติดแท็กอัตโนมัติของ entity ใหม่, สรุปประจำสัปดาห์และการตรวจจับรูปแบบ","settings.apiKey":"คีย์ API","settings.model":"โมเดล (ไม่บังคับ)","settings.save":"บันทึก","settings.saving":"กำลังบันทึก…","settings.saved":"บันทึกแล้ว","settings.removeProvider":"Remove provider","settings.removeProviderHint":"Drops apiKey + model. Falls back to env-var auto-detect or Core Mode (no LLM).","settings.removeProviderConfirm":"Remove the configured LLM provider? This drops the saved API key and model. memesh will fall back to env-var auto-detection (ANTHROPIC_API_KEY > OPENAI_API_KEY > OLLAMA_HOST) or run in Core Mode if no credential is found.","settings.providerRemoved":"Provider removed. memesh now runs in Core Mode or via env-var auto-detect.","settings.test":"ทดสอบ","settings.testing":"กำลังทดสอบ…","settings.testPassed":"✓ เชื่อมต่อสำเร็จ · มี {count} โมเดล","settings.testFailed":"การทดสอบการเชื่อมต่อล้มเหลว","settings.suggested":"แนะนำ","settings.testRequired":"โปรดทดสอบการเชื่อมต่อก่อนบันทึก","settings.language":"ภาษา","settings.searchMode":"โหมดการค้นหา","settings.none":"ไม่มี","settings.updates":"การอัปเดต","settings.updateChecking":"กำลังตรวจหาการอัปเดต…","settings.updateUnavailable":"ไม่สามารถตรวจสอบการอัปเดตได้ในขณะนี้","settings.updateNoSuccessfulChecks":"ยังไม่มีการตรวจสอบอัปเดตที่สำเร็จ","settings.upToDate":"เป็นเวอร์ชันล่าสุดแล้ว","settings.updateAvailable":"มีเวอร์ชันอัปเดต","settings.updateStale":"สถานะแคชที่แสดงอาจล้าสมัยแล้ว","settings.updateCachedFallback":"กำลังใช้ผลลัพธ์แคชล่าสุดที่ตรวจสอบสำเร็จ","settings.updateDeprecatedNoTarget":"เลิกใช้แล้ว — ยังไม่มีเวอร์ชันสำหรับอัปเกรด","settings.updateDeprecatedTitle":"⚠️ MeMesh {version} ถูกผู้ดูแลทำเครื่องหมายเป็น DEPRECATED (เลิกใช้แล้ว)","settings.updatePartialTitle":"⚠️ การตรวจสอบอัปเดตไม่สมบูรณ์","settings.updatePartialDescription":"{message}. ไม่สามารถยืนยันสถานะเลิกใช้ในเซสชันนี้ — โปรดเรียกใช้ใหม่เมื่อออนไลน์","settings.updatePartialSummary":"บางส่วน — ไม่ทราบสถานะการเลิกใช้","settings.updateDeprecatedTargetUnknown":"เลิกใช้แล้ว — กำลังหาเวอร์ชันสำหรับอัปเกรด","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.interactHint":"คลิกโหนดเพื่อโฟกัส · ลากพื้นที่ว่างเพื่อเลื่อน · เลื่อนเพื่อซูม","graph.resetView":"รีเซ็ตมุมมอง","graph.resetViewHint":"รีเซ็ตการซูมและตำแหน่ง","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","feedback.submitting":"กำลังรวบรวมการวินิจฉัย…","doctorBanner.warnTitle":"แจ้งเตือน — การตั้งค่า memesh ต้องตรวจสอบ","doctorBanner.failTitle":"การตั้งค่า memesh ยังไม่สมบูรณ์","doctorBanner.dismiss":"ปิด","doctorBanner.getHelp":"ขอความช่วยเหลือ","doctorBanner.helpHint":"เปิด GitHub issue พร้อมข้อมูลการวินิจฉัยที่กรอกไว้แล้ว","doctorBanner.preambleForIssue":"memesh doctor รายงานสิ่งต่อไปนี้บนการติดตั้งของฉัน:","doctor.capabilities.summary":"LLM/embedding configuration detected","doctor.capabilities.fix":'Configure via "memesh config set llm.provider <provider>"',"doctor.config.summary":"Config file status","doctor.config.fix":'Fix or remove the config file, then run "memesh config list"',"doctor.dashboard.summary":"Dashboard artifact exists","doctor.dashboard.fix":'Run "npm run build:dashboard" to rebuild the dashboard',"doctor.database.summary":"Database accessibility status","doctor.database.fix":'Check database permissions, path, or run "memesh doctor" for detailed diagnosis',"doctor.hook-activity.summary":"ไม่พบกิจกรรม memesh ในช่วง 24 ชั่วโมงที่ผ่านมา","doctor.hook-activity.fix":"เปิด Claude Code session ที่ใช้เครื่องมือ ≥3 รายการ หรือทำการ commit แล้วเปิดแดชบอร์ดอีกครั้ง","doctor.hook-scripts.summary":"Hook script files verification","doctor.hook-scripts.fix":"Reinstall MeMesh or restore missing hook files from package","doctor.hook-wiring.summary":"Hooks integration status in Claude Code","doctor.hook-wiring.fix":'Run "memesh install-hooks" to wire hooks into Claude Code settings',"doctor.hooks-config.summary":"Hooks configuration file status","doctor.hooks-config.fix":"Reinstall MeMesh or restore .claude-plugin/hooks.json","doctor.http-probe.summary":"HTTP server availability check","doctor.http-probe.fix":"Check if port is available or database is accessible","doctor.install_id.summary":"Anonymous install ID status","doctor.install_id.fix":'Run "memesh" once to generate install ID',"doctor.install-channel.summary":"Installation method detection","doctor.install-channel.fix":"No action needed","doctor.mcp-config.summary":"MCP server configuration status","doctor.mcp-config.fix":"Restore .mcp.json from package or reinstall MeMesh","doctor.skills-manifest.summary":"Skills directory structure validation","doctor.skills-manifest.fix":"Reinstall MeMesh or restore .claude-plugin/skills directory","doctor.update_status.summary":"Update available: {version}","doctor.update_status.fix":'Run "memesh update" to upgrade',"doctor.update_status.prerelease":"Running pre-release version ({current}), npm latest is {latest}","doctor.vector_index.summary":"Search index needs rebuilding","doctor.vector_index.fix":'Run "memesh reindex" to restore full search',"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":"เกิดข้อผิดพลาดที่ไม่ทราบสาเหตุ","time.justNow":"เมื่อสักครู่","time.hoursAgo":"{count} ชั่วโมงที่แล้ว","time.today":"วันนี้","time.yesterday":"เมื่อวาน","time.daysAgo":"{count} วันที่แล้ว","time.lastWeek":"สัปดาห์ที่แล้ว","time.weeksAgo":"{count} สัปดาห์ที่แล้ว","time.lastMonth":"เดือนที่แล้ว","time.monthsAgo":"{count} เดือนที่แล้ว","memory.access.frequent":"ใช้บ่อย · {count} ครั้ง","memory.access.recalls":"{count} ครั้ง","memory.access.never":"ไม่เคยเรียก","cluster.knowledge":"ความรู้","cluster.activity":"กิจกรรม","cluster.session":"เซสชัน","cluster.reference":"อ้างอิง","cluster.all":"ทั้งหมด","browse.filterCategory":"หมวดหมู่","browse.filterTime":"เวลา","browse.filterValue":"มูลค่า","browse.filterProject":"โปรเจกต์","browse.filterSort":"จัดเรียง","browse.timeToday":"วันนี้","browse.timeWeek":"สัปดาห์นี้","browse.timeMonth":"เดือนนี้","browse.timeOlder":"เก่ากว่า","browse.valueRecalled":"✓ ใช้แล้ว","browse.valueNever":"ไม่เคยเรียก","browse.sortMostRecalled":"ใช้มากที่สุด","browse.sortRecent":"ล่าสุด","browse.sortCreated":"สร้างเมื่อ","browse.emptyFilter":"ไม่มีหน่วยความจำในหมวดนี้ — ลองตัวกรองอื่น","lessons.tabFailure":"บทเรียนความล้มเหลว","lessons.tabPlan":"บันทึกแผน","lessons.tabFreeform":"โน้ต","lessons.totalRecalls":"จำนวนเรียกทั้งหมด","lessons.stepsLabel":"ขั้น","lessons.commitsCount":"{count} commits","lessons.unstructured":"(ไม่มีฟิลด์ที่มีโครงสร้าง — ดูหน่วยความจำดิบ)","lessons.searchPlaceholder":"ค้นหา error / root cause / fix / ชื่อ…","lessons.allProjects":"ทุกโปรเจกต์","lessons.showing":"แสดง {visible} / {total}","lessons.noMatch":'ไม่มีหน่วยความจำตรงกับ "{query}"',"lessons.emptyCategory":"ไม่มีหน่วยความจำในหมวดนี้","lessons.moreItems":"+{count} เพิ่มเติม","roadmap.title":"แผนที่โครงการ","roadmap.summary":"{count} ความทรงจำ · {first} → {last}","roadmap.switchToList":"↩ มุมมองรายการ","roadmap.switchToRoadmap":"🗺️ มุมมองแผนที่","roadmap.emptyProject":"ยังไม่มีความทรงจำในโครงการนี้","loop.label":"ลูปความทรงจำ","loop.subtitleHas":"ความทรงจำเชิงความรู้ที่ถูกเรียกในช่วง 7 วันที่ผ่านมา","loop.subtitleNone":"สัปดาห์นี้ยังไม่มีความทรงจำที่ถูกเรียก","loop.approxNote":"ค่าประมาณ — การติดตามเต็มรูปแบบเริ่มหลังการอัพเกรด","loop.sparkLabel":"30 วันล่าสุด","roadmap.milestones":"เหตุการณ์สำคัญ","roadmap.keyLessons":"บทเรียนสำคัญ","radar.title":"เรดาร์ความครอบคลุม","radar.caption":"ความทรงจำที่ใช้งาน<br/>(ไม่รวม session และ commit)","radar.axis.lessons":"บทเรียน","radar.axis.decisions":"การตัดสินใจ","radar.axis.patterns":"แพทเทิร์น","radar.axis.bugs":"แก้ไขบั๊ก","radar.axis.processes":"กระบวนการ","radar.axis.architecture":"สถาปัตยกรรม","ageMatrix.title":"การกระจายอายุ","ageMatrix.low":"ต่ำ","ageMatrix.high":"สูง","ageMatrix.legend":"ความเข้ม = ความหนาแน่น","ageMatrix.typeColumn":"ประเภท","header.signalModeOn":"สัญญาณ","header.signalModeOff":"ทั้งหมด","header.signalModeOnHint":"ซ่อนสัญญาณรบกวน session และ commit คลิกเพื่อแสดงทั้งหมด","header.signalModeOffHint":"แสดงความทรงจำทั้งหมดรวมถึงสัญญาณรบกวน คลิกเพื่อซ่อน","roadmap.phases":"ระยะ","onboarding.title":"ยินดีต้อนรับสู่ MeMesh","onboarding.body":"ที่เก็บความทรงจำว่างเปล่า เริ่มด้วยทัวร์ 30 รายการที่คัดสรรแล้วหรือบันทึกบทเรียนแรก","onboarding.llmHint":"ไม่ต้องใช้ LLM ทุกอย่างทำงานด้วย FTS5 อย่างเดียว (95.40% R@5) LLM เป็นตัวเลือกสำหรับสร้างบทเรียนอัตโนมัติ ตั้งค่าภายหลังในหน้าตั้งค่าได้","onboarding.seedButton":"เริ่มทัวร์ตัวอย่าง","onboarding.seedingButton":"กำลังโหลด…","onboarding.seedHint":"เพิ่ม 30 ความทรงจำที่นี่เลย — ไม่ต้องเปิดเทอร์มินัล","onboarding.cliReference":"ชอบใช้ CLI ใช่ไหม?","onboarding.hintDemo":"ใส่ 30 ความทรงจำตัวอย่าง ลบทีหลังได้","onboarding.hintReset":"ลบทุกอย่างที่ติด metadata.demo","onboarding.resetButton":"ล้างข้อมูลตัวอย่าง","onboarding.resettingButton":"กำลังลบ…","onboarding.resetConfirm":"ลบความทรงจำตัวอย่างทั้งหมดหรือไม่? รายการที่คุณบันทึกเองจะยังอยู่","onboarding.dismiss":"ปิด","ageMatrix.bucket.week":"สัปดาห์นี้","ageMatrix.bucket.month":"เดือนนี้","ageMatrix.bucket.quarter":"ไตรมาสนี้","ageMatrix.bucket.older":"เก่ากว่า","ageMatrix.type.lesson_learned":"บทเรียน","ageMatrix.type.lesson":"บทเรียน","ageMatrix.type.mistake":"ความผิดพลาด","ageMatrix.type.decision":"การตัดสินใจ","ageMatrix.type.architecture_decision":"ตัดสินใจสถาปัตย์","ageMatrix.type.pattern":"แพทเทิร์น","ageMatrix.type.technical_pattern":"แพทเทิร์นเทคนิค","ageMatrix.type.best_practice":"แนวปฏิบัติที่ดี","ageMatrix.type.bug_fix":"แก้บั๊ก","ageMatrix.type.workflow_checkpoint":"เหตุการณ์สำคัญ","ageMatrix.type.process":"กระบวนการ","ageMatrix.type.architecture":"สถาปัตยกรรม","ageMatrix.type.feature":"ฟีเจอร์","settings.behaviourTitle":"การทำงาน","settings.autoUpdateLabel":"นโยบายอัพเดตอัตโนมัติ","settings.autoUpdateOff":"ปิด — ด้วยตนเองเท่านั้น","settings.autoUpdatePatch":"Patch — ใช้ X.Y.Z+1","settings.autoUpdateMinor":"Minor — ใช้ X.Y+1.0","settings.autoUpdateMajor":"Major — ใช้ทุกระดับ","settings.autoUpdateHint":"ทำงานหลังแต่ละเซสชัน MEMESH_AUTO_UPDATE มีลำดับความสำคัญ","settings.agenticLabel":"เปิดใช้ agentic orchestration (ทดลอง)","settings.agenticHint":"แสดงคำแนะนำ agent ใน Bash. Opt-in.","errors.timeout":"คำขอหมดเวลา"}},mn={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 ht="en";function pn(){const t=localStorage.getItem("memesh-locale");if(t&>[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 n=s.split("-")[0];return gt[n]?n:"en"}function fn(){return ht=pn(),ht}function yn(t){ht=t,localStorage.setItem("memesh-locale",t)}function a(t,s){const n=gt[ht]?.[t]||gt.en[t]||t;return s?n.replace(/\{(\w+)\}/g,(o,i)=>{const r=s[i];return r===void 0?`{${i}}`:String(r)}):n}function bn(){return Object.entries(mn).map(([t,s])=>({code:t,name:s}))}const It="memesh.signalMode",bt="memesh:signal-mode-changed",vn=!0;function vt(){try{const t=localStorage.getItem(It);if(t==="true")return!0;if(t==="false")return!1}catch{}return vn}function kn(t){try{localStorage.setItem(It,String(t))}catch{}}function Ht(){const[t,s]=x(vt);X(()=>{function o(r){const u=r.detail;u&&typeof u.value=="boolean"?s(u.value):s(vt())}function i(r){r.key===It&&s(vt())}return window.addEventListener(bt,o),window.addEventListener("storage",i),()=>{window.removeEventListener(bt,o),window.removeEventListener("storage",i)}},[]);function n(o){kn(o),s(o),window.dispatchEvent(new CustomEvent(bt,{detail:{value:o}}))}return[t,n]}function xn({health:t,error:s}){const[n,o]=Ht();return e("div",{class:"header",children:[e("div",{class:"header-brand",children:[e("h1",{children:"MeMesh LLM Memory"}),e("small",{children:a("brand.subtitle")})]}),e("div",{class:"header-right",children:e("div",{class:"header-meta",children:[e("button",{type:"button",class:"signal-toggle",onClick:()=>o(!n),"aria-pressed":n,title:a(n?"header.signalModeOnHint":"header.signalModeOffHint"),style:{fontSize:11,padding:"4px 10px",borderRadius:12,border:`1px solid ${n?"rgba(0, 214, 180, 0.4)":"rgba(255, 255, 255, 0.08)"}`,background:n?"rgba(0, 214, 180, 0.12)":"transparent",color:n?"var(--accent)":"var(--text-2)",cursor:"pointer",fontFamily:"inherit"},children:[e("span",{style:{marginRight:4},children:n?"●":"○"}),a(n?"header.signalModeOn":"header.signalModeOff")]}),t?e(ae,{children:[e("span",{children:[e("span",{class:"dot dot-ok"}),a("header.connected")]}),e("span",{class:"badge-version",children:["v",t.version," · ",t.entity_count.toLocaleString()," ",a("header.memories")]})]}):s?e("span",{children:[e("span",{class:"dot dot-err"}),a("header.disconnected")]}):e("span",{style:{color:"var(--text-3)"},children:a("header.connecting")})]})})]})}function wn({tabs:t,active:s,onSelect:n}){return e("nav",{class:"nav",children:t.map(({key:o,label:i})=>e("button",{class:`nav-btn ${o===s?"active":""}`,onClick:()=>n(o),children:i},o))})}const Mn=1e4,Tt="memesh_token";function Is(){try{return localStorage.getItem(Tt)}catch{return null}}function _n(t){try{t?localStorage.setItem(Tt,t):localStorage.removeItem(Tt)}catch{}}class Hs extends Error{constructor(){super("auth_required"),this.name="AuthRequiredError"}}async function U(t,s,n){const o=new AbortController,i=setTimeout(()=>o.abort(),Mn);try{const r={"Content-Type":"application/json"},u=Is();u&&(r.Authorization=`Bearer ${u}`);const d={method:t,headers:r,signal:o.signal};n&&(d.body=JSON.stringify(n));const l=await fetch(s,d);if(l.status===401)throw new Hs;if(!l.ok)throw new Error(`HTTP ${l.status}`);const g=await l.json();if(!g.success)throw new Error(g.error||a("errors.unknown"));return g.data}catch(r){throw r.name==="AbortError"?new Error(a("errors.timeout")):r}finally{clearTimeout(i)}}async function Bs(){const t=await U("GET","/v1/projects");return Array.isArray(t)?t:[]}async function Sn(){return U("GET","/v1/graph")}async function Cn(){const t=await U("GET","/v1/entities?type=lesson_learned&limit=100");return Array.isArray(t)?t:[]}const Ln={lesson_learned:"knowledge",lesson:"knowledge",mistake:"knowledge",decision:"knowledge",architecture_decision:"knowledge",design_decision:"knowledge",pattern:"knowledge",technical_pattern:"knowledge",best_practice:"knowledge",bug_fix:"knowledge",verification_result:"knowledge",test_result:"knowledge",process:"knowledge",architecture:"knowledge",infrastructure:"knowledge",feature:"knowledge",release:"knowledge",refactoring:"knowledge",commit:"activity",session_keypoint:"session",session_identity:"session","session-insight":"session","session-summary":"session","session-identity":"session",weekly_summary:"activity","weekly-summary":"activity",note:"reference",plan:"reference",knowledge:"reference",workflow_checkpoint:"reference"};function ts(t){return Ln[t]??"reference"}function Ee(t,s=new Date){if(!t)return"—";const n=new Date(t);if(Number.isNaN(n.getTime()))return"—";const o=s.getTime()-n.getTime(),i=Math.floor(o/864e5);if(i<0)return n.toLocaleDateString(void 0,{month:"short",day:"numeric"});if(i===0){const r=Math.floor(o/36e5);return r<1?a("time.justNow"):r<24?a("time.hoursAgo",{count:r}):a("time.today")}return i===1?a("time.yesterday"):i<7?a("time.daysAgo",{count:i}):i<14?a("time.lastWeek"):i<30?a("time.weeksAgo",{count:Math.floor(i/7)}):i<60?a("time.lastMonth"):i<365?a("time.monthsAgo",{count:Math.floor(i/30)}):n.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})}function zs(t,s=new Date){if(!t)return"older";const n=s.getTime()-new Date(t).getTime(),o=Math.floor(n/864e5);return o<1?"today":o<7?"week":o<30?"month":"older"}const ss="project:";function Ue(t){const s=t.tags?.find(n=>n.startsWith(ss));return s?s.slice(ss.length):null}function Tn(t){if(!t||t.length===0)return"";const s=t.filter(o=>o.length>30&&!/^(Steps|Commits|Plan ".+" completed)/.test(o.trim())),n=s.length>0?s:t;return n.slice(0,3).reduce((o,i)=>i.length>o.length?i:o,n[0])}function Ye(t){const s=t??0;return s===0?{count:s,label:a("memory.access.never"),tone:"none"}:s>=20?{count:s,label:a("memory.access.frequent",{count:s}),tone:"high"}:s>=5?{count:s,label:a("memory.access.recalls",{count:s}),tone:"medium"}:{count:s,label:a("memory.access.recalls",{count:s}),tone:"low"}}function An(t){if((t.tags??[]).some(r=>r==="plan-completion"||r.startsWith("plan:")))return"plan-completion";const o=(t.observations??[]).join(" ");return/(^|\s)Error:/.test(o)&&(/(^|\s)Fix:/.test(o)||/(^|\s)Root cause:/.test(o))?"failure":"freeform"}const se=1.5;function Pn(t){switch(t){case"lesson_learned":case"lesson":case"mistake":return"lesson";case"decision":case"architecture_decision":case"design_decision":return"decision";case"pattern":case"technical_pattern":case"best_practice":return"pattern";case"bug_fix":case"verification_result":case"test_result":return"bug";case"architecture":case"infrastructure":return"architecture";case"feature":case"release":case"refactoring":return"feature";case"commit":return"commit";case"session_keypoint":case"session_identity":case"session-insight":case"session-summary":case"session-identity":return"session";case"workflow_checkpoint":return"milestone";case"weekly-summary":case"weekly_summary":return"calendar";case"note":case"plan":case"knowledge":case"process":return"note";default:return"dot"}}const Rn={lesson:e(ae,{children:[e("path",{d:"M6 9.5 a4 4 0 1 1 4 0 v1 a1 1 0 0 1 -1 1 h-2 a1 1 0 0 1 -1 -1 z",fill:"none",stroke:"currentColor",strokeWidth:se,strokeLinejoin:"round"}),e("path",{d:"M7 13 h2",stroke:"currentColor",strokeWidth:se,strokeLinecap:"round"}),e("path",{d:"M7 14.5 h2",stroke:"currentColor",strokeWidth:se,strokeLinecap:"round"})]}),decision:e(ae,{children:[e("circle",{cx:"8",cy:"8",r:"5.5",fill:"none",stroke:"currentColor",strokeWidth:se}),e("circle",{cx:"8",cy:"8",r:"2",fill:"none",stroke:"currentColor",strokeWidth:se}),e("path",{d:"M8 0.5 v3 M8 12.5 v3 M0.5 8 h3 M12.5 8 h3",stroke:"currentColor",strokeWidth:se,strokeLinecap:"round"})]}),pattern:e("path",{d:"M3 3 h4 v1.5 a1.5 1.5 0 0 0 3 0 V3 h3 v3 h-1.5 a1.5 1.5 0 0 0 0 3 H13 v4 h-4 v-1.5 a1.5 1.5 0 0 0 -3 0 V13 H3 v-4 h1.5 a1.5 1.5 0 0 0 0 -3 H3 z",fill:"none",stroke:"currentColor",strokeWidth:se,strokeLinejoin:"round"}),bug:e(ae,{children:[e("ellipse",{cx:"8",cy:"9",rx:"3.5",ry:"4",fill:"none",stroke:"currentColor",strokeWidth:se}),e("path",{d:"M8 5 v-1 M5.5 6.5 L4 5 M10.5 6.5 L12 5 M4.5 9 H2.5 M11.5 9 H13.5 M5 11.5 L3.5 13 M11 11.5 L12.5 13",stroke:"currentColor",strokeWidth:se,strokeLinecap:"round"})]}),architecture:e(ae,{children:[e("rect",{x:"2",y:"9",width:"5",height:"5",rx:"0.5",fill:"none",stroke:"currentColor",strokeWidth:se}),e("rect",{x:"9",y:"9",width:"5",height:"5",rx:"0.5",fill:"none",stroke:"currentColor",strokeWidth:se}),e("rect",{x:"5.5",y:"2",width:"5",height:"5",rx:"0.5",fill:"none",stroke:"currentColor",strokeWidth:se})]}),feature:e(ae,{children:e("path",{d:"M8 2 L9.5 6.5 L14 8 L9.5 9.5 L8 14 L6.5 9.5 L2 8 L6.5 6.5 z",fill:"none",stroke:"currentColor",strokeWidth:se,strokeLinejoin:"round"})}),commit:e(ae,{children:e("path",{d:"M5 2 L4 14 M11 2 L10 14 M2.5 6 H13.5 M2.5 10 H13.5",stroke:"currentColor",strokeWidth:se,strokeLinecap:"round"})}),session:e(ae,{children:[e("circle",{cx:"8",cy:"9",r:"5",fill:"none",stroke:"currentColor",strokeWidth:se}),e("path",{d:"M8 9 V5.5 M8 9 L10.5 11",stroke:"currentColor",strokeWidth:se,strokeLinecap:"round"}),e("path",{d:"M6.5 2 H9.5",stroke:"currentColor",strokeWidth:se,strokeLinecap:"round"})]}),milestone:e(ae,{children:[e("path",{d:"M4 2 V14",stroke:"currentColor",strokeWidth:se,strokeLinecap:"round"}),e("path",{d:"M4 3 H12 L10 6 L12 9 H4 z",fill:"none",stroke:"currentColor",strokeWidth:se,strokeLinejoin:"round"})]}),calendar:e(ae,{children:[e("rect",{x:"2",y:"3",width:"12",height:"11",rx:"1",fill:"none",stroke:"currentColor",strokeWidth:se}),e("path",{d:"M2 6.5 H14 M5 1.5 V4.5 M11 1.5 V4.5",stroke:"currentColor",strokeWidth:se,strokeLinecap:"round"})]}),note:e(ae,{children:[e("path",{d:"M4 2 H10 L13 5 V14 H4 z",fill:"none",stroke:"currentColor",strokeWidth:se,strokeLinejoin:"round"}),e("path",{d:"M10 2 V5 H13",fill:"none",stroke:"currentColor",strokeWidth:se,strokeLinejoin:"round"}),e("path",{d:"M6 8.5 H11 M6 11 H11",stroke:"currentColor",strokeWidth:se,strokeLinecap:"round"})]}),dot:e("circle",{cx:"8",cy:"8",r:"2",fill:"currentColor"})},En={lesson:"Lesson",decision:"Decision",pattern:"Pattern",bug:"Bug fix",architecture:"Architecture",feature:"Feature",commit:"Commit",session:"Session",milestone:"Milestone",calendar:"Weekly summary",note:"Note",dot:"Memory"};function Ke({type:t,size:s=16,color:n,ariaLabel:o}){const i=Pn(t),r=o??En[i];return e("svg",{width:s,height:s,viewBox:"0 0 16 16",role:"img","aria-label":r,style:{color:n??"currentColor",flexShrink:0,display:"inline-block",verticalAlign:"text-bottom"},children:[e("title",{children:r}),Rn[i]]})}function ns(t,s){return t.length>s?t.slice(0,s)+"…":t}function Fn(t){if(!t)return"";const s=new Date(t);if(Number.isNaN(s.getTime()))return t.slice(0,16).replace("T"," ");const n=o=>String(o).padStart(2,"0");return`${s.getFullYear()}-${n(s.getMonth()+1)}-${n(s.getDate())} ${n(s.getHours())}:${n(s.getMinutes())}`}const Dn={high:{bg:"rgba(0, 214, 180, 0.18)",fg:"#00D6B4"},medium:{bg:"rgba(0, 214, 180, 0.10)",fg:"#00D6B4"},low:{bg:"rgba(255, 255, 255, 0.04)",fg:"var(--text-2)"},none:{bg:"rgba(255, 255, 255, 0.03)",fg:"var(--text-3)"}};function Ne({entity:t,actions:s,highlight:n}){const o=Tn(t.observations)||a("memory.noContent"),i=t.observations?.length??0,r=t.archived||t.status==="archived",u=Ue(t),d=Ye(t.access_count),l=Dn[d.tone],g=Ee(t.last_accessed_at||t.created_at),p=(t.relations?.length??0)>0;return e("div",{class:"mem-row",style:r?{opacity:.45}:void 0,children:[e("div",{class:"mem-time",style:{textAlign:"center"},children:[e("div",{style:{height:20,display:"flex",alignItems:"center",justifyContent:"center",color:"var(--text-2)"},children:e(Ke,{type:t.type,size:18})}),e("div",{style:{fontSize:10,color:"var(--text-3)",marginTop:2},children:g})]}),e("div",{class:"mem-body",children:[e("div",{class:"mem-preview",children:n?e(In,{text:ns(o,160),term:n}):ns(o,160)}),e("div",{class:"mem-meta",style:{flexWrap:"wrap",gap:6},children:[e("span",{class:"badge badge-type",children:t.type}),r&&e("span",{class:"badge badge-archived",children:a("memory.archivedBadge")}),u&&e("span",{class:"tag",style:{background:"rgba(0, 214, 180, 0.12)",color:"var(--accent)",display:"inline-flex",alignItems:"center",gap:4},title:"project",children:[e("svg",{width:"11",height:"11",viewBox:"0 0 16 16","aria-hidden":"true",style:{flexShrink:0},children:e("path",{d:"M2 4 a1 1 0 0 1 1 -1 h4 l2 2 h5 a1 1 0 0 1 1 1 v6 a1 1 0 0 1 -1 1 H3 a1 1 0 0 1 -1 -1 z",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinejoin:"round"})}),u]}),d.tone!=="none"&&e("span",{class:"tag",style:{background:l.bg,color:l.fg,fontWeight:d.tone==="high"?600:400},title:`Recalled ${d.count} times`,children:["✓ ",d.label]}),p&&e("span",{class:"tag",style:{opacity:.7},title:"has relations",children:["→ ",t.relations.length]}),e("span",{style:{color:"var(--text-3)",fontSize:11},children:t.name}),e("span",{style:{color:"var(--text-3)",fontSize:10,fontFamily:"var(--mono)",opacity:.85},title:`created ${t.created_at}`,children:["· ",Fn(t.created_at)]}),i>1&&e("span",{style:{color:"var(--text-3)",fontSize:11},children:["· ",a("memory.factsCount",{count:i})]}),t.tags?.filter(c=>!c.startsWith("project:")&&!/^\d{4}-\d{2}-\d{2}/.test(c)).slice(0,3).map(c=>e("span",{class:"tag",children:c},c))]})]}),s&&e("div",{class:"mem-actions",children:s})]})}function In({text:t,term:s}){if(!s)return e(ae,{children:t});const n=[],o=t.toLowerCase(),i=s.toLowerCase();let r=0;for(;r<t.length;){const u=o.indexOf(i,r);if(u===-1){n.push(t.slice(r));break}u>r&&n.push(t.slice(r,u)),n.push(e("mark",{children:t.slice(u,u+i.length)})),r=u+i.length}return e(ae,{children:n})}function Hn(){const[t,s]=x(""),[n,o]=x(null),[i,r]=x(!1),[u,d]=x("");async function l(){if(t.trim()){r(!0),d("");try{const g=await U("POST","/v1/recall",{query:t.trim(),limit:30}),p=Array.isArray(g)?g:g.entities||[];o(p)}catch(g){d(g.message)}finally{r(!1)}}}return e("div",{children:e("div",{class:"card",children:[e("div",{class:"card-title",children:a("search.title")}),e("div",{class:"search-bar",children:[e("input",{type:"search",placeholder:a("search.placeholder"),value:t,onInput:g=>s(g.target.value),onKeyDown:g=>g.key==="Enter"&&l()}),e("button",{class:"btn btn-primary",onClick:l,disabled:i,children:a(i?"search.searching":"search.button")})]}),!i&&n===null&&!u&&e("div",{class:"empty",style:{padding:"32px 20px",color:"var(--text-3)"},children:e("div",{style:{fontSize:13,lineHeight:1.6},children:a("search.hint")})}),u&&e("div",{class:"error-box",children:u}),i&&e("div",{class:"empty",children:e("div",{class:"loading"})}),!i&&n!==null&&n.length===0&&e("div",{class:"empty",children:[e("span",{class:"empty-icon",children:"🔍"}),a("search.noResults"),' "',t,'"']}),!i&&n&&n.length>0&&e("div",{children:[e("div",{style:{fontSize:12,color:"var(--text-3)",marginBottom:12},children:[n.length," ",n.length!==1?a("search.results"):a("search.result")]}),n.map(g=>e("div",{class:"card",style:{padding:14},children:e(Ne,{entity:g,highlight:t})},g.id))]})]})})}const as=new Set(["release","feature"]),Bn=.65,zn=new Set(["release"]),Nn=new Set(["lesson_learned","lesson","mistake","bug_fix"]),jn={release:0,architecture:1,architecture_decision:1,infrastructure:1,plan:2,feature:3,decision:4,design_decision:4,bug_fix:5,refactoring:6,"weekly-summary":7,weekly_summary:7,lesson_learned:8,lesson:8,mistake:8,principle:9,best_practice:10,technical_pattern:10,pattern:10};function On(t){if(t.length<3)return[];const o=[...t].sort((d,l)=>d.created_at.localeCompare(l.created_at)),i=[];let r=[o[0]];for(let d=1;d<o.length;d++){const l=o[d-1].created_at,g=o[d].created_at;(new Date(g).getTime()-new Date(l).getTime())/864e5<=7?r.push(o[d]):(i.push(r),r=[o[d]])}i.push(r);const u=[];for(const d of i){if(d.length<3)continue;const l=d.map(g=>({e:g,p:jn[g.type]??99})).sort((g,p)=>g.p-p.p)[0];l.p!==99&&u.push({startIso:d[0].created_at,endIso:d[d.length-1].created_at,entityCount:d.length,label:l.e.name,anchorId:l.e.id})}return u}const Wn={release:0,architecture:1,architecture_decision:1,infrastructure:2,plan:3,feature:4,decision:5,design_decision:5,pattern:6,technical_pattern:6,best_practice:7,lesson_learned:8,lesson:8,mistake:8,bug_fix:9,refactoring:10,process:11,workflow_checkpoint:11,note:12,knowledge:13,verification_result:14,test_result:14,"weekly-summary":15,weekly_summary:15,commit:90,session_keypoint:91,session_identity:92,"session-identity":92,"session-insight":93,"session-summary":94};function We(t){return Wn[t]??50}function Un(t,s=new Date){const n=new Map;for(const i of t){const r=i.last_accessed_at||i.created_at,u=zs(r,s);let d,l,g;if(u==="today")d="today",l=a("time.today"),g=Number.MAX_SAFE_INTEGER;else if(u==="week"){const c=r.slice(0,10);d=`week:${c}`,l=Ee(r,s),g=new Date(c).getTime()}else if(u==="month"){const c=r.slice(0,10),f=new Date(c),b=new Date(f);b.setDate(f.getDate()-f.getDay());const h=b.toISOString().slice(0,10);d=`month:${h}`,l=Ee(h,s),g=b.getTime()}else{const c=r.slice(0,7);d=`older:${c}`;const f=new Date(c+"-01");l=f.toLocaleDateString(void 0,{year:"numeric",month:"long"}),g=f.getTime()}let p=n.get(d);p||(p={key:d,label:l,sort:g,entries:[]},n.set(d,p)),p.entries.push(i)}const o=Array.from(n.values()).sort((i,r)=>r.sort-i.sort);for(const i of o)i.entries.sort((r,u)=>{const d=We(r.type)-We(u.type);return d!==0?d:u.created_at.localeCompare(r.created_at)});return o}function qn({projectName:t,entities:s,onSwitchToList:n}){const[o,i]=x("tree"),r=_e(()=>{if(s.length===0)return{total:0,first:null,last:null,types:[]};const h=[...s].sort((w,k)=>w.created_at.localeCompare(k.created_at)),m=new Map;for(const w of s)m.set(w.type,(m.get(w.type)??0)+1);return{total:s.length,first:h[0].created_at,last:h[h.length-1].created_at,types:Array.from(m.entries()).sort((w,k)=>k[1]-w[1])}},[s]),u=_e(()=>Un(s),[s]),d=_e(()=>s.filter(h=>{if(!as.has(h.type))return!1;if(zn.has(h.type))return!0;const m=h.metadata?.signal_score;return typeof m!="number"?!0:m>=Bn}).sort((h,m)=>m.created_at.localeCompare(h.created_at)).slice(0,6),[s]),l=_e(()=>s.filter(m=>as.has(m.type)).length-d.length,[s,d]),g=_e(()=>s.filter(h=>Nn.has(h.type)).sort((h,m)=>(m.access_count??0)-(h.access_count??0)).slice(0,5),[s]),p=_e(()=>On(s),[s]),c=ie(new Map),f=h=>m=>{m?c.current.set(h,m):c.current.delete(h)},b=h=>{const m=c.current.get(h);m&&(m.scrollIntoView({behavior:"smooth",block:"center"}),m.style.transition="background 0.2s",m.style.background="rgba(0, 214, 180, 0.08)",window.setTimeout(()=>{m.style.background=""},1400))};return s.length===0?e("div",{class:"empty",children:[e("span",{class:"empty-icon",style:{display:"inline-flex",alignItems:"center",justifyContent:"center",color:"var(--text-3)"},children:e("svg",{width:"32",height:"32",viewBox:"0 0 16 16","aria-hidden":"true",children:[e("path",{d:"M2 4 L6 2 L10 4 L14 2 V12 L10 14 L6 12 L2 14 z",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinejoin:"round"}),e("path",{d:"M6 2 V12 M10 4 V14",stroke:"currentColor",strokeWidth:"1.5"})]})}),a("roadmap.emptyProject")]}):e("div",{children:[e("div",{style:{padding:"14px 16px",background:"rgba(0, 214, 180, 0.04)",border:"1px solid rgba(0, 214, 180, 0.12)",borderRadius:6,marginBottom:14},children:[e("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",flexWrap:"wrap",gap:8},children:[e("div",{style:{flex:1,minWidth:0},children:[e("div",{style:{fontSize:18,fontWeight:600,color:"var(--text-0)",display:"inline-flex",alignItems:"center",gap:8},children:[e("svg",{width:"18",height:"18",viewBox:"0 0 16 16","aria-hidden":"true",style:{color:"var(--accent)"},children:e("path",{d:"M2 4 a1 1 0 0 1 1 -1 h4 l2 2 h5 a1 1 0 0 1 1 1 v6 a1 1 0 0 1 -1 1 H3 a1 1 0 0 1 -1 -1 z",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinejoin:"round"})}),e("span",{children:t}),e("span",{style:{color:"var(--text-3)",fontWeight:400,fontSize:13},children:["· ",a("roadmap.title")]})]}),e("div",{style:{fontSize:12,color:"var(--text-2)",marginTop:4},children:a("roadmap.summary",{count:r.total,first:r.first?r.first.slice(0,10):"—",last:r.last?r.last.slice(0,10):"—"})})]}),e("div",{style:{display:"flex",gap:8,alignItems:"center",flexShrink:0},children:[e("div",{role:"tablist","aria-label":"Roadmap view",style:{display:"inline-flex",background:"rgba(255,255,255,0.04)",borderRadius:4,padding:2,border:"1px solid var(--border-subtle)"},children:["tree","mindmap"].map(h=>{const m=o===h;return e("button",{role:"tab","aria-selected":m,onClick:()=>i(h),style:{padding:"4px 10px",background:m?"rgba(0,214,180,0.15)":"transparent",color:m?"var(--accent)":"var(--text-2)",border:"none",borderRadius:3,fontSize:11,fontFamily:"inherit",cursor:"pointer",fontWeight:m?600:400},children:h==="tree"?"🌲 Tree":"🧠 Mindmap"},h)})}),n&&e("button",{class:"btn btn-sm",onClick:n,children:a("roadmap.switchToList")})]})]}),r.types.length>0&&e("div",{style:{display:"flex",flexWrap:"wrap",gap:6,marginTop:10},children:[r.types.slice(0,8).map(([h,m])=>e("span",{class:"tag",style:{fontSize:11,background:"rgba(255,255,255,0.04)"},children:[h," ",e("span",{style:{opacity:.6,fontFamily:"var(--mono)"},children:m})]},h)),r.types.length>8&&e("span",{class:"tag",style:{opacity:.5,fontSize:11},children:["+",r.types.length-8]})]})]}),p.length>0&&e("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:14,padding:"12px 14px",border:"1px solid rgba(255, 255, 255, 0.04)",borderRadius:6,background:"rgba(255, 255, 255, 0.02)",overflowX:"auto"},children:[e("span",{style:{fontSize:10,textTransform:"uppercase",letterSpacing:"0.08em",color:"var(--text-3)",fontWeight:600,flexShrink:0},children:a("roadmap.phases")}),p.map((h,m)=>e("button",{onClick:()=>h.anchorId!==void 0&&b(h.anchorId),disabled:h.anchorId===void 0,style:{flexShrink:0,display:"flex",flexDirection:"column",alignItems:"flex-start",gap:2,padding:"6px 10px",background:m===p.length-1?"rgba(0, 214, 180, 0.08)":"transparent",border:"1px solid",borderColor:m===p.length-1?"rgba(0, 214, 180, 0.3)":"var(--border-subtle)",borderRadius:4,color:"var(--text-1)",cursor:h.anchorId!==void 0?"pointer":"default",fontFamily:"inherit",textAlign:"left",minWidth:100},title:`${h.startIso.slice(0,10)} → ${h.endIso.slice(0,10)}`,children:[e("span",{style:{fontSize:11,fontWeight:600,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:240},children:h.label}),e("span",{style:{fontSize:10,color:"var(--text-3)",fontFamily:"var(--mono)"},children:[h.entityCount," · ",Ee(h.startIso)]})]},`${h.startIso}-${h.label}`))]}),o==="mindmap"&&p.length>0&&e(Vn,{projectName:t,phases:p,entities:s,onNodeClick:h=>{i("tree"),window.requestAnimationFrame(()=>b(h))}}),o==="mindmap"&&p.length===0&&e("div",{class:"empty",style:{padding:24},children:[a("roadmap.emptyProject")," — mindmap requires ≥3 entities within a 7-day window."]}),o==="tree"&&e("div",{style:{display:"grid",gridTemplateColumns:"minmax(0, 1fr) 280px",gap:16,alignItems:"start"},children:[e("div",{style:{position:"relative",minWidth:0},children:p.length>0?e("div",{style:{position:"relative",paddingLeft:28},children:[e("div",{"aria-hidden":"true",style:{position:"absolute",left:8,top:4,bottom:4,width:2,background:"var(--border-subtle)"}}),(()=>{const h=p.map(()=>[]),m=[];for(const k of s){const y=p.findIndex(A=>k.created_at>=A.startIso&&k.created_at<=A.endIso);y>=0?h[y].push(k):m.push(k)}for(const k of h)k.sort((y,A)=>{const C=We(y.type)-We(A.type);return C!==0?C:A.created_at.localeCompare(y.created_at)});const w=p.map((k,y)=>({phase:k,entries:h[y],idx:y})).reverse();return e(ae,{children:[w.map(({phase:k,entries:y,idx:A},C)=>{const B=C===0;return e("div",{style:{position:"relative",marginBottom:22},children:[e("span",{"aria-hidden":"true",style:{position:"absolute",left:-28,top:4,width:14,height:14,borderRadius:"50%",background:B?"transparent":"var(--accent)",border:"2px solid var(--accent)",boxSizing:"border-box"}}),e("button",{onClick:()=>k.anchorId!==void 0&&b(k.anchorId),disabled:k.anchorId===void 0,style:{display:"flex",flexDirection:"column",alignItems:"flex-start",gap:2,padding:0,background:"transparent",border:"none",color:"inherit",cursor:k.anchorId!==void 0?"pointer":"default",fontFamily:"inherit",textAlign:"left",width:"100%"},children:[e("span",{style:{fontSize:13,fontWeight:600,color:"var(--text-0)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"100%"},children:[k.label,B&&e("span",{style:{marginLeft:8,fontSize:10,color:"var(--accent)",fontFamily:"var(--mono)",fontWeight:500},children:"active"})]}),e("span",{style:{fontSize:11,color:"var(--text-3)",fontFamily:"var(--mono)"},children:[k.startIso.slice(0,10)," → ",k.endIso.slice(0,10)," · ",y.length," ",y.length===1?"entry":"entries"]})]}),e("div",{style:{marginTop:8},children:y.map((z,Q)=>{const q=Q===y.length-1;return e("div",{ref:f(z.id),style:{position:"relative",paddingLeft:24,paddingTop:6,paddingBottom:6},children:[e("span",{"aria-hidden":"true",style:{position:"absolute",left:0,top:0,bottom:q?"50%":0,width:1,background:"var(--border-subtle)"}}),e("span",{"aria-hidden":"true",style:{position:"absolute",left:0,top:"50%",width:18,height:1,background:"var(--border-subtle)",transform:"translateY(-50%)"}}),e(Ne,{entity:z})]},z.id)})})]},`${k.startIso}-${k.label}`)}),m.length>0&&e("div",{style:{position:"relative",marginBottom:22},children:[e("span",{"aria-hidden":"true",style:{position:"absolute",left:-28,top:4,width:12,height:12,borderRadius:"50%",background:"var(--text-3)",opacity:.4}}),e("div",{style:{fontSize:12,color:"var(--text-2)",fontFamily:"var(--mono)",marginBottom:8},children:["Other (",m.length,")"]}),m.map((k,y)=>{const A=y===m.length-1;return e("div",{ref:f(k.id),style:{position:"relative",paddingLeft:24,paddingTop:6,paddingBottom:6},children:[e("span",{"aria-hidden":"true",style:{position:"absolute",left:0,top:0,bottom:A?"50%":0,width:1,background:"var(--border-subtle)"}}),e("span",{"aria-hidden":"true",style:{position:"absolute",left:0,top:"50%",width:18,height:1,background:"var(--border-subtle)",transform:"translateY(-50%)"}}),e(Ne,{entity:k})]},k.id)})]})]})})()]}):u.map(h=>e("div",{style:{marginBottom:18},children:[e("div",{style:{display:"flex",alignItems:"center",gap:10,marginBottom:8,paddingBottom:6,borderBottom:"1px solid var(--border-subtle)"},children:[e("span",{style:{fontSize:11,textTransform:"uppercase",letterSpacing:"0.08em",fontWeight:600,color:"var(--accent)",fontFamily:"var(--mono)"},children:h.label}),e("span",{style:{fontSize:11,color:"var(--text-3)"},children:h.entries.length})]}),h.entries.map(m=>e("div",{ref:f(m.id),style:{borderBottom:"1px solid var(--border-subtle)",padding:"12px 0"},children:e(Ne,{entity:m})},m.id))]},h.key))}),e("div",{style:{display:"flex",flexDirection:"column",gap:14,position:"sticky",top:16},children:[d.length>0&&e("div",{class:"card",style:{padding:14},children:[e("div",{style:{fontSize:11,textTransform:"uppercase",letterSpacing:"0.08em",fontWeight:600,color:"var(--text-2)",marginBottom:10,display:"flex",alignItems:"center",gap:4},children:[a("roadmap.milestones"),l>0&&e("span",{style:{fontSize:"0.7rem",fontWeight:400,opacity:.55,textTransform:"none",letterSpacing:0},children:["(",l," low-signal hidden)"]})]}),d.map(h=>e("button",{onClick:()=>b(h.id),style:{display:"flex",alignItems:"flex-start",gap:8,width:"100%",textAlign:"left",padding:"6px 0",background:"transparent",border:"none",borderTop:"1px solid var(--border-subtle)",color:"inherit",cursor:"pointer",fontFamily:"inherit"},children:[e("span",{style:{flexShrink:0,color:"var(--accent)"},children:e(Ke,{type:h.type,size:14})}),e("div",{style:{flex:1,minWidth:0},children:[e("div",{style:{fontSize:12,color:"var(--text-1)",fontWeight:500,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:h.name}),e("div",{style:{fontSize:10,color:"var(--text-3)",marginTop:2},children:Ee(h.created_at)})]})]},h.id))]}),g.length>0&&e("div",{class:"card",style:{padding:14},children:[e("div",{style:{fontSize:11,textTransform:"uppercase",letterSpacing:"0.08em",fontWeight:600,color:"var(--text-2)",marginBottom:10},children:a("roadmap.keyLessons")}),g.map(h=>{const m=Ye(h.access_count);return e("button",{onClick:()=>b(h.id),style:{display:"flex",alignItems:"flex-start",gap:8,width:"100%",textAlign:"left",padding:"6px 0",background:"transparent",border:"none",borderTop:"1px solid var(--border-subtle)",color:"inherit",cursor:"pointer",fontFamily:"inherit"},children:[e("span",{style:{flexShrink:0,color:"var(--text-2)"},children:e(Ke,{type:h.type,size:14})}),e("div",{style:{flex:1,minWidth:0},children:[e("div",{style:{fontSize:12,color:"var(--text-1)",fontWeight:500,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:h.name}),e("div",{style:{fontSize:10,color:m.tone==="high"?"var(--accent)":"var(--text-3)",marginTop:2,fontFamily:"var(--mono)"},children:m.tone!=="none"?m.label:a("memory.access.never")})]})]},h.id)})]})]})]})]})}function Vn({projectName:t,phases:s,entities:n,onNodeClick:o}){const i=s.map(()=>[]);for(const H of n){const O=s.findIndex(v=>H.created_at>=v.startIso&&H.created_at<=v.endIso);O>=0&&i[O].push(H)}for(const H of i)H.sort((O,v)=>{const T=We(O.type)-We(v.type);return T!==0?T:v.created_at.localeCompare(O.created_at)});const r=6,u=i.map(H=>({shown:H.slice(0,r),extra:Math.max(0,H.length-r)})),d=900,l=600,g=d/2,p=l/2,c=170,f=230,b=30,h=H=>2*Math.PI*H/s.length-Math.PI/2,m=ie(null),[w,k]=x(1),[y,A]=x(0),[C,B]=x(0),z=ie(w),Q=ie({x:y,y:C});z.current=w,Q.current={x:y,y:C};const q=ie({active:!1,lastX:0,lastY:0}),[te,ne]=x(!1),M=.25,F=4,$=(H,O)=>{const v=m.current;if(!v)return{x:0,y:0};const T=v.getBoundingClientRect();return T.width===0||T.height===0?{x:0,y:0}:{x:(H-T.left)/T.width*d,y:(O-T.top)/T.height*l}};X(()=>{const H=m.current;if(!H)return;const O=v=>{v.preventDefault();const T=z.current,W=Q.current,oe=Math.exp(-v.deltaY*.0015),G=Math.max(M,Math.min(F,T*oe));if(G===T)return;const{x:ve,y:ye}=$(v.clientX,v.clientY),_=(ve-W.x)/T,E=(ye-W.y)/T;k(G),A(ve-_*G),B(ye-E*G)};return H.addEventListener("wheel",O,{passive:!1}),()=>H.removeEventListener("wheel",O)},[]);const ce=H=>{let v=H.target;for(;v&&v!==m.current;){if(v.style?.cursor==="pointer")return;v=v.parentElement}H.preventDefault(),q.current.active=!0,q.current.lastX=H.clientX,q.current.lastY=H.clientY,ne(!0)},ee=H=>{if(!q.current.active)return;const O=m.current;if(!O)return;const v=O.getBoundingClientRect();if(v.width===0||v.height===0)return;const T=(H.clientX-q.current.lastX)/v.width*d,W=(H.clientY-q.current.lastY)/v.height*l;q.current.lastX=H.clientX,q.current.lastY=H.clientY,A(oe=>oe+T),B(oe=>oe+W)},ke=()=>{q.current.active&&(q.current.active=!1,ne(!1))},ue=()=>{k(1),A(0),B(0)};return e("div",{style:{position:"relative",border:"1px solid var(--border-subtle)",borderRadius:6,background:"rgba(255,255,255,0.02)",overflow:"hidden",marginBottom:14},children:[e("button",{onClick:ue,title:"Reset view (also: double-click background)",style:{position:"absolute",top:8,right:8,zIndex:2,padding:"4px 10px",fontSize:11,fontFamily:"inherit",background:"rgba(0,0,0,0.4)",color:"var(--text-1)",border:"1px solid var(--border-subtle)",borderRadius:4,cursor:"pointer"},children:"Reset view"}),e("div",{style:{position:"absolute",bottom:8,left:12,zIndex:2,fontSize:10,fontFamily:"var(--mono)",color:"var(--text-3)",pointerEvents:"none"},children:["scroll to zoom · drag to pan · ",Math.round(w*100),"%"]}),e("svg",{ref:m,viewBox:`0 0 ${d} ${l}`,width:"100%",style:{display:"block",minHeight:600,cursor:te?"grabbing":"grab",userSelect:"none",touchAction:"none"},onMouseDown:ce,onMouseMove:ee,onMouseUp:ke,onMouseLeave:ke,onDblClick:ue,children:e("g",{transform:`translate(${y} ${C}) scale(${w})`,children:[s.map((H,O)=>{const v=h(O),T=g+c*Math.cos(v),W=p+c*Math.sin(v);return e("path",{d:`M ${g} ${p} Q ${(g+T)/2} ${(p+W)/2-10} ${T} ${W}`,fill:"none",stroke:"rgba(0, 214, 180, 0.4)",strokeWidth:1.5},`p-${O}`)}),s.map((H,O)=>{const{shown:v}=u[O],T=h(O),W=g+c*Math.cos(T),oe=p+c*Math.sin(T),G=Math.PI/6;return v.map((ve,ye)=>{const _=v.length===1?.5:ye/(v.length-1),E=T-G/2+G*_,P=f+b*(ye%3),I=g+P*Math.cos(E),j=p+P*Math.sin(E);return e("path",{d:`M ${W} ${oe} Q ${(W+I)/2} ${(oe+j)/2} ${I} ${j}`,fill:"none",stroke:"rgba(255,255,255,0.18)",strokeWidth:1},`e-${O}-${ve.id}`)})}),e("g",{children:[e("circle",{cx:g,cy:p,r:42,fill:"rgba(0, 214, 180, 0.18)",stroke:"var(--accent)",strokeWidth:1.5}),e("text",{x:g,y:p,textAnchor:"middle",dominantBaseline:"central",fontSize:11,fontWeight:600,fill:"var(--text-0)",style:{pointerEvents:"none"},children:t.length>14?t.slice(0,12)+"…":t})]}),s.map((H,O)=>{const v=h(O),T=g+c*Math.cos(v),W=p+c*Math.sin(v),oe=H.label.length>18?H.label.slice(0,16)+"…":H.label;return e("g",{style:{cursor:H.anchorId!==void 0?"pointer":"default"},onClick:()=>H.anchorId!==void 0&&o(H.anchorId),children:[e("circle",{cx:T,cy:W,r:28,fill:"rgba(0, 214, 180, 0.10)",stroke:"var(--accent)",strokeWidth:1.25}),e("text",{x:T,y:W-4,textAnchor:"middle",fontSize:10,fontWeight:600,fill:"var(--text-0)",style:{pointerEvents:"none"},children:[e("tspan",{x:T,dy:0,children:oe}),e("tspan",{x:T,dy:12,fontSize:9,fill:"var(--text-3)",fontWeight:400,children:[H.entityCount," · ",H.startIso.slice(5,10)]})]})]},`phase-${O}`)}),s.map((H,O)=>{const{shown:v,extra:T}=u[O],W=h(O),oe=Math.PI/6;return e("g",{children:[v.map((G,ve)=>{const ye=v.length===1?.5:ve/(v.length-1),_=W-oe/2+oe*ye,E=f+b*(ve%3),P=g+E*Math.cos(_),I=p+E*Math.sin(_),j=G.name.length>22?G.name.slice(0,20)+"…":G.name;return e("g",{style:{cursor:"pointer"},onClick:()=>o(G.id),children:[e("title",{children:`${G.name} (${G.type})`}),e("circle",{cx:P,cy:I,r:4,fill:"var(--text-2)"}),e("text",{x:P,y:I-8,textAnchor:Math.cos(_)>.2?"start":Math.cos(_)<-.2?"end":"middle",fontSize:9,fill:"var(--text-1)",style:{pointerEvents:"none"},children:j})]},G.id)}),T>0&&(()=>{const G=W+oe/2+.05,ve=f+b*2+10,ye=g+ve*Math.cos(G),_=p+ve*Math.sin(G);return e("text",{x:ye,y:_,textAnchor:"middle",fontSize:9,fill:"var(--text-3)",fontStyle:"italic",children:["+",T," more"]})})()]},`leaves-${O}`)})]})})]})}const kt="memesh.browse.viewMode",xt=30;function Me({label:t,active:s,onClick:n,count:o}){return e("button",{onClick:n,style:{padding:"4px 10px",borderRadius:14,border:"1px solid",borderColor:s?"rgba(0, 214, 180, 0.5)":"rgba(255,255,255,0.08)",background:s?"rgba(0, 214, 180, 0.15)":"transparent",color:s?"var(--accent)":"var(--text-2)",fontSize:11,cursor:"pointer",whiteSpace:"nowrap",fontFamily:"inherit"},children:[t,o!==void 0&&e("span",{style:{marginLeft:6,opacity:.6,fontFamily:"var(--mono)",fontSize:10},children:o})]})}function is({manage:t}){const[s,n]=x([]),[o,i]=x([]),[r,u]=x(""),[d,l]=x(!0),[g,p]=x(""),[c,f]=x(0),[b]=Ht(),[h,m]=x(b?"knowledge":"all"),[w,k]=x("all"),[y,A]=x("all"),[C,B]=x("all"),[z,Q]=x("most-recalled"),[q,te]=x(()=>{try{return localStorage.getItem(kt)==="list"?"list":"roadmap"}catch{return"roadmap"}});async function ne(){l(!0),p("");try{const[v,T]=await Promise.all([U("GET","/v1/entities?limit=2000&status=all"),Bs().catch(()=>[])]);n(v||[]),i(T),f(0),window.dispatchEvent(new Event("memesh:data-changed"))}catch(v){p(v.message)}finally{l(!1)}}X(()=>{ne()},[]),X(()=>{f(0)},[r,h,w,y,C,z]),X(()=>{(h==="knowledge"||h==="all")&&m(b?"knowledge":"all")},[b]);const M=_e(()=>{const v={all:0,knowledge:0,activity:0,reference:0,session:0};for(const T of s)T.archived||T.status==="archived"||(v.all++,v[ts(T.type)]++);return v},[s]),F=_e(()=>{const v=r.toLowerCase();return s.filter(T=>!(h!=="all"&&ts(T.type)!==h||w!=="all"&&zs(T.last_accessed_at||T.created_at)!==w||y==="recalled"&&(T.access_count??0)===0||y==="never"&&(T.access_count??0)>0||C!=="all"&&Ue(T)!==C||v&&![T.name,T.type,...T.observations??[],...T.tags??[]].join(" ").toLowerCase().includes(v)))},[s,h,w,y,C,r]),$=_e(()=>{const v=[...F];return z==="most-recalled"?v.sort((T,W)=>(W.access_count??0)-(T.access_count??0)||(W.last_accessed_at??W.created_at).localeCompare(T.last_accessed_at??T.created_at)):z==="created"?v.sort((T,W)=>W.created_at.localeCompare(T.created_at)):v.sort((T,W)=>(W.last_accessed_at??W.created_at).localeCompare(T.last_accessed_at??T.created_at)),v},[F,z]),ce=$.filter(v=>!v.archived&&v.status!=="archived"),ee=$.filter(v=>v.archived||v.status==="archived"),ke=Math.ceil(ce.length/xt),ue=ce.slice(c*xt,(c+1)*xt);async function H(v){if(confirm(a("browse.confirmArchive")))try{await U("POST","/v1/forget",{name:v}),ne()}catch(T){p(a("browse.archiveFailed",{message:T.message}))}}async function O(v){try{await U("POST","/v1/remember",{name:v,type:"restored"}),ne()}catch(T){p(a("browse.restoreFailed",{message:T.message}))}}return e("div",{children:e("div",{class:"card",children:[e("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:12},children:[e("div",{children:[e("div",{class:"card-title",style:{margin:0},children:a(t?"browse.manage":"browse.title")}),!d&&e("div",{style:{fontSize:12,color:"var(--text-3)",marginTop:2},children:[ce.length.toLocaleString()," ",a("browse.active"),ee.length>0?` · ${ee.length} ${a("browse.archived")}`:""]})]}),e("div",{style:{display:"flex",gap:8},children:[e("input",{type:"search",placeholder:a("browse.filter"),value:r,onInput:v=>u(v.target.value),style:{width:240}}),e("button",{class:"btn btn-sm",onClick:ne,title:a("browse.refresh"),children:"↻"})]})]}),e("div",{style:{display:"flex",flexWrap:"wrap",gap:6,marginBottom:6},children:[e("span",{style:{fontSize:11,color:"var(--text-3)",alignSelf:"center",marginRight:4},children:a("browse.filterCategory")}),e(Me,{label:a("cluster.knowledge"),active:h==="knowledge",onClick:()=>m("knowledge"),count:M.knowledge}),e(Me,{label:a("cluster.activity"),active:h==="activity",onClick:()=>m("activity"),count:M.activity}),e(Me,{label:a("cluster.session"),active:h==="session",onClick:()=>m("session"),count:M.session}),e(Me,{label:a("cluster.reference"),active:h==="reference",onClick:()=>m("reference"),count:M.reference}),e(Me,{label:a("cluster.all"),active:h==="all",onClick:()=>m("all"),count:M.all})]}),e("div",{style:{display:"flex",flexWrap:"wrap",gap:6,marginBottom:6},children:[e("span",{style:{fontSize:11,color:"var(--text-3)",alignSelf:"center",marginRight:4},children:a("browse.filterTime")}),e(Me,{label:a("browse.timeToday"),active:w==="today",onClick:()=>k(w==="today"?"all":"today")}),e(Me,{label:a("browse.timeWeek"),active:w==="week",onClick:()=>k(w==="week"?"all":"week")}),e(Me,{label:a("browse.timeMonth"),active:w==="month",onClick:()=>k(w==="month"?"all":"month")}),e(Me,{label:a("browse.timeOlder"),active:w==="older",onClick:()=>k(w==="older"?"all":"older")}),e("span",{style:{width:1,background:"var(--border-subtle)",margin:"0 6px"}}),e("span",{style:{fontSize:11,color:"var(--text-3)",alignSelf:"center",marginRight:4},children:a("browse.filterValue")}),e(Me,{label:a("browse.valueRecalled"),active:y==="recalled",onClick:()=>A(y==="recalled"?"all":"recalled")}),e(Me,{label:a("browse.valueNever"),active:y==="never",onClick:()=>A(y==="never"?"all":"never")})]}),o.length>0&&e("div",{style:{display:"flex",flexWrap:"wrap",gap:6,marginBottom:6},children:[e("span",{style:{fontSize:11,color:"var(--text-3)",alignSelf:"center",marginRight:4},children:a("browse.filterProject")}),e(Me,{label:a("cluster.all"),active:C==="all",onClick:()=>B("all")}),o.map(v=>e(Me,{label:v.name,count:v.count,active:C===v.name,onClick:()=>B(v.name)},v.name))]}),e("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:14,paddingBottom:12,borderBottom:"1px solid var(--border-subtle)"},children:[e("span",{style:{fontSize:11,color:"var(--text-3)"},children:a("browse.filterSort")}),e("select",{value:z,onChange:v=>Q(v.target.value),style:{padding:"3px 8px",fontSize:12},children:[e("option",{value:"most-recalled",children:a("browse.sortMostRecalled")}),e("option",{value:"recent",children:a("browse.sortRecent")}),e("option",{value:"created",children:a("browse.sortCreated")})]})]}),g&&e("div",{class:"error-box",style:{marginBottom:12},children:g}),d&&e("div",{class:"empty",children:e("div",{class:"loading"})}),!d&&C!=="all"&&q==="roadmap"&&!t&&e(qn,{projectName:C,entities:ce,onSwitchToList:()=>{te("list");try{localStorage.setItem(kt,"list")}catch{}}}),!d&&(C==="all"||q==="list"||t)&&ce.length===0&&e("div",{class:"empty",children:[e("span",{class:"empty-icon",style:{display:"inline-flex",alignItems:"center",justifyContent:"center",color:"var(--text-3)"},children:e("svg",{width:"32",height:"32",viewBox:"0 0 16 16","aria-hidden":"true",children:[e("path",{d:"M2 9 L4 4 H12 L14 9 V13 H2 z",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinejoin:"round"}),e("path",{d:"M2 9 H6 a2 2 0 0 0 4 0 H14",stroke:"currentColor",strokeWidth:"1.5",fill:"none"})]})}),r?`${a("browse.noMatch")} "${r}"`:a("browse.emptyFilter")]}),!d&&(C==="all"||q==="list"||t)&&ue.length>0&&e("div",{children:[C!=="all"&&q==="list"&&!t&&e("div",{style:{display:"flex",justifyContent:"flex-end",marginBottom:8},children:e("button",{class:"btn btn-sm",onClick:()=>{te("roadmap");try{localStorage.setItem(kt,"roadmap")}catch{}},children:a("roadmap.switchToRoadmap")})}),ue.map(v=>e("div",{style:{borderBottom:"1px solid var(--border-subtle)",padding:"14px 0"},children:e(Ne,{entity:v,highlight:r,actions:t?e("button",{class:"btn btn-danger btn-sm",onClick:()=>H(v.name),children:a("browse.archive")}):void 0})},v.id)),ke>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:c===0,onClick:()=>f(v=>v-1),children:a("browse.prev")}),e("span",{style:{color:"var(--text-3)",fontFamily:"var(--mono)",fontSize:12},children:[c+1," / ",ke]}),e("button",{class:"btn btn-sm",disabled:c>=ke-1,onClick:()=>f(v=>v+1),children:a("browse.next")})]})]}),!d&&ee.length>0&&t&&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:[a("browse.archived")," (",ee.length,")"]}),ee.slice(0,10).map(v=>e("div",{style:{borderBottom:"1px solid var(--border-subtle)",padding:"14px 0"},children:e(Ne,{entity:v,highlight:r,actions:e("button",{class:"btn btn-sm",onClick:()=>O(v.name),children:a("browse.restore")})})},v.id)),ee.length>10&&e("div",{style:{fontSize:12,color:"var(--text-3)",padding:"12px 0",textAlign:"center"},children:["+",ee.length-10," ",a("browse.moreArchived")]})]})]})})}function rs(t){return t>=80?"var(--success)":t>=60?"var(--accent)":t>=40?"var(--warning)":"var(--danger)"}function $n(t){return t>=80?a("health.excellent"):t>=60?a("health.good"):t>=40?a("health.fair"):a("health.poor")}const Gn=["activity","quality","freshness","lessons"];function Kn({score:t,factors:s}){const n=rs(t);return e("div",{class:"card",children:[e("div",{class:"card-title",children:a("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 ${n}`,display:"flex",alignItems:"center",justifyContent:"center"},children:e("span",{style:{fontFamily:"var(--mono)",fontSize:"24px",fontWeight:700,color:n,letterSpacing:"-0.02em"},children:t})}),e("span",{style:{marginTop:"6px",fontSize:"11px",fontWeight:500,color:"var(--text-2)"},children:$n(t)})]}),e("div",{style:{flex:1,minWidth:0,display:"flex",flexDirection:"column",gap:"10px"},children:Gn.map(o=>{const i=s[o],r=Math.round(i.score/i.weight*100),u=rs(r);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:a(`health.${o}`)}),e("span",{style:{fontFamily:"var(--mono)",fontSize:"11px",color:"var(--text-3)"},children:[r,"%"]})]}),e("div",{style:{height:"4px",borderRadius:"2px",background:"var(--bg-0)",overflow:"hidden"},children:e("div",{style:{height:"100%",width:`${r}%`,borderRadius:"2px",background:u,transition:"width 600ms ease-out"}})})]},o)})})]})]})}const He=220,Se=36,Ce=2;function Yn({trend:t}){if(!t||t.length===0)return e("svg",{width:He,height:Se,style:{display:"block"},children:e("line",{x1:0,y1:Se/2,x2:He,y2:Se/2,stroke:"rgba(255,255,255,0.06)",strokeWidth:1})});if(t.length===1){const u=He/2,d=Se/2;return e("svg",{width:He,height:Se,style:{display:"block"},children:[e("line",{x1:Ce,y1:Se-Ce,x2:He-Ce,y2:Se-Ce,stroke:"rgba(255,255,255,0.06)",strokeWidth:1}),e("circle",{cx:u,cy:d,r:3,fill:"#00D6B4"})]})}const s=Math.max(1,...t.map(u=>u.count)),n=(He-Ce*2)/(t.length-1),o=t.map((u,d)=>{const l=Ce+d*n,g=Se-Ce-u.count/s*(Se-Ce*2);return`${l.toFixed(1)},${g.toFixed(1)}`}),i=`M${o[0]} L${o.slice(1).join(" L")}`,r=`${i} L${Ce+(t.length-1)*n},${Se-Ce} L${Ce},${Se-Ce} Z`;return e("svg",{width:He,height:Se,style:{display:"block"},children:[e("path",{d:r,fill:"rgba(0, 214, 180, 0.12)"}),e("path",{d:i,fill:"none",stroke:"#00D6B4",strokeWidth:1.5,strokeLinejoin:"round",strokeLinecap:"round"}),t.map((u,d)=>{const[l,g]=o[d].split(",");return d===t.length-1?e("circle",{cx:l,cy:g,r:2.5,fill:"#00D6B4"},d):null})]})}function Xn({metric:t}){const{reusedThisWeek:s,trend:n,computedFrom:o}=t,i=o==="last_accessed_at_approximation",r=n.slice(0,Math.max(0,n.length-7)).slice(-7).reduce((l,g)=>l+g.count,0),u=n.slice(-7).reduce((l,g)=>l+g.count,0),d=r>0?Math.round((u-r)/r*100):null;return e("div",{class:"card",style:{display:"flex",gap:24,alignItems:"center",flexWrap:"wrap",padding:"20px 24px",background:"linear-gradient(135deg, rgba(0, 214, 180, 0.06) 0%, rgba(0, 214, 180, 0.02) 100%)",border:"1px solid rgba(0, 214, 180, 0.18)"},children:[e("div",{style:{flex:"1 1 200px",minWidth:200},children:[e("div",{style:{fontSize:11,textTransform:"uppercase",letterSpacing:"0.08em",color:"var(--text-2)",fontWeight:600,marginBottom:6},children:a("loop.label")}),e("div",{style:{display:"flex",alignItems:"baseline",gap:12},children:[e("div",{style:{fontSize:84,fontWeight:700,lineHeight:1,color:s>0?"var(--accent)":"var(--text-2)",fontFamily:"Satoshi, system-ui, sans-serif",letterSpacing:"-0.03em"},children:s>0?s.toLocaleString():"—"}),d!==null&&d!==0&&e("span",{style:{fontSize:12,fontWeight:600,fontFamily:"var(--mono)",color:d>0?"#4ADE80":"#F87171"},children:[d>0?"↑":"↓"," ",Math.abs(d),"%"]})]}),e("div",{style:{fontSize:13,color:"var(--text-1)",marginTop:4},children:s>0?a("loop.subtitleHas"):a("loop.subtitleNone")}),i&&e("div",{style:{fontSize:10,color:"var(--text-3)",marginTop:6,fontStyle:"italic"},children:a("loop.approxNote")})]}),e("div",{style:{flex:"0 0 auto",display:"flex",flexDirection:"column",alignItems:"flex-end",gap:4},children:[e(Yn,{trend:n}),e("div",{style:{fontSize:10,color:"var(--text-3)",fontFamily:"var(--mono)"},children:a("loop.sparkLabel")})]})]})}const Je=8,Zn=8,Qn=20,et=8,Ns=120,js="rgba(0, 214, 180, 0.3)",Os="#00D6B4",Jn=1.5,ea="#4A5260",ta="9px Satoshi, system-ui, sans-serif";function os(t,s){t.style.width="";const n=window.devicePixelRatio||1,i=t.getBoundingClientRect().width,r=Ns,u=i-et-Zn,d=r-Je-Qn;if(s.length===0||u<=0||d<=0)return;t.width=i*n,t.height=r*n,t.style.width=`${i}px`,t.style.height=`${r}px`;const l=t.getContext("2d");if(!l)return;l.scale(n,n);const g=Math.max(1,...s.map(m=>m.created)),p=Math.max(1,...s.map(m=>m.recalled)),c=Math.max(g,p),f=s.length,b=1,h=Math.max(1,(u-b*(f-1))/f);l.fillStyle=js;for(let m=0;m<f;m++){const k=s[m].created/c*d,y=et+m*(h+b),A=Je+d-k;l.fillRect(y,A,h,k)}l.beginPath(),l.strokeStyle=Os,l.lineWidth=Jn,l.lineJoin="round",l.lineCap="round";for(let m=0;m<f;m++){const w=s[m],k=et+m*(h+b)+h/2,y=Je+d-w.recalled/c*d;m===0?l.moveTo(k,y):l.lineTo(k,y)}l.stroke(),l.fillStyle=ea,l.font=ta,l.textAlign="center",l.textBaseline="top";for(let m=0;m<f;m+=7){const w=s[m],k=w.date.split("-"),y=k.length>=3?`${k[1]}-${k[2]}`:w.date,A=et+m*(h+b)+h/2,C=Je+d+4;l.fillText(y,A,C)}}function sa({data:t}){const s=ie(null);X(()=>{const i=s.current;if(!i)return;os(i,t);const r=new ResizeObserver(()=>os(i,t));return r.observe(i),()=>r.disconnect()},[t]);const n=t.reduce((i,r)=>i+r.created,0),o=t.reduce((i,r)=>i+r.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:a("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:js}}),a("timeline.created"),e("span",{style:{fontFamily:"var(--mono)",color:"var(--text-3)",marginLeft:2},children:n})]}),e("span",{style:{display:"flex",alignItems:"center",gap:4},children:[e("span",{style:{display:"inline-block",width:10,height:2,borderRadius:1,background:Os}}),a("timeline.recalled"),e("span",{style:{fontFamily:"var(--mono)",color:"var(--text-3)",marginLeft:2},children:o})]})]})]}),e("canvas",{ref:s,style:{width:"100%",height:`${Ns}px`,display:"block"}})]})}const wt=["week","month","quarter","older"];function na(t){return a(`ageMatrix.bucket.${t}`)||t}const aa=["lesson_learned","lesson","mistake","decision","architecture_decision","pattern","technical_pattern","best_practice","bug_fix","workflow_checkpoint","process","architecture","feature"];function ia(t){return a(`ageMatrix.type.${t}`)||t}function ra(t,s){return t===0||s===0?"rgba(255,255,255,0.03)":`rgba(0, 214, 180, ${(.12+Math.min(t/s,1)*.55).toFixed(2)})`}function oa({data:t}){if(!t||t.length===0)return null;const s=new Map;for(const i of t)s.has(i.type)||s.set(i.type,new Map),s.get(i.type).set(i.bucket,i.count);const n=aa.filter(i=>s.has(i)),o=Math.max(1,...t.map(i=>i.count));return e("div",{class:"card",children:[e("div",{class:"card-title",style:{marginBottom:16},children:a("ageMatrix.title")}),e("div",{style:{overflowX:"auto"},children:e("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:12,tableLayout:"fixed"},children:[e("colgroup",{children:[e("col",{style:{width:"28%"}}),wt.map(i=>e("col",{style:{width:"18%"}},i))]}),e("thead",{children:e("tr",{children:[e("th",{style:{textAlign:"left",padding:"4px 8px",color:"var(--text-2)",fontWeight:400},children:a("ageMatrix.typeColumn")}),wt.map(i=>e("th",{style:{textAlign:"center",padding:"4px 6px",color:"var(--text-2)",fontWeight:400},children:na(i)},i))]})}),e("tbody",{children:n.map(i=>{const r=s.get(i),u=Array.from(r.values()).reduce((d,l)=>d+l,0);return e("tr",{children:[e("td",{style:{padding:"5px 8px",color:"var(--text-1)",fontSize:11,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:[ia(i),e("span",{style:{color:"var(--text-3)",marginLeft:4},children:["(",u,")"]})]}),wt.map(d=>{const l=r.get(d)??0;return e("td",{style:{textAlign:"center",padding:"5px 6px",background:ra(l,o),borderRadius:4,color:l>0?"var(--accent)":"var(--text-3)",fontFamily:"var(--mono)",fontWeight:l>0?600:400,fontSize:11,transition:"background 0.2s"},children:l>0?l:"·"},d)})]},i)})})]})}),e("div",{style:{marginTop:10,fontSize:11,color:"var(--text-3)",display:"flex",alignItems:"center",gap:6},children:[e("span",{children:a("ageMatrix.low")}),[.15,.35,.55,.7].map(i=>e("span",{style:{display:"inline-block",width:14,height:10,borderRadius:2,background:`rgba(0,214,180,${i})`}},i)),e("span",{children:a("ageMatrix.high")}),e("span",{style:{marginLeft:8},children:["— ",a("ageMatrix.legend")]})]})]})}function ls(t){return a(`radar.axis.${t}`)||t}const ze=220,Ws=ze/2,Us=ze/2,tt=80,st=14;function nt(t,s){const n=(t-90)*(Math.PI/180);return[Ws+s*Math.cos(n),Us+s*Math.sin(n)]}function la({data:t}){if(!t||t.length===0)return null;const s=t.length,n=Math.max(1,...t.map(d=>d.count)),o=t.map((d,l)=>360/s*l),i=t.map((d,l)=>{const g=d.count/n,p=st+g*(tt-st);return nt(o[l],p)}),r=i.map((d,l)=>`${l===0?"M":"L"}${d[0].toFixed(1)},${d[1].toFixed(1)}`).join(" ")+" Z",u=[.25,.5,.75,1];return e("div",{class:"card",children:[e("div",{class:"card-title",style:{marginBottom:8},children:a("radar.title")}),e("div",{style:{display:"flex",alignItems:"center",gap:16,flexWrap:"wrap"},children:[e("svg",{width:ze,height:ze,viewBox:`0 0 ${ze} ${ze}`,style:{flexShrink:0},children:[u.map(d=>{const l=o.map(g=>{const p=st+d*(tt-st),[c,f]=nt(g,p);return`${c.toFixed(1)},${f.toFixed(1)}`});return e("polygon",{points:l.join(" "),fill:"none",stroke:"rgba(255,255,255,0.06)",strokeWidth:1},d)}),o.map((d,l)=>{const[g,p]=nt(d,tt);return e("line",{x1:Ws,y1:Us,x2:g.toFixed(1),y2:p.toFixed(1),stroke:"rgba(255,255,255,0.06)",strokeWidth:1},l)}),e("path",{d:r,fill:"rgba(0,214,180,0.15)",stroke:"#00D6B4",strokeWidth:1.5,strokeLinejoin:"round"}),i.map(([d,l],g)=>e("circle",{cx:d.toFixed(1),cy:l.toFixed(1),r:3,fill:"#00D6B4"},g)),t.map((d,l)=>{const g=o[l],[p,c]=nt(g,tt+18),f=ls(d.axis);return e("text",{x:p.toFixed(1),y:c.toFixed(1),textAnchor:"middle",dominantBaseline:"middle",fontSize:9,fill:"var(--text-2)",fontFamily:"Satoshi, system-ui, sans-serif",children:f},l)})]}),e("div",{style:{flex:1,minWidth:120},children:[t.map(d=>{const l=n>0?d.count/n:0;return e("div",{style:{marginBottom:8},children:[e("div",{style:{display:"flex",justifyContent:"space-between",fontSize:11,marginBottom:3},children:[e("span",{style:{color:"var(--text-1)"},children:ls(d.axis)}),e("span",{style:{color:"var(--accent)",fontFamily:"var(--mono)",fontSize:10},children:d.count})]}),e("div",{style:{height:3,background:"rgba(255,255,255,0.06)",borderRadius:2,overflow:"hidden"},children:e("div",{style:{width:`${(l*100).toFixed(1)}%`,height:"100%",background:"#00D6B4",borderRadius:2,transition:"width 0.3s"}})})]},d.axis)}),e("div",{style:{fontSize:10,color:"var(--text-3)",marginTop:6},children:a("radar.caption")})]})]})]})}function ca({data:t}){const{workSchedule:s,toolPreferences:n,focusAreas:o,workflow:i,strengths:r,learningAreas:u}=t,d=new Map;for(const c of s.hourDistribution)d.set(c.hour,c.count);const l=Math.max(1,...s.hourDistribution.map(c=>c.count)),g=[...s.hourDistribution].sort((c,f)=>f.count-c.count).slice(0,3).map(c=>`${c.hour.toString().padStart(2,"0")}:00`),p=[...s.dayDistribution].sort((c,f)=>f.count-c.count).slice(0,2).map(c=>c.day);return e("div",{class:"card",children:[e("div",{class:"card-title",children:a("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:a("patterns.workSchedule")}),e("div",{style:{display:"flex",gap:2,flexWrap:"wrap"},children:Array.from({length:24},(c,f)=>{const b=d.get(f)||0,h=b/l;return e("div",{title:`${f.toString().padStart(2,"0")}:00 — ${b}`,style:{width:18,height:18,borderRadius:"var(--radius-xs)",background:h>0?`rgba(0, 214, 180, ${.1+h*.7})`:"var(--bg-0)",border:"1px solid var(--border-subtle)",fontSize:8,display:"flex",alignItems:"center",justifyContent:"center",color:h>.5?"var(--bg-0)":"var(--text-3)",fontFamily:"var(--mono)"},children:f},f)})}),e("div",{style:{fontSize:11,color:"var(--text-3)",marginTop:6,fontFamily:"var(--mono)"},children:[a("patterns.peakHours"),": ",g.join(", "),p.length>0&&e("span",{children:[" · ",a("patterns.busiestDays"),": ",p.join(", ")]})]})]}),n.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:a("patterns.tools")}),e("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:n.slice(0,10).map(c=>e("span",{class:"tag",style:{fontSize:11,padding:"2px 8px"},children:[c.tool," ",e("span",{style:{opacity:.5},children:["(",c.sessions,")"]})]},c.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:a("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:i.avgSessionMinutes>0?`${Math.round(i.avgSessionMinutes)}m`:"—"}),e("div",{class:"stat-lbl",children:a("patterns.avgSession")})]}),e("div",{class:"stat",style:{padding:12},children:[e("div",{class:"stat-val",style:{fontSize:18},children:i.totalSessions>0?i.commitsPerSession.toFixed(1):"—"}),e("div",{class:"stat-lbl",children:a("patterns.commitsPerSession")})]})]})]}),o.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:a("patterns.focus")}),e("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:o.slice(0,12).map(c=>e("span",{class:"tag",style:{fontSize:11,padding:"2px 8px"},children:[c.type," ",e("span",{style:{opacity:.5},children:["(",c.count,")"]})]},c.type))})]}),(r.length>0||u.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:a("patterns.strengths")}),r.slice(0,5).map(c=>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:c.type}),e("span",{style:{fontFamily:"var(--mono)",fontSize:11,color:"var(--accent)"},children:[Math.round(c.avgConfidence*100),"%"]})]}),e("div",{style:{height:3,borderRadius:2,background:"var(--bg-0)"},children:e("div",{style:{height:"100%",width:`${Math.round(c.avgConfidence*100)}%`,borderRadius:2,background:"rgba(0, 214, 180, 0.5)",transition:"width 600ms ease-out"}})})]},c.type)),r.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:a("patterns.learning")}),u.slice(0,5).map(c=>e("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:6,fontSize:12},children:[e("span",{style:{color:"var(--text-1)"},children:c.tag}),e("span",{style:{fontFamily:"var(--mono)",fontSize:11,color:"var(--text-3)"},children:c.count})]},c.tag)),u.length===0&&e("div",{style:{fontSize:11,color:"var(--text-3)",fontStyle:"italic"},children:"—"})]})]})]})}const da={dreamer:"Weekly recap (dreamer)",pattern_detector:"Pattern detector",consolidator:"Consolidator",auto_tagger:"Auto-tagger",failure_analyzer:"Failure analyzer"};function cs(t){return`${Math.round(t*100)}%`}function ua(t){return t==null?"—":t<1e3?`${t}ms`:`${(t/1e3).toFixed(1)}s`}function ga(){const[t,s]=x(null),[n,o]=x(""),[i,r]=x(!0),[u,d]=x(30);return X(()=>{r(!0),o(""),U("GET",`/v1/telemetry?window=${u}`).then(l=>s(l)).catch(l=>o(l instanceof Error?l.message:String(l))).finally(()=>r(!1))},[u]),e("div",{class:"card",style:{padding:16},children:[e("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",marginBottom:8,flexWrap:"wrap",gap:8},children:[e("span",{class:"card-title",style:{margin:0},children:a("telemetry.title")}),e("div",{style:{display:"flex",gap:4,fontSize:12},children:[7,30,90].map(l=>e("button",{class:"btn btn-ghost",style:{padding:"2px 8px",fontSize:11,border:"1px solid "+(u===l?"var(--accent)":"var(--border)"),color:u===l?"var(--accent)":"var(--text-2)",background:u===l?"rgba(0,214,180,0.10)":"transparent"},onClick:()=>d(l),children:a("telemetry.lastNDays",{n:l})},l))})]}),i&&e("div",{style:{color:"var(--text-3)",fontSize:13},children:a("telemetry.loading")}),n&&e("div",{style:{color:"var(--danger)",fontSize:13},children:n}),!i&&!n&&t&&t.summaries.length===0&&e("div",{style:{color:"var(--text-2)",fontSize:13,padding:8},children:a("telemetry.empty")}),!i&&!n&&t&&t.summaries.length>0&&e("div",{style:{display:"flex",flexDirection:"column",gap:12},children:t.summaries.map(l=>{const g=l.total_attempts>0?l.successes/l.total_attempts:0,p=l.total_calls>0?l.fallback_used/l.total_calls:0,c=da[l.flow]??l.flow,f=Object.entries(l.by_provider),b=Object.entries(l.by_error_class).sort((h,m)=>m[1]-h[1]);return e("div",{style:{padding:12,background:"var(--bg-1)",borderRadius:4,borderLeft:`2px solid ${g>=.9?"var(--accent)":g>=.5?"#FFC800":"#FF5050"}`},children:[e("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",marginBottom:6},children:[e("span",{style:{fontWeight:600},children:c}),e("span",{style:{fontSize:12,color:"var(--text-3)"},children:[a("telemetry.callsCount",{n:l.total_calls})," · ",a("telemetry.attemptsCount",{n:l.total_attempts})]})]}),e("div",{style:{display:"flex",gap:16,flexWrap:"wrap",fontSize:13,marginBottom:6},children:[e("span",{children:[e("span",{style:{color:"var(--text-3)"},children:[a("telemetry.successRate"),": "]}),e("strong",{style:{color:g>=.9?"var(--accent)":g>=.5?"#FFC800":"#FF5050"},children:cs(g)})]}),e("span",{children:[e("span",{style:{color:"var(--text-3)"},children:[a("telemetry.medianLatency"),": "]}),e("strong",{children:ua(l.median_latency_ms)})]}),l.fallback_used>0&&e("span",{style:{color:"#FFC800"},children:["⚠️ ",a("telemetry.fallbackUsed",{n:l.fallback_used,pct:cs(p)})]})]}),f.length>0&&e("div",{style:{fontSize:12,color:"var(--text-2)",marginBottom:4},children:[a("telemetry.byProvider"),":"," ",f.map(([h,m])=>e("span",{class:"tag",style:{marginRight:6,fontSize:11},children:[h," ",m.ok,"/",m.ok+m.fail]},h))]}),b.length>0&&e("div",{style:{fontSize:12,color:"var(--text-2)"},children:[a("telemetry.errors"),":"," ",b.map(([h,m])=>e("span",{class:"tag",style:{marginRight:6,fontSize:11,background:h==="auth"?"rgba(255,80,80,0.12)":"rgba(255,200,0,0.10)",color:h==="auth"?"#FF5050":"#FFC800"},children:[h," ×",m]},h))]})]},l.flow)})})]})}function ha(){const[t,s]=x(null),[n,o]=x(null);if(X(()=>{U("GET","/v1/analytics/pm").then(u=>s(u.data)).catch(u=>o(String(u)))},[]),n)return console.warn("[PmAnalyticsPanel]",n),null;if(!t)return null;const i=(t.connectedness.orphanRate*100).toFixed(1),r=t.connectedness.orphanRate>.7?"#ef4444":t.connectedness.orphanRate>.4?"#f59e0b":"#22c55e";return e("div",{class:"card",style:{marginTop:8,padding:16},children:[e("div",{class:"card-title",style:{marginBottom:12},children:"PM Metrics"}),e("div",{style:{display:"grid",gridTemplateColumns:"repeat(4, 1fr)",gap:12},children:[e("div",{style:{textAlign:"center"},children:[e("div",{style:{fontSize:22,fontWeight:700,fontFamily:"var(--font-mono)"},children:t.velocity.decisionsPerWeek.toFixed(1)}),e("div",{style:{fontSize:11,color:"var(--text-2)",marginTop:2},children:"decisions/week"})]}),e("div",{style:{textAlign:"center"},children:[e("div",{style:{fontSize:22,fontWeight:700,fontFamily:"var(--font-mono)"},children:t.staleness.openDecisionCount}),e("div",{style:{fontSize:11,color:"var(--text-2)",marginTop:2},children:"open decisions (>14d)"})]}),e("div",{style:{textAlign:"center"},children:[e("div",{style:{fontSize:22,fontWeight:700,fontFamily:"var(--font-mono)",color:r},children:[i,"%"]}),e("div",{style:{fontSize:11,color:"var(--text-2)",marginTop:2},children:"KG orphan rate"})]}),e("div",{style:{textAlign:"center"},children:[e("div",{style:{fontSize:22,fontWeight:700,fontFamily:"var(--font-mono)"},children:t.connectedness.totalRelations}),e("div",{style:{fontSize:11,color:"var(--text-2)",marginTop:2},children:"relations total"})]})]}),t.staleness.stalePlanCount>0&&e("div",{style:{marginTop:10,fontSize:12,color:"#f59e0b"},children:[t.staleness.stalePlanCount," plan",t.staleness.stalePlanCount>1?"s":""," not reviewed in 30+ days"]})]})}function ma(){const[t,s]=x(null),[n,o]=x(null),[i,r]=x(null),[u,d]=x(!0),l=be(()=>{d(!0),Promise.all([U("GET","/v1/stats").catch(()=>null),U("GET","/v1/analytics").catch(()=>null),U("GET","/v1/patterns").catch(()=>null)]).then(([g,p,c])=>{s(g),o(p),r(c)}).finally(()=>d(!1))},[]);return X(()=>{l()},[l]),u?e("div",{class:"empty",children:e("div",{class:"loading"})}):!t&&!n?e("div",{class:"error-box",children:[a("common.error"),": ",a("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:a("analytics.totalMemories")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",children:t.totalObservations.toLocaleString()}),e("div",{class:"stat-lbl",children:a("analytics.knowledgeFacts")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",children:t.totalRelations.toLocaleString()}),e("div",{class:"stat-lbl",children:a("analytics.connections")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",children:t.totalTags.toLocaleString()}),e("div",{class:"stat-lbl",children:a("analytics.topics")})]})]}),n&&e("div",{style:{marginTop:8},children:e(Xn,{metric:n.loopMetric})}),n&&e("div",{style:{marginTop:8},children:e(Kn,{score:n.healthScore,factors:n.healthFactors})}),n&&e("div",{style:{marginTop:8},children:e(sa,{data:n.timeline})}),n&&e("div",{style:{marginTop:8,display:"grid",gridTemplateColumns:"minmax(0, 1.4fr) minmax(0, 1fr)",gap:8},children:[e(oa,{data:n.ageMatrix??[]}),e(la,{data:n.knowledgeRadar??[]})]}),i&&e("div",{style:{marginTop:8},children:e(ca,{data:i})}),e("div",{style:{marginTop:8},children:e(ga,{})}),e(ha,{}),t&&(()=>{const g=["auto_saved","auto-tracked","session_end","session:","source:","scope:","date:","urgency:"],p=t.tagDistribution.filter(c=>!g.some(f=>c.tag.startsWith(f))&&!/^\d{4}-\d{2}-\d{2}/.test(c.tag));return p.length>0?e("div",{class:"card",style:{marginTop:8},children:[e("div",{class:"card-title",children:a("analytics.topics")}),e("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:p.slice(0,30).map(c=>e("span",{class:"tag",style:{fontSize:Math.max(11,Math.min(15,10+Math.log2(c.count+1)))+"px"},children:[c.tag," ",e("span",{style:{opacity:.5},children:["(",c.count,")"]})]},c.tag))})]}):null})()]})}function ds(t){return t&&t.charAt(0).toUpperCase()+t.slice(1)}function us(t,s){if(!s)return"—";const n=new Date(s);return Number.isNaN(n.getTime())?s:n.toLocaleString(t)}function pa(t){switch(t){case"npm-global":return a("settings.installNpmGlobal");case"npm-local":return a("settings.installNpmLocal");case"source-checkout":return a("settings.installSourceCheckout");default:return a("settings.installUnknown")}}function fa(t){switch(t){case"npm-global":return a("settings.updateGuidanceNpmGlobal");case"npm-local":return a("settings.updateGuidanceNpmLocal");case"source-checkout":return a("settings.updateGuidanceSourceCheckout");default:return a("settings.updateGuidanceUnknown")}}function ya({locale:t,onLocaleChange:s}){const[n,o]=x(null),[i,r]=x(null),[u,d]=x(""),[l,g]=x(""),[p,c]=x(""),[f,b]=x(""),[h,m]=x(""),[w,k]=x(!1),[y,A]=x(!1),[C,B]=x(""),[z,Q]=x(null),[q,te]=x(!1),[ne,M]=x(!0),[F,$]=x(!0),[ce,ee]=x(!1);async function ke(D=!0,V=!1){V?ee(!0):$(!0);try{const pe=await U("GET",D?"/v1/update-status":"/v1/update-status?cached=1");r(pe)}catch{V||r(null)}finally{V?ee(!1):$(!1)}}X(()=>{let D=!1;return U("GET","/v1/config").then(V=>{o(V);const R=V.config.llm?.provider||"",pe=V.config.llm?.model||"";d(R),c(pe),b(R),m(pe),k(!!V.config.llm?.apiKey)}).finally(()=>M(!1)),(async()=>(await ke(!1),D||ke(!0,!0)))(),()=>{D=!0}},[]);async function ue(){te(!0),B(""),Q(null);try{const D=await U("POST","/v1/config/test",{provider:u,...l?{apiKey:l}:{}});Q(D),D.valid&&!p&&D.suggested&&c(D.suggested)}catch(D){Q({valid:!1,error:D.message})}finally{te(!1)}}function H(D){d(D),Q(null),c("")}function O(D){g(D),Q(null)}async function v(){A(!0),B("");try{const D={provider:u};p&&(D.model=p),l&&(D.apiKey=l),await U("POST","/v1/config",{llm:D}),B(a("settings.saved")),l&&k(!0),g(""),Q(null),b(u),m(p)}catch(D){B(a("common.error")+": "+D.message)}finally{A(!1)}}async function T(){if(confirm(a("settings.removeProviderConfirm"))){A(!0),B("");try{await U("POST","/v1/config",{llm:null}),d(""),c(""),g(""),b(""),m(""),k(!1),Q(null),B(a("settings.providerRemoved"))}catch(D){B(a("common.error")+": "+D.message)}finally{A(!1)}}}if(ne)return e("div",{class:"empty",children:e("div",{class:"loading"})});const W=n?.capabilities,oe=W?.searchLevel?a("settings.smartMode"):a("settings.core"),G=F||ce&&!i,ve=F||ce,ye=!!i?.currentVersionDeprecated,_=!!(i?.latestVersion&&i.latestVersion!==i.currentVersion),E=!!(ye&&i?.latestVersion&&i.latestVersion===i.currentVersion&&i?.freshness==="fresh"),P=!!(i?.checkSucceeded&&i?.lastError),I=G?a("settings.updateChecking"):i?ye?a(_?"settings.updateAvailable":E?"settings.updateDeprecatedNoTarget":"settings.updateDeprecatedTargetUnknown"):i.freshness==="unavailable"?a("settings.updateNoSuccessfulChecks"):!i.checkSucceeded&&i.freshness==="stale"?a("settings.updateStale"):!i.checkSucceeded&&i.freshness==="cached"?a("settings.updateCachedFallback"):i.updateAvailable?a("settings.updateAvailable"):a(P?"settings.updatePartialSummary":"settings.upToDate"):a("settings.updateUnavailable"),j=i?ye?"var(--danger)":i.freshness==="unavailable"||!i.checkSucceeded&&i.freshness==="stale"?"var(--warning)":!i.checkSucceeded&&i.freshness==="cached"||i.updateAvailable?"var(--info)":P?"var(--warning)":"var(--success)":"var(--warning)",K=i?.freshness==="stale"?a("settings.updateSourceStale"):i?.source==="cache"?a("settings.updateSourceCached"):i?.source==="fresh"?a("settings.updateSourceFresh"):a("settings.updateSourceUnavailable"),Y=pa(i?.installChannel),me=fa(i?.installChannel),de=G?a("common.loading"):us(t,i?.lastAttemptAt||null),we=G?a("common.loading"):us(t,i?.lastSuccessfulCheckAt||null),xe=!!i?.lastSuccessfulCheckAt,Be=!!i?.lastError&&!G;return e("div",{children:[e("div",{class:"card",children:[e("div",{class:"card-title",children:a("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:oe}),e("div",{class:"stat-lbl",children:a("settings.searchMode")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",style:{fontSize:14},children:ds(W?.embeddings||"—")}),e("div",{class:"stat-lbl",children:a("settings.embeddings")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",style:{fontSize:14},children:ds(W?.llm?.provider||a("settings.none"))}),e("div",{class:"stat-lbl",children:a("settings.llmProvider")})]})]})]}),e("div",{class:"card",children:[e("div",{class:"card-title",children:a("settings.llmProvider")}),e("div",{style:{padding:"10px 12px",marginBottom:14,background:"var(--bg-elevated)",border:"1px solid var(--border-subtle)",borderRadius:6,fontSize:12,lineHeight:1.55,color:"var(--text-2)"},children:[e("div",{style:{fontWeight:600,color:"var(--text-1)",marginBottom:4},children:a("settings.llmOptional.title")}),e("div",{style:{marginBottom:6},children:a("settings.llmOptional.body")}),e("div",{children:[e("strong",{children:a("settings.llmOptional.coreLabel")})," — ",a("settings.llmOptional.coreFeatures")]}),e("div",{children:[e("strong",{children:a("settings.llmOptional.smartLabel")})," — ",a("settings.llmOptional.smartFeatures")]})]}),e("form",{onSubmit:D=>{D.preventDefault(),v()},children:[e("div",{style:{display:"flex",gap:16,marginBottom:14},children:[["anthropic","Anthropic (Claude)"],["openai","OpenAI"],["ollama","Ollama (Local)"]].map(([D,V])=>e("label",{style:{display:"flex",alignItems:"center",gap:5,cursor:"pointer",fontSize:13},children:[e("input",{type:"radio",name:"provider",value:D,checked:u===D,onChange:()=>H(D)}),V]},D))}),u&&u!=="ollama"&&e("div",{style:{marginBottom:12},children:[e("label",{style:{fontSize:12,color:"var(--text-2)",display:"block",marginBottom:4},children:a("settings.apiKey")}),e("div",{style:{display:"flex",gap:8},children:[e("input",{type:"password",autoComplete:"off",placeholder:u==="anthropic"?"sk-ant-api03-…":"sk-…",value:l,onInput:D=>O(D.target.value),style:{flex:1}}),e("button",{type:"button",class:"btn",onClick:()=>void ue(),disabled:u===""||q||u!=="ollama"&&l==="",style:{flexShrink:0},children:a(q?"settings.testing":"settings.test")})]})]}),u==="ollama"&&e("div",{style:{marginBottom:12},children:e("button",{type:"button",class:"btn",onClick:()=>void ue(),disabled:q,children:a(q?"settings.testing":"settings.test")})}),z&&e("div",{style:{marginBottom:12,padding:"8px 10px",borderRadius:4,fontSize:12,background:z.valid?"rgba(0, 214, 180, 0.08)":"rgba(255, 107, 107, 0.08)",border:`1px solid ${z.valid?"rgba(0, 214, 180, 0.4)":"rgba(255, 107, 107, 0.4)"}`,color:z.valid?"#00D6B4":"#ff6b6b"},children:z.valid?a("settings.testPassed",{count:z.models?.length??0}):`✗ ${z.error||a("settings.testFailed")}`}),z?.valid&&z.models&&z.models.length>0&&e("div",{style:{marginBottom:14},children:[e("label",{style:{fontSize:12,color:"var(--text-2)",display:"block",marginBottom:4},children:[a("settings.model"),z.suggested&&e("span",{style:{marginLeft:6,color:"var(--text-3)",fontWeight:400},children:["(",a("settings.suggested"),": ",e("span",{style:{color:"var(--accent)"},children:z.suggested}),")"]})]}),e("select",{value:p,onChange:D=>c(D.target.value),style:{width:"100%"},children:z.models.map(D=>e("option",{value:D.id,children:[D.id,D.created?` — ${D.created.slice(0,10)}`:""]},D.id))})]}),(()=>{const V=(u!==f||!!l||p!==h)&&!z?.valid;return e("div",{style:{display:"flex",gap:10,alignItems:"center",flexWrap:"wrap"},children:[e("button",{class:"btn btn-primary",type:"submit",disabled:!u||y||V,children:a(y?"settings.saving":"settings.save")}),w&&e("button",{type:"button",class:"btn",onClick:T,disabled:y,style:{borderColor:"var(--danger)",color:"var(--danger)",background:"transparent"},title:a("settings.removeProviderHint"),children:a("settings.removeProvider")}),V&&e("span",{style:{fontSize:11,color:"var(--text-3)"},children:a("settings.testRequired")}),C&&e("span",{style:{fontSize:12,color:C.startsWith(a("common.error"))?"var(--danger)":"var(--success)"},children:C})]})})()]})]}),e("div",{class:"card",children:[e("div",{class:"card-title",children:a("settings.updates")}),i?.currentVersionDeprecated&&i.deprecationMessage&&e("div",{style:{background:"rgba(255, 107, 107, 0.08)",border:"1px solid rgba(255, 107, 107, 0.4)",borderRadius:4,padding:"10px 12px",marginBottom:12,fontSize:12,color:"var(--text-0)",lineHeight:1.55},"data-testid":"settings-deprecation-warning",children:[e("strong",{style:{color:"#ff6b6b"},children:a("settings.updateDeprecatedTitle",{version:i.currentVersion})}),e("div",{style:{marginTop:4,opacity:.9},children:i.deprecationMessage})]}),i&&i.checkSucceeded&&i.lastError&&e("div",{style:{background:"rgba(255, 200, 87, 0.08)",border:"1px solid rgba(255, 200, 87, 0.4)",borderRadius:4,padding:"10px 12px",marginBottom:12,fontSize:12,color:"var(--text-0)",lineHeight:1.55},"data-testid":"settings-update-partial-warning",children:[e("strong",{style:{color:"var(--warning)"},children:a("settings.updatePartialTitle")}),e("div",{style:{marginTop:4,opacity:.9},children:a("settings.updatePartialDescription",{message:i.lastError??""})})]}),e("div",{style:{display:"flex",justifyContent:"space-between",gap:16,alignItems:"baseline",marginBottom:12,flexWrap:"wrap"},children:[e("div",{style:{color:j,fontSize:13,fontWeight:600},children:I}),e("div",{style:{display:"flex",gap:10,alignItems:"center",flexWrap:"wrap"},children:[!G&&i&&e("div",{style:{fontSize:11,color:"var(--text-2)"},children:K}),e("button",{class:"btn btn-sm",type:"button",onClick:()=>{ke(!0,!!i)},disabled:ve,children:a(ve?"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:a("settings.installMethod")}),e("span",{style:{color:"var(--text-0)"},children:G?a("common.loading"):Y})]}),e("div",{style:{display:"flex",justifyContent:"space-between",gap:16,fontSize:12},children:[e("span",{style:{color:"var(--text-2)"},children:a("settings.currentVersion")}),e("span",{style:{color:"var(--text-0)",fontFamily:"var(--mono)"},children:i?.currentVersion||"—"})]}),e("div",{style:{display:"flex",justifyContent:"space-between",gap:16,fontSize:12},children:[e("span",{style:{color:"var(--text-2)"},children:a("settings.latestVersion")}),e("span",{style:{color:"var(--text-0)",fontFamily:"var(--mono)"},children:i?.latestVersion||"—"})]}),e("div",{style:{display:"flex",justifyContent:"space-between",gap:16,fontSize:12},children:[e("span",{style:{color:"var(--text-2)"},children:a("settings.lastAttempted")}),e("span",{style:{color:"var(--text-0)"},children:de})]}),xe&&e("div",{style:{display:"flex",justifyContent:"space-between",gap:16,fontSize:12},children:[e("span",{style:{color:"var(--text-2)"},children:a("settings.lastSuccessful")}),e("span",{style:{color:"var(--text-0)"},children:we})]}),!F&&e("div",{style:{color:"var(--text-2)",fontSize:12,lineHeight:1.5,marginTop:2},children:me}),Be&&e("div",{style:{color:"var(--warning)",fontSize:12,lineHeight:1.5},children:a("settings.updateLastError",{message:i?.lastError||""})}),i?.recommendedCommand&&e("div",{style:{display:"grid",gap:6,marginTop:4},children:[e("span",{style:{color:"var(--text-2)",fontSize:12},children:a("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:i.recommendedCommand})]})]})]}),e("div",{class:"card",children:[e("div",{class:"card-title",children:a("settings.behaviourTitle")}),e("div",{style:{marginTop:8},children:[e("label",{style:{fontSize:12,color:"var(--text-2)",display:"block",marginBottom:4},children:a("settings.autoUpdateLabel")}),e("select",{value:n?.config.autoUpdate??"off",onChange:async D=>{const V=D.target.value;try{await U("POST","/v1/config",{autoUpdate:V}),o(R=>R&&{...R,config:{...R.config,autoUpdate:V}})}catch{}},style:{fontSize:13,padding:"6px 10px",borderRadius:6,border:"1px solid var(--border)",background:"var(--surface)",color:"var(--text-1)",cursor:"pointer"},children:[e("option",{value:"off",children:a("settings.autoUpdateOff")}),e("option",{value:"patch",children:a("settings.autoUpdatePatch")}),e("option",{value:"minor",children:a("settings.autoUpdateMinor")}),e("option",{value:"major",children:a("settings.autoUpdateMajor")})]}),e("div",{style:{fontSize:11,color:"var(--text-3)",marginTop:4},children:a("settings.autoUpdateHint")})]}),e("div",{style:{marginTop:16,paddingTop:14,borderTop:"1px solid var(--border-subtle)"},children:e("label",{style:{display:"flex",alignItems:"flex-start",gap:8,cursor:"pointer"},children:[e("input",{type:"checkbox",checked:!!n?.config.enableAgenticOrchestration,onChange:async D=>{const V=D.target.checked;try{await U("POST","/v1/config",{enableAgenticOrchestration:V}),o(R=>R&&{...R,config:{...R.config,enableAgenticOrchestration:V}})}catch{}},style:{marginTop:2}}),e("span",{children:[e("span",{style:{fontSize:13,color:"var(--text-1)"},children:a("settings.agenticLabel")}),e("div",{style:{fontSize:11,color:"var(--text-3)",marginTop:2},children:a("settings.agenticHint")})]})]})})]}),e("div",{class:"card",children:[e("div",{class:"card-title",children:a("settings.language")}),e("select",{value:t,onChange:D=>{const V=D.target.value;yn(V),s(V)},style:{fontSize:13,padding:"6px 10px",borderRadius:6,border:"1px solid var(--border)",background:"var(--surface)",color:"var(--text-1)",cursor:"pointer"},children:bn().map(D=>e("option",{value:D.code,children:D.name},D.code))})]})]})}const ba={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"},va="#B8BEC6";function gs(t){return ba[t]||va}function ka(t){const s=Math.max(0,Math.min(1,(t-.15)/.85)),n=Math.round(248+-248*s),o=Math.round(113+101*s),i=Math.round(113+67*s);return`rgb(${n},${o},${i})`}function xa(t){const s=t??0;return s===0?5:Math.min(14,5+Math.log2(s+1)*2)}function wa(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 Ma(t){const s=Date.now()-new Date(t).getTime(),n=Math.floor(s/864e5);return n<1?a("graph.ageToday"):n<7?a("graph.ageDaysAgo",{count:n}):n<30?a("graph.ageWeeksAgo",{count:Math.floor(n/7)}):a("graph.ageDaysAgo",{count:n})}const hs=440,at=4;function _a(){const[t,s]=x(null),[n,o]=x(!0),[i,r]=x(""),[u,d]=x({}),[l]=Ht(),[g,p]=x(""),[c,f]=x(null),[b,h]=x(!1),m=ie(null),w=ie([]),k=ie([]),y=ie(0),A=ie({scale:1,panX:0,panY:0}),C=ie({active:!1,startScreenX:0,startScreenY:0,startPanX:0,startPanY:0,moved:!1}),B=ie({node:null,offsetX:0,offsetY:0,startX:0,startY:0,dragged:!1}),z=ie(null),Q=ie({x:0,y:0,node:null}),q=ie(800),te=ie(u),ne=ie(g),M=ie(c),F=ie(b);X(()=>{te.current=u},[u]),X(()=>{if(!t)return;const _=new Set(t.noiseTypes??[]);d(E=>{const P={...E};let I=!1;for(const j of _){const K=!l;P[j]!==K&&(P[j]=K,I=!0)}return I?P:E})},[l,t]),X(()=>{ne.current=g},[g]),X(()=>{M.current=c},[c]),X(()=>{F.current=b},[b]),X(()=>{Sn().then(_=>{s(_);const E=new Set(_.noiseTypes??[]),P={};_.entities.forEach(I=>{P[I.type]=P[I.type]??(l?!E.has(I.type):!0)}),d(P)}).catch(_=>r(_.message)).finally(()=>o(!1))},[]),X(()=>{if(!t||n)return;const _=m.current;if(!_)return;const E=_.parentElement?.getBoundingClientRect(),P=E?Math.floor(E.width)-24:800,I=hs,j=window.devicePixelRatio||1;_.width=P*j,_.height=I*j,_.style.width=P+"px",_.style.height=I+"px",q.current=P;const K=new Set;t.relations.forEach(R=>{K.add(R.from),K.add(R.to)});const Y=new Map;t.entities.forEach(R=>{const pe=R.last_accessed_at||R.created_at;Y.set(R.name,{id:R.name,type:R.type,x:Math.random()*P*.8+P*.1,y:Math.random()*I*.8+I*.1,vx:0,vy:0,radius:xa(R.access_count),recency:wa(pe),isOrphan:!K.has(R.name),lastDate:pe})}),w.current=Array.from(Y.values()),k.current=t.relations.filter(R=>Y.has(R.from)&&Y.has(R.to));const me=R=>{if(te.current[R.type]===!1)return!1;const L=M.current;return L?R.id===L?!0:k.current.some(Fe=>Fe.from===L&&Fe.to===R.id||Fe.to===L&&Fe.from===R.id):!0},de=R=>{const pe=Y.get(R.from),L=Y.get(R.to);return!pe||!L?!1:me(pe)&&me(L)},we=R=>{const pe=ne.current.toLowerCase();return pe?R.id.toLowerCase().includes(pe):!1};let xe=1;const Be=.005,D=()=>{xe=.3};window.__graphReheat=D;const V=()=>{const R=w.current,pe=k.current,L=_.getContext("2d");if(!L)return;const Le=window.devicePixelRatio||1;xe=Math.max(0,xe-Be);const Fe=xe>0,Bt=.85,$s=2e3*xe,Gs=80,Ks=.02*xe,zt=.02*xe,Ys=R.length>200,Nt=P/2,jt=I/2,Xe=new Map(R.map(S=>[S.id,S]));if(Fe){for(let S=0;S<R.length;S++)for(let N=S+1;N<R.length;N++){const J=R[N].x-R[S].x,fe=R[N].y-R[S].y,ge=J*J+fe*fe;if(Ys&&ge>9e4)continue;const he=Math.sqrt(ge)||1,Te=$s/(he*he),Ae=J/he*Te,Ie=fe/he*Te;R[S].vx-=Ae,R[S].vy-=Ie,R[N].vx+=Ae,R[N].vy+=Ie}for(const S of pe){const N=Xe.get(S.from),J=Xe.get(S.to);if(!N||!J)continue;const fe=J.x-N.x,ge=J.y-N.y,he=Math.sqrt(fe*fe+ge*ge)||1,Te=(he-Gs)*Ks,Ae=fe/he*Te,Ie=ge/he*Te;N.vx+=Ae,N.vy+=Ie,J.vx-=Ae,J.vy-=Ie}for(const S of R)S.vx+=(Nt-S.x)*zt,S.vy+=(jt-S.y)*zt}let qe=B.current.node;if(qe&&!R.includes(qe)&&(B.current.node=null,qe=null),!(!Fe&&!qe&&R.every(S=>S.vx===0&&S.vy===0)))for(const S of R){if(qe===S)continue;S.vx*=Bt,S.vy*=Bt,Math.abs(S.vx)<.01&&Math.abs(S.vy)<.01&&(S.vx=0,S.vy=0),S.x+=S.vx,S.y+=S.vy;const N=100;S.x<-N?S.x=-N:S.x>P+N&&(S.x=P+N),S.y<-N?S.y=-N:S.y>I+N&&(S.y=I+N)}const Ot=ne.current.toLowerCase();if(Ot){const S=R.filter(N=>N.id.toLowerCase().includes(Ot));if(S.length===1){const N=S[0],J=Nt-N.x,fe=jt-N.y,ge=.05;for(const he of R)he.x+=J*ge,he.y+=fe*ge}}L.setTransform(Le,0,0,Le,0,0),L.clearRect(0,0,P,I);const Ze=A.current;L.setTransform(Ze.scale*Le,0,0,Ze.scale*Le,Ze.panX*Le,Ze.panY*Le);const Wt=pe.filter(de),Xs=Wt.length<30;for(const S of Wt){const N=Xe.get(S.from),J=Xe.get(S.to);if(!N||!J)continue;const fe=Math.min(N.recency,J.recency)*.6;if(L.globalAlpha=fe,L.strokeStyle="rgba(0, 214, 180, 0.4)",L.lineWidth=1,L.setLineDash([]),L.beginPath(),L.moveTo(N.x,N.y),L.lineTo(J.x,J.y),L.stroke(),Xs){const ge=(N.x+J.x)/2,he=(N.y+J.y)/2;L.font="9px Satoshi, system-ui, sans-serif",L.fillStyle="#7A828E",L.fillText(S.type,ge+2,he-2)}}L.globalAlpha=1;const Zs=R.filter(me),Qs=z.current;for(const S of Zs){const N=Qs===S,J=we(S),fe=M.current===S.id,ge=fe?10:N?9:S.radius,he=N||J?1:S.recency;if(L.globalAlpha=he,L.beginPath(),L.arc(S.x,S.y,ge,0,Math.PI*2),L.fillStyle=F.current?ka(S.recency):gs(S.type),L.fill(),S.isOrphan&&(L.setLineDash([3,3]),L.strokeStyle="#4A5260",L.lineWidth=1,L.stroke(),L.setLineDash([])),J&&(L.globalAlpha=1,L.strokeStyle="#00F0CA",L.lineWidth=2,L.beginPath(),L.arc(S.x,S.y,ge+3,0,Math.PI*2),L.stroke()),N&&!J&&(L.globalAlpha=1,L.strokeStyle="#fff",L.lineWidth=2,L.beginPath(),L.arc(S.x,S.y,ge,0,Math.PI*2),L.stroke()),N||J||fe){L.globalAlpha=1,L.fillStyle="#B8BEC6",L.font="10px Satoshi, system-ui, sans-serif";const Ae=J||fe?S.id:S.id.length>20?S.id.slice(0,18)+"...":S.id;L.fillText(Ae,S.x+ge+4,S.y+3)}}L.globalAlpha=1;const De=Q.current;if(De.node&&me(De.node)){L.setTransform(Le,0,0,Le,0,0);const S=De.x+12,N=De.y-10,J=De.node.id,fe=De.node.type,ge=Ma(De.node.lastDate),he=J,Te=`${fe} | ${ge}`;L.font="11px Satoshi, system-ui, sans-serif";const Ae=L.measureText(he).width,Ie=L.measureText(Te).width,Js=Math.max(Ae,Ie)+12,en=34;L.fillStyle="rgba(13, 16, 20, 0.92)",L.strokeStyle="rgba(0, 214, 180, 0.3)",L.lineWidth=1,L.beginPath(),L.roundRect(S-4,N-18,Js,en,4),L.fill(),L.stroke(),L.fillStyle="#F0F2F4",L.fillText(he,S,N-4),L.fillStyle="#7A828E",L.font="10px Geist Mono, JetBrains Mono, monospace",L.fillText(Te,S,N+10)}y.current=requestAnimationFrame(V)};return y.current=requestAnimationFrame(V),()=>cancelAnimationFrame(y.current)},[t,n]);const $=be((_,E)=>{const P=w.current,I=te.current,j=M.current,Y=12/(A.current.scale||1),me=Y*Y;for(let de=P.length-1;de>=0;de--){const we=P[de];if(I[we.type]===!1||j&&we.id!==j&&!k.current.some(V=>V.from===j&&V.to===we.id||V.to===j&&V.from===we.id))continue;const xe=we.x-_,Be=we.y-E;if(xe*xe+Be*Be<me)return we}return null},[]),ce=be(_=>{const E=m.current;if(!E)return{x:0,y:0};const P=E.getBoundingClientRect();return{x:_.clientX-P.left,y:_.clientY-P.top}},[]),ee=be((_,E)=>{const P=A.current;return{x:(_-P.panX)/P.scale,y:(E-P.panY)/P.scale}},[]),ke=be(_=>{const E=ce(_),P=ee(E.x,E.y),I=$(P.x,P.y);if(I)window.__graphReheat?.(),B.current={node:I,offsetX:P.x-I.x,offsetY:P.y-I.y,startX:E.x,startY:E.y,dragged:!1},C.current.active=!1;else{const j=A.current;C.current={active:!0,startScreenX:E.x,startScreenY:E.y,startPanX:j.panX,startPanY:j.panY,moved:!1},B.current={node:null,offsetX:0,offsetY:0,startX:E.x,startY:E.y,dragged:!1};const K=m.current;K&&(K.style.cursor="grabbing")}},[$,ce,ee]),ue=be(_=>{const E=ce(_),P=ee(E.x,E.y),I=B.current,j=C.current;if(I.node){const me=E.x-I.startX,de=E.y-I.startY;me*me+de*de>at*at&&(I.dragged=!0),I.node.x=P.x-I.offsetX,I.node.y=P.y-I.offsetY,I.node.vx=0,I.node.vy=0}else if(j.active){const me=E.x-j.startScreenX,de=E.y-j.startScreenY;me*me+de*de>at*at&&(j.moved=!0),A.current.panX=j.startPanX+me,A.current.panY=j.startPanY+de}const K=$(P.x,P.y);z.current=K,Q.current=K?{x:E.x,y:E.y,node:K}:{x:0,y:0,node:null};const Y=m.current;Y&&(I.node||j.active?Y.style.cursor="grabbing":K?Y.style.cursor=M.current?"pointer":"grab":Y.style.cursor="grab")},[$,ce,ee]),H=be(_=>{const E=B.current,P=C.current,I=ce(_),j=ee(I.x,I.y);E.node&&!E.dragged?f(Y=>Y===E.node.id?null:E.node.id):!E.node&&P.active&&!P.moved&&($(j.x,j.y)||f(null)),B.current={node:null,offsetX:0,offsetY:0,startX:0,startY:0,dragged:!1},C.current.active=!1,C.current.moved=!1;const K=m.current;if(K){const Y=$(j.x,j.y);K.style.cursor=Y&&M.current?"pointer":"grab"}},[$,ce,ee]),O=be(()=>{B.current={node:null,offsetX:0,offsetY:0,startX:0,startY:0,dragged:!1},C.current.active=!1,C.current.moved=!1,z.current=null,Q.current={x:0,y:0,node:null};const _=m.current;_&&(_.style.cursor="default")},[]),v=be(_=>{_.preventDefault();const E=m.current;if(!E)return;const P=E.getBoundingClientRect(),I=_.clientX-P.left,j=_.clientY-P.top,K=A.current,Y=K.scale,me=Math.exp(-_.deltaY*.0015),de=Math.max(.25,Math.min(4,Y*me));if(de===Y)return;const we=(I-K.panX)/Y,xe=(j-K.panY)/Y;K.scale=de,K.panX=I-we*de,K.panY=j-xe*de},[]),T=be(()=>{A.current={scale:1,panX:0,panY:0}},[]);if(X(()=>{if(n||!t)return;const _=m.current;if(!_)return;const E=P=>v(P);return _.addEventListener("wheel",E,{passive:!1}),()=>_.removeEventListener("wheel",E)},[t,n,v]),n)return e("div",{class:"empty",children:e("div",{class:"loading"})});if(i)return e("div",{class:"error-box",children:[a("common.error"),": ",i]});if(!t)return e("div",{class:"error-box",children:[a("common.error"),": ",a("common.noData")]});const W=new Map;t.entities.forEach(_=>W.set(_.type,(W.get(_.type)||0)+1));const oe=new Set;t.relations.forEach(_=>{oe.add(_.from),oe.add(_.to)});const G=t.entities.filter(_=>!oe.has(_.name)).length,ve=g?t.entities.filter(_=>_.name.toLowerCase().includes(g.toLowerCase())).length:0,ye=c?t.entities.find(_=>_.name===c):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:a("graph.entities")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",children:t.relations.length.toLocaleString()}),e("div",{class:"stat-lbl",children:a("graph.relations")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",children:G.toLocaleString()}),e("div",{class:"stat-lbl",children:a("graph.orphans")})]})]}),e("div",{class:"card",style:{padding:12},children:[e("div",{style:{display:"flex",alignItems:"center",gap:12,marginBottom:8,flexWrap:"nowrap",overflowX:"auto",paddingBottom:4,scrollbarWidth:"thin"},children:[e("span",{class:"card-title",style:{margin:0,flexShrink:0},children:a("tab.graph")}),Array.from(W.entries()).map(([_,E])=>{const P=u[_]!==!1,I=gs(_);return e("label",{style:{display:"inline-flex",alignItems:"center",gap:4,fontSize:11,color:"#B8BEC6",opacity:P?1:.4,cursor:"pointer",userSelect:"none"},children:[e("input",{type:"checkbox",checked:P,onChange:()=>d(j=>({...j,[_]:!j[_]})),style:{accentColor:I,width:13,height:13,cursor:"pointer"}}),e("span",{style:{width:8,height:8,borderRadius:"50%",background:I,display:"inline-block",flexShrink:0}}),_," (",E,")"]},_)})]}),e("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:8,flexWrap:"wrap"},children:[e("input",{type:"text",placeholder:a("graph.search"),value:g,onInput:_=>p(_.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"}}),g&&e("span",{style:{fontSize:11,fontFamily:"Geist Mono, JetBrains Mono, monospace",color:"#7A828E"},children:[ve," ",a("graph.matches")]}),e("button",{onClick:T,title:a("graph.resetViewHint"),style:{marginLeft:"auto",padding:"3px 10px",background:"rgba(255,255,255,0.04)",border:"1px solid rgba(255,255,255,0.08)",borderRadius:4,color:"#7A828E",fontSize:11,cursor:"pointer"},children:a("graph.resetView")}),e("button",{onClick:()=>h(_=>!_),style:{padding:"3px 10px",background:b?"rgba(0,214,180,0.15)":"rgba(255,255,255,0.04)",border:`1px solid ${b?"rgba(0,214,180,0.4)":"rgba(255,255,255,0.08)"}`,borderRadius:4,color:b?"#00D6B4":"#7A828E",fontSize:11,cursor:"pointer",display:"flex",alignItems:"center",gap:6},children:[e("span",{style:{display:"inline-block",width:32,height:6,borderRadius:3,background:"linear-gradient(to right, #F87171, #00D6B4)"}}),"Drift"]})]}),ye&&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:[a("graph.focusMode"),":"]}),e("span",{style:{color:"#F0F2F4"},children:ye.name}),e("button",{onClick:()=>f(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:a("graph.showAll")})]}),!c&&e("div",{style:{fontSize:11,color:"#4A5260",marginBottom:6},children:a("graph.interactHint")}),e("canvas",{ref:m,style:{width:"100%",height:hs,borderRadius:"var(--radius-sm)",background:"#080A0C",cursor:"grab"},onMouseDown:ke,onMouseMove:ue,onMouseUp:H,onMouseLeave:O})]})]})}function je({type:t,children:s}){return e("span",{style:{display:"inline-flex",alignItems:"center",gap:6},children:[e(Ke,{type:t,size:16}),s]})}function Sa(t){const s=[];let n=null;for(const o of t){const i=o.trim();i.startsWith("Error:")?(n&&s.push(n),n={error:i.slice(6).trim(),rootCause:"",fix:"",prevention:""}):i.startsWith("Root cause:")?(n||(n={error:"",rootCause:"",fix:"",prevention:""}),n.rootCause=i.slice(11).trim()):i.startsWith("Fix:")||i.startsWith("Solution")?(n||(n={error:"",rootCause:"",fix:"",prevention:""}),n.fix=i.replace(/^(Fix|Solution\s*\d*):/i,"").trim()):i.startsWith("Prevention:")&&(n||(n={error:"",rootCause:"",fix:"",prevention:""}),n.prevention=i.slice(11).trim())}return n&&s.push(n),s}function Ca(t){const s=t.observations??[],n=s[0]?.match(/^Plan "(.+?)" completed \((\d+) steps?\)/),o=s.find(r=>r.startsWith("Steps:"))?.slice(6).trim()??"",i=s.find(r=>r.startsWith("Commits:"))?.slice(8).trim()??"";return{planName:n?.[1]??t.name,stepCount:n?parseInt(n[2],10):0,steps:o,commits:i?i.split(",").map(r=>r.trim()).filter(Boolean):[]}}const Mt={critical:"#FF6B6B",major:"#FFB84D",minor:"#60A5FA"};function qs(t){const s=t.tags??[];return s.includes("severity:critical")?"critical":s.includes("severity:major")?"major":s.includes("severity:minor")?"minor":null}function La({entity:t}){const s=Sa(t.observations??[]),n=qs(t),o=Ue(t),i=Ye(t.access_count),r=n?Mt[n]:"var(--border)";return e("div",{class:"card",style:{borderLeft:`3px solid ${r}`,marginBottom:12},children:[e("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",marginBottom:10,flexWrap:"wrap",gap:6},children:[e("div",{class:"card-title",style:{margin:0,flex:1,minWidth:0},children:e(je,{type:"lesson_learned",children:t.name})}),e("div",{style:{display:"flex",gap:6,flexShrink:0,flexWrap:"wrap"},children:[o&&e("span",{class:"tag",style:{background:"rgba(0, 214, 180, 0.12)",color:"var(--accent)",display:"inline-flex",alignItems:"center",gap:4},children:[e("svg",{width:"11",height:"11",viewBox:"0 0 16 16","aria-hidden":"true",style:{flexShrink:0},children:e("path",{d:"M2 4 a1 1 0 0 1 1 -1 h4 l2 2 h5 a1 1 0 0 1 1 1 v6 a1 1 0 0 1 -1 1 H3 a1 1 0 0 1 -1 -1 z",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinejoin:"round"})}),o]}),n&&e("span",{class:"badge",style:{background:`${Mt[n]}18`,color:Mt[n]},children:n}),i.tone!=="none"&&e("span",{class:"tag",style:{background:i.tone==="high"?"rgba(0, 214, 180, 0.18)":"rgba(0, 214, 180, 0.10)",color:"var(--accent)",fontWeight:i.tone==="high"?600:400},children:["✓ ",i.label]}),e("span",{style:{fontSize:11,color:"var(--text-3)"},children:Ee(t.last_accessed_at||t.created_at)})]})]}),s.length===0&&e("div",{style:{fontSize:12,color:"var(--text-3)",fontStyle:"italic"},children:a("lessons.unstructured")}),s.map((u,d)=>e("div",{style:{marginTop:d>0?14:0,paddingTop:d>0?14:0,borderTop:d>0?"1px dashed var(--border-subtle)":"none"},children:[u.error&&e("div",{style:{marginBottom:8},children:[e("div",{style:{fontSize:11,fontWeight:600,color:"var(--danger)",marginBottom:2},children:a("lessons.error")}),e("div",{style:{fontSize:13,lineHeight:1.5},children:u.error})]}),u.rootCause&&e("div",{style:{marginBottom:8},children:[e("div",{style:{fontSize:11,fontWeight:600,color:"var(--warning)",marginBottom:2},children:a("lessons.rootCause")}),e("div",{style:{fontSize:13,lineHeight:1.5},children:u.rootCause})]}),u.fix&&e("div",{style:{marginBottom:8},children:[e("div",{style:{fontSize:11,fontWeight:600,color:"var(--success)",marginBottom:2},children:a("lessons.fix")}),e("div",{style:{fontSize:13,lineHeight:1.5},children:u.fix})]}),u.prevention&&e("div",{children:[e("div",{style:{fontSize:11,fontWeight:600,color:"var(--info)",marginBottom:2},children:a("lessons.prevention")}),e("div",{style:{fontSize:13,lineHeight:1.5},children:u.prevention})]})]},d))]})}function Ta({entity:t}){const s=Ca(t),n=Ue(t),o=Ye(t.access_count);return e("div",{class:"card",style:{marginBottom:10},children:[e("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",marginBottom:6,gap:8,flexWrap:"wrap"},children:[e("div",{style:{flex:1,minWidth:0},children:[e("div",{class:"card-title",style:{margin:0},children:e(je,{type:"plan",children:s.planName})}),e("div",{style:{fontSize:12,color:"var(--text-3)",marginTop:2},children:[s.stepCount," ",a("lessons.stepsLabel")," · ",a("lessons.commitsCount",{count:s.commits.length})]})]}),e("div",{style:{display:"flex",gap:6,flexShrink:0},children:[n&&e("span",{class:"tag",style:{background:"rgba(0, 214, 180, 0.12)",color:"var(--accent)",display:"inline-flex",alignItems:"center",gap:4},children:[e("svg",{width:"11",height:"11",viewBox:"0 0 16 16","aria-hidden":"true",style:{flexShrink:0},children:e("path",{d:"M2 4 a1 1 0 0 1 1 -1 h4 l2 2 h5 a1 1 0 0 1 1 1 v6 a1 1 0 0 1 -1 1 H3 a1 1 0 0 1 -1 -1 z",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinejoin:"round"})}),n]}),o.tone!=="none"&&e("span",{class:"tag",style:{background:"rgba(0, 214, 180, 0.10)",color:"var(--accent)"},children:["✓ ",o.label]}),e("span",{style:{fontSize:11,color:"var(--text-3)"},children:Ee(t.created_at)})]})]}),s.steps&&e("div",{style:{fontSize:12,color:"var(--text-2)",lineHeight:1.5,marginTop:4},children:s.steps.length>220?s.steps.slice(0,220)+"…":s.steps}),s.commits.length>0&&e("div",{style:{marginTop:8,fontSize:11,color:"var(--text-3)",fontFamily:"var(--mono)"},children:[s.commits.slice(0,4).join(" · "),s.commits.length>4&&e("span",{children:[" · +",s.commits.length-4]})]})]})}function Aa({entity:t}){const s=t.observations??[],n=Ue(t),o=Ye(t.access_count);return e("div",{class:"card",style:{marginBottom:10},children:[e("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",marginBottom:6,gap:8,flexWrap:"wrap"},children:[e("div",{class:"card-title",style:{margin:0,flex:1,minWidth:0},children:e(je,{type:"note",children:t.name})}),e("div",{style:{display:"flex",gap:6,flexShrink:0},children:[n&&e("span",{class:"tag",style:{background:"rgba(0, 214, 180, 0.12)",color:"var(--accent)",display:"inline-flex",alignItems:"center",gap:4},children:[e("svg",{width:"11",height:"11",viewBox:"0 0 16 16","aria-hidden":"true",style:{flexShrink:0},children:e("path",{d:"M2 4 a1 1 0 0 1 1 -1 h4 l2 2 h5 a1 1 0 0 1 1 1 v6 a1 1 0 0 1 -1 1 H3 a1 1 0 0 1 -1 -1 z",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinejoin:"round"})}),n]}),o.tone!=="none"&&e("span",{class:"tag",style:{background:"rgba(0, 214, 180, 0.10)",color:"var(--accent)"},children:["✓ ",o.label]}),e("span",{style:{fontSize:11,color:"var(--text-3)"},children:Ee(t.created_at)})]})]}),s.length>0&&e("ul",{style:{fontSize:13,lineHeight:1.6,margin:0,paddingLeft:18,color:"var(--text-1)"},children:[s.slice(0,6).map((i,r)=>e("li",{style:{marginBottom:3},children:i.length>200?i.slice(0,200)+"…":i},r)),s.length>6&&e("li",{style:{color:"var(--text-3)",listStyle:"none"},children:a("lessons.moreItems",{count:s.length-6})})]})]})}function Pa(){const[t,s]=x([]),[n,o]=x([]),[i,r]=x(!0),[u,d]=x(""),[l,g]=x("failure"),[p,c]=x(""),[f,b]=x("all");X(()=>{Promise.all([Cn(),Bs().catch(()=>[])]).then(([y,A])=>{s(y),o(A)}).catch(y=>d(y.message)).finally(()=>r(!1))},[]);const h=_e(()=>{const y={failure:[],"plan-completion":[],freeform:[]};for(const A of t)y[An(A)].push(A);for(const A of Object.keys(y))y[A].sort((C,B)=>(B.access_count??0)-(C.access_count??0)||B.created_at.localeCompare(C.created_at));return y},[t]),m=_e(()=>{const y=h[l],A=p.toLowerCase();return y.filter(C=>f!=="all"&&Ue(C)!==f?!1:A?[C.name,...C.observations??[],...C.tags??[]].join(" ").toLowerCase().includes(A):!0)},[h,l,p,f]);if(i)return e("div",{class:"empty",children:e("div",{class:"loading"})});if(u)return e("div",{class:"error-box",children:[a("common.error"),": ",u]});const w=t.reduce((y,A)=>y+(A.access_count??0),0),k=h.failure.filter(y=>qs(y)==="critical").length;return e("div",{children:[e("div",{class:"stats-row",children:[e("div",{class:"stat",children:[e("div",{class:"stat-val",children:h.failure.length}),e("div",{class:"stat-lbl",children:a("lessons.tabFailure")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",style:{color:k>0?"#FF6B6B":void 0},children:k}),e("div",{class:"stat-lbl",children:"Critical"})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",children:h["plan-completion"].length}),e("div",{class:"stat-lbl",children:a("lessons.tabPlan")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",children:w}),e("div",{class:"stat-lbl",children:a("lessons.totalRecalls")})]})]}),e("div",{class:"card",style:{padding:"12px 14px"},children:[e("div",{style:{display:"flex",gap:6,flexWrap:"wrap",marginBottom:10},children:[e("button",{class:"btn btn-sm",style:{background:l==="failure"?"rgba(0, 214, 180, 0.18)":"transparent",borderColor:l==="failure"?"rgba(0, 214, 180, 0.5)":"rgba(255,255,255,0.08)",color:l==="failure"?"var(--accent)":"var(--text-2)"},onClick:()=>g("failure"),children:[e(je,{type:"lesson_learned",children:a("lessons.tabFailure")})," ",e("span",{style:{opacity:.6,fontFamily:"var(--mono)",marginLeft:6},children:h.failure.length})]}),e("button",{class:"btn btn-sm",style:{background:l==="plan-completion"?"rgba(0, 214, 180, 0.18)":"transparent",borderColor:l==="plan-completion"?"rgba(0, 214, 180, 0.5)":"rgba(255,255,255,0.08)",color:l==="plan-completion"?"var(--accent)":"var(--text-2)"},onClick:()=>g("plan-completion"),children:[e(je,{type:"plan",children:a("lessons.tabPlan")})," ",e("span",{style:{opacity:.6,fontFamily:"var(--mono)",marginLeft:6},children:h["plan-completion"].length})]}),e("button",{class:"btn btn-sm",style:{background:l==="freeform"?"rgba(0, 214, 180, 0.18)":"transparent",borderColor:l==="freeform"?"rgba(0, 214, 180, 0.5)":"rgba(255,255,255,0.08)",color:l==="freeform"?"var(--accent)":"var(--text-2)"},onClick:()=>g("freeform"),children:[e(je,{type:"note",children:a("lessons.tabFreeform")})," ",e("span",{style:{opacity:.6,fontFamily:"var(--mono)",marginLeft:6},children:h.freeform.length})]})]}),e("div",{style:{display:"flex",gap:8,alignItems:"center",flexWrap:"wrap"},children:[e("input",{type:"search",placeholder:a("lessons.searchPlaceholder"),value:p,onInput:y=>c(y.target.value),style:{flex:1,minWidth:240,padding:"4px 8px",fontSize:12}}),n.length>0&&e("select",{value:f,onChange:y=>b(y.target.value),style:{padding:"3px 8px",fontSize:12},children:[e("option",{value:"all",children:a("lessons.allProjects")}),n.map(y=>e("option",{value:y.name,children:[y.name," (",y.count,")"]},y.name))]})]}),e("div",{style:{marginTop:8,fontSize:11,color:"var(--text-3)"},children:a("lessons.showing",{visible:m.length,total:h[l].length})})]}),e("div",{style:{marginTop:14},children:m.length===0?e("div",{class:"empty",children:[e("span",{class:"empty-icon",style:{display:"inline-flex",alignItems:"center",justifyContent:"center",color:"var(--text-3)"},children:e(Ke,{type:l==="failure"?"lesson_learned":l==="plan-completion"?"plan":"note",size:28})}),p?a("lessons.noMatch",{query:p}):a("lessons.emptyCategory")]}):m.map(y=>l==="failure"?e(La,{entity:y},y.id):l==="plan-completion"?e(Ta,{entity:y},y.id):e(Aa,{entity:y},y.id))})]})}function Ra(t){if(!t)return null;for(const s of t){const n=/^severity:(high|medium|low)$/i.exec(s);if(n)return n[1].toLowerCase()}return null}function ms(t){switch(t){case"high":return"var(--danger)";case"medium":return"var(--warning)";case"low":return"var(--text-2)";default:return"var(--text-3)"}}function Ea(t){const{proposal:s,detail:n,expanded:o,inFlight:i,onToggleExpand:r,onAccept:u,onReject:d,formatRelative:l,statusBadgeStyle:g,statusLabel:p}=t,c=s.status==="pending",f=Ra(n?.proposed_digest?.tags),b=g(s.status);return e("div",{class:"card",style:{padding:14,borderLeft:"3px solid var(--warning)",background:"var(--warning-soft)"},children:[e("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:12,flexWrap:"wrap"},children:[e("div",{style:{flex:"1 1 60%",minWidth:240},children:[e("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[e("span",{class:"badge badge-type",style:{textTransform:"none"},children:["#",s.id]}),e("span",{class:"tag",style:{fontSize:11,background:"var(--warning)",color:"#080A0C",fontWeight:600},children:a("pattern.title")}),e("span",{style:{fontWeight:600},children:s.digest_name}),e("span",{class:"tag",style:{fontSize:11},children:s.project}),e("span",{class:"tag",style:{fontSize:11,color:"var(--text-2)"},children:a("pattern.evidenceCount",{n:String(s.source_count)})}),f&&e("span",{class:"tag",style:{fontSize:11,color:ms(f),borderColor:ms(f)},children:[a("pattern.severity"),": ",a(`pattern.severity.${f}`)]}),e("span",{class:"tag",style:{fontSize:11,...b},children:p(s.status)})]}),e("div",{style:{marginTop:6,color:"var(--text-2)",fontSize:13,lineHeight:1.5},children:[s.digest_observations_preview,s.digest_observations_preview==="(empty)"?"":"…"]}),e("div",{style:{marginTop:4,color:"var(--text-3)",fontSize:11},children:l(s.created_at)})]}),e("div",{style:{display:"flex",gap:6,flexShrink:0,flexWrap:"wrap"},children:[e("button",{class:"btn btn-ghost",onClick:()=>r(s.id),disabled:i,"aria-expanded":o,children:a(o?"insights.collapse":"insights.viewDetail")}),c&&e(ae,{children:[e("button",{class:"btn btn-primary",onClick:()=>u(s.id),disabled:i,children:a(i?"insights.applying":"insights.accept")}),e("button",{class:"btn btn-ghost",onClick:()=>d(s.id),disabled:i,style:{color:"var(--danger)"},children:a("insights.reject")})]})]})]}),n&&n.proposed_digest&&e("div",{style:{marginTop:12,padding:12,background:"var(--bg-1)",borderRadius:4,fontSize:13},children:[e("div",{style:{marginBottom:8,color:"var(--text-3)",fontSize:11},children:[a("insights.generatedBy"),": ",e("code",{children:n.llm_model??"unknown"})," "," "," ",a("insights.promptVersion"),": ",e("code",{children:n.prompt_version})]}),Array.isArray(n.proposed_digest.validation_warnings)&&n.proposed_digest.validation_warnings.length>0&&e("div",{style:{marginBottom:10,padding:10,borderRadius:4,borderLeft:"3px solid var(--warning, #FFC800)",background:"rgba(255,200,0,0.08)"},children:[e("div",{style:{fontWeight:600,color:"var(--warning, #FFC800)",marginBottom:6},children:["⚠ ",a("insights.validationWarnings")]}),e("ul",{style:{margin:0,paddingLeft:18},children:n.proposed_digest.validation_warnings.map((h,m)=>e("li",{style:{marginBottom:6,lineHeight:1.5},children:[e("div",{children:[e("span",{style:{color:"var(--text-3)"},children:[a("insights.validationClaim"),": "]}),e("code",{style:{fontSize:12},children:h.claim})]}),e("div",{children:[e("span",{style:{color:"var(--text-3)"},children:[a("insights.validationReason"),": "]}),e("span",{children:h.reason})]})]},m))})]}),e("div",{style:{marginBottom:8},children:[e("strong",{children:[a("pattern.description"),":"]}),e("ol",{style:{margin:"4px 0 0 18px",padding:0},children:n.proposed_digest.observations.map((h,m)=>e("li",{style:{marginBottom:6,lineHeight:1.5},children:h},m))})]}),e("div",{style:{marginBottom:4},children:[e("strong",{children:[a("insights.tags"),":"]})," ",n.proposed_digest.tags.map(h=>e("span",{class:"tag",style:{marginLeft:4,fontSize:11},children:h},h))]}),e("div",{style:{color:"var(--text-3)",fontSize:11,marginTop:6},children:[a("insights.sourceIds"),": ",n.source_ids.length," (",n.source_ids.slice(0,8).join(", "),n.source_ids.length>8?"…":"",")"]})]})]})}function ps(t){if(!t)return"";const s=new Date(t.replace(" ","T")+"Z").getTime();if(Number.isNaN(s))return t;const n=(Date.now()-s)/1e3;return n<60?`${Math.floor(n)}s ago`:n<3600?`${Math.floor(n/60)}m ago`:n<86400?`${Math.floor(n/3600)}h ago`:`${Math.floor(n/86400)}d ago`}function fs(t){switch(t){case"pending":return{background:"rgba(255,200,0,0.12)",color:"#FFC800"};case"applied":return{background:"rgba(0,214,180,0.12)",color:"var(--accent)"};case"rejected":return{background:"rgba(255,80,80,0.12)",color:"#FF5050"};default:return{background:"rgba(160,160,160,0.10)",color:"var(--text-3)"}}}function ys(t){const s=`insights.status.${t}`,n=a(s);return n===s?t:n}function Fa(){const[t,s]=x([]),[n,o]=x("pending"),[i,r]=x(new Map),[u,d]=x(!1),[l,g]=x(""),[p,c]=x(null),[f,b]=x(new Set),[h,m]=x(null),w=be(async()=>{d(!0),g("");try{const M=await U("GET","/v1/dream/proposals?status=all");s(M??[])}catch(M){g(M instanceof Error?M.message:String(M))}finally{d(!1)}},[]);X(()=>{w()},[w]),X(()=>{U("GET","/v1/config").then(M=>c(!!M?.capabilities?.llm)).catch(()=>c(!1))},[]);const k=n==="all"?t:t.filter(M=>M.status===n),y=be(async M=>{if(i.has(M)){const F=new Map(i);F.delete(M),r(F);return}try{const F=await U("GET",`/v1/dream/proposals/${M}`),$=new Map(i);$.set(M,F),r($)}catch(F){g(F instanceof Error?F.message:String(F))}},[i]),A=M=>{b(F=>{const $=new Set(F);return $.add(M),$})},C=M=>{b(F=>{const $=new Set(F);return $.delete(M),$})},B=be(async M=>{A(M);try{await U("POST",`/v1/dream/proposals/${M}/accept`),window.dispatchEvent(new Event("memesh:data-changed")),await w()}catch(F){g(F instanceof Error?F.message:String(F))}finally{C(M)}},[w]),z=be(async M=>{A(M);try{await U("POST",`/v1/dream/proposals/${M}/reject`,{reason:"rejected via dashboard"}),window.dispatchEvent(new Event("memesh:data-changed")),await w()}catch(F){g(F instanceof Error?F.message:String(F))}finally{C(M)}},[w]),Q=be(async M=>{m(M),g("");try{await U("POST","/v1/dream/run",{maxLlmCalls:3,validate:M==="validate"}),window.dispatchEvent(new Event("memesh:data-changed")),await w()}catch(F){g(F instanceof Error?F.message:String(F))}finally{m(null)}},[w]),q=t.filter(M=>M.status==="pending").length,te=t.filter(M=>M.status==="applied").length,ne=t.filter(M=>M.status==="rejected").length;return e("div",{style:{display:"flex",flexDirection:"column",gap:16},children:[e("div",{class:"card",style:{padding:16},children:[e("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",flexWrap:"wrap",gap:8},children:[e("h2",{style:{margin:0,fontSize:18},children:a("insights.title")}),e("span",{style:{color:"var(--text-2)",fontSize:13},children:a("insights.subtitle")})]}),e("div",{style:{marginTop:10,display:"flex",gap:16,flexWrap:"wrap",color:"var(--text-2)",fontSize:13},children:[e("span",{children:[e("strong",{style:{color:"var(--accent)"},children:q})," ",a("insights.statPending")]}),e("span",{children:[e("strong",{children:te})," ",a("insights.statApplied")]}),e("span",{children:[e("strong",{children:ne})," ",a("insights.statRejected")]})]}),p&&e("div",{style:{marginTop:12,display:"flex",gap:8,flexWrap:"wrap"},children:[e("button",{class:"btn btn-primary",onClick:()=>Q("plain"),disabled:h!==null,"aria-busy":h==="plain",children:h==="plain"?`${a("insights.runDream")}…`:a("insights.runDream")}),e("button",{class:"btn btn-ghost",onClick:()=>Q("validate"),disabled:h!==null,"aria-busy":h==="validate",children:h==="validate"?`${a("insights.runDreamWithValidate")}…`:a("insights.runDreamWithValidate")})]})]}),e("div",{style:{display:"flex",gap:8,flexWrap:"wrap"},role:"group","aria-label":a("insights.title"),children:[["pending","applied","rejected","all"].map(M=>{const F=n===M;return e("button",{class:"tag","aria-pressed":F,style:{padding:"4px 10px",borderRadius:4,cursor:"pointer",border:"1px solid "+(F?"var(--accent)":"var(--border)"),background:F?"rgba(0,214,180,0.12)":"transparent",color:F?"var(--accent)":"var(--text-2)"},onClick:()=>o(M),children:a(`insights.filter.${M}`)},M)}),e("button",{class:"btn btn-ghost",onClick:w,style:{marginLeft:"auto"},children:a("insights.refresh")})]}),l&&e("div",{class:"card",style:{padding:12,color:"var(--danger)"},children:l}),u&&e("div",{style:{color:"var(--text-3)",fontSize:13},children:a("insights.loading")}),!u&&k.length===0&&e("div",{class:"card",style:{padding:16,textAlign:"center",color:"var(--text-2)"},children:a(n!=="pending"?"insights.emptyOther":p===!1?"insights.emptyNoLlm":"insights.emptyPending")}),k.map(M=>{const F=i.get(M.id),$=i.has(M.id),ce=M.status==="pending",ee=f.has(M.id);if(M.kind==="pattern_emergent")return e(Ea,{proposal:M,detail:F,expanded:$,inFlight:ee,onToggleExpand:y,onAccept:B,onReject:z,formatRelative:ps,statusBadgeStyle:fs,statusLabel:ys},M.id);const ke=M.digest_observations_preview==="(empty)"?"":"…";return e("div",{class:"card",style:{padding:14},children:[e("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:12,flexWrap:"wrap"},children:[e("div",{style:{flex:"1 1 60%",minWidth:240},children:[e("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[e("span",{class:"badge badge-type",style:{textTransform:"none"},children:["#",M.id]}),e("span",{style:{fontWeight:600},children:M.digest_name}),e("span",{class:"tag",style:{fontSize:11},children:M.project}),e("span",{class:"tag",style:{fontSize:11},children:M.cluster_key}),e("span",{class:"tag",style:{fontSize:11,color:"var(--text-2)"},children:[M.source_count," ",a("insights.sources")]}),e("span",{class:"tag",style:{fontSize:11,...fs(M.status)},children:ys(M.status)})]}),e("div",{style:{marginTop:6,color:"var(--text-2)",fontSize:13,lineHeight:1.5},children:[M.digest_observations_preview,ke]}),e("div",{style:{marginTop:4,color:"var(--text-3)",fontSize:11},children:ps(M.created_at)})]}),e("div",{style:{display:"flex",gap:6,flexShrink:0,flexWrap:"wrap"},children:[e("button",{class:"btn btn-ghost",onClick:()=>y(M.id),disabled:ee,"aria-expanded":$,children:a($?"insights.collapse":"insights.viewDetail")}),ce&&e(ae,{children:[e("button",{class:"btn btn-primary",onClick:()=>B(M.id),disabled:ee,children:a(ee?"insights.applying":"insights.accept")}),e("button",{class:"btn btn-ghost",onClick:()=>z(M.id),disabled:ee,style:{color:"#FF5050"},children:a("insights.reject")})]})]})]}),F&&F.proposed_digest&&e("div",{style:{marginTop:12,padding:12,background:"var(--bg-1)",borderRadius:4,fontSize:13},children:[e("div",{style:{marginBottom:8,color:"var(--text-3)",fontSize:11},children:[a("insights.generatedBy"),": ",e("code",{children:F.llm_model??"unknown"})," · ",a("insights.promptVersion"),": ",e("code",{children:F.prompt_version})]}),Array.isArray(F.proposed_digest.validation_warnings)&&F.proposed_digest.validation_warnings.length>0&&e("div",{style:{marginBottom:10,padding:10,borderRadius:4,borderLeft:"3px solid var(--warning, #FFC800)",background:"rgba(255,200,0,0.08)"},children:[e("div",{style:{fontWeight:600,color:"var(--warning, #FFC800)",marginBottom:6},children:["⚠ ",a("insights.validationWarnings")]}),e("ul",{style:{margin:0,paddingLeft:18},children:F.proposed_digest.validation_warnings.map((ue,H)=>e("li",{style:{marginBottom:6,lineHeight:1.5},children:[e("div",{children:[e("span",{style:{color:"var(--text-3)"},children:[a("insights.validationClaim"),": "]}),e("code",{style:{fontSize:12},children:ue.claim})]}),e("div",{children:[e("span",{style:{color:"var(--text-3)"},children:[a("insights.validationReason"),": "]}),e("span",{children:ue.reason})]})]},H))})]}),e("div",{style:{marginBottom:8},children:[e("strong",{children:[a("insights.observations"),":"]}),e("ol",{style:{margin:"4px 0 0 18px",padding:0},children:F.proposed_digest.observations.map((ue,H)=>e("li",{style:{marginBottom:6,lineHeight:1.5},children:ue},H))})]}),e("div",{style:{marginBottom:4},children:[e("strong",{children:[a("insights.tags"),":"]})," ",F.proposed_digest.tags.map(ue=>e("span",{class:"tag",style:{marginLeft:4,fontSize:11},children:ue},ue))]}),e("div",{style:{color:"var(--text-3)",fontSize:11,marginTop:6},children:[a("insights.sourceIds"),": ",F.source_ids.length," entities (",F.source_ids.slice(0,8).join(", "),F.source_ids.length>8?"…":"",")"]})]})]},M.id)})]})}const Da=["bug","feature","question"],bs={bug:"feedback.bug",feature:"feedback.feature",question:"feedback.question"};function Ia({health:t}){const[s,n]=x(!1),[o,i]=x("bug"),[r,u]=x(""),[d,l]=x(!0),[g,p]=x(!1),c=ie(null);X(()=>{if(!s)return;const h=m=>{c.current&&!c.current.contains(m.target)&&n(!1)};return document.addEventListener("mousedown",h),()=>document.removeEventListener("mousedown",h)},[s]);function f(h){const m=h.checks.find(C=>C.id==="install_id"),y=h.checks.filter(C=>C.id!=="install_id").sort((C,B)=>{const z={fail:0,warn:1,pass:2};return(z[C.status]??3)-(z[B.status]??3)}).map(C=>{const B=C.status==="fail"?"❌":C.status==="warn"?"⚠️":"✅",z=C.fix?` _Fix: ${C.fix}_`:"";return`- ${B} **${C.label}**: ${C.summary}${z}`}),A=m?`
|
|
13
|
+
_Anonymous install ID: \`${(m.summary.match(/[0-9a-f-]{36}/)??["(unavailable)"])[0]}\` — included only because you checked "Include system info"._
|
|
14
|
+
`:"";return`**Diagnostics** (overall: ${h.status})${A}
|
|
15
|
+
${y.join(`
|
|
16
|
+
`)}`}const b=async()=>{if(!(!r.trim()||g)){p(!0);try{const h=`feedback,from-dashboard,${o}`;let m=r.trim();if(d&&t){m+=`
|
|
17
17
|
|
|
18
18
|
---
|
|
19
19
|
**System Info**
|
|
20
20
|
- Version: \`${t.version}\`
|
|
21
21
|
- Entities: ${t.entity_count}
|
|
22
22
|
- Platform: \`${navigator.platform}\`
|
|
23
|
-
- User Agent: \`${navigator.userAgent}\``;try{const
|
|
23
|
+
- User Agent: \`${navigator.userAgent}\``;try{const y=await U("GET","/v1/doctor");m+=`
|
|
24
24
|
|
|
25
|
-
${
|
|
25
|
+
${f(y)}`}catch{}}const w=a(bs[o]),k=`https://github.com/PCIRCLE-AI/memesh-llm-memory/issues/new?title=${encodeURIComponent(`[${w}] `)}&body=${encodeURIComponent(m)}&labels=${encodeURIComponent(h)}`;window.open(k,"_blank"),u(""),n(!1)}finally{p(!1)}}};return e(ae,{children:[e("button",{class:"fb-btn",onClick:()=>n(!s),children:a("feedback.button")}),s&&e("div",{class:"fb-panel",ref:c,children:[e("h3",{class:"fb-title",children:a("feedback.title")}),e("div",{class:"fb-types",children:Da.map(h=>e("label",{class:`fb-type ${o===h?"selected":""}`,children:[e("input",{type:"radio",name:"fb-type",value:h,checked:o===h,onChange:()=>i(h)}),a(bs[h])]},h))}),e("textarea",{class:"fb-desc",placeholder:a("feedback.placeholder"),value:r,onInput:h=>u(h.target.value)}),e("label",{class:"fb-sys-row",children:[e("input",{type:"checkbox",checked:d,onChange:()=>l(!d)}),a("feedback.includeSys")]}),e("button",{class:"btn btn-primary fb-submit",onClick:b,disabled:g,children:a(g?"feedback.submitting":"feedback.submit")})]})]})}function Ha({currentToken:t,onSubmit:s}){const[n,o]=x(t??""),[i,r]=x(!1);function u(d){d.preventDefault(),r(!0),n.trim()&&s(n.trim())}return e("div",{class:"auth-prompt-shell","data-testid":"auth-prompt",children:e("form",{class:"auth-prompt-card",onSubmit:u,children:[e("h1",{children:a("auth.title")||"Authentication required"}),e("p",{children:a("auth.intro")||"This dashboard is protected by a bearer token. Paste the value of MEMESH_REMOTE_TOKEN (or the contents of <memeshDir>/remote-token) below."}),e("label",{children:[e("span",{children:a("auth.tokenLabel")||"Token"}),e("input",{type:"password",autocomplete:"off",value:n,onInput:d=>o(d.target.value),placeholder:"paste token here",required:!0})]}),i&&!n.trim()&&e("p",{class:"auth-prompt-error",children:a("auth.empty")||"Token cannot be empty."}),e("button",{type:"submit",class:"auth-prompt-submit",children:a("auth.submit")||"Unlock dashboard"})]})})}const vs="memesh.onboardingDismissed";function Ba({health:t}){const[s,n]=x(()=>{try{return localStorage.getItem(vs)==="true"}catch{return!1}}),[o,i]=x(null),[r,u]=x("");if(X(()=>{t&&t.entity_count>0&&n(!0)},[t?.entity_count]),!t||t.entity_count>0||s)return null;function d(){n(!0);try{localStorage.setItem(vs,"true")}catch{}}async function l(){u(""),i("seed");try{await U("POST","/v1/demo/seed"),window.dispatchEvent(new Event("memesh:data-changed"))}catch(p){u(p?.message??String(p))}finally{i(null)}}async function g(){if(confirm(a("onboarding.resetConfirm"))){u(""),i("reset");try{await U("POST","/v1/demo/reset"),window.dispatchEvent(new Event("memesh:data-changed"))}catch(p){u(p?.message??String(p))}finally{i(null)}}}return e("div",{role:"region","aria-label":a("onboarding.title"),style:{position:"relative",margin:"12px auto 8px",maxWidth:920,padding:"14px 18px",border:"1px solid rgba(0, 214, 180, 0.28)",borderRadius:8,background:"linear-gradient(135deg, rgba(0, 214, 180, 0.10) 0%, rgba(0, 214, 180, 0.02) 100%)",color:"var(--text-1)"},children:[e("button",{type:"button",onClick:d,"aria-label":a("onboarding.dismiss"),style:{position:"absolute",top:8,right:10,background:"transparent",border:"none",color:"var(--text-3)",fontSize:18,lineHeight:1,cursor:"pointer",padding:4},children:"×"}),e("div",{style:{fontSize:14,fontWeight:600,color:"var(--text-0)",marginBottom:6},children:a("onboarding.title")}),e("div",{style:{fontSize:13,lineHeight:1.55,color:"var(--text-1)"},children:a("onboarding.body")}),e("div",{style:{fontSize:11,lineHeight:1.55,color:"var(--text-3)",marginTop:4},children:a("onboarding.llmHint")}),e("div",{style:{display:"flex",flexWrap:"wrap",gap:10,marginTop:12,alignItems:"center"},children:[e("button",{type:"button",class:"btn btn-primary",onClick:l,disabled:o!==null,style:{minWidth:160},children:a(o==="seed"?"onboarding.seedingButton":"onboarding.seedButton")}),e("span",{style:{fontSize:12,color:"var(--text-3)"},children:a("onboarding.seedHint")})]}),e("details",{style:{marginTop:10,fontSize:12,color:"var(--text-3)"},children:[e("summary",{style:{cursor:"pointer"},children:a("onboarding.cliReference")}),e("div",{style:{display:"flex",flexWrap:"wrap",gap:12,marginTop:8},children:[e("code",{style:{padding:"6px 10px",background:"rgba(0, 0, 0, 0.3)",border:"1px solid rgba(0, 214, 180, 0.20)",borderRadius:4,color:"var(--accent)",fontFamily:"var(--mono)",fontSize:12},children:"memesh demo"}),e("span",{style:{fontSize:12,color:"var(--text-3)"},children:a("onboarding.hintDemo")})]}),e("div",{style:{display:"flex",flexWrap:"wrap",gap:12,marginTop:8,alignItems:"center"},children:[e("code",{style:{padding:"6px 10px",background:"rgba(0, 0, 0, 0.3)",border:"1px solid var(--border-subtle)",borderRadius:4,color:"var(--text-2)",fontFamily:"var(--mono)",fontSize:12},children:"memesh demo --reset --yes"}),e("button",{type:"button",class:"btn",onClick:g,disabled:o!==null,style:{fontSize:11,padding:"4px 10px"},children:a(o==="reset"?"onboarding.resettingButton":"onboarding.resetButton")}),e("span",{style:{fontSize:12,color:"var(--text-3)"},children:a("onboarding.hintReset")})]})]}),r&&e("div",{role:"alert","aria-live":"polite",style:{marginTop:10,fontSize:12,color:"var(--danger)"},children:r})]})}const ks="memesh.doctorBanner.dismissedSig";function za(){const[t,s]=x(null),[n,o]=x(()=>{try{return localStorage.getItem(ks)??""}catch{return""}});if(X(()=>{let f=!0;const b=()=>{U("GET","/v1/doctor").then(m=>{f&&s(m)}).catch(()=>{})};b();const h=()=>b();return window.addEventListener("memesh:data-changed",h),()=>{f=!1,window.removeEventListener("memesh:data-changed",h)}},[]),!t||t.status==="PASS")return null;const i=t.checks.filter(f=>f.status==="fail"||f.status==="warn");if(i.length===0)return null;const r=i.map(f=>`${f.id}:${f.status}`).sort().join("|");if(r===n)return null;function u(){o(r);try{localStorage.setItem(ks,r)}catch{}}function d(){const f=i.map(w=>{const k=w.status==="fail"?"❌":"⚠️",y=w.fix?` _Fix: ${w.fix}_`:"";return`- ${k} **${w.label}**: ${w.summary}${y}`}),b=`${a("doctorBanner.preambleForIssue")}
|
|
26
26
|
|
|
27
|
-
${
|
|
28
|
-
`)}`,
|
|
27
|
+
${f.join(`
|
|
28
|
+
`)}`,m=`https://github.com/PCIRCLE-AI/memesh-llm-memory/issues/new?title=${encodeURIComponent("[Bug] memesh doctor reported issues")}&body=${encodeURIComponent(b)}&labels=${encodeURIComponent("feedback,from-dashboard,bug,doctor-warning")}`;window.open(m,"_blank")}const l=t.status==="FAIL",g=l?"#ef4444":"#f59e0b";return e("div",{role:"alert","aria-live":"polite",style:{position:"relative",margin:"12px auto 0",maxWidth:920,padding:"12px 16px",border:`1px solid ${l?"rgba(239, 68, 68, 0.32)":"rgba(245, 158, 11, 0.32)"}`,borderRadius:8,background:l?"rgba(239, 68, 68, 0.08)":"rgba(245, 158, 11, 0.08)",color:"var(--text-1)"},children:[e("button",{type:"button",onClick:u,"aria-label":a("doctorBanner.dismiss"),style:{position:"absolute",top:6,right:8,background:"transparent",border:"none",color:"var(--text-3)",fontSize:18,lineHeight:1,cursor:"pointer",padding:4},children:"×"}),e("div",{style:{fontSize:13,fontWeight:600,color:g,marginBottom:6},children:a(l?"doctorBanner.failTitle":"doctorBanner.warnTitle")}),e("ul",{style:{margin:"6px 0 10px",paddingLeft:18,fontSize:12,lineHeight:1.5,color:"var(--text-2)"},children:[i.slice(0,3).map(f=>{const b=`doctor.${f.id}.summary`,h=`doctor.${f.id}.fix`,m=a(b)!==b?a(b):f.summary,w=f.fix&&a(h)!==h?a(h):f.fix;return e("li",{children:[e("strong",{children:[f.label,":"]})," ",m,w&&e(ae,{children:[" — ",e("em",{style:{color:"var(--text-3)"},children:w})]})]},f.id)}),i.length>3&&e("li",{style:{color:"var(--text-3)"},children:["…and ",i.length-3," more (run `memesh doctor` for full list)"]})]}),e("div",{style:{display:"flex",gap:8,alignItems:"center",flexWrap:"wrap"},children:[e("button",{type:"button",class:"btn",onClick:d,style:{fontSize:12,padding:"4px 12px"},children:a("doctorBanner.getHelp")}),e("span",{style:{fontSize:11,color:"var(--text-3)"},children:a("doctorBanner.helpHint")})]})]})}const xs="memesh.insightsBanner.dismissed";function Na({currentTab:t,onNavigateToInsights:s}){const[n,o]=x(0),[i,r]=x(()=>{try{return sessionStorage.getItem(xs)==="true"}catch{return!1}});if(X(()=>{let l=!0;const g=()=>{U("GET","/v1/dream/proposals?status=pending").then(c=>{if(!l)return;const f=Array.isArray(c)?c:c?.data??[];o(f.length)}).catch(()=>{})};g();const p=()=>g();return window.addEventListener("memesh:data-changed",p),()=>{l=!1,window.removeEventListener("memesh:data-changed",p)}},[]),t==="Insights"||i||n===0)return null;function u(l){l.stopPropagation(),r(!0);try{sessionStorage.setItem(xs,"true")}catch{}}const d=a("banner.pendingInsights",{n,s:n===1?"":"s"});return e("div",{role:"region","aria-label":a("banner.viewAll"),onClick:s,onKeyDown:l=>{(l.key==="Enter"||l.key===" ")&&(l.preventDefault(),s())},tabIndex:0,style:{position:"relative",margin:"12px auto 0",maxWidth:920,padding:"10px 40px 10px 16px",border:"1px solid rgba(0, 214, 180, 0.32)",borderRadius:8,background:"linear-gradient(135deg, rgba(0, 214, 180, 0.12) 0%, rgba(0, 214, 180, 0.04) 100%)",color:"var(--text-1)",cursor:"pointer",fontSize:13,lineHeight:1.5,display:"flex",alignItems:"center",justifyContent:"space-between",gap:8},children:[e("span",{style:{flex:1},children:[e("span",{style:{marginRight:6},"aria-hidden":"true",children:"💡"}),d]}),e("button",{type:"button",onClick:u,"aria-label":a("banner.dismiss"),style:{position:"absolute",top:6,right:8,background:"transparent",border:"none",color:"var(--text-3)",fontSize:18,lineHeight:1,cursor:"pointer",padding:4},children:"×"})]})}const At=["Insights","Lessons","Browse","Analytics","Search","Graph","Manage","Settings"],ja={Insights:"tab.insights",Lessons:"tab.lessons",Browse:"tab.browse",Analytics:"tab.analytics",Search:"tab.search",Graph:"tab.graph",Manage:"tab.manage",Settings:"tab.settings"},Vs="memesh.tab";function Oa(){try{const s=new URLSearchParams(window.location.search).get("tab");if(s&&At.includes(s))return s;const n=localStorage.getItem(Vs);if(n&&At.includes(n))return n}catch{}return"Insights"}function Wa(){const[t,s]=x(()=>fn()),[n,o]=x(Oa);X(()=>{try{localStorage.setItem(Vs,n)}catch{}},[n]);const[i,r]=x(null),[u,d]=x(""),[l,g]=x(!1),p=be(()=>{U("GET","/v1/health").then(f=>{r(f),d(""),g(!1)}).catch(f=>{if(f instanceof Hs){g(!0),d("");return}d(f.message)})},[]);X(()=>{p();const f=()=>p();return window.addEventListener("memesh:data-changed",f),()=>window.removeEventListener("memesh:data-changed",f)},[p]);const c=At.map(f=>({key:f,label:a(ja[f])}));return l?e(Ha,{currentToken:Is(),onSubmit:f=>{_n(f),g(!1),p()}}):e("div",{class:"shell",children:[e(xn,{health:i,error:u}),e(za,{}),e(Na,{currentTab:n,onNavigateToInsights:()=>o("Insights")}),e(Ba,{health:i}),e(wn,{tabs:c,active:n,onSelect:f=>o(f)}),e("div",{class:"main",children:[e("div",{class:`panel ${n==="Insights"?"active":""}`,children:n==="Insights"&&e(Fa,{})}),e("div",{class:`panel ${n==="Search"?"active":""}`,children:e(Hn,{})}),e("div",{class:`panel ${n==="Browse"?"active":""}`,children:e(is,{})}),e("div",{class:`panel ${n==="Analytics"?"active":""}`,children:e(ma,{})}),e("div",{class:`panel ${n==="Graph"?"active":""}`,children:n==="Graph"&&e(_a,{})}),e("div",{class:`panel ${n==="Lessons"?"active":""}`,children:n==="Lessons"&&e(Pa,{})}),e("div",{class:`panel ${n==="Manage"?"active":""}`,children:n==="Manage"&&e(is,{manage:!0})}),e("div",{class:`panel ${n==="Settings"?"active":""}`,children:n==="Settings"&&e(ya,{locale:t,onLocaleChange:s})})]}),e(Ia,{health:i})]})}cn(e(Wa,{}),document.getElementById("app"));</script>
|
|
29
29
|
<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}}.auth-prompt-shell{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;background:var(--bg-0)}.auth-prompt-card{background:var(--bg-card);border:1px solid var(--border);border-radius:8px;padding:28px 32px;max-width:440px;width:100%;display:flex;flex-direction:column;gap:16px}.auth-prompt-card h1{font-size:16px;margin:0}.auth-prompt-card p{font-size:13px;line-height:1.55;opacity:.85;margin:0}.auth-prompt-card label{display:flex;flex-direction:column;gap:6px;font-size:12px}.auth-prompt-card input{background:var(--bg-input);border:1px solid var(--border);border-radius:4px;padding:10px 12px;color:inherit;font-family:var(--font-mono, monospace);font-size:13px}.auth-prompt-card input:focus{outline:none;border-color:var(--border-focus)}.auth-prompt-error{color:#ff6b6b;font-size:12px;margin:0}.auth-prompt-submit{background:var(--border-focus);color:var(--bg-0);border:none;border-radius:4px;padding:10px 14px;font-size:13px;cursor:pointer;font-weight:500}.auth-prompt-submit:hover{filter:brightness(1.1)}</style>
|
|
30
30
|
</head>
|
|
31
31
|
<body>
|