@pcircle/memesh 3.1.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dashboard/dist/index.html +1 -1
- package/dist/core/consolidator.d.ts +3 -0
- package/dist/core/consolidator.d.ts.map +1 -0
- package/dist/core/consolidator.js +147 -0
- package/dist/core/consolidator.js.map +1 -0
- package/dist/core/embedder.d.ts +9 -0
- package/dist/core/embedder.d.ts.map +1 -0
- package/dist/core/embedder.js +81 -0
- package/dist/core/embedder.js.map +1 -0
- package/dist/core/failure-analyzer.d.ts.map +1 -1
- package/dist/core/failure-analyzer.js.map +1 -1
- package/dist/core/operations.d.ts +3 -4
- package/dist/core/operations.d.ts.map +1 -1
- package/dist/core/operations.js +51 -211
- package/dist/core/operations.js.map +1 -1
- package/dist/core/query-expander.d.ts.map +1 -1
- package/dist/core/query-expander.js.map +1 -1
- package/dist/core/serializer.d.ts +4 -0
- package/dist/core/serializer.d.ts.map +1 -0
- package/dist/core/serializer.js +73 -0
- package/dist/core/serializer.js.map +1 -0
- package/dist/core/types.d.ts +63 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js.map +1 -1
- package/dist/knowledge-graph.d.ts +2 -0
- package/dist/knowledge-graph.d.ts.map +1 -1
- package/dist/knowledge-graph.js +99 -17
- package/dist/knowledge-graph.js.map +1 -1
- package/dist/transports/http/server.d.ts.map +1 -1
- package/dist/transports/http/server.js +6 -58
- package/dist/transports/http/server.js.map +1 -1
- package/dist/transports/mcp/handlers.d.ts.map +1 -1
- package/dist/transports/mcp/handlers.js +1 -57
- package/dist/transports/mcp/handlers.js.map +1 -1
- package/dist/transports/schemas.d.ts +94 -0
- package/dist/transports/schemas.d.ts.map +1 -0
- package/dist/transports/schemas.js +60 -0
- package/dist/transports/schemas.js.map +1 -0
- package/package.json +2 -1
- package/plugin.json +1 -1
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
8
8
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
9
9
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
|
|
10
|
-
<script type="module" crossorigin>(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))a(i);new MutationObserver(i=>{for(const r of i)if(r.type==="childList")for(const c of r.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&a(c)}).observe(document,{childList:!0,subtree:!0});function s(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 a(i){if(i.ep)return;i.ep=!0;const r=s(i);fetch(i.href,r)}})();var Q,k,xe,E,_e,Ce,Te,Z,D,B,Pe,oe,te,se,U={},q=[],De=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,Y=Array.isArray;function T(e,t){for(var s in t)e[s]=t[s];return e}function ce(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function Ke(e,t,s){var a,i,r,c={};for(r in t)r=="key"?a=t[r]:r=="ref"?i=t[r]:c[r]=t[r];if(arguments.length>2&&(c.children=arguments.length>3?Q.call(arguments,2):s),typeof e=="function"&&e.defaultProps!=null)for(r in e.defaultProps)c[r]===void 0&&(c[r]=e.defaultProps[r]);return K(e,c,a,i,null)}function K(e,t,s,a,i){var r={type:e,props:t,key:s,ref:a,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:i??++xe,__i:-1,__u:0};return i==null&&k.vnode!=null&&k.vnode(r),r}function R(e){return e.children}function H(e,t){this.props=e,this.context=t}function F(e,t){if(t==null)return e.__?F(e.__,e.__i+1):null;for(var s;t<e.__k.length;t++)if((s=e.__k[t])!=null&&s.__e!=null)return s.__e;return typeof e.type=="function"?F(e):null}function He(e){if(e.__P&&e.__d){var t=e.__v,s=t.__e,a=[],i=[],r=T({},t);r.__v=t.__v+1,k.vnode&&k.vnode(r),le(e.__P,r,t,e.__n,e.__P.namespaceURI,32&t.__u?[s]:null,a,s??F(t),!!(32&t.__u),i),r.__v=t.__v,r.__.__k[r.__i]=r,Fe(a,r,i),t.__e=t.__=null,r.__e!=s&&Ee(r)}}function Ee(e){if((e=e.__)!=null&&e.__c!=null)return e.__e=e.__c.base=null,e.__k.some(function(t){if(t!=null&&t.__e!=null)return e.__e=e.__c.base=t.__e}),Ee(e)}function ue(e){(!e.__d&&(e.__d=!0)&&E.push(e)&&!G.__r++||_e!=k.debounceRendering)&&((_e=k.debounceRendering)||Ce)(G)}function G(){try{for(var e,t=1;E.length;)E.length>t&&E.sort(Te),e=E.shift(),t=E.length,He(e)}finally{E.length=G.__r=0}}function Re(e,t,s,a,i,r,c,d,_,l,m){var o,b,h,f,p,g,y,w=a&&a.__k||q,x=t.length;for(_=Oe(s,t,w,_,x),o=0;o<x;o++)(h=s.__k[o])!=null&&(b=h.__i!=-1&&w[h.__i]||U,h.__i=o,g=le(e,h,b,i,r,c,d,_,l,m),f=h.__e,h.ref&&b.ref!=h.ref&&(b.ref&&de(b.ref,null,h),m.push(h.ref,h.__c||f,h)),p==null&&f!=null&&(p=f),(y=!!(4&h.__u))||b.__k===h.__k?(_=Ie(h,_,e,y),y&&b.__e&&(b.__e=null)):typeof h.type=="function"&&g!==void 0?_=g:f&&(_=f.nextSibling),h.__u&=-7);return s.__e=p,_}function Oe(e,t,s,a,i){var r,c,d,_,l,m=s.length,o=m,b=0;for(e.__k=new Array(i),r=0;r<i;r++)(c=t[r])!=null&&typeof c!="boolean"&&typeof c!="function"?(typeof c=="string"||typeof c=="number"||typeof c=="bigint"||c.constructor==String?c=e.__k[r]=K(null,c,null,null,null):Y(c)?c=e.__k[r]=K(R,{children:c},null,null,null):c.constructor===void 0&&c.__b>0?c=e.__k[r]=K(c.type,c.props,c.key,c.ref?c.ref:null,c.__v):e.__k[r]=c,_=r+b,c.__=e,c.__b=e.__b+1,d=null,(l=c.__i=Ue(c,s,_,o))!=-1&&(o--,(d=s[l])&&(d.__u|=2)),d==null||d.__v==null?(l==-1&&(i>m?b--:i<m&&b++),typeof c.type!="function"&&(c.__u|=4)):l!=_&&(l==_-1?b--:l==_+1?b++:(l>_?b--:b++,c.__u|=4))):e.__k[r]=null;if(o)for(r=0;r<m;r++)(d=s[r])!=null&&(2&d.__u)==0&&(d.__e==a&&(a=F(d)),Ne(d,d));return a}function Ie(e,t,s,a){var i,r;if(typeof e.type=="function"){for(i=e.__k,r=0;i&&r<i.length;r++)i[r]&&(i[r].__=e,t=Ie(i[r],t,s,a));return t}e.__e!=t&&(a&&(t&&e.type&&!t.parentNode&&(t=F(e)),s.insertBefore(e.__e,t||null)),t=e.__e);do t=t&&t.nextSibling;while(t!=null&&t.nodeType==8);return t}function Ue(e,t,s,a){var i,r,c,d=e.key,_=e.type,l=t[s],m=l!=null&&(2&l.__u)==0;if(l===null&&d==null||m&&d==l.key&&_==l.type)return s;if(a>(m?1:0)){for(i=s-1,r=s+1;i>=0||r<t.length;)if((l=t[c=i>=0?i--:r++])!=null&&(2&l.__u)==0&&d==l.key&&_==l.type)return c}return-1}function ge(e,t,s){t[0]=="-"?e.setProperty(t,s??""):e[t]=s==null?"":typeof s!="number"||De.test(t)?s:s+"px"}function z(e,t,s,a,i){var r,c;e:if(t=="style")if(typeof s=="string")e.style.cssText=s;else{if(typeof a=="string"&&(e.style.cssText=a=""),a)for(t in a)s&&t in s||ge(e.style,t,"");if(s)for(t in s)a&&s[t]==a[t]||ge(e.style,t,s[t])}else if(t[0]=="o"&&t[1]=="n")r=t!=(t=t.replace(Pe,"$1")),c=t.toLowerCase(),t=c in e||t=="onFocusOut"||t=="onFocusIn"?c.slice(2):t.slice(2),e.l||(e.l={}),e.l[t+r]=s,s?a?s[B]=a[B]:(s[B]=oe,e.addEventListener(t,r?se:te,r)):e.removeEventListener(t,r?se:te,r);else{if(i=="http://www.w3.org/2000/svg")t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(t!="width"&&t!="height"&&t!="href"&&t!="list"&&t!="form"&&t!="tabIndex"&&t!="download"&&t!="rowSpan"&&t!="colSpan"&&t!="role"&&t!="popover"&&t in e)try{e[t]=s??"";break e}catch{}typeof s=="function"||(s==null||s===!1&&t[4]!="-"?e.removeAttribute(t):e.setAttribute(t,t=="popover"&&s==1?"":s))}}function me(e){return function(t){if(this.l){var s=this.l[t.type+e];if(t[D]==null)t[D]=oe++;else if(t[D]<s[B])return;return s(k.event?k.event(t):t)}}}function le(e,t,s,a,i,r,c,d,_,l){var m,o,b,h,f,p,g,y,w,x,v,A,he,W,J,C=t.type;if(t.constructor!==void 0)return null;128&s.__u&&(_=!!(32&s.__u),r=[d=t.__e=s.__e]),(m=k.__b)&&m(t);e:if(typeof C=="function")try{if(y=t.props,w=C.prototype&&C.prototype.render,x=(m=C.contextType)&&a[m.__c],v=m?x?x.props.value:m.__:a,s.__c?g=(o=t.__c=s.__c).__=o.__E:(w?t.__c=o=new C(y,v):(t.__c=o=new H(y,v),o.constructor=C,o.render=Ge),x&&x.sub(o),o.state||(o.state={}),o.__n=a,b=o.__d=!0,o.__h=[],o._sb=[]),w&&o.__s==null&&(o.__s=o.state),w&&C.getDerivedStateFromProps!=null&&(o.__s==o.state&&(o.__s=T({},o.__s)),T(o.__s,C.getDerivedStateFromProps(y,o.__s))),h=o.props,f=o.state,o.__v=t,b)w&&C.getDerivedStateFromProps==null&&o.componentWillMount!=null&&o.componentWillMount(),w&&o.componentDidMount!=null&&o.__h.push(o.componentDidMount);else{if(w&&C.getDerivedStateFromProps==null&&y!==h&&o.componentWillReceiveProps!=null&&o.componentWillReceiveProps(y,v),t.__v==s.__v||!o.__e&&o.shouldComponentUpdate!=null&&o.shouldComponentUpdate(y,o.__s,v)===!1){t.__v!=s.__v&&(o.props=y,o.state=o.__s,o.__d=!1),t.__e=s.__e,t.__k=s.__k,t.__k.some(function(I){I&&(I.__=t)}),q.push.apply(o.__h,o._sb),o._sb=[],o.__h.length&&c.push(o);break e}o.componentWillUpdate!=null&&o.componentWillUpdate(y,o.__s,v),w&&o.componentDidUpdate!=null&&o.__h.push(function(){o.componentDidUpdate(h,f,p)})}if(o.context=v,o.props=y,o.__P=e,o.__e=!1,A=k.__r,he=0,w)o.state=o.__s,o.__d=!1,A&&A(t),m=o.render(o.props,o.state,o.context),q.push.apply(o.__h,o._sb),o._sb=[];else do o.__d=!1,A&&A(t),m=o.render(o.props,o.state,o.context),o.state=o.__s;while(o.__d&&++he<25);o.state=o.__s,o.getChildContext!=null&&(a=T(T({},a),o.getChildContext())),w&&!b&&o.getSnapshotBeforeUpdate!=null&&(p=o.getSnapshotBeforeUpdate(h,f)),W=m!=null&&m.type===R&&m.key==null?Be(m.props.children):m,d=Re(e,Y(W)?W:[W],t,s,a,i,r,c,d,_,l),o.base=t.__e,t.__u&=-161,o.__h.length&&c.push(o),g&&(o.__E=o.__=null)}catch(I){if(t.__v=null,_||r!=null)if(I.then){for(t.__u|=_?160:128;d&&d.nodeType==8&&d.nextSibling;)d=d.nextSibling;r[r.indexOf(d)]=null,t.__e=d}else{for(J=r.length;J--;)ce(r[J]);ne(t)}else t.__e=s.__e,t.__k=s.__k,I.then||ne(t);k.__e(I,t,s)}else r==null&&t.__v==s.__v?(t.__k=s.__k,t.__e=s.__e):d=t.__e=qe(s.__e,t,s,a,i,r,c,_,l);return(m=k.diffed)&&m(t),128&t.__u?void 0:d}function ne(e){e&&(e.__c&&(e.__c.__e=!0),e.__k&&e.__k.some(ne))}function Fe(e,t,s){for(var a=0;a<s.length;a++)de(s[a],s[++a],s[++a]);k.__c&&k.__c(t,e),e.some(function(i){try{e=i.__h,i.__h=[],e.some(function(r){r.call(i)})}catch(r){k.__e(r,i.__v)}})}function Be(e){return typeof e!="object"||e==null||e.__b>0?e:Y(e)?e.map(Be):T({},e)}function qe(e,t,s,a,i,r,c,d,_){var l,m,o,b,h,f,p,g=s.props||U,y=t.props,w=t.type;if(w=="svg"?i="http://www.w3.org/2000/svg":w=="math"?i="http://www.w3.org/1998/Math/MathML":i||(i="http://www.w3.org/1999/xhtml"),r!=null){for(l=0;l<r.length;l++)if((h=r[l])&&"setAttribute"in h==!!w&&(w?h.localName==w:h.nodeType==3)){e=h,r[l]=null;break}}if(e==null){if(w==null)return document.createTextNode(y);e=document.createElementNS(i,w,y.is&&y),d&&(k.__m&&k.__m(t,r),d=!1),r=null}if(w==null)g===y||d&&e.data==y||(e.data=y);else{if(r=r&&Q.call(e.childNodes),!d&&r!=null)for(g={},l=0;l<e.attributes.length;l++)g[(h=e.attributes[l]).name]=h.value;for(l in g)h=g[l],l=="dangerouslySetInnerHTML"?o=h:l=="children"||l in y||l=="value"&&"defaultValue"in y||l=="checked"&&"defaultChecked"in y||z(e,l,null,h,i);for(l in y)h=y[l],l=="children"?b=h:l=="dangerouslySetInnerHTML"?m=h:l=="value"?f=h:l=="checked"?p=h:d&&typeof h!="function"||g[l]===h||z(e,l,h,g[l],i);if(m)d||o&&(m.__html==o.__html||m.__html==e.innerHTML)||(e.innerHTML=m.__html),t.__k=[];else if(o&&(e.innerHTML=""),Re(t.type=="template"?e.content:e,Y(b)?b:[b],t,s,a,w=="foreignObject"?"http://www.w3.org/1999/xhtml":i,r,c,r?r[0]:s.__k&&F(s,0),d,_),r!=null)for(l=r.length;l--;)ce(r[l]);d||(l="value",w=="progress"&&f==null?e.removeAttribute("value"):f!=null&&(f!==e[l]||w=="progress"&&!f||w=="option"&&f!=g[l])&&z(e,l,f,g[l],i),l="checked",p!=null&&p!=e[l]&&z(e,l,p,g[l],i))}return e}function de(e,t,s){try{if(typeof e=="function"){var a=typeof e.__u=="function";a&&e.__u(),a&&t==null||(e.__u=e(t))}else e.current=t}catch(i){k.__e(i,s)}}function Ne(e,t,s){var a,i;if(k.unmount&&k.unmount(e),(a=e.ref)&&(a.current&&a.current!=e.__e||de(a,null,t)),(a=e.__c)!=null){if(a.componentWillUnmount)try{a.componentWillUnmount()}catch(r){k.__e(r,t)}a.base=a.__P=null}if(a=e.__k)for(i=0;i<a.length;i++)a[i]&&Ne(a[i],t,s||typeof e.type!="function");s||ce(e.__e),e.__c=e.__=e.__e=void 0}function Ge(e,t,s){return this.constructor(e,s)}function je(e,t,s){var a,i,r,c;t==document&&(t=document.documentElement),k.__&&k.__(e,t),i=(a=!1)?null:t.__k,r=[],c=[],le(t,e=t.__k=Ke(R,null,[e]),i||U,U,t.namespaceURI,i?null:t.firstChild?Q.call(t.childNodes):null,r,i?i.__e:t.firstChild,a,c),Fe(r,e,c)}Q=q.slice,k={__e:function(e,t,s,a){for(var i,r,c;t=t.__;)if((i=t.__c)&&!i.__)try{if((r=i.constructor)&&r.getDerivedStateFromError!=null&&(i.setState(r.getDerivedStateFromError(e)),c=i.__d),i.componentDidCatch!=null&&(i.componentDidCatch(e,a||{}),c=i.__d),c)return i.__E=i}catch(d){e=d}throw e}},xe=0,H.prototype.setState=function(e,t){var s;s=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=T({},this.state),typeof e=="function"&&(e=e(T({},s),this.props)),e&&T(s,e),e!=null&&this.__v&&(t&&this._sb.push(t),ue(this))},H.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),ue(this))},H.prototype.render=R,E=[],Ce=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,Te=function(e,t){return e.__v.__b-t.__v.__b},G.__r=0,Z=Math.random().toString(8),D="__d"+Z,B="__a"+Z,Pe=/(PointerCapture)$|Capture$/i,oe=0,te=me(!1),se=me(!0);var Ve=0;function n(e,t,s,a,i,r){t||(t={});var c,d,_=t;if("ref"in _)for(d in _={},t)d=="ref"?c=t[d]:_[d]=t[d];var l={type:e,props:_,key:s,ref:c,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--Ve,__i:-1,__u:0,__source:i,__self:r};if(typeof e=="function"&&(c=e.defaultProps))for(d in c)_[d]===void 0&&(_[d]=c[d]);return k.vnode&&k.vnode(l),l}var j,L,X,be,re=0,$e=[],S=k,ve=S.__b,pe=S.__r,fe=S.diffed,ye=S.__c,we=S.unmount,ke=S.__;function We(e,t){S.__h&&S.__h(L,e,re||t),re=0;var s=L.__H||(L.__H={__:[],__h:[]});return e>=s.__.length&&s.__.push({}),s.__[e]}function M(e){return re=1,Qe(ze,e)}function Qe(e,t,s){var a=We(j++,2);if(a.t=e,!a.__c&&(a.__=[ze(void 0,t),function(d){var _=a.__N?a.__N[0]:a.__[0],l=a.t(_,d);_!==l&&(a.__N=[l,a.__[1]],a.__c.setState({}))}],a.__c=L,!L.__f)){var i=function(d,_,l){if(!a.__c.__H)return!0;var m=a.__c.__H.__.filter(function(b){return b.__c});if(m.every(function(b){return!b.__N}))return!r||r.call(this,d,_,l);var o=a.__c.props!==d;return m.some(function(b){if(b.__N){var h=b.__[0];b.__=b.__N,b.__N=void 0,h!==b.__[0]&&(o=!0)}}),r&&r.call(this,d,_,l)||o};L.__f=!0;var r=L.shouldComponentUpdate,c=L.componentWillUpdate;L.componentWillUpdate=function(d,_,l){if(this.__e){var m=r;r=void 0,i(d,_,l),r=m}c&&c.call(this,d,_,l)},L.shouldComponentUpdate=i}return a.__N||a.__}function N(e,t){var s=We(j++,3);!S.__s&&Ze(s.__H,t)&&(s.__=e,s.u=t,L.__H.__h.push(s))}function Ye(){for(var e;e=$e.shift();){var t=e.__H;if(e.__P&&t)try{t.__h.some(O),t.__h.some(ae),t.__h=[]}catch(s){t.__h=[],S.__e(s,e.__v)}}}S.__b=function(e){L=null,ve&&ve(e)},S.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),ke&&ke(e,t)},S.__r=function(e){pe&&pe(e),j=0;var t=(L=e.__c).__H;t&&(X===L?(t.__h=[],L.__h=[],t.__.some(function(s){s.__N&&(s.__=s.__N),s.u=s.__N=void 0})):(t.__h.some(O),t.__h.some(ae),t.__h=[],j=0)),X=L},S.diffed=function(e){fe&&fe(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&($e.push(t)!==1&&be===S.requestAnimationFrame||((be=S.requestAnimationFrame)||Je)(Ye)),t.__H.__.some(function(s){s.u&&(s.__H=s.u),s.u=void 0})),X=L=null},S.__c=function(e,t){t.some(function(s){try{s.__h.some(O),s.__h=s.__h.filter(function(a){return!a.__||ae(a)})}catch(a){t.some(function(i){i.__h&&(i.__h=[])}),t=[],S.__e(a,s.__v)}}),ye&&ye(e,t)},S.unmount=function(e){we&&we(e);var t,s=e.__c;s&&s.__H&&(s.__H.__.some(function(a){try{O(a)}catch(i){t=i}}),s.__H=void 0,t&&S.__e(t,s.__v))};var Me=typeof requestAnimationFrame=="function";function Je(e){var t,s=function(){clearTimeout(a),Me&&cancelAnimationFrame(t),setTimeout(e)},a=setTimeout(s,35);Me&&(t=requestAnimationFrame(s))}function O(e){var t=L,s=e.__c;typeof s=="function"&&(e.__c=void 0,s()),L=t}function ae(e){var t=L;e.__c=e.__(),L=t}function Ze(e,t){return!e||e.length!==t.length||t.some(function(s,a){return s!==e[a]})}function ze(e,t){return typeof t=="function"?t(e):t}const V={en:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Connected","header.disconnected":"Disconnected","header.connecting":"Connecting…","header.memories":"memories","tab.search":"Search","tab.browse":"Browse","tab.analytics":"Analytics","tab.manage":"Manage","tab.settings":"Settings","search.title":"Search Memories","search.placeholder":'Search your memories… (e.g., "auth", "database", "bug fix")',"search.button":"Search","search.searching":"Searching…","search.results":"results","search.result":"result","search.noResults":"No results for","search.facts":"facts","browse.title":"All Memories","browse.manage":"Manage Memories","browse.active":"active","browse.archived":"archived","browse.filter":"Filter by content, type, or tag…","browse.refresh":"Refresh","browse.noMemories":"No memories yet","browse.noMatch":"No memories matching","browse.prev":"← Prev","browse.next":"Next →","browse.archive":"Archive","browse.restore":"Restore","browse.confirmArchive":"Archive this memory?","browse.moreArchived":"more archived memories","analytics.totalMemories":"Total Memories","analytics.knowledgeFacts":"Knowledge Facts","analytics.connections":"Connections","analytics.topics":"Topics","analytics.insights":"Insights","analytics.thisWeek":"This week","analytics.new":"new","analytics.stale":"Stale (30+ days unused)","analytics.archivedLabel":"Archived","analytics.mostRecalled":"Most Recalled","settings.capabilities":"Capabilities","settings.smartMode":"Smart Mode","settings.core":"Core","settings.embeddings":"Embeddings","settings.llmProvider":"LLM Provider","settings.apiKey":"API Key","settings.model":"Model (optional)","settings.save":"Save","settings.saving":"Saving…","settings.saved":"Saved! Restart server for LLM changes to take effect.","settings.language":"Language","feedback.button":"💬 Feedback","common.error":"Error","common.loading":"Loading…"},"zh-TW":{"brand.subtitle":"powered by pcircle.ai","header.connected":"已連線","header.disconnected":"已斷線","header.connecting":"連線中…","header.memories":"筆記憶","tab.search":"搜尋","tab.browse":"瀏覽","tab.analytics":"分析","tab.manage":"管理","tab.settings":"設定","search.title":"搜尋記憶","search.placeholder":"搜尋你的記憶…(例如:「auth」、「資料庫」、「bug 修復」)","search.button":"搜尋","search.searching":"搜尋中…","search.results":"個結果","search.result":"個結果","search.noResults":"找不到符合的結果:","search.facts":"筆事實","browse.title":"所有記憶","browse.manage":"管理記憶","browse.active":"使用中","browse.archived":"已封存","browse.filter":"依內容、類型或標籤篩選…","browse.refresh":"重新整理","browse.noMemories":"尚無記憶","browse.noMatch":"找不到符合的記憶:","browse.prev":"← 上一頁","browse.next":"下一頁 →","browse.archive":"封存","browse.restore":"還原","browse.confirmArchive":"確定要封存此記憶?","browse.moreArchived":"筆已封存的記憶","analytics.totalMemories":"記憶總數","analytics.knowledgeFacts":"知識事實","analytics.connections":"關聯","analytics.topics":"主題","analytics.insights":"洞察","analytics.thisWeek":"本週","analytics.new":"筆新增","analytics.stale":"閒置(30 天以上未使用)","analytics.archivedLabel":"已封存","analytics.mostRecalled":"最常查閱","settings.capabilities":"功能狀態","settings.smartMode":"智慧模式","settings.core":"基礎","settings.embeddings":"嵌入模型","settings.llmProvider":"LLM 提供者","settings.apiKey":"API 金鑰","settings.model":"模型(選填)","settings.save":"儲存","settings.saving":"儲存中…","settings.saved":"已儲存!重啟伺服器以套用 LLM 設定。","settings.language":"語言","feedback.button":"💬 意見回饋","common.error":"錯誤","common.loading":"載入中…"},"zh-CN":{"brand.subtitle":"powered by pcircle.ai","header.connected":"已连接","header.disconnected":"已断开","header.connecting":"连接中…","header.memories":"条记忆","tab.search":"搜索","tab.browse":"浏览","tab.analytics":"分析","tab.manage":"管理","tab.settings":"设置","search.title":"搜索记忆","search.placeholder":'搜索你的记忆…(例如:"auth"、"数据库"、"bug 修复")',"search.button":"搜索","search.searching":"搜索中…","search.results":"个结果","search.result":"个结果","search.noResults":"没有找到结果:","search.facts":"条事实","browse.title":"所有记忆","browse.manage":"管理记忆","browse.active":"活跃","browse.archived":"已归档","browse.filter":"按内容、类型或标签筛选…","browse.refresh":"刷新","browse.noMemories":"暂无记忆","browse.noMatch":"没有匹配的记忆:","browse.prev":"← 上一页","browse.next":"下一页 →","browse.archive":"归档","browse.restore":"恢复","browse.confirmArchive":"确定要归档此记忆?","browse.moreArchived":"条已归档记忆","analytics.totalMemories":"记忆总数","analytics.knowledgeFacts":"知识事实","analytics.connections":"关联","analytics.topics":"主题","analytics.insights":"洞察","analytics.thisWeek":"本周","analytics.new":"条新增","analytics.stale":"闲置(30 天以上未使用)","analytics.archivedLabel":"已归档","analytics.mostRecalled":"最常查阅","settings.capabilities":"功能状态","settings.smartMode":"智能模式","settings.core":"基础","settings.embeddings":"嵌入模型","settings.llmProvider":"LLM 提供商","settings.apiKey":"API 密钥","settings.model":"模型(选填)","settings.save":"保存","settings.saving":"保存中…","settings.saved":"已保存!重启服务器以应用 LLM 设置。","settings.language":"语言","feedback.button":"💬 反馈","common.error":"错误","common.loading":"加载中…"},ja:{"brand.subtitle":"powered by pcircle.ai","header.connected":"接続中","header.disconnected":"切断","header.connecting":"接続しています…","header.memories":"件のメモリ","tab.search":"検索","tab.browse":"一覧","tab.analytics":"分析","tab.manage":"管理","tab.settings":"設定","search.title":"メモリを検索","search.placeholder":"メモリを検索…(例:「auth」「データベース」「バグ修正」)","search.button":"検索","search.searching":"検索中…","search.results":"件の結果","search.result":"件の結果","search.noResults":"結果が見つかりません:","search.facts":"件の事実","browse.title":"すべてのメモリ","browse.manage":"メモリを管理","browse.active":"アクティブ","browse.archived":"アーカイブ済み","browse.filter":"内容、タイプ、タグで絞り込み…","browse.refresh":"更新","browse.noMemories":"メモリがありません","browse.noMatch":"一致するメモリがありません:","browse.prev":"← 前へ","browse.next":"次へ →","browse.archive":"アーカイブ","browse.restore":"復元","browse.confirmArchive":"このメモリをアーカイブしますか?","browse.moreArchived":"件のアーカイブ済みメモリ","analytics.totalMemories":"メモリ総数","analytics.knowledgeFacts":"知識ファクト","analytics.connections":"接続","analytics.topics":"トピック","analytics.insights":"インサイト","analytics.thisWeek":"今週","analytics.new":"件の新規","analytics.stale":"未使用(30日以上)","analytics.archivedLabel":"アーカイブ済み","analytics.mostRecalled":"よく参照される","settings.capabilities":"機能状態","settings.smartMode":"スマートモード","settings.core":"コア","settings.embeddings":"エンベディング","settings.llmProvider":"LLMプロバイダー","settings.apiKey":"APIキー","settings.model":"モデル(任意)","settings.save":"保存","settings.saving":"保存中…","settings.saved":"保存しました!LLM設定を反映するにはサーバーを再起動してください。","settings.language":"言語","feedback.button":"💬 フィードバック","common.error":"エラー","common.loading":"読み込み中…"},ko:{"brand.subtitle":"powered by pcircle.ai","header.connected":"연결됨","header.disconnected":"연결 끊김","header.connecting":"연결 중…","header.memories":"개의 기억","tab.search":"검색","tab.browse":"둘러보기","tab.analytics":"분석","tab.manage":"관리","tab.settings":"설정","search.title":"기억 검색","search.placeholder":'기억 검색… (예: "auth", "데이터베이스", "버그 수정")',"search.button":"검색","search.searching":"검색 중…","search.results":"개의 결과","search.result":"개의 결과","search.noResults":"결과를 찾을 수 없습니다:","search.facts":"개의 사실","browse.title":"모든 기억","browse.manage":"기억 관리","browse.active":"활성","browse.archived":"보관됨","browse.filter":"내용, 유형 또는 태그로 필터링…","browse.refresh":"새로고침","browse.noMemories":"기억이 없습니다","browse.noMatch":"일치하는 기억이 없습니다:","browse.prev":"← 이전","browse.next":"다음 →","browse.archive":"보관","browse.restore":"복원","browse.confirmArchive":"이 기억을 보관하시겠습니까?","browse.moreArchived":"개의 보관된 기억","analytics.totalMemories":"총 기억 수","analytics.knowledgeFacts":"지식 사실","analytics.connections":"연결","analytics.topics":"주제","analytics.insights":"인사이트","analytics.thisWeek":"이번 주","analytics.new":"개 신규","analytics.stale":"비활성 (30일 이상 미사용)","analytics.archivedLabel":"보관됨","analytics.mostRecalled":"가장 많이 조회됨","settings.capabilities":"기능 상태","settings.smartMode":"스마트 모드","settings.core":"기본","settings.embeddings":"임베딩","settings.llmProvider":"LLM 제공자","settings.apiKey":"API 키","settings.model":"모델 (선택)","settings.save":"저장","settings.saving":"저장 중…","settings.saved":"저장되었습니다! LLM 설정을 적용하려면 서버를 재시작하세요.","settings.language":"언어","feedback.button":"💬 피드백","common.error":"오류","common.loading":"로딩 중…"},pt:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Conectado","header.disconnected":"Desconectado","header.connecting":"Conectando…","header.memories":"memórias","tab.search":"Buscar","tab.browse":"Explorar","tab.analytics":"Análise","tab.manage":"Gerenciar","tab.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.facts":"fatos","browse.title":"Todas as Memórias","browse.manage":"Gerenciar Memórias","browse.active":"ativas","browse.archived":"arquivadas","browse.filter":"Filtrar por conteúdo, tipo ou tag…","browse.refresh":"Atualizar","browse.noMemories":"Sem memórias ainda","browse.noMatch":"Nenhuma memória corresponde a","browse.prev":"← Anterior","browse.next":"Próximo →","browse.archive":"Arquivar","browse.restore":"Restaurar","browse.confirmArchive":"Arquivar esta memória?","browse.moreArchived":"memórias arquivadas","analytics.totalMemories":"Total de Memórias","analytics.knowledgeFacts":"Fatos","analytics.connections":"Conexões","analytics.topics":"Tópicos","analytics.insights":"Insights","analytics.thisWeek":"Esta semana","analytics.new":"novas","analytics.stale":"Inativas (30+ dias sem uso)","analytics.archivedLabel":"Arquivadas","analytics.mostRecalled":"Mais Consultadas","settings.capabilities":"Capacidades","settings.smartMode":"Modo Inteligente","settings.core":"Base","settings.embeddings":"Embeddings","settings.llmProvider":"Provedor LLM","settings.apiKey":"Chave API","settings.model":"Modelo (opcional)","settings.save":"Salvar","settings.saving":"Salvando…","settings.saved":"Salvo! Reinicie o servidor para aplicar as configurações do LLM.","settings.language":"Idioma","feedback.button":"💬 Feedback","common.error":"Erro","common.loading":"Carregando…"},fr:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Connecté","header.disconnected":"Déconnecté","header.connecting":"Connexion…","header.memories":"mémoires","tab.search":"Recherche","tab.browse":"Parcourir","tab.analytics":"Analyse","tab.manage":"Gérer","tab.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.facts":"faits","browse.title":"Toutes les mémoires","browse.manage":"Gérer les mémoires","browse.active":"actives","browse.archived":"archivées","browse.filter":"Filtrer par contenu, type ou tag…","browse.refresh":"Actualiser","browse.noMemories":"Pas encore de mémoires","browse.noMatch":"Aucune mémoire correspondant à","browse.prev":"← Précédent","browse.next":"Suivant →","browse.archive":"Archiver","browse.restore":"Restaurer","browse.confirmArchive":"Archiver cette mémoire ?","browse.moreArchived":"mémoires archivées","analytics.totalMemories":"Total des mémoires","analytics.knowledgeFacts":"Faits de connaissance","analytics.connections":"Connexions","analytics.topics":"Sujets","analytics.insights":"Aperçus","analytics.thisWeek":"Cette semaine","analytics.new":"nouvelles","analytics.stale":"Inactives (30+ jours sans utilisation)","analytics.archivedLabel":"Archivées","analytics.mostRecalled":"Les plus consultées","settings.capabilities":"Capacités","settings.smartMode":"Mode intelligent","settings.core":"Base","settings.embeddings":"Embeddings","settings.llmProvider":"Fournisseur LLM","settings.apiKey":"Clé API","settings.model":"Modèle (optionnel)","settings.save":"Enregistrer","settings.saving":"Enregistrement…","settings.saved":"Enregistré ! Redémarrez le serveur pour appliquer les paramètres LLM.","settings.language":"Langue","feedback.button":"💬 Retour","common.error":"Erreur","common.loading":"Chargement…"},de:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Verbunden","header.disconnected":"Getrennt","header.connecting":"Verbinden…","header.memories":"Erinnerungen","tab.search":"Suche","tab.browse":"Durchsuchen","tab.analytics":"Analyse","tab.manage":"Verwalten","tab.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.facts":"Fakten","browse.title":"Alle Erinnerungen","browse.manage":"Erinnerungen verwalten","browse.active":"aktiv","browse.archived":"archiviert","browse.filter":"Nach Inhalt, Typ oder Tag filtern…","browse.refresh":"Aktualisieren","browse.noMemories":"Noch keine Erinnerungen","browse.noMatch":"Keine passenden Erinnerungen:","browse.prev":"← Zurück","browse.next":"Weiter →","browse.archive":"Archivieren","browse.restore":"Wiederherstellen","browse.confirmArchive":"Diese Erinnerung archivieren?","browse.moreArchived":"archivierte Erinnerungen","analytics.totalMemories":"Erinnerungen gesamt","analytics.knowledgeFacts":"Wissensfakten","analytics.connections":"Verbindungen","analytics.topics":"Themen","analytics.insights":"Einblicke","analytics.thisWeek":"Diese Woche","analytics.new":"neue","analytics.stale":"Inaktiv (30+ Tage ungenutzt)","analytics.archivedLabel":"Archiviert","analytics.mostRecalled":"Am häufigsten abgerufen","settings.capabilities":"Fähigkeiten","settings.smartMode":"Smart-Modus","settings.core":"Basis","settings.embeddings":"Embeddings","settings.llmProvider":"LLM-Anbieter","settings.apiKey":"API-Schlüssel","settings.model":"Modell (optional)","settings.save":"Speichern","settings.saving":"Speichern…","settings.saved":"Gespeichert! Server neu starten, um LLM-Einstellungen anzuwenden.","settings.language":"Sprache","feedback.button":"💬 Feedback","common.error":"Fehler","common.loading":"Laden…"},vi:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Đã kết nối","header.disconnected":"Mất kết nối","header.connecting":"Đang kết nối…","header.memories":"ký ức","tab.search":"Tìm kiếm","tab.browse":"Duyệt","tab.analytics":"Phân tích","tab.manage":"Quản lý","tab.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.facts":"sự kiện","browse.title":"Tất cả ký ức","browse.manage":"Quản lý ký ức","browse.active":"hoạt động","browse.archived":"đã lưu trữ","browse.filter":"Lọc theo nội dung, loại hoặc thẻ…","browse.refresh":"Làm mới","browse.noMemories":"Chưa có ký ức","browse.noMatch":"Không có ký ức phù hợp:","browse.prev":"← Trước","browse.next":"Tiếp →","browse.archive":"Lưu trữ","browse.restore":"Khôi phục","browse.confirmArchive":"Lưu trữ ký ức này?","browse.moreArchived":"ký ức đã lưu trữ","analytics.totalMemories":"Tổng ký ức","analytics.knowledgeFacts":"Sự kiện tri thức","analytics.connections":"Kết nối","analytics.topics":"Chủ đề","analytics.insights":"Thông tin","analytics.thisWeek":"Tuần này","analytics.new":"mới","analytics.stale":"Không hoạt động (30+ ngày)","analytics.archivedLabel":"Đã lưu trữ","analytics.mostRecalled":"Được truy xuất nhiều nhất","settings.capabilities":"Khả năng","settings.smartMode":"Chế độ thông minh","settings.core":"Cơ bản","settings.embeddings":"Embeddings","settings.llmProvider":"Nhà cung cấp LLM","settings.apiKey":"Khóa API","settings.model":"Mô hình (tùy chọn)","settings.save":"Lưu","settings.saving":"Đang lưu…","settings.saved":"Đã lưu! Khởi động lại server để áp dụng cài đặt LLM.","settings.language":"Ngôn ngữ","feedback.button":"💬 Phản hồi","common.error":"Lỗi","common.loading":"Đang tải…"},es:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Conectado","header.disconnected":"Desconectado","header.connecting":"Conectando…","header.memories":"memorias","tab.search":"Buscar","tab.browse":"Explorar","tab.analytics":"Análisis","tab.manage":"Gestionar","tab.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.facts":"hechos","browse.title":"Todas las memorias","browse.manage":"Gestionar memorias","browse.active":"activas","browse.archived":"archivadas","browse.filter":"Filtrar por contenido, tipo o etiqueta…","browse.refresh":"Actualizar","browse.noMemories":"Aún no hay memorias","browse.noMatch":"No hay memorias que coincidan con","browse.prev":"← Anterior","browse.next":"Siguiente →","browse.archive":"Archivar","browse.restore":"Restaurar","browse.confirmArchive":"¿Archivar esta memoria?","browse.moreArchived":"memorias archivadas","analytics.totalMemories":"Total de memorias","analytics.knowledgeFacts":"Hechos","analytics.connections":"Conexiones","analytics.topics":"Temas","analytics.insights":"Información","analytics.thisWeek":"Esta semana","analytics.new":"nuevas","analytics.stale":"Inactivas (30+ días sin uso)","analytics.archivedLabel":"Archivadas","analytics.mostRecalled":"Más consultadas","settings.capabilities":"Capacidades","settings.smartMode":"Modo inteligente","settings.core":"Base","settings.embeddings":"Embeddings","settings.llmProvider":"Proveedor LLM","settings.apiKey":"Clave API","settings.model":"Modelo (opcional)","settings.save":"Guardar","settings.saving":"Guardando…","settings.saved":"¡Guardado! Reinicie el servidor para aplicar la configuración LLM.","settings.language":"Idioma","feedback.button":"💬 Comentarios","common.error":"Error","common.loading":"Cargando…"},th:{"brand.subtitle":"powered by pcircle.ai","header.connected":"เชื่อมต่อแล้ว","header.disconnected":"ไม่ได้เชื่อมต่อ","header.connecting":"กำลังเชื่อมต่อ…","header.memories":"ความทรงจำ","tab.search":"ค้นหา","tab.browse":"เรียกดู","tab.analytics":"วิเคราะห์","tab.manage":"จัดการ","tab.settings":"ตั้งค่า","search.title":"ค้นหาความทรงจำ","search.placeholder":'ค้นหาความทรงจำ… (เช่น "auth", "ฐานข้อมูล", "แก้บั๊ก")',"search.button":"ค้นหา","search.searching":"กำลังค้นหา…","search.results":"ผลลัพธ์","search.result":"ผลลัพธ์","search.noResults":"ไม่พบผลลัพธ์สำหรับ","search.facts":"ข้อเท็จจริง","browse.title":"ความทรงจำทั้งหมด","browse.manage":"จัดการความทรงจำ","browse.active":"ใช้งานอยู่","browse.archived":"เก็บถาวร","browse.filter":"กรองตามเนื้อหา ประเภท หรือแท็ก…","browse.refresh":"รีเฟรช","browse.noMemories":"ยังไม่มีความทรงจำ","browse.noMatch":"ไม่พบความทรงจำที่ตรงกัน:","browse.prev":"← ก่อนหน้า","browse.next":"ถัดไป →","browse.archive":"เก็บถาวร","browse.restore":"กู้คืน","browse.confirmArchive":"เก็บถาวรความทรงจำนี้?","browse.moreArchived":"ความทรงจำที่เก็บถาวร","analytics.totalMemories":"ความทรงจำทั้งหมด","analytics.knowledgeFacts":"ข้อเท็จจริง","analytics.connections":"การเชื่อมต่อ","analytics.topics":"หัวข้อ","analytics.insights":"ข้อมูลเชิงลึก","analytics.thisWeek":"สัปดาห์นี้","analytics.new":"ใหม่","analytics.stale":"ไม่ได้ใช้งาน (30+ วัน)","analytics.archivedLabel":"เก็บถาวร","analytics.mostRecalled":"ถูกเรียกดูมากที่สุด","settings.capabilities":"ความสามารถ","settings.smartMode":"โหมดอัจฉริยะ","settings.core":"พื้นฐาน","settings.embeddings":"Embeddings","settings.llmProvider":"ผู้ให้บริการ LLM","settings.apiKey":"คีย์ API","settings.model":"โมเดล (ไม่บังคับ)","settings.save":"บันทึก","settings.saving":"กำลังบันทึก…","settings.saved":"บันทึกแล้ว! รีสตาร์ทเซิร์ฟเวอร์เพื่อใช้การตั้งค่า LLM","settings.language":"ภาษา","feedback.button":"💬 ความคิดเห็น","common.error":"ข้อผิดพลาด","common.loading":"กำลังโหลด…"}},Xe={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 $="en";function et(){const e=localStorage.getItem("memesh-locale");if(e&&V[e])return e;const t=navigator.language;if(t.startsWith("zh-TW")||t.startsWith("zh-Hant"))return"zh-TW";if(t.startsWith("zh"))return"zh-CN";const s=t.split("-")[0];return V[s]?s:"en"}function tt(){return $=et(),$}function st(e){$=e,localStorage.setItem("memesh-locale",e)}function u(e){return V[$]?.[e]||V.en[e]||e}function nt(){return $}function rt(){return Object.entries(Xe).map(([e,t])=>({code:e,name:t}))}function at({health:e,error:t}){return n("div",{class:"header",children:[n("div",{class:"header-brand",children:[n("h1",{children:"MeMesh LLM Memory"}),n("small",{children:u("brand.subtitle")})]}),n("div",{class:"header-right",children:n("div",{class:"header-meta",children:e?n(R,{children:[n("span",{children:[n("span",{class:"dot dot-ok"}),u("header.connected")]}),n("span",{class:"badge-version",children:["v",e.version," · ",e.entity_count.toLocaleString()," ",u("header.memories")]})]}):t?n("span",{children:[n("span",{class:"dot dot-err"}),u("header.disconnected")]}):n("span",{style:{color:"var(--text-3)"},children:u("header.connecting")})})})]})}function it({tabs:e,active:t,onSelect:s}){return n("nav",{class:"nav",children:e.map(({key:a,label:i})=>n("button",{class:`nav-btn ${a===t?"active":""}`,onClick:()=>s(a),children:i},a))})}const ot=1e4;async function P(e,t,s){const a=new AbortController,i=setTimeout(()=>a.abort(),ot);try{const r={method:e,headers:{"Content-Type":"application/json"},signal:a.signal};s&&(r.body=JSON.stringify(s));const c=await fetch(t,r);if(!c.ok)throw new Error(`HTTP ${c.status}`);const d=await c.json();if(!d.success)throw new Error(d.error||"Unknown error");return d.data}catch(r){throw r.name==="AbortError"?new Error("Request timed out"):r}finally{clearTimeout(i)}}function ct(e){try{const t=new Date(e);return{date:t.toLocaleDateString(void 0,{month:"short",day:"numeric"}),time:t.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"})}}catch{return{date:"—",time:""}}}function Le(e,t){return e.length>t?e.slice(0,t)+"…":e}function ie({entity:e,actions:t,highlight:s}){const a=ct(e.created_at),i=e.observations?.[0]||"(no content)",r=e.observations?.length||0,c=e.archived||e.status==="archived";return n("div",{class:"mem-row",style:c?{opacity:.45}:void 0,children:[n("div",{class:"mem-time",children:[n("div",{children:a.date}),n("div",{children:a.time})]}),n("div",{class:"mem-body",children:[n("div",{class:"mem-preview",children:s?n(lt,{text:Le(i,140),term:s}):Le(i,140)}),n("div",{class:"mem-meta",children:[n("span",{class:"badge badge-type",children:e.type}),c&&n("span",{class:"badge badge-archived",children:"archived"}),n("span",{children:e.name}),r>1&&n("span",{children:["· ",r," facts"]}),e.tags?.slice(0,3).map(d=>n("span",{class:"tag",children:d},d)),(e.tags?.length||0)>3&&n("span",{class:"tag",style:{opacity:.5},children:["+",e.tags.length-3]})]})]}),t&&n("div",{class:"mem-actions",children:t})]})}function lt({text:e,term:t}){if(!t)return n(R,{children:e});const s=[],a=e.toLowerCase(),i=t.toLowerCase();let r=0;for(;r<e.length;){const c=a.indexOf(i,r);if(c===-1){s.push(e.slice(r));break}c>r&&s.push(e.slice(r,c)),s.push(n("mark",{children:e.slice(c,c+i.length)})),r=c+i.length}return n(R,{children:s})}function dt(){const[e,t]=M(""),[s,a]=M(null),[i,r]=M(!1),[c,d]=M("");async function _(){if(e.trim()){r(!0),d("");try{const l=await P("POST","/v1/recall",{query:e.trim(),limit:30}),m=Array.isArray(l)?l:l.entities||[];a(m)}catch(l){d(l.message)}finally{r(!1)}}}return n("div",{children:n("div",{class:"card",children:[n("div",{class:"card-title",children:u("search.title")}),n("div",{class:"search-bar",children:[n("input",{type:"search",placeholder:u("search.placeholder"),value:e,onInput:l=>t(l.target.value),onKeyDown:l=>l.key==="Enter"&&_()}),n("button",{class:"btn btn-primary",onClick:_,disabled:i,children:u(i?"search.searching":"search.button")})]}),c&&n("div",{class:"error-box",children:c}),i&&n("div",{class:"empty",children:n("div",{class:"loading"})}),!i&&s!==null&&s.length===0&&n("div",{class:"empty",children:[n("span",{class:"empty-icon",children:"🔍"}),u("search.noResults"),' "',e,'"']}),!i&&s&&s.length>0&&n("div",{children:[n("div",{style:{fontSize:12,color:"var(--text-3)",marginBottom:12},children:[s.length," ",s.length!==1?u("search.results"):u("search.result")]}),s.map(l=>n("div",{class:"card",style:{padding:14},children:n(ie,{entity:l,highlight:e})},l.id))]})]})})}const ee=30;function Se({manage:e}){const[t,s]=M([]),[a,i]=M(""),[r,c]=M(!0),[d,_]=M(""),[l,m]=M(0);async function o(){c(!0),_("");try{const v=await P("GET","/v1/entities?limit=500&status=all");s(v||[]),m(0)}catch(v){_(v.message)}finally{c(!1)}}N(()=>{o()},[]),N(()=>{m(0)},[a]);const b=a.toLowerCase(),h=t.filter(v=>b?v.name.toLowerCase().includes(b)||v.type.toLowerCase().includes(b)||v.observations?.some(A=>A.toLowerCase().includes(b))||v.tags?.some(A=>A.toLowerCase().includes(b)):!0),f=h.filter(v=>!v.archived&&v.status!=="archived"),p=h.filter(v=>v.archived||v.status==="archived"),g=Math.ceil(f.length/ee),y=f.slice(l*ee,(l+1)*ee);async function w(v){if(confirm(u("browse.confirmArchive")))try{await P("POST","/v1/forget",{name:v}),o()}catch(A){_("Failed to archive: "+A.message)}}async function x(v){try{await P("POST","/v1/remember",{name:v,type:"restored"}),o()}catch(A){_("Failed to restore: "+A.message)}}return n("div",{children:n("div",{class:"card",children:[n("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:16},children:[n("div",{children:[n("div",{class:"card-title",style:{margin:0},children:u(e?"browse.manage":"browse.title")}),!r&&n("div",{style:{fontSize:12,color:"var(--text-3)",marginTop:2},children:[f.length.toLocaleString()," ",u("browse.active"),p.length>0?` · ${p.length} ${u("browse.archived")}`:""]})]}),n("div",{style:{display:"flex",gap:8},children:[n("input",{type:"search",placeholder:u("browse.filter"),value:a,onInput:v=>i(v.target.value),style:{width:260}}),n("button",{class:"btn btn-sm",onClick:o,title:u("browse.refresh"),children:"↻"})]})]}),d&&n("div",{class:"error-box",style:{marginBottom:12},children:d}),r&&n("div",{class:"empty",children:n("div",{class:"loading"})}),!r&&h.length===0&&n("div",{class:"empty",children:[n("span",{class:"empty-icon",children:"📭"}),a?`${u("browse.noMatch")} "${a}"`:u("browse.noMemories")]}),!r&&y.length>0&&n("div",{children:[y.map(v=>n("div",{style:{borderBottom:"1px solid var(--border-subtle)",padding:"14px 0"},children:n(ie,{entity:v,highlight:a,actions:e?n("button",{class:"btn btn-danger btn-sm",onClick:()=>w(v.name),children:u("browse.archive")}):void 0})},v.id)),g>1&&n("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",gap:12,padding:"16px 0",fontSize:13},children:[n("button",{class:"btn btn-sm",disabled:l===0,onClick:()=>m(v=>v-1),children:u("browse.prev")}),n("span",{style:{color:"var(--text-3)",fontFamily:"var(--mono)",fontSize:12},children:[l+1," / ",g]}),n("button",{class:"btn btn-sm",disabled:l>=g-1,onClick:()=>m(v=>v+1),children:u("browse.next")})]})]}),!r&&p.length>0&&n("div",{style:{marginTop:20},children:[n("div",{style:{fontSize:11,color:"var(--text-3)",textTransform:"uppercase",letterSpacing:".06em",marginBottom:8,paddingBottom:8,borderBottom:"1px solid var(--border)"},children:[u("browse.archived")," (",p.length,")"]}),p.slice(0,10).map(v=>n("div",{style:{borderBottom:"1px solid var(--border-subtle)",padding:"14px 0"},children:n(ie,{entity:v,highlight:a,actions:e?n("button",{class:"btn btn-sm",onClick:()=>x(v.name),children:u("browse.restore")}):void 0})},v.id)),p.length>10&&n("div",{style:{fontSize:12,color:"var(--text-3)",padding:"12px 0",textAlign:"center"},children:["+",p.length-10," ",u("browse.moreArchived")]})]})]})})}function ht(){const[e,t]=M(null),[s,a]=M([]),[i,r]=M(!0);if(N(()=>{Promise.all([P("GET","/v1/stats"),P("GET","/v1/entities?limit=500&status=all")]).then(([h,f])=>{t(h),a(f||[])}).finally(()=>r(!1))},[]),i)return n("div",{class:"empty",children:n("div",{class:"loading"})});if(!e)return n("div",{class:"error-box",children:[u("common.error"),": Failed to load analytics"]});const c=Date.now(),d=10080*60*1e3,_=720*60*60*1e3,l=s.filter(h=>c-new Date(h.created_at).getTime()<d).length,m=s.filter(h=>h.archived||h.status==="archived"?!1:h.last_accessed_at?c-new Date(h.last_accessed_at).getTime()>_:!0).length,o=s.filter(h=>h.archived||h.status==="archived").length,b=s.filter(h=>(h.access_count||0)>0).sort((h,f)=>(f.access_count||0)-(h.access_count||0)).slice(0,5);return n("div",{children:[n("div",{class:"stats-row",children:[n("div",{class:"stat",children:[n("div",{class:"stat-val",children:e.totalEntities.toLocaleString()}),n("div",{class:"stat-lbl",children:u("analytics.totalMemories")})]}),n("div",{class:"stat",children:[n("div",{class:"stat-val",children:e.totalObservations.toLocaleString()}),n("div",{class:"stat-lbl",children:u("analytics.knowledgeFacts")})]}),n("div",{class:"stat",children:[n("div",{class:"stat-val",children:e.totalRelations.toLocaleString()}),n("div",{class:"stat-lbl",children:u("analytics.connections")})]}),n("div",{class:"stat",children:[n("div",{class:"stat-val",children:e.totalTags.toLocaleString()}),n("div",{class:"stat-lbl",children:u("analytics.topics")})]})]}),n("div",{class:"card",children:[n("div",{class:"card-title",children:u("analytics.insights")}),n("div",{class:"insight",children:[n("span",{class:"insight-icon",children:"📝"}),n("span",{class:"insight-text",children:u("analytics.thisWeek")}),n("span",{class:"insight-val",children:[l," ",u("analytics.new")]})]}),n("div",{class:"insight",children:[n("span",{class:"insight-icon",children:"💤"}),n("span",{class:"insight-text",children:u("analytics.stale")}),n("span",{class:"insight-val",children:m})]}),n("div",{class:"insight",children:[n("span",{class:"insight-icon",children:"📦"}),n("span",{class:"insight-text",children:u("analytics.archivedLabel")}),n("span",{class:"insight-val",children:o})]})]}),b.length>0&&n("div",{class:"card",children:[n("div",{class:"card-title",children:u("analytics.mostRecalled")}),b.map((h,f)=>{const p=["Commit:","[SESSION]","Branch:","Diff stats:","Details:","[WORK]","[FOCUS]","[SUMMARY]","Session edited","Total tool calls","Duration:"],g=(h.observations||[]).find(w=>!p.some(x=>w.startsWith(x))&&w.length>10)||h.observations?.[0]||h.name,y=g.length>80?g.slice(0,80)+"…":g;return n("div",{class:"insight",children:[n("span",{class:"insight-icon",style:{fontSize:14,color:"var(--text-3)"},children:["#",f+1]}),n("span",{class:"insight-text",style:{flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:y}),n("span",{class:"insight-val",children:[h.access_count,"×"]})]},h.id)})]}),(()=>{const h=["auto_saved","auto-tracked","session_end","session:","source:","scope:","date:","urgency:"],f=e.tagDistribution.filter(p=>!h.some(g=>p.tag.startsWith(g))&&!/^\d{4}-\d{2}-\d{2}/.test(p.tag));return f.length>0?n("div",{class:"card",children:[n("div",{class:"card-title",children:u("analytics.topics")}),n("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:f.slice(0,30).map(p=>n("span",{class:"tag",style:{fontSize:Math.max(11,Math.min(15,10+Math.log2(p.count+1)))+"px"},children:[p.tag," ",n("span",{style:{opacity:.5},children:["(",p.count,")"]})]},p.tag))})]}):null})()]})}function Ae(e){return e&&e.charAt(0).toUpperCase()+e.slice(1)}function _t(){const[e,t]=M(null),[s,a]=M(""),[i,r]=M(""),[c,d]=M(""),[_,l]=M(!1),[m,o]=M(""),[b,h]=M(!0);N(()=>{P("GET","/v1/config").then(g=>{t(g),a(g.config.llm?.provider||""),d(g.config.llm?.model||"")}).finally(()=>h(!1))},[]);async function f(){l(!0),o("");try{const g={provider:s};c&&(g.model=c),i&&(g.apiKey=i),await P("POST","/v1/config",{llm:g}),o(u("settings.saved")),r("")}catch(g){o(u("common.error")+": "+g.message)}finally{l(!1)}}if(b)return n("div",{class:"empty",children:n("div",{class:"loading"})});const p=e?.capabilities;return n("div",{children:[n("div",{class:"card",children:[n("div",{class:"card-title",children:u("settings.capabilities")}),n("div",{class:"stats-row",style:{marginBottom:0},children:[n("div",{class:"stat",children:[n("div",{class:"stat-val",style:{fontSize:18},children:["Level ",p?.searchLevel||0]}),n("div",{class:"stat-lbl",children:p?.searchLevel?u("settings.smartMode"):u("settings.core")})]}),n("div",{class:"stat",children:[n("div",{class:"stat-val",style:{fontSize:14},children:Ae(p?.embeddings||"—")}),n("div",{class:"stat-lbl",children:u("settings.embeddings")})]}),n("div",{class:"stat",children:[n("div",{class:"stat-val",style:{fontSize:14},children:Ae(p?.llm?.provider||"None")}),n("div",{class:"stat-lbl",children:u("settings.llmProvider")})]})]})]}),n("div",{class:"card",children:[n("div",{class:"card-title",children:u("settings.llmProvider")}),n("div",{style:{display:"flex",gap:16,marginBottom:14},children:[["anthropic","Anthropic (Claude)"],["openai","OpenAI"],["ollama","Ollama (Local)"]].map(([g,y])=>n("label",{style:{display:"flex",alignItems:"center",gap:5,cursor:"pointer",fontSize:13},children:[n("input",{type:"radio",name:"provider",value:g,checked:s===g,onChange:()=>a(g)}),y]},g))}),s&&s!=="ollama"&&n("div",{style:{marginBottom:12},children:[n("label",{style:{fontSize:12,color:"var(--text-2)",display:"block",marginBottom:4},children:u("settings.apiKey")}),n("input",{type:"password",placeholder:s==="anthropic"?"sk-ant-api03-…":"sk-…",value:i,onInput:g=>r(g.target.value)})]}),n("div",{style:{marginBottom:14},children:[n("label",{style:{fontSize:12,color:"var(--text-2)",display:"block",marginBottom:4},children:u("settings.model")}),n("input",{type:"text",placeholder:s==="anthropic"?"claude-haiku-4-5":s==="openai"?"gpt-4o-mini":"llama3.2",value:c,onInput:g=>d(g.target.value)})]}),n("div",{style:{display:"flex",gap:10,alignItems:"center"},children:[n("button",{class:"btn btn-primary",onClick:f,disabled:!s||_,children:u(_?"settings.saving":"settings.save")}),m&&n("span",{style:{fontSize:12,color:m.startsWith(u("common.error"))?"var(--danger)":"var(--success)"},children:m})]})]}),n("div",{class:"card",children:[n("div",{class:"card-title",children:u("settings.language")}),n("select",{value:nt(),onChange:g=>{st(g.target.value),window.location.reload()},style:{fontSize:13,padding:"6px 10px",borderRadius:6,border:"1px solid var(--border)",background:"var(--surface)",color:"var(--text-1)",cursor:"pointer"},children:rt().map(g=>n("option",{value:g.code,children:g.name},g.code))})]})]})}tt();const ut=["Search","Browse","Analytics","Manage","Settings"],gt={Search:"tab.search",Browse:"tab.browse",Analytics:"tab.analytics",Manage:"tab.manage",Settings:"tab.settings"};function mt(){const[e,t]=M("Browse"),[s,a]=M(null),[i,r]=M("");N(()=>{P("GET","/v1/health").then(a).catch(d=>r(d.message))},[]);const c=ut.map(d=>({key:d,label:u(gt[d])}));return n("div",{class:"shell",children:[n(at,{health:s,error:i}),n(it,{tabs:c,active:e,onSelect:d=>t(d)}),n("div",{class:"main",children:[n("div",{class:`panel ${e==="Search"?"active":""}`,children:n(dt,{})}),n("div",{class:`panel ${e==="Browse"?"active":""}`,children:n(Se,{})}),n("div",{class:`panel ${e==="Analytics"?"active":""}`,children:n(ht,{})}),n("div",{class:`panel ${e==="Manage"?"active":""}`,children:e==="Manage"&&n(Se,{manage:!0})}),n("div",{class:`panel ${e==="Settings"?"active":""}`,children:e==="Settings"&&n(_t,{})})]}),n("button",{class:"fb-btn",onClick:()=>{const d="https://github.com/PCIRCLE-AI/memesh-llm-memory/issues/new?title="+encodeURIComponent("[Feedback] ")+"&labels=feedback,from-dashboard";window.open(d,"_blank")},children:u("feedback.button")})]})}je(n(mt,{}),document.getElementById("app"));</script>
|
|
10
|
+
<script type="module" crossorigin>(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))a(i);new MutationObserver(i=>{for(const r of i)if(r.type==="childList")for(const o of r.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&a(o)}).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 a(i){if(i.ep)return;i.ep=!0;const r=n(i);fetch(i.href,r)}})();var he,C,je,H,Ee,qe,Ye,ge,ne,X,Ve,xe,pe,fe,oe={},ce=[],ht=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,ue=Array.isArray;function D(e,t){for(var n in t)e[n]=t[n];return e}function ke(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function ut(e,t,n){var a,i,r,o={};for(r in t)r=="key"?a=t[r]:r=="ref"?i=t[r]:o[r]=t[r];if(arguments.length>2&&(o.children=arguments.length>3?he.call(arguments,2):n),typeof e=="function"&&e.defaultProps!=null)for(r in e.defaultProps)o[r]===void 0&&(o[r]=e.defaultProps[r]);return re(e,o,a,i,null)}function re(e,t,n,a,i){var r={type:e,props:t,key:n,ref:a,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:i??++je,__i:-1,__u:0};return i==null&&C.vnode!=null&&C.vnode(r),r}function G(e){return e.children}function ie(e,t){this.props=e,this.context=t}function j(e,t){if(t==null)return e.__?j(e.__,e.__i+1):null;for(var n;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null)return n.__e;return typeof e.type=="function"?j(e):null}function gt(e){if(e.__P&&e.__d){var t=e.__v,n=t.__e,a=[],i=[],r=D({},t);r.__v=t.__v+1,C.vnode&&C.vnode(r),Me(e.__P,r,t,e.__n,e.__P.namespaceURI,32&t.__u?[n]:null,a,n??j(t),!!(32&t.__u),i),r.__v=t.__v,r.__.__k[r.__i]=r,Ze(a,r,i),t.__e=t.__=null,r.__e!=n&&Qe(r)}}function Qe(e){if((e=e.__)!=null&&e.__c!=null)return e.__e=e.__c.base=null,e.__k.some(function(t){if(t!=null&&t.__e!=null)return e.__e=e.__c.base=t.__e}),Qe(e)}function Pe(e){(!e.__d&&(e.__d=!0)&&H.push(e)&&!le.__r++||Ee!=C.debounceRendering)&&((Ee=C.debounceRendering)||qe)(le)}function le(){try{for(var e,t=1;H.length;)H.length>t&&H.sort(Ye),e=H.shift(),t=H.length,gt(e)}finally{H.length=le.__r=0}}function Xe(e,t,n,a,i,r,o,d,_,l,m){var c,p,h,b,x,v,k,M=a&&a.__k||ce,y=t.length;for(_=_t(n,t,M,_,y),c=0;c<y;c++)(h=n.__k[c])!=null&&(p=h.__i!=-1&&M[h.__i]||oe,h.__i=c,v=Me(e,h,p,i,r,o,d,_,l,m),b=h.__e,h.ref&&p.ref!=h.ref&&(p.ref&&Le(p.ref,null,h),m.push(h.ref,h.__c||b,h)),x==null&&b!=null&&(x=b),(k=!!(4&h.__u))||p.__k===h.__k?(_=Je(h,_,e,k),k&&p.__e&&(p.__e=null)):typeof h.type=="function"&&v!==void 0?_=v:b&&(_=b.nextSibling),h.__u&=-7);return n.__e=x,_}function _t(e,t,n,a,i){var r,o,d,_,l,m=n.length,c=m,p=0;for(e.__k=new Array(i),r=0;r<i;r++)(o=t[r])!=null&&typeof o!="boolean"&&typeof o!="function"?(typeof o=="string"||typeof o=="number"||typeof o=="bigint"||o.constructor==String?o=e.__k[r]=re(null,o,null,null,null):ue(o)?o=e.__k[r]=re(G,{children:o},null,null,null):o.constructor===void 0&&o.__b>0?o=e.__k[r]=re(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):e.__k[r]=o,_=r+p,o.__=e,o.__b=e.__b+1,d=null,(l=o.__i=mt(o,n,_,c))!=-1&&(c--,(d=n[l])&&(d.__u|=2)),d==null||d.__v==null?(l==-1&&(i>m?p--:i<m&&p++),typeof o.type!="function"&&(o.__u|=4)):l!=_&&(l==_-1?p--:l==_+1?p++:(l>_?p--:p++,o.__u|=4))):e.__k[r]=null;if(c)for(r=0;r<m;r++)(d=n[r])!=null&&(2&d.__u)==0&&(d.__e==a&&(a=j(d)),tt(d,d));return a}function Je(e,t,n,a){var i,r;if(typeof e.type=="function"){for(i=e.__k,r=0;i&&r<i.length;r++)i[r]&&(i[r].__=e,t=Je(i[r],t,n,a));return t}e.__e!=t&&(a&&(t&&e.type&&!t.parentNode&&(t=j(e)),n.insertBefore(e.__e,t||null)),t=e.__e);do t=t&&t.nextSibling;while(t!=null&&t.nodeType==8);return t}function mt(e,t,n,a){var i,r,o,d=e.key,_=e.type,l=t[n],m=l!=null&&(2&l.__u)==0;if(l===null&&d==null||m&&d==l.key&&_==l.type)return n;if(a>(m?1:0)){for(i=n-1,r=n+1;i>=0||r<t.length;)if((l=t[o=i>=0?i--:r++])!=null&&(2&l.__u)==0&&d==l.key&&_==l.type)return o}return-1}function Re(e,t,n){t[0]=="-"?e.setProperty(t,n??""):e[t]=n==null?"":typeof n!="number"||ht.test(t)?n:n+"px"}function se(e,t,n,a,i){var r,o;e:if(t=="style")if(typeof n=="string")e.style.cssText=n;else{if(typeof a=="string"&&(e.style.cssText=a=""),a)for(t in a)n&&t in n||Re(e.style,t,"");if(n)for(t in n)a&&n[t]==a[t]||Re(e.style,t,n[t])}else if(t[0]=="o"&&t[1]=="n")r=t!=(t=t.replace(Ve,"$1")),o=t.toLowerCase(),t=o in e||t=="onFocusOut"||t=="onFocusIn"?o.slice(2):t.slice(2),e.l||(e.l={}),e.l[t+r]=n,n?a?n[X]=a[X]:(n[X]=xe,e.addEventListener(t,r?fe:pe,r)):e.removeEventListener(t,r?fe:pe,r);else{if(i=="http://www.w3.org/2000/svg")t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(t!="width"&&t!="height"&&t!="href"&&t!="list"&&t!="form"&&t!="tabIndex"&&t!="download"&&t!="rowSpan"&&t!="colSpan"&&t!="role"&&t!="popover"&&t in e)try{e[t]=n??"";break e}catch{}typeof n=="function"||(n==null||n===!1&&t[4]!="-"?e.removeAttribute(t):e.setAttribute(t,t=="popover"&&n==1?"":n))}}function Be(e){return function(t){if(this.l){var n=this.l[t.type+e];if(t[ne]==null)t[ne]=xe++;else if(t[ne]<n[X])return;return n(C.event?C.event(t):t)}}}function Me(e,t,n,a,i,r,o,d,_,l){var m,c,p,h,b,x,v,k,M,y,g,w,B,N,A,I=t.type;if(t.constructor!==void 0)return null;128&n.__u&&(_=!!(32&n.__u),r=[d=t.__e=n.__e]),(m=C.__b)&&m(t);e:if(typeof I=="function")try{if(k=t.props,M=I.prototype&&I.prototype.render,y=(m=I.contextType)&&a[m.__c],g=m?y?y.props.value:m.__:a,n.__c?v=(c=t.__c=n.__c).__=c.__E:(M?t.__c=c=new I(k,g):(t.__c=c=new ie(k,g),c.constructor=I,c.render=pt),y&&y.sub(c),c.state||(c.state={}),c.__n=a,p=c.__d=!0,c.__h=[],c._sb=[]),M&&c.__s==null&&(c.__s=c.state),M&&I.getDerivedStateFromProps!=null&&(c.__s==c.state&&(c.__s=D({},c.__s)),D(c.__s,I.getDerivedStateFromProps(k,c.__s))),h=c.props,b=c.state,c.__v=t,p)M&&I.getDerivedStateFromProps==null&&c.componentWillMount!=null&&c.componentWillMount(),M&&c.componentDidMount!=null&&c.__h.push(c.componentDidMount);else{if(M&&I.getDerivedStateFromProps==null&&k!==h&&c.componentWillReceiveProps!=null&&c.componentWillReceiveProps(k,g),t.__v==n.__v||!c.__e&&c.shouldComponentUpdate!=null&&c.shouldComponentUpdate(k,c.__s,g)===!1){t.__v!=n.__v&&(c.props=k,c.state=c.__s,c.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.some(function(z){z&&(z.__=t)}),ce.push.apply(c.__h,c._sb),c._sb=[],c.__h.length&&o.push(c);break e}c.componentWillUpdate!=null&&c.componentWillUpdate(k,c.__s,g),M&&c.componentDidUpdate!=null&&c.__h.push(function(){c.componentDidUpdate(h,b,x)})}if(c.context=g,c.props=k,c.__P=e,c.__e=!1,w=C.__r,B=0,M)c.state=c.__s,c.__d=!1,w&&w(t),m=c.render(c.props,c.state,c.context),ce.push.apply(c.__h,c._sb),c._sb=[];else do c.__d=!1,w&&w(t),m=c.render(c.props,c.state,c.context),c.state=c.__s;while(c.__d&&++B<25);c.state=c.__s,c.getChildContext!=null&&(a=D(D({},a),c.getChildContext())),M&&!p&&c.getSnapshotBeforeUpdate!=null&&(x=c.getSnapshotBeforeUpdate(h,b)),N=m!=null&&m.type===G&&m.key==null?et(m.props.children):m,d=Xe(e,ue(N)?N:[N],t,n,a,i,r,o,d,_,l),c.base=t.__e,t.__u&=-161,c.__h.length&&o.push(c),v&&(c.__E=c.__=null)}catch(z){if(t.__v=null,_||r!=null)if(z.then){for(t.__u|=_?160:128;d&&d.nodeType==8&&d.nextSibling;)d=d.nextSibling;r[r.indexOf(d)]=null,t.__e=d}else{for(A=r.length;A--;)ke(r[A]);be(t)}else t.__e=n.__e,t.__k=n.__k,z.then||be(t);C.__e(z,t,n)}else r==null&&t.__v==n.__v?(t.__k=n.__k,t.__e=n.__e):d=t.__e=vt(n.__e,t,n,a,i,r,o,_,l);return(m=C.diffed)&&m(t),128&t.__u?void 0:d}function be(e){e&&(e.__c&&(e.__c.__e=!0),e.__k&&e.__k.some(be))}function Ze(e,t,n){for(var a=0;a<n.length;a++)Le(n[a],n[++a],n[++a]);C.__c&&C.__c(t,e),e.some(function(i){try{e=i.__h,i.__h=[],e.some(function(r){r.call(i)})}catch(r){C.__e(r,i.__v)}})}function et(e){return typeof e!="object"||e==null||e.__b>0?e:ue(e)?e.map(et):D({},e)}function vt(e,t,n,a,i,r,o,d,_){var l,m,c,p,h,b,x,v=n.props||oe,k=t.props,M=t.type;if(M=="svg"?i="http://www.w3.org/2000/svg":M=="math"?i="http://www.w3.org/1998/Math/MathML":i||(i="http://www.w3.org/1999/xhtml"),r!=null){for(l=0;l<r.length;l++)if((h=r[l])&&"setAttribute"in h==!!M&&(M?h.localName==M:h.nodeType==3)){e=h,r[l]=null;break}}if(e==null){if(M==null)return document.createTextNode(k);e=document.createElementNS(i,M,k.is&&k),d&&(C.__m&&C.__m(t,r),d=!1),r=null}if(M==null)v===k||d&&e.data==k||(e.data=k);else{if(r=r&&he.call(e.childNodes),!d&&r!=null)for(v={},l=0;l<e.attributes.length;l++)v[(h=e.attributes[l]).name]=h.value;for(l in v)h=v[l],l=="dangerouslySetInnerHTML"?c=h:l=="children"||l in k||l=="value"&&"defaultValue"in k||l=="checked"&&"defaultChecked"in k||se(e,l,null,h,i);for(l in k)h=k[l],l=="children"?p=h:l=="dangerouslySetInnerHTML"?m=h:l=="value"?b=h:l=="checked"?x=h:d&&typeof h!="function"||v[l]===h||se(e,l,h,v[l],i);if(m)d||c&&(m.__html==c.__html||m.__html==e.innerHTML)||(e.innerHTML=m.__html),t.__k=[];else if(c&&(e.innerHTML=""),Xe(t.type=="template"?e.content:e,ue(p)?p:[p],t,n,a,M=="foreignObject"?"http://www.w3.org/1999/xhtml":i,r,o,r?r[0]:n.__k&&j(n,0),d,_),r!=null)for(l=r.length;l--;)ke(r[l]);d||(l="value",M=="progress"&&b==null?e.removeAttribute("value"):b!=null&&(b!==e[l]||M=="progress"&&!b||M=="option"&&b!=v[l])&&se(e,l,b,v[l],i),l="checked",x!=null&&x!=e[l]&&se(e,l,x,v[l],i))}return e}function Le(e,t,n){try{if(typeof e=="function"){var a=typeof e.__u=="function";a&&e.__u(),a&&t==null||(e.__u=e(t))}else e.current=t}catch(i){C.__e(i,n)}}function tt(e,t,n){var a,i;if(C.unmount&&C.unmount(e),(a=e.ref)&&(a.current&&a.current!=e.__e||Le(a,null,t)),(a=e.__c)!=null){if(a.componentWillUnmount)try{a.componentWillUnmount()}catch(r){C.__e(r,t)}a.base=a.__P=null}if(a=e.__k)for(i=0;i<a.length;i++)a[i]&&tt(a[i],t,n||typeof e.type!="function");n||ke(e.__e),e.__c=e.__=e.__e=void 0}function pt(e,t,n){return this.constructor(e,n)}function ft(e,t,n){var a,i,r,o;t==document&&(t=document.documentElement),C.__&&C.__(e,t),i=(a=!1)?null:t.__k,r=[],o=[],Me(t,e=t.__k=ut(G,null,[e]),i||oe,oe,t.namespaceURI,i?null:t.firstChild?he.call(t.childNodes):null,r,i?i.__e:t.firstChild,a,o),Ze(r,e,o)}he=ce.slice,C={__e:function(e,t,n,a){for(var i,r,o;t=t.__;)if((i=t.__c)&&!i.__)try{if((r=i.constructor)&&r.getDerivedStateFromError!=null&&(i.setState(r.getDerivedStateFromError(e)),o=i.__d),i.componentDidCatch!=null&&(i.componentDidCatch(e,a||{}),o=i.__d),o)return i.__E=i}catch(d){e=d}throw e}},je=0,ie.prototype.setState=function(e,t){var n;n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=D({},this.state),typeof e=="function"&&(e=e(D({},n),this.props)),e&&D(n,e),e!=null&&this.__v&&(t&&this._sb.push(t),Pe(this))},ie.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Pe(this))},ie.prototype.render=G,H=[],qe=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,Ye=function(e,t){return e.__v.__b-t.__v.__b},le.__r=0,ge=Math.random().toString(8),ne="__d"+ge,X="__a"+ge,Ve=/(PointerCapture)$|Capture$/i,xe=0,pe=Be(!1),fe=Be(!0);var bt=0;function s(e,t,n,a,i,r){t||(t={});var o,d,_=t;if("ref"in _)for(d in _={},t)d=="ref"?o=t[d]:_[d]=t[d];var l={type:e,props:_,key:n,ref:o,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--bt,__i:-1,__u:0,__source:i,__self:r};if(typeof e=="function"&&(o=e.defaultProps))for(d in o)_[d]===void 0&&(_[d]=o[d]);return C.vnode&&C.vnode(l),l}var J,P,_e,Ie,Z=0,st=[],R=C,Fe=R.__b,We=R.__r,Ne=R.diffed,$e=R.__c,ze=R.unmount,De=R.__;function Se(e,t){R.__h&&R.__h(P,e,Z||t),Z=0;var n=P.__H||(P.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function S(e){return Z=1,yt(it,e)}function yt(e,t,n){var a=Se(J++,2);if(a.t=e,!a.__c&&(a.__=[it(void 0,t),function(d){var _=a.__N?a.__N[0]:a.__[0],l=a.t(_,d);_!==l&&(a.__N=[l,a.__[1]],a.__c.setState({}))}],a.__c=P,!P.__f)){var i=function(d,_,l){if(!a.__c.__H)return!0;var m=a.__c.__H.__.filter(function(p){return p.__c});if(m.every(function(p){return!p.__N}))return!r||r.call(this,d,_,l);var c=a.__c.props!==d;return m.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)||c};P.__f=!0;var r=P.shouldComponentUpdate,o=P.componentWillUpdate;P.componentWillUpdate=function(d,_,l){if(this.__e){var m=r;r=void 0,i(d,_,l),r=m}o&&o.call(this,d,_,l)},P.shouldComponentUpdate=i}return a.__N||a.__}function K(e,t){var n=Se(J++,3);!R.__s&&rt(n.__H,t)&&(n.__=e,n.u=t,P.__H.__h.push(n))}function O(e){return Z=5,nt(function(){return{current:e}},[])}function nt(e,t){var n=Se(J++,7);return rt(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function Q(e,t){return Z=8,nt(function(){return e},t)}function wt(){for(var e;e=st.shift();){var t=e.__H;if(e.__P&&t)try{t.__h.some(ae),t.__h.some(ye),t.__h=[]}catch(n){t.__h=[],R.__e(n,e.__v)}}}R.__b=function(e){P=null,Fe&&Fe(e)},R.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),De&&De(e,t)},R.__r=function(e){We&&We(e),J=0;var t=(P=e.__c).__H;t&&(_e===P?(t.__h=[],P.__h=[],t.__.some(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(t.__h.some(ae),t.__h.some(ye),t.__h=[],J=0)),_e=P},R.diffed=function(e){Ne&&Ne(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(st.push(t)!==1&&Ie===R.requestAnimationFrame||((Ie=R.requestAnimationFrame)||xt)(wt)),t.__H.__.some(function(n){n.u&&(n.__H=n.u),n.u=void 0})),_e=P=null},R.__c=function(e,t){t.some(function(n){try{n.__h.some(ae),n.__h=n.__h.filter(function(a){return!a.__||ye(a)})}catch(a){t.some(function(i){i.__h&&(i.__h=[])}),t=[],R.__e(a,n.__v)}}),$e&&$e(e,t)},R.unmount=function(e){ze&&ze(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.some(function(a){try{ae(a)}catch(i){t=i}}),n.__H=void 0,t&&R.__e(t,n.__v))};var He=typeof requestAnimationFrame=="function";function xt(e){var t,n=function(){clearTimeout(a),He&&cancelAnimationFrame(t),setTimeout(e)},a=setTimeout(n,35);He&&(t=requestAnimationFrame(n))}function ae(e){var t=P,n=e.__c;typeof n=="function"&&(e.__c=void 0,n()),P=t}function ye(e){var t=P;e.__c=e.__(),P=t}function rt(e,t){return!e||e.length!==t.length||t.some(function(n,a){return n!==e[a]})}function it(e,t){return typeof t=="function"?t(e):t}const de={en:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Connected","header.disconnected":"Disconnected","header.connecting":"Connecting…","header.memories":"memories","tab.search":"Search","tab.browse":"Browse","tab.analytics":"Analytics","tab.manage":"Manage","tab.graph":"Graph","tab.lessons":"Lessons","tab.settings":"Settings","search.title":"Search Memories","search.placeholder":'Search your memories… (e.g., "auth", "database", "bug fix")',"search.button":"Search","search.searching":"Searching…","search.results":"results","search.result":"result","search.noResults":"No results for","search.facts":"facts","browse.title":"All Memories","browse.manage":"Manage Memories","browse.active":"active","browse.archived":"archived","browse.filter":"Filter by content, type, or tag…","browse.refresh":"Refresh","browse.noMemories":"No memories yet","browse.noMatch":"No memories matching","browse.prev":"← Prev","browse.next":"Next →","browse.archive":"Archive","browse.restore":"Restore","browse.confirmArchive":"Archive this memory?","browse.moreArchived":"more archived memories","analytics.totalMemories":"Total Memories","analytics.knowledgeFacts":"Knowledge Facts","analytics.connections":"Connections","analytics.topics":"Topics","analytics.insights":"Insights","analytics.thisWeek":"This week","analytics.new":"new","analytics.stale":"Stale (30+ days unused)","analytics.archivedLabel":"Archived","analytics.mostRecalled":"Most Recalled","settings.capabilities":"Capabilities","settings.smartMode":"Smart Mode","settings.core":"Core","settings.embeddings":"Embeddings","settings.llmProvider":"LLM Provider","settings.apiKey":"API Key","settings.model":"Model (optional)","settings.save":"Save","settings.saving":"Saving…","settings.saved":"Saved! Restart server for LLM changes to take effect.","settings.language":"Language","graph.entities":"Entities","graph.relations":"Relations","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","common.error":"Error","common.loading":"Loading…"},"zh-TW":{"brand.subtitle":"powered by pcircle.ai","header.connected":"已連線","header.disconnected":"已斷線","header.connecting":"連線中…","header.memories":"筆記憶","tab.search":"搜尋","tab.browse":"瀏覽","tab.analytics":"分析","tab.manage":"管理","tab.graph":"關係圖","tab.lessons":"經驗教訓","tab.settings":"設定","search.title":"搜尋記憶","search.placeholder":"搜尋你的記憶…(例如:「auth」、「資料庫」、「bug 修復」)","search.button":"搜尋","search.searching":"搜尋中…","search.results":"個結果","search.result":"個結果","search.noResults":"找不到符合的結果:","search.facts":"筆事實","browse.title":"所有記憶","browse.manage":"管理記憶","browse.active":"使用中","browse.archived":"已封存","browse.filter":"依內容、類型或標籤篩選…","browse.refresh":"重新整理","browse.noMemories":"尚無記憶","browse.noMatch":"找不到符合的記憶:","browse.prev":"← 上一頁","browse.next":"下一頁 →","browse.archive":"封存","browse.restore":"還原","browse.confirmArchive":"確定要封存此記憶?","browse.moreArchived":"筆已封存的記憶","analytics.totalMemories":"記憶總數","analytics.knowledgeFacts":"知識事實","analytics.connections":"關聯","analytics.topics":"主題","analytics.insights":"洞察","analytics.thisWeek":"本週","analytics.new":"筆新增","analytics.stale":"閒置(30 天以上未使用)","analytics.archivedLabel":"已封存","analytics.mostRecalled":"最常查閱","settings.capabilities":"功能狀態","settings.smartMode":"智慧模式","settings.core":"基礎","settings.embeddings":"嵌入模型","settings.llmProvider":"LLM 提供者","settings.apiKey":"API 金鑰","settings.model":"模型(選填)","settings.save":"儲存","settings.saving":"儲存中…","settings.saved":"已儲存!重啟伺服器以套用 LLM 設定。","settings.language":"語言","graph.entities":"實體","graph.relations":"關聯","lessons.total":"教訓總數","lessons.critical":"嚴重","lessons.empty":"尚無教訓記錄。請使用 learn 工具或啟用智慧模式。","lessons.error":"錯誤","lessons.rootCause":"根本原因","lessons.fix":"修復方式","lessons.prevention":"預防措施","feedback.button":"💬 意見回饋","common.error":"錯誤","common.loading":"載入中…"},"zh-CN":{"brand.subtitle":"powered by pcircle.ai","header.connected":"已连接","header.disconnected":"已断开","header.connecting":"连接中…","header.memories":"条记忆","tab.search":"搜索","tab.browse":"浏览","tab.analytics":"分析","tab.manage":"管理","tab.graph":"关系图","tab.lessons":"经验教训","tab.settings":"设置","search.title":"搜索记忆","search.placeholder":'搜索你的记忆…(例如:"auth"、"数据库"、"bug 修复")',"search.button":"搜索","search.searching":"搜索中…","search.results":"个结果","search.result":"个结果","search.noResults":"没有找到结果:","search.facts":"条事实","browse.title":"所有记忆","browse.manage":"管理记忆","browse.active":"活跃","browse.archived":"已归档","browse.filter":"按内容、类型或标签筛选…","browse.refresh":"刷新","browse.noMemories":"暂无记忆","browse.noMatch":"没有匹配的记忆:","browse.prev":"← 上一页","browse.next":"下一页 →","browse.archive":"归档","browse.restore":"恢复","browse.confirmArchive":"确定要归档此记忆?","browse.moreArchived":"条已归档记忆","analytics.totalMemories":"记忆总数","analytics.knowledgeFacts":"知识事实","analytics.connections":"关联","analytics.topics":"主题","analytics.insights":"洞察","analytics.thisWeek":"本周","analytics.new":"条新增","analytics.stale":"闲置(30 天以上未使用)","analytics.archivedLabel":"已归档","analytics.mostRecalled":"最常查阅","settings.capabilities":"功能状态","settings.smartMode":"智能模式","settings.core":"基础","settings.embeddings":"嵌入模型","settings.llmProvider":"LLM 提供商","settings.apiKey":"API 密钥","settings.model":"模型(选填)","settings.save":"保存","settings.saving":"保存中…","settings.saved":"已保存!重启服务器以应用 LLM 设置。","settings.language":"语言","graph.entities":"实体","graph.relations":"关联","lessons.total":"教训总数","lessons.critical":"严重","lessons.empty":"尚无教训记录。请使用 learn 工具或启用智能模式。","lessons.error":"错误","lessons.rootCause":"根本原因","lessons.fix":"修复方式","lessons.prevention":"预防措施","feedback.button":"💬 反馈","common.error":"错误","common.loading":"加载中…"},ja:{"brand.subtitle":"powered by pcircle.ai","header.connected":"接続中","header.disconnected":"切断","header.connecting":"接続しています…","header.memories":"件のメモリ","tab.search":"検索","tab.browse":"一覧","tab.analytics":"分析","tab.manage":"管理","tab.graph":"グラフ","tab.lessons":"教訓","tab.settings":"設定","search.title":"メモリを検索","search.placeholder":"メモリを検索…(例:「auth」「データベース」「バグ修正」)","search.button":"検索","search.searching":"検索中…","search.results":"件の結果","search.result":"件の結果","search.noResults":"結果が見つかりません:","search.facts":"件の事実","browse.title":"すべてのメモリ","browse.manage":"メモリを管理","browse.active":"アクティブ","browse.archived":"アーカイブ済み","browse.filter":"内容、タイプ、タグで絞り込み…","browse.refresh":"更新","browse.noMemories":"メモリがありません","browse.noMatch":"一致するメモリがありません:","browse.prev":"← 前へ","browse.next":"次へ →","browse.archive":"アーカイブ","browse.restore":"復元","browse.confirmArchive":"このメモリをアーカイブしますか?","browse.moreArchived":"件のアーカイブ済みメモリ","analytics.totalMemories":"メモリ総数","analytics.knowledgeFacts":"知識ファクト","analytics.connections":"接続","analytics.topics":"トピック","analytics.insights":"インサイト","analytics.thisWeek":"今週","analytics.new":"件の新規","analytics.stale":"未使用(30日以上)","analytics.archivedLabel":"アーカイブ済み","analytics.mostRecalled":"よく参照される","settings.capabilities":"機能状態","settings.smartMode":"スマートモード","settings.core":"コア","settings.embeddings":"エンベディング","settings.llmProvider":"LLMプロバイダー","settings.apiKey":"APIキー","settings.model":"モデル(任意)","settings.save":"保存","settings.saving":"保存中…","settings.saved":"保存しました!LLM設定を反映するにはサーバーを再起動してください。","settings.language":"言語","graph.entities":"エンティティ","graph.relations":"リレーション","lessons.total":"教訓の総数","lessons.critical":"重大","lessons.empty":"まだ教訓が記録されていません。learnツールを使用するか、スマートモードを有効にしてください。","lessons.error":"エラー","lessons.rootCause":"根本原因","lessons.fix":"修正方法","lessons.prevention":"予防策","feedback.button":"💬 フィードバック","common.error":"エラー","common.loading":"読み込み中…"},ko:{"brand.subtitle":"powered by pcircle.ai","header.connected":"연결됨","header.disconnected":"연결 끊김","header.connecting":"연결 중…","header.memories":"개의 기억","tab.search":"검색","tab.browse":"둘러보기","tab.analytics":"분석","tab.manage":"관리","tab.graph":"그래프","tab.lessons":"교훈","tab.settings":"설정","search.title":"기억 검색","search.placeholder":'기억 검색… (예: "auth", "데이터베이스", "버그 수정")',"search.button":"검색","search.searching":"검색 중…","search.results":"개의 결과","search.result":"개의 결과","search.noResults":"결과를 찾을 수 없습니다:","search.facts":"개의 사실","browse.title":"모든 기억","browse.manage":"기억 관리","browse.active":"활성","browse.archived":"보관됨","browse.filter":"내용, 유형 또는 태그로 필터링…","browse.refresh":"새로고침","browse.noMemories":"기억이 없습니다","browse.noMatch":"일치하는 기억이 없습니다:","browse.prev":"← 이전","browse.next":"다음 →","browse.archive":"보관","browse.restore":"복원","browse.confirmArchive":"이 기억을 보관하시겠습니까?","browse.moreArchived":"개의 보관된 기억","analytics.totalMemories":"총 기억 수","analytics.knowledgeFacts":"지식 사실","analytics.connections":"연결","analytics.topics":"주제","analytics.insights":"인사이트","analytics.thisWeek":"이번 주","analytics.new":"개 신규","analytics.stale":"비활성 (30일 이상 미사용)","analytics.archivedLabel":"보관됨","analytics.mostRecalled":"가장 많이 조회됨","settings.capabilities":"기능 상태","settings.smartMode":"스마트 모드","settings.core":"기본","settings.embeddings":"임베딩","settings.llmProvider":"LLM 제공자","settings.apiKey":"API 키","settings.model":"모델 (선택)","settings.save":"저장","settings.saving":"저장 중…","settings.saved":"저장되었습니다! LLM 설정을 적용하려면 서버를 재시작하세요.","settings.language":"언어","graph.entities":"엔티티","graph.relations":"관계","lessons.total":"총 교훈","lessons.critical":"심각","lessons.empty":"아직 기록된 교훈이 없습니다. learn 도구를 사용하거나 스마트 모드를 활성화하세요.","lessons.error":"오류","lessons.rootCause":"근본 원인","lessons.fix":"수정 방법","lessons.prevention":"예방 조치","feedback.button":"💬 피드백","common.error":"오류","common.loading":"로딩 중…"},pt:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Conectado","header.disconnected":"Desconectado","header.connecting":"Conectando…","header.memories":"memórias","tab.search":"Buscar","tab.browse":"Explorar","tab.analytics":"Análise","tab.manage":"Gerenciar","tab.graph":"Grafo","tab.lessons":"Lições","tab.settings":"Configurações","search.title":"Buscar Memórias","search.placeholder":'Buscar memórias… (ex.: "auth", "banco de dados", "bug fix")',"search.button":"Buscar","search.searching":"Buscando…","search.results":"resultados","search.result":"resultado","search.noResults":"Nenhum resultado para","search.facts":"fatos","browse.title":"Todas as Memórias","browse.manage":"Gerenciar Memórias","browse.active":"ativas","browse.archived":"arquivadas","browse.filter":"Filtrar por conteúdo, tipo ou tag…","browse.refresh":"Atualizar","browse.noMemories":"Sem memórias ainda","browse.noMatch":"Nenhuma memória corresponde a","browse.prev":"← Anterior","browse.next":"Próximo →","browse.archive":"Arquivar","browse.restore":"Restaurar","browse.confirmArchive":"Arquivar esta memória?","browse.moreArchived":"memórias arquivadas","analytics.totalMemories":"Total de Memórias","analytics.knowledgeFacts":"Fatos","analytics.connections":"Conexões","analytics.topics":"Tópicos","analytics.insights":"Insights","analytics.thisWeek":"Esta semana","analytics.new":"novas","analytics.stale":"Inativas (30+ dias sem uso)","analytics.archivedLabel":"Arquivadas","analytics.mostRecalled":"Mais Consultadas","settings.capabilities":"Capacidades","settings.smartMode":"Modo Inteligente","settings.core":"Base","settings.embeddings":"Embeddings","settings.llmProvider":"Provedor LLM","settings.apiKey":"Chave API","settings.model":"Modelo (opcional)","settings.save":"Salvar","settings.saving":"Salvando…","settings.saved":"Salvo! Reinicie o servidor para aplicar as configurações do LLM.","settings.language":"Idioma","graph.entities":"Entidades","graph.relations":"Relações","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","common.error":"Erro","common.loading":"Carregando…"},fr:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Connecté","header.disconnected":"Déconnecté","header.connecting":"Connexion…","header.memories":"mémoires","tab.search":"Recherche","tab.browse":"Parcourir","tab.analytics":"Analyse","tab.manage":"Gérer","tab.graph":"Graphe","tab.lessons":"Leçons","tab.settings":"Paramètres","search.title":"Rechercher des mémoires","search.placeholder":"Rechercher vos mémoires… (ex. : « auth », « base de données », « bug fix »)","search.button":"Rechercher","search.searching":"Recherche…","search.results":"résultats","search.result":"résultat","search.noResults":"Aucun résultat pour","search.facts":"faits","browse.title":"Toutes les mémoires","browse.manage":"Gérer les mémoires","browse.active":"actives","browse.archived":"archivées","browse.filter":"Filtrer par contenu, type ou tag…","browse.refresh":"Actualiser","browse.noMemories":"Pas encore de mémoires","browse.noMatch":"Aucune mémoire correspondant à","browse.prev":"← Précédent","browse.next":"Suivant →","browse.archive":"Archiver","browse.restore":"Restaurer","browse.confirmArchive":"Archiver cette mémoire ?","browse.moreArchived":"mémoires archivées","analytics.totalMemories":"Total des mémoires","analytics.knowledgeFacts":"Faits de connaissance","analytics.connections":"Connexions","analytics.topics":"Sujets","analytics.insights":"Aperçus","analytics.thisWeek":"Cette semaine","analytics.new":"nouvelles","analytics.stale":"Inactives (30+ jours sans utilisation)","analytics.archivedLabel":"Archivées","analytics.mostRecalled":"Les plus consultées","settings.capabilities":"Capacités","settings.smartMode":"Mode intelligent","settings.core":"Base","settings.embeddings":"Embeddings","settings.llmProvider":"Fournisseur LLM","settings.apiKey":"Clé API","settings.model":"Modèle (optionnel)","settings.save":"Enregistrer","settings.saving":"Enregistrement…","settings.saved":"Enregistré ! Redémarrez le serveur pour appliquer les paramètres LLM.","settings.language":"Langue","graph.entities":"Entités","graph.relations":"Relations","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","common.error":"Erreur","common.loading":"Chargement…"},de:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Verbunden","header.disconnected":"Getrennt","header.connecting":"Verbinden…","header.memories":"Erinnerungen","tab.search":"Suche","tab.browse":"Durchsuchen","tab.analytics":"Analyse","tab.manage":"Verwalten","tab.graph":"Graph","tab.lessons":"Lektionen","tab.settings":"Einstellungen","search.title":"Erinnerungen suchen","search.placeholder":'Erinnerungen suchen… (z.B. „auth", „Datenbank", „Bug Fix")',"search.button":"Suchen","search.searching":"Suche läuft…","search.results":"Ergebnisse","search.result":"Ergebnis","search.noResults":"Keine Ergebnisse für","search.facts":"Fakten","browse.title":"Alle Erinnerungen","browse.manage":"Erinnerungen verwalten","browse.active":"aktiv","browse.archived":"archiviert","browse.filter":"Nach Inhalt, Typ oder Tag filtern…","browse.refresh":"Aktualisieren","browse.noMemories":"Noch keine Erinnerungen","browse.noMatch":"Keine passenden Erinnerungen:","browse.prev":"← Zurück","browse.next":"Weiter →","browse.archive":"Archivieren","browse.restore":"Wiederherstellen","browse.confirmArchive":"Diese Erinnerung archivieren?","browse.moreArchived":"archivierte Erinnerungen","analytics.totalMemories":"Erinnerungen gesamt","analytics.knowledgeFacts":"Wissensfakten","analytics.connections":"Verbindungen","analytics.topics":"Themen","analytics.insights":"Einblicke","analytics.thisWeek":"Diese Woche","analytics.new":"neue","analytics.stale":"Inaktiv (30+ Tage ungenutzt)","analytics.archivedLabel":"Archiviert","analytics.mostRecalled":"Am häufigsten abgerufen","settings.capabilities":"Fähigkeiten","settings.smartMode":"Smart-Modus","settings.core":"Basis","settings.embeddings":"Embeddings","settings.llmProvider":"LLM-Anbieter","settings.apiKey":"API-Schlüssel","settings.model":"Modell (optional)","settings.save":"Speichern","settings.saving":"Speichern…","settings.saved":"Gespeichert! Server neu starten, um LLM-Einstellungen anzuwenden.","settings.language":"Sprache","graph.entities":"Entitäten","graph.relations":"Beziehungen","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","common.error":"Fehler","common.loading":"Laden…"},vi:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Đã kết nối","header.disconnected":"Mất kết nối","header.connecting":"Đang kết nối…","header.memories":"ký ức","tab.search":"Tìm kiếm","tab.browse":"Duyệt","tab.analytics":"Phân tích","tab.manage":"Quản lý","tab.graph":"Đồ thị","tab.lessons":"Bài học","tab.settings":"Cài đặt","search.title":"Tìm kiếm ký ức","search.placeholder":'Tìm kiếm ký ức… (ví dụ: "auth", "cơ sở dữ liệu", "sửa lỗi")',"search.button":"Tìm kiếm","search.searching":"Đang tìm…","search.results":"kết quả","search.result":"kết quả","search.noResults":"Không tìm thấy kết quả cho","search.facts":"sự kiện","browse.title":"Tất cả ký ức","browse.manage":"Quản lý ký ức","browse.active":"hoạt động","browse.archived":"đã lưu trữ","browse.filter":"Lọc theo nội dung, loại hoặc thẻ…","browse.refresh":"Làm mới","browse.noMemories":"Chưa có ký ức","browse.noMatch":"Không có ký ức phù hợp:","browse.prev":"← Trước","browse.next":"Tiếp →","browse.archive":"Lưu trữ","browse.restore":"Khôi phục","browse.confirmArchive":"Lưu trữ ký ức này?","browse.moreArchived":"ký ức đã lưu trữ","analytics.totalMemories":"Tổng ký ức","analytics.knowledgeFacts":"Sự kiện tri thức","analytics.connections":"Kết nối","analytics.topics":"Chủ đề","analytics.insights":"Thông tin","analytics.thisWeek":"Tuần này","analytics.new":"mới","analytics.stale":"Không hoạt động (30+ ngày)","analytics.archivedLabel":"Đã lưu trữ","analytics.mostRecalled":"Được truy xuất nhiều nhất","settings.capabilities":"Khả năng","settings.smartMode":"Chế độ thông minh","settings.core":"Cơ bản","settings.embeddings":"Embeddings","settings.llmProvider":"Nhà cung cấp LLM","settings.apiKey":"Khóa API","settings.model":"Mô hình (tùy chọn)","settings.save":"Lưu","settings.saving":"Đang lưu…","settings.saved":"Đã lưu! Khởi động lại server để áp dụng cài đặt LLM.","settings.language":"Ngôn ngữ","graph.entities":"Thực thể","graph.relations":"Quan hệ","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","common.error":"Lỗi","common.loading":"Đang tải…"},es:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Conectado","header.disconnected":"Desconectado","header.connecting":"Conectando…","header.memories":"memorias","tab.search":"Buscar","tab.browse":"Explorar","tab.analytics":"Análisis","tab.manage":"Gestionar","tab.graph":"Grafo","tab.lessons":"Lecciones","tab.settings":"Configuración","search.title":"Buscar memorias","search.placeholder":'Buscar memorias… (ej.: "auth", "base de datos", "corrección")',"search.button":"Buscar","search.searching":"Buscando…","search.results":"resultados","search.result":"resultado","search.noResults":"Sin resultados para","search.facts":"hechos","browse.title":"Todas las memorias","browse.manage":"Gestionar memorias","browse.active":"activas","browse.archived":"archivadas","browse.filter":"Filtrar por contenido, tipo o etiqueta…","browse.refresh":"Actualizar","browse.noMemories":"Aún no hay memorias","browse.noMatch":"No hay memorias que coincidan con","browse.prev":"← Anterior","browse.next":"Siguiente →","browse.archive":"Archivar","browse.restore":"Restaurar","browse.confirmArchive":"¿Archivar esta memoria?","browse.moreArchived":"memorias archivadas","analytics.totalMemories":"Total de memorias","analytics.knowledgeFacts":"Hechos","analytics.connections":"Conexiones","analytics.topics":"Temas","analytics.insights":"Información","analytics.thisWeek":"Esta semana","analytics.new":"nuevas","analytics.stale":"Inactivas (30+ días sin uso)","analytics.archivedLabel":"Archivadas","analytics.mostRecalled":"Más consultadas","settings.capabilities":"Capacidades","settings.smartMode":"Modo inteligente","settings.core":"Base","settings.embeddings":"Embeddings","settings.llmProvider":"Proveedor LLM","settings.apiKey":"Clave API","settings.model":"Modelo (opcional)","settings.save":"Guardar","settings.saving":"Guardando…","settings.saved":"¡Guardado! Reinicie el servidor para aplicar la configuración LLM.","settings.language":"Idioma","graph.entities":"Entidades","graph.relations":"Relaciones","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","common.error":"Error","common.loading":"Cargando…"},th:{"brand.subtitle":"powered by pcircle.ai","header.connected":"เชื่อมต่อแล้ว","header.disconnected":"ไม่ได้เชื่อมต่อ","header.connecting":"กำลังเชื่อมต่อ…","header.memories":"ความทรงจำ","tab.search":"ค้นหา","tab.browse":"เรียกดู","tab.analytics":"วิเคราะห์","tab.manage":"จัดการ","tab.graph":"กราฟ","tab.lessons":"บทเรียน","tab.settings":"ตั้งค่า","search.title":"ค้นหาความทรงจำ","search.placeholder":'ค้นหาความทรงจำ… (เช่น "auth", "ฐานข้อมูล", "แก้บั๊ก")',"search.button":"ค้นหา","search.searching":"กำลังค้นหา…","search.results":"ผลลัพธ์","search.result":"ผลลัพธ์","search.noResults":"ไม่พบผลลัพธ์สำหรับ","search.facts":"ข้อเท็จจริง","browse.title":"ความทรงจำทั้งหมด","browse.manage":"จัดการความทรงจำ","browse.active":"ใช้งานอยู่","browse.archived":"เก็บถาวร","browse.filter":"กรองตามเนื้อหา ประเภท หรือแท็ก…","browse.refresh":"รีเฟรช","browse.noMemories":"ยังไม่มีความทรงจำ","browse.noMatch":"ไม่พบความทรงจำที่ตรงกัน:","browse.prev":"← ก่อนหน้า","browse.next":"ถัดไป →","browse.archive":"เก็บถาวร","browse.restore":"กู้คืน","browse.confirmArchive":"เก็บถาวรความทรงจำนี้?","browse.moreArchived":"ความทรงจำที่เก็บถาวร","analytics.totalMemories":"ความทรงจำทั้งหมด","analytics.knowledgeFacts":"ข้อเท็จจริง","analytics.connections":"การเชื่อมต่อ","analytics.topics":"หัวข้อ","analytics.insights":"ข้อมูลเชิงลึก","analytics.thisWeek":"สัปดาห์นี้","analytics.new":"ใหม่","analytics.stale":"ไม่ได้ใช้งาน (30+ วัน)","analytics.archivedLabel":"เก็บถาวร","analytics.mostRecalled":"ถูกเรียกดูมากที่สุด","settings.capabilities":"ความสามารถ","settings.smartMode":"โหมดอัจฉริยะ","settings.core":"พื้นฐาน","settings.embeddings":"Embeddings","settings.llmProvider":"ผู้ให้บริการ LLM","settings.apiKey":"คีย์ API","settings.model":"โมเดล (ไม่บังคับ)","settings.save":"บันทึก","settings.saving":"กำลังบันทึก…","settings.saved":"บันทึกแล้ว! รีสตาร์ทเซิร์ฟเวอร์เพื่อใช้การตั้งค่า LLM","settings.language":"ภาษา","graph.entities":"เอนทิตี","graph.relations":"ความสัมพันธ์","lessons.total":"บทเรียนทั้งหมด","lessons.critical":"วิกฤต","lessons.empty":"ยังไม่มีบทเรียนที่บันทึกไว้ ใช้เครื่องมือ learn หรือเปิดใช้โหมดอัจฉริยะ","lessons.error":"ข้อผิดพลาด","lessons.rootCause":"สาเหตุหลัก","lessons.fix":"วิธีแก้ไข","lessons.prevention":"การป้องกัน","feedback.button":"💬 ความคิดเห็น","common.error":"ข้อผิดพลาด","common.loading":"กำลังโหลด…"}},kt={en:"English","zh-TW":"繁體中文","zh-CN":"简体中文",ja:"日本語",ko:"한국어",pt:"Português",fr:"Français",de:"Deutsch",vi:"Tiếng Việt",es:"Español",th:"ภาษาไทย"};let ee="en";function Mt(){const e=localStorage.getItem("memesh-locale");if(e&&de[e])return e;const t=navigator.language;if(t.startsWith("zh-TW")||t.startsWith("zh-Hant"))return"zh-TW";if(t.startsWith("zh"))return"zh-CN";const n=t.split("-")[0];return de[n]?n:"en"}function Lt(){return ee=Mt(),ee}function St(e){ee=e,localStorage.setItem("memesh-locale",e)}function u(e){return de[ee]?.[e]||de.en[e]||e}function Ct(){return ee}function At(){return Object.entries(kt).map(([e,t])=>({code:e,name:t}))}function Tt({health:e,error:t}){return s("div",{class:"header",children:[s("div",{class:"header-brand",children:[s("h1",{children:"MeMesh LLM Memory"}),s("small",{children:u("brand.subtitle")})]}),s("div",{class:"header-right",children:s("div",{class:"header-meta",children:e?s(G,{children:[s("span",{children:[s("span",{class:"dot dot-ok"}),u("header.connected")]}),s("span",{class:"badge-version",children:["v",e.version," · ",e.entity_count.toLocaleString()," ",u("header.memories")]})]}):t?s("span",{children:[s("span",{class:"dot dot-err"}),u("header.disconnected")]}):s("span",{style:{color:"var(--text-3)"},children:u("header.connecting")})})})]})}function Et({tabs:e,active:t,onSelect:n}){return s("nav",{class:"nav",children:e.map(({key:a,label:i})=>s("button",{class:`nav-btn ${a===t?"active":""}`,onClick:()=>n(a),children:i},a))})}const Pt=1e4;async function W(e,t,n){const a=new AbortController,i=setTimeout(()=>a.abort(),Pt);try{const r={method:e,headers:{"Content-Type":"application/json"},signal:a.signal};n&&(r.body=JSON.stringify(n));const o=await fetch(t,r);if(!o.ok)throw new Error(`HTTP ${o.status}`);const d=await o.json();if(!d.success)throw new Error(d.error||"Unknown error");return d.data}catch(r){throw r.name==="AbortError"?new Error("Request timed out"):r}finally{clearTimeout(i)}}async function Rt(){return W("GET","/v1/graph")}async function Bt(){const e=await W("POST","/v1/recall",{limit:100});return(Array.isArray(e)?e:e.entities||[]).filter(n=>n.type==="lesson_learned")}function It(e){try{const t=new Date(e);return{date:t.toLocaleDateString(void 0,{month:"short",day:"numeric"}),time:t.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"})}}catch{return{date:"—",time:""}}}function Ke(e,t){return e.length>t?e.slice(0,t)+"…":e}function we({entity:e,actions:t,highlight:n}){const a=It(e.created_at),i=e.observations?.[0]||"(no content)",r=e.observations?.length||0,o=e.archived||e.status==="archived";return s("div",{class:"mem-row",style:o?{opacity:.45}:void 0,children:[s("div",{class:"mem-time",children:[s("div",{children:a.date}),s("div",{children:a.time})]}),s("div",{class:"mem-body",children:[s("div",{class:"mem-preview",children:n?s(Ft,{text:Ke(i,140),term:n}):Ke(i,140)}),s("div",{class:"mem-meta",children:[s("span",{class:"badge badge-type",children:e.type}),o&&s("span",{class:"badge badge-archived",children:"archived"}),s("span",{children:e.name}),r>1&&s("span",{children:["· ",r," facts"]}),e.tags?.slice(0,3).map(d=>s("span",{class:"tag",children:d},d)),(e.tags?.length||0)>3&&s("span",{class:"tag",style:{opacity:.5},children:["+",e.tags.length-3]})]})]}),t&&s("div",{class:"mem-actions",children:t})]})}function Ft({text:e,term:t}){if(!t)return s(G,{children:e});const n=[],a=e.toLowerCase(),i=t.toLowerCase();let r=0;for(;r<e.length;){const o=a.indexOf(i,r);if(o===-1){n.push(e.slice(r));break}o>r&&n.push(e.slice(r,o)),n.push(s("mark",{children:e.slice(o,o+i.length)})),r=o+i.length}return s(G,{children:n})}function Wt(){const[e,t]=S(""),[n,a]=S(null),[i,r]=S(!1),[o,d]=S("");async function _(){if(e.trim()){r(!0),d("");try{const l=await W("POST","/v1/recall",{query:e.trim(),limit:30}),m=Array.isArray(l)?l:l.entities||[];a(m)}catch(l){d(l.message)}finally{r(!1)}}}return s("div",{children:s("div",{class:"card",children:[s("div",{class:"card-title",children:u("search.title")}),s("div",{class:"search-bar",children:[s("input",{type:"search",placeholder:u("search.placeholder"),value:e,onInput:l=>t(l.target.value),onKeyDown:l=>l.key==="Enter"&&_()}),s("button",{class:"btn btn-primary",onClick:_,disabled:i,children:u(i?"search.searching":"search.button")})]}),o&&s("div",{class:"error-box",children:o}),i&&s("div",{class:"empty",children:s("div",{class:"loading"})}),!i&&n!==null&&n.length===0&&s("div",{class:"empty",children:[s("span",{class:"empty-icon",children:"🔍"}),u("search.noResults"),' "',e,'"']}),!i&&n&&n.length>0&&s("div",{children:[s("div",{style:{fontSize:12,color:"var(--text-3)",marginBottom:12},children:[n.length," ",n.length!==1?u("search.results"):u("search.result")]}),n.map(l=>s("div",{class:"card",style:{padding:14},children:s(we,{entity:l,highlight:e})},l.id))]})]})})}const me=30;function Oe({manage:e}){const[t,n]=S([]),[a,i]=S(""),[r,o]=S(!0),[d,_]=S(""),[l,m]=S(0);async function c(){o(!0),_("");try{const g=await W("GET","/v1/entities?limit=500&status=all");n(g||[]),m(0)}catch(g){_(g.message)}finally{o(!1)}}K(()=>{c()},[]),K(()=>{m(0)},[a]);const p=a.toLowerCase(),h=t.filter(g=>p?g.name.toLowerCase().includes(p)||g.type.toLowerCase().includes(p)||g.observations?.some(w=>w.toLowerCase().includes(p))||g.tags?.some(w=>w.toLowerCase().includes(p)):!0),b=h.filter(g=>!g.archived&&g.status!=="archived"),x=h.filter(g=>g.archived||g.status==="archived"),v=Math.ceil(b.length/me),k=b.slice(l*me,(l+1)*me);async function M(g){if(confirm(u("browse.confirmArchive")))try{await W("POST","/v1/forget",{name:g}),c()}catch(w){_("Failed to archive: "+w.message)}}async function y(g){try{await W("POST","/v1/remember",{name:g,type:"restored"}),c()}catch(w){_("Failed to restore: "+w.message)}}return s("div",{children:s("div",{class:"card",children:[s("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:16},children:[s("div",{children:[s("div",{class:"card-title",style:{margin:0},children:u(e?"browse.manage":"browse.title")}),!r&&s("div",{style:{fontSize:12,color:"var(--text-3)",marginTop:2},children:[b.length.toLocaleString()," ",u("browse.active"),x.length>0?` · ${x.length} ${u("browse.archived")}`:""]})]}),s("div",{style:{display:"flex",gap:8},children:[s("input",{type:"search",placeholder:u("browse.filter"),value:a,onInput:g=>i(g.target.value),style:{width:260}}),s("button",{class:"btn btn-sm",onClick:c,title:u("browse.refresh"),children:"↻"})]})]}),d&&s("div",{class:"error-box",style:{marginBottom:12},children:d}),r&&s("div",{class:"empty",children:s("div",{class:"loading"})}),!r&&h.length===0&&s("div",{class:"empty",children:[s("span",{class:"empty-icon",children:"📭"}),a?`${u("browse.noMatch")} "${a}"`:u("browse.noMemories")]}),!r&&k.length>0&&s("div",{children:[k.map(g=>s("div",{style:{borderBottom:"1px solid var(--border-subtle)",padding:"14px 0"},children:s(we,{entity:g,highlight:a,actions:e?s("button",{class:"btn btn-danger btn-sm",onClick:()=>M(g.name),children:u("browse.archive")}):void 0})},g.id)),v>1&&s("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",gap:12,padding:"16px 0",fontSize:13},children:[s("button",{class:"btn btn-sm",disabled:l===0,onClick:()=>m(g=>g-1),children:u("browse.prev")}),s("span",{style:{color:"var(--text-3)",fontFamily:"var(--mono)",fontSize:12},children:[l+1," / ",v]}),s("button",{class:"btn btn-sm",disabled:l>=v-1,onClick:()=>m(g=>g+1),children:u("browse.next")})]})]}),!r&&x.length>0&&s("div",{style:{marginTop:20},children:[s("div",{style:{fontSize:11,color:"var(--text-3)",textTransform:"uppercase",letterSpacing:".06em",marginBottom:8,paddingBottom:8,borderBottom:"1px solid var(--border)"},children:[u("browse.archived")," (",x.length,")"]}),x.slice(0,10).map(g=>s("div",{style:{borderBottom:"1px solid var(--border-subtle)",padding:"14px 0"},children:s(we,{entity:g,highlight:a,actions:e?s("button",{class:"btn btn-sm",onClick:()=>y(g.name),children:u("browse.restore")}):void 0})},g.id)),x.length>10&&s("div",{style:{fontSize:12,color:"var(--text-3)",padding:"12px 0",textAlign:"center"},children:["+",x.length-10," ",u("browse.moreArchived")]})]})]})})}function Nt(){const[e,t]=S(null),[n,a]=S([]),[i,r]=S(!0);if(K(()=>{Promise.all([W("GET","/v1/stats"),W("GET","/v1/entities?limit=500&status=all")]).then(([h,b])=>{t(h),a(b||[])}).finally(()=>r(!1))},[]),i)return s("div",{class:"empty",children:s("div",{class:"loading"})});if(!e)return s("div",{class:"error-box",children:[u("common.error"),": Failed to load analytics"]});const o=Date.now(),d=10080*60*1e3,_=720*60*60*1e3,l=n.filter(h=>o-new Date(h.created_at).getTime()<d).length,m=n.filter(h=>h.archived||h.status==="archived"?!1:h.last_accessed_at?o-new Date(h.last_accessed_at).getTime()>_:!0).length,c=n.filter(h=>h.archived||h.status==="archived").length,p=n.filter(h=>(h.access_count||0)>0).sort((h,b)=>(b.access_count||0)-(h.access_count||0)).slice(0,5);return s("div",{children:[s("div",{class:"stats-row",children:[s("div",{class:"stat",children:[s("div",{class:"stat-val",children:e.totalEntities.toLocaleString()}),s("div",{class:"stat-lbl",children:u("analytics.totalMemories")})]}),s("div",{class:"stat",children:[s("div",{class:"stat-val",children:e.totalObservations.toLocaleString()}),s("div",{class:"stat-lbl",children:u("analytics.knowledgeFacts")})]}),s("div",{class:"stat",children:[s("div",{class:"stat-val",children:e.totalRelations.toLocaleString()}),s("div",{class:"stat-lbl",children:u("analytics.connections")})]}),s("div",{class:"stat",children:[s("div",{class:"stat-val",children:e.totalTags.toLocaleString()}),s("div",{class:"stat-lbl",children:u("analytics.topics")})]})]}),s("div",{class:"card",children:[s("div",{class:"card-title",children:u("analytics.insights")}),s("div",{class:"insight",children:[s("span",{class:"insight-icon",children:"📝"}),s("span",{class:"insight-text",children:u("analytics.thisWeek")}),s("span",{class:"insight-val",children:[l," ",u("analytics.new")]})]}),s("div",{class:"insight",children:[s("span",{class:"insight-icon",children:"💤"}),s("span",{class:"insight-text",children:u("analytics.stale")}),s("span",{class:"insight-val",children:m})]}),s("div",{class:"insight",children:[s("span",{class:"insight-icon",children:"📦"}),s("span",{class:"insight-text",children:u("analytics.archivedLabel")}),s("span",{class:"insight-val",children:c})]})]}),p.length>0&&s("div",{class:"card",children:[s("div",{class:"card-title",children:u("analytics.mostRecalled")}),p.map((h,b)=>{const x=["Commit:","[SESSION]","Branch:","Diff stats:","Details:","[WORK]","[FOCUS]","[SUMMARY]","Session edited","Total tool calls","Duration:"],v=(h.observations||[]).find(M=>!x.some(y=>M.startsWith(y))&&M.length>10)||h.observations?.[0]||h.name,k=v.length>80?v.slice(0,80)+"…":v;return s("div",{class:"insight",children:[s("span",{class:"insight-icon",style:{fontSize:14,color:"var(--text-3)"},children:["#",b+1]}),s("span",{class:"insight-text",style:{flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:k}),s("span",{class:"insight-val",children:[h.access_count,"×"]})]},h.id)})]}),(()=>{const h=["auto_saved","auto-tracked","session_end","session:","source:","scope:","date:","urgency:"],b=e.tagDistribution.filter(x=>!h.some(v=>x.tag.startsWith(v))&&!/^\d{4}-\d{2}-\d{2}/.test(x.tag));return b.length>0?s("div",{class:"card",children:[s("div",{class:"card-title",children:u("analytics.topics")}),s("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:b.slice(0,30).map(x=>s("span",{class:"tag",style:{fontSize:Math.max(11,Math.min(15,10+Math.log2(x.count+1)))+"px"},children:[x.tag," ",s("span",{style:{opacity:.5},children:["(",x.count,")"]})]},x.tag))})]}):null})()]})}function Ge(e){return e&&e.charAt(0).toUpperCase()+e.slice(1)}function $t(){const[e,t]=S(null),[n,a]=S(""),[i,r]=S(""),[o,d]=S(""),[_,l]=S(!1),[m,c]=S(""),[p,h]=S(!0);K(()=>{W("GET","/v1/config").then(v=>{t(v),a(v.config.llm?.provider||""),d(v.config.llm?.model||"")}).finally(()=>h(!1))},[]);async function b(){l(!0),c("");try{const v={provider:n};o&&(v.model=o),i&&(v.apiKey=i),await W("POST","/v1/config",{llm:v}),c(u("settings.saved")),r("")}catch(v){c(u("common.error")+": "+v.message)}finally{l(!1)}}if(p)return s("div",{class:"empty",children:s("div",{class:"loading"})});const x=e?.capabilities;return s("div",{children:[s("div",{class:"card",children:[s("div",{class:"card-title",children:u("settings.capabilities")}),s("div",{class:"stats-row",style:{marginBottom:0},children:[s("div",{class:"stat",children:[s("div",{class:"stat-val",style:{fontSize:18},children:["Level ",x?.searchLevel||0]}),s("div",{class:"stat-lbl",children:x?.searchLevel?u("settings.smartMode"):u("settings.core")})]}),s("div",{class:"stat",children:[s("div",{class:"stat-val",style:{fontSize:14},children:Ge(x?.embeddings||"—")}),s("div",{class:"stat-lbl",children:u("settings.embeddings")})]}),s("div",{class:"stat",children:[s("div",{class:"stat-val",style:{fontSize:14},children:Ge(x?.llm?.provider||"None")}),s("div",{class:"stat-lbl",children:u("settings.llmProvider")})]})]})]}),s("div",{class:"card",children:[s("div",{class:"card-title",children:u("settings.llmProvider")}),s("div",{style:{display:"flex",gap:16,marginBottom:14},children:[["anthropic","Anthropic (Claude)"],["openai","OpenAI"],["ollama","Ollama (Local)"]].map(([v,k])=>s("label",{style:{display:"flex",alignItems:"center",gap:5,cursor:"pointer",fontSize:13},children:[s("input",{type:"radio",name:"provider",value:v,checked:n===v,onChange:()=>a(v)}),k]},v))}),n&&n!=="ollama"&&s("div",{style:{marginBottom:12},children:[s("label",{style:{fontSize:12,color:"var(--text-2)",display:"block",marginBottom:4},children:u("settings.apiKey")}),s("input",{type:"password",placeholder:n==="anthropic"?"sk-ant-api03-…":"sk-…",value:i,onInput:v=>r(v.target.value)})]}),s("div",{style:{marginBottom:14},children:[s("label",{style:{fontSize:12,color:"var(--text-2)",display:"block",marginBottom:4},children:u("settings.model")}),s("input",{type:"text",placeholder:n==="anthropic"?"claude-haiku-4-5":n==="openai"?"gpt-4o-mini":"llama3.2",value:o,onInput:v=>d(v.target.value)})]}),s("div",{style:{display:"flex",gap:10,alignItems:"center"},children:[s("button",{class:"btn btn-primary",onClick:b,disabled:!n||_,children:u(_?"settings.saving":"settings.save")}),m&&s("span",{style:{fontSize:12,color:m.startsWith(u("common.error"))?"var(--danger)":"var(--success)"},children:m})]})]}),s("div",{class:"card",children:[s("div",{class:"card-title",children:u("settings.language")}),s("select",{value:Ct(),onChange:v=>{St(v.target.value),window.location.reload()},style:{fontSize:13,padding:"6px 10px",borderRadius:6,border:"1px solid var(--border)",background:"var(--surface)",color:"var(--text-1)",cursor:"pointer"},children:At().map(v=>s("option",{value:v.code,children:v.name},v.code))})]})]})}const zt={decision:"#3b82f6",pattern:"#22c55e",lesson_learned:"#f97316",commit:"#8b5cf6","session-insight":"#6b7280"},Dt="#94a3b8";function Ue(e){return zt[e]||Dt}function Ht(){const[e,t]=S(null),[n,a]=S(!0),[i,r]=S(""),o=O(null),d=O([]),_=O([]),l=O(0),m=O({node:null,offsetX:0,offsetY:0}),c=O(null),p=O({x:0,y:0,node:null});K(()=>{Rt().then(t).catch(y=>r(y.message)).finally(()=>a(!1))},[]),K(()=>{if(!e)return;const y=o.current;if(!y)return;const g=y.parentElement?.clientWidth||800,w=500;y.width=g*window.devicePixelRatio,y.height=w*window.devicePixelRatio,y.style.width=g+"px",y.style.height=w+"px";const B=new Map;e.entities.forEach(A=>{B.set(A.name,{id:A.name,type:A.type,x:Math.random()*g*.8+g*.1,y:Math.random()*w*.8+w*.1,vx:0,vy:0,radius:6})}),d.current=Array.from(B.values()),_.current=e.relations.filter(A=>B.has(A.from)&&B.has(A.to));const N=()=>{const A=d.current,I=_.current,z=window.devicePixelRatio,L=y.getContext("2d");if(!L)return;const Ce=.85,at=2e3,ot=80,ct=.02,Ae=.005;for(let f=0;f<A.length;f++)for(let T=f+1;T<A.length;T++){const E=A[T].x-A[f].x,F=A[T].y-A[f].y,$=Math.sqrt(E*E+F*F)||1,U=at/($*$),Y=E/$*U,V=F/$*U;A[f].vx-=Y,A[f].vy-=V,A[T].vx+=Y,A[T].vy+=V}const te=new Map(A.map(f=>[f.id,f]));for(const f of I){const T=te.get(f.from),E=te.get(f.to);if(!T||!E)continue;const F=E.x-T.x,$=E.y-T.y,U=Math.sqrt(F*F+$*$)||1,Y=(U-ot)*ct,V=F/U*Y,Te=$/U*Y;T.vx+=V,T.vy+=Te,E.vx-=V,E.vy-=Te}const lt=g/2,dt=w/2;for(const f of A)f.vx+=(lt-f.x)*Ae,f.vy+=(dt-f.y)*Ae;for(const f of A)m.current.node!==f&&(f.vx*=Ce,f.vy*=Ce,f.x+=f.vx,f.y+=f.vy,f.x=Math.max(20,Math.min(g-20,f.x)),f.y=Math.max(20,Math.min(w-20,f.y)));L.setTransform(z,0,0,z,0,0),L.clearRect(0,0,g,w),L.lineWidth=1,L.strokeStyle="rgba(113, 113, 122, 0.3)",L.font="9px system-ui, sans-serif",L.fillStyle="rgba(113, 113, 122, 0.5)";for(const f of I){const T=te.get(f.from),E=te.get(f.to);if(!T||!E)continue;L.beginPath(),L.moveTo(T.x,T.y),L.lineTo(E.x,E.y),L.stroke();const F=(T.x+E.x)/2,$=(T.y+E.y)/2;L.fillText(f.type,F+2,$-2)}for(const f of A){const T=c.current===f,E=T?9:f.radius;L.beginPath(),L.arc(f.x,f.y,E,0,Math.PI*2),L.fillStyle=Ue(f.type),L.fill(),T&&(L.strokeStyle="#fff",L.lineWidth=2,L.stroke()),L.fillStyle="#d4d4d8",L.font="10px system-ui, sans-serif";const F=f.id.length>20?f.id.slice(0,18)+"...":f.id;L.fillText(F,f.x+E+4,f.y+3)}const q=p.current;if(q.node){const f=q.x+12,T=q.y-10,E=`${q.node.id} (${q.node.type})`,F=L.measureText(E).width;L.fillStyle="rgba(15, 15, 18, 0.92)",L.strokeStyle="rgba(59, 130, 246, 0.3)",L.lineWidth=1,L.beginPath(),L.roundRect(f-4,T-12,F+8,18,4),L.fill(),L.stroke(),L.fillStyle="#fafafa",L.font="11px system-ui, sans-serif",L.fillText(E,f,T)}l.current=requestAnimationFrame(N)};return l.current=requestAnimationFrame(N),()=>cancelAnimationFrame(l.current)},[e]);const h=Q((y,g)=>{for(const w of d.current){const B=w.x-y,N=w.y-g;if(B*B+N*N<144)return w}return null},[]),b=Q(y=>{const g=o.current;if(!g)return{x:0,y:0};const w=g.getBoundingClientRect();return{x:y.clientX-w.left,y:y.clientY-w.top}},[]),x=Q(y=>{const g=b(y),w=h(g.x,g.y);w&&(m.current={node:w,offsetX:g.x-w.x,offsetY:g.y-w.y})},[h,b]),v=Q(y=>{const g=b(y);m.current.node&&(m.current.node.x=g.x-m.current.offsetX,m.current.node.y=g.y-m.current.offsetY,m.current.node.vx=0,m.current.node.vy=0);const w=h(g.x,g.y);c.current=w,p.current=w?{x:g.x,y:g.y,node:w}:{x:0,y:0,node:null};const B=o.current;B&&(B.style.cursor=w?"grab":"default")},[h,b]),k=Q(()=>{m.current={node:null,offsetX:0,offsetY:0}},[]);if(n)return s("div",{class:"empty",children:s("div",{class:"loading"})});if(i)return s("div",{class:"error-box",children:[u("common.error"),": ",i]});if(!e)return s("div",{class:"error-box",children:[u("common.error"),": No data"]});const M=new Map;return e.entities.forEach(y=>M.set(y.type,(M.get(y.type)||0)+1)),s("div",{children:[s("div",{class:"stats-row",children:[s("div",{class:"stat",children:[s("div",{class:"stat-val",children:e.entities.length.toLocaleString()}),s("div",{class:"stat-lbl",children:u("graph.entities")})]}),s("div",{class:"stat",children:[s("div",{class:"stat-val",children:e.relations.length.toLocaleString()}),s("div",{class:"stat-lbl",children:u("graph.relations")})]})]}),s("div",{class:"card",style:{padding:12},children:[s("div",{style:{display:"flex",alignItems:"center",gap:16,marginBottom:8,flexWrap:"wrap"},children:[s("span",{class:"card-title",style:{margin:0},children:u("tab.graph")}),Array.from(M.entries()).map(([y,g])=>s("span",{style:{display:"inline-flex",alignItems:"center",gap:4,fontSize:11,color:"var(--text-2)"},children:[s("span",{style:{width:8,height:8,borderRadius:"50%",background:Ue(y),display:"inline-block"}}),y," (",g,")"]},y))]}),s("canvas",{ref:o,style:{width:"100%",height:500,borderRadius:"var(--radius-sm)",background:"var(--bg-0)"},onMouseDown:x,onMouseMove:v,onMouseUp:k,onMouseLeave:k})]})]})}function Kt(e){const t=e.observations||[],n=d=>{const _=t.find(l=>l.startsWith(d));return _?_.slice(d.length).trim():""},a=e.tags||[];let i=null;a.includes("severity:critical")?i="critical":a.includes("severity:major")?i="major":a.includes("severity:minor")&&(i="minor");const r=a.find(d=>d.startsWith("project:")),o=r?r.slice(8):"";return{entity:e,error:n("Error:"),rootCause:n("Root cause:"),fix:n("Fix:"),prevention:n("Prevention:"),severity:i,project:o,confidence:e.confidence??1}}const ve={critical:"#ef4444",major:"#f97316",minor:"#3b82f6"};function Ot(){const[e,t]=S([]),[n,a]=S(!0),[i,r]=S("");return K(()=>{Bt().then(o=>t(o.map(Kt))).catch(o=>r(o.message)).finally(()=>a(!1))},[]),n?s("div",{class:"empty",children:s("div",{class:"loading"})}):i?s("div",{class:"error-box",children:[u("common.error"),": ",i]}):e.length===0?s("div",{class:"empty",children:[s("span",{class:"empty-icon",children:"📝"}),u("lessons.empty")]}):s("div",{children:[s("div",{class:"stats-row",children:[s("div",{class:"stat",children:[s("div",{class:"stat-val",children:e.length}),s("div",{class:"stat-lbl",children:u("lessons.total")})]}),s("div",{class:"stat",children:[s("div",{class:"stat-val",children:e.filter(o=>o.severity==="critical").length}),s("div",{class:"stat-lbl",children:u("lessons.critical")})]})]}),e.map(o=>{const d=o.severity?ve[o.severity]:"var(--border)";return s("div",{class:"card",style:{borderLeft:`3px solid ${d}`},children:[s("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",marginBottom:10},children:[s("div",{class:"card-title",style:{margin:0,flex:1,minWidth:0},children:o.entity.name}),s("div",{style:{display:"flex",gap:6,flexShrink:0},children:[o.project&&s("span",{class:"tag",children:o.project}),o.severity&&s("span",{class:"badge",style:{background:`${ve[o.severity]}18`,color:ve[o.severity]},children:o.severity}),s("span",{class:"badge",style:{background:"var(--accent-soft)",color:"var(--accent-hover)"},children:[Math.round(o.confidence*100),"%"]})]})]}),o.error&&s("div",{style:{marginBottom:8},children:[s("div",{style:{fontSize:11,fontWeight:600,color:"#ef4444",marginBottom:2},children:u("lessons.error")}),s("div",{style:{fontSize:13,color:"var(--text-1)",lineHeight:1.5},children:o.error})]}),o.rootCause&&s("div",{style:{marginBottom:8},children:[s("div",{style:{fontSize:11,fontWeight:600,color:"#f59e0b",marginBottom:2},children:u("lessons.rootCause")}),s("div",{style:{fontSize:13,color:"var(--text-1)",lineHeight:1.5},children:o.rootCause})]}),o.fix&&s("div",{style:{marginBottom:8},children:[s("div",{style:{fontSize:11,fontWeight:600,color:"#22c55e",marginBottom:2},children:u("lessons.fix")}),s("div",{style:{fontSize:13,color:"var(--text-1)",lineHeight:1.5},children:o.fix})]}),o.prevention&&s("div",{style:{marginBottom:8},children:[s("div",{style:{fontSize:11,fontWeight:600,color:"#3b82f6",marginBottom:2},children:u("lessons.prevention")}),s("div",{style:{fontSize:13,color:"var(--text-1)",lineHeight:1.5},children:o.prevention})]})]},o.entity.id)})]})}Lt();const Gt=["Search","Browse","Analytics","Graph","Lessons","Manage","Settings"],Ut={Search:"tab.search",Browse:"tab.browse",Analytics:"tab.analytics",Graph:"tab.graph",Lessons:"tab.lessons",Manage:"tab.manage",Settings:"tab.settings"};function jt(){const[e,t]=S("Browse"),[n,a]=S(null),[i,r]=S("");K(()=>{W("GET","/v1/health").then(a).catch(d=>r(d.message))},[]);const o=Gt.map(d=>({key:d,label:u(Ut[d])}));return s("div",{class:"shell",children:[s(Tt,{health:n,error:i}),s(Et,{tabs:o,active:e,onSelect:d=>t(d)}),s("div",{class:"main",children:[s("div",{class:`panel ${e==="Search"?"active":""}`,children:s(Wt,{})}),s("div",{class:`panel ${e==="Browse"?"active":""}`,children:s(Oe,{})}),s("div",{class:`panel ${e==="Analytics"?"active":""}`,children:s(Nt,{})}),s("div",{class:`panel ${e==="Graph"?"active":""}`,children:e==="Graph"&&s(Ht,{})}),s("div",{class:`panel ${e==="Lessons"?"active":""}`,children:e==="Lessons"&&s(Ot,{})}),s("div",{class:`panel ${e==="Manage"?"active":""}`,children:e==="Manage"&&s(Oe,{manage:!0})}),s("div",{class:`panel ${e==="Settings"?"active":""}`,children:e==="Settings"&&s($t,{})})]}),s("button",{class:"fb-btn",onClick:()=>{const d="https://github.com/PCIRCLE-AI/memesh-llm-memory/issues/new?title="+encodeURIComponent("[Feedback] ")+"&labels=feedback,from-dashboard";window.open(d,"_blank")},children:u("feedback.button")})]})}ft(s(jt,{}),document.getElementById("app"));</script>
|
|
11
11
|
<style rel="stylesheet" crossorigin>:root{--bg-0: #09090b;--bg-1: #0f0f12;--bg-2: #18181b;--bg-card: rgba(24, 24, 27, .7);--bg-hover: rgba(39, 39, 42, .4);--bg-input: #0f0f12;--border: rgba(39, 39, 42, .7);--border-subtle: rgba(39, 39, 42, .35);--border-focus: #3b82f6;--text-0: #fafafa;--text-1: #d4d4d8;--text-2: #a1a1aa;--text-3: #71717a;--accent: #3b82f6;--accent-soft: rgba(59, 130, 246, .12);--accent-hover: #60a5fa;--danger: #ef4444;--danger-soft: rgba(239, 68, 68, .1);--success: #22c55e;--success-soft: rgba(34, 197, 94, .1);--warning: #f59e0b;--radius: 10px;--radius-sm: 7px;--font: "Inter", system-ui, -apple-system, sans-serif;--mono: "JetBrains Mono", ui-monospace, monospace}*,*: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:5px;height:5px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px}.shell{min-height:100vh;display:flex;flex-direction:column}.header{display:flex;align-items:center;justify-content:space-between;padding:14px 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:-.02em;line-height:1.2}.header-brand small{font-size:10px;color:var(--text-3);letter-spacing:.04em}.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:5px}.dot-ok{background:var(--success);box-shadow:0 0 6px #22c55e66}.dot-err{background:var(--danger)}.badge-version{font-family:var(--mono);font-size:11px;color:var(--text-3);background:var(--bg-hover);padding:2px 8px;border-radius:4px}.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-1);border-bottom:1px solid var(--border);padding:0 24px;gap:1px;overflow-x:auto;scrollbar-width:none}.nav::-webkit-scrollbar{display:none}.nav-btn{padding:11px 16px;border:none;background:none;cursor:pointer;font:500 13px/1 var(--font);color:var(--text-3);border-bottom:2px solid transparent;transition:color .15s,border-color .15s;white-space:nowrap}.nav-btn:hover{color:var(--text-2)}.nav-btn.active{color:var(--text-0);border-bottom-color:var(--accent)}.main{flex:1;max-width:1200px;width:100%;margin:0 auto;padding:24px}.panel{display:none}.panel.active{display:block}.card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:20px;margin-bottom:14px;backdrop-filter:blur(8px);transition:border-color .2s,box-shadow .2s}.card:hover{border-color:#3b82f626}.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 13px;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,box-shadow .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:7px 14px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-2);color:var(--text-1);font:500 13px/1 var(--font);cursor:pointer;transition:all .12s;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:#fff}.btn-primary:hover{background:var(--accent-hover)}.btn-danger{color:var(--danger);border-color:#ef44444d;background:transparent}.btn-danger:hover{background:var(--danger-soft)}.btn-sm{padding:4px 10px;font-size:12px}.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:11px;font-weight:600;color:var(--text-3);text-transform:uppercase;letter-spacing:.06em;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 .12s}tbody tr:hover{background:var(--bg-hover)}tbody tr:last-child td{border-bottom:none}.badge{display:inline-block;padding:2px 9px;border-radius:999px;font-size:11px;font-weight:500;letter-spacing:.01em}.badge-active{background:var(--success-soft);color:#4ade80}.badge-archived{background:var(--danger-soft);color:#f87171}.badge-type{background:var(--accent-soft);color:var(--accent-hover)}.tag{display:inline-block;padding:1px 7px;margin:1px 2px;border-radius:999px;font:400 11px var(--mono);background:var(--bg-hover);color:var(--text-2);border:1px solid var(--border-subtle)}.stats-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px;margin-bottom:20px}.stat{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:16px;text-align:center;backdrop-filter:blur(6px)}.stat-val{font:700 28px/1.1 var(--mono);color:var(--accent)}.stat-lbl{font-size:11px;color:var(--text-3);text-transform:uppercase;letter-spacing:.05em;margin-top:4px}.search-bar{display:flex;gap:8px;margin-bottom:18px}.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:20px;height:20px;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(239,68,68,.2);border-radius:var(--radius-sm);padding:10px 14px;color:#f87171;font-size:13px}.fb-btn{position:fixed;bottom:20px;right:20px;background:var(--accent);color:#fff;border:none;padding:9px 16px;border-radius:999px;cursor:pointer;font:500 13px var(--font);box-shadow:0 4px 14px #3b82f64d;transition:transform .15s,box-shadow .15s;z-index:50}.fb-btn:hover{transform:translateY(-2px);box-shadow:0 6px 20px #3b82f666}mark{background:#3b82f62e;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;backdrop-filter:blur(4px)}.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:12px}.header-brand h1{font-size:14px}.search-bar{flex-direction:column}.stats-row{grid-template-columns:1fr 1fr}.mem-time{width:60px;font-size:10px}}@media(max-width:480px){.nav-btn{flex:1;font-size:11px;padding:9px 5px;text-align:center}.stats-row{grid-template-columns:1fr}.mem-row{flex-direction:column;gap:4px}.mem-time{width:auto}}</style>
|
|
12
12
|
</head>
|
|
13
13
|
<body>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consolidator.d.ts","sourceRoot":"","sources":["../../src/core/consolidator.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAqB,gBAAgB,EAAE,iBAAiB,EAA0C,MAAM,YAAY,CAAC;AASjI,wBAAsB,WAAW,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAwEpF"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { getDatabase } from '../db.js';
|
|
2
|
+
import { KnowledgeGraph } from '../knowledge-graph.js';
|
|
3
|
+
import { detectCapabilities } from './config.js';
|
|
4
|
+
export async function consolidate(args) {
|
|
5
|
+
const caps = detectCapabilities();
|
|
6
|
+
if (!caps.llm) {
|
|
7
|
+
return {
|
|
8
|
+
consolidated: 0,
|
|
9
|
+
entities_processed: [],
|
|
10
|
+
observations_before: 0,
|
|
11
|
+
observations_after: 0,
|
|
12
|
+
error: 'Consolidation requires an LLM provider. Run: memesh setup',
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
const db = getDatabase();
|
|
16
|
+
const kg = new KnowledgeGraph(db);
|
|
17
|
+
const minObs = args.min_observations ?? 5;
|
|
18
|
+
let entities;
|
|
19
|
+
if (args.name) {
|
|
20
|
+
const entity = kg.getEntity(args.name);
|
|
21
|
+
entities = entity ? [entity] : [];
|
|
22
|
+
}
|
|
23
|
+
else if (args.tag) {
|
|
24
|
+
entities = kg.search(undefined, { tag: args.tag, limit: 100 });
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
entities = kg.listRecent(100);
|
|
28
|
+
}
|
|
29
|
+
entities = entities.filter((e) => e.observations.length >= minObs);
|
|
30
|
+
if (entities.length === 0) {
|
|
31
|
+
return { consolidated: 0, entities_processed: [], observations_before: 0, observations_after: 0 };
|
|
32
|
+
}
|
|
33
|
+
let totalBefore = 0;
|
|
34
|
+
let totalAfter = 0;
|
|
35
|
+
const processed = [];
|
|
36
|
+
for (const entity of entities) {
|
|
37
|
+
totalBefore += entity.observations.length;
|
|
38
|
+
try {
|
|
39
|
+
const compressed = await compressObservations(entity.observations, caps.llm);
|
|
40
|
+
if (compressed.length < entity.observations.length) {
|
|
41
|
+
for (const obs of entity.observations) {
|
|
42
|
+
kg.removeObservation(entity.name, obs);
|
|
43
|
+
}
|
|
44
|
+
kg.createEntity(entity.name, entity.type, {
|
|
45
|
+
observations: compressed,
|
|
46
|
+
});
|
|
47
|
+
totalAfter += compressed.length;
|
|
48
|
+
processed.push(entity.name);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
totalAfter += entity.observations.length;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
totalAfter += entity.observations.length;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
consolidated: processed.length,
|
|
60
|
+
entities_processed: processed,
|
|
61
|
+
observations_before: totalBefore,
|
|
62
|
+
observations_after: totalAfter,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
async function compressObservations(observations, llmConfig) {
|
|
66
|
+
const prompt = `You have ${observations.length} observations about a topic. ` +
|
|
67
|
+
`Compress them into 2-3 dense, information-rich sentences that preserve all key facts. ` +
|
|
68
|
+
`Return ONLY a JSON array of strings, no explanation.\n\n` +
|
|
69
|
+
`Observations:\n${observations.map((o, i) => `${i + 1}. ${o}`).join('\n')}`;
|
|
70
|
+
let text;
|
|
71
|
+
if (llmConfig.provider === 'anthropic') {
|
|
72
|
+
const apiKey = llmConfig.apiKey || process.env.ANTHROPIC_API_KEY;
|
|
73
|
+
if (!apiKey)
|
|
74
|
+
return observations;
|
|
75
|
+
const response = await fetch('https://api.anthropic.com/v1/messages', {
|
|
76
|
+
method: 'POST',
|
|
77
|
+
headers: {
|
|
78
|
+
'x-api-key': apiKey,
|
|
79
|
+
'anthropic-version': '2023-06-01',
|
|
80
|
+
'content-type': 'application/json',
|
|
81
|
+
},
|
|
82
|
+
body: JSON.stringify({
|
|
83
|
+
model: llmConfig.model || 'claude-haiku-4-5',
|
|
84
|
+
max_tokens: 500,
|
|
85
|
+
messages: [{ role: 'user', content: prompt }],
|
|
86
|
+
}),
|
|
87
|
+
});
|
|
88
|
+
if (!response.ok)
|
|
89
|
+
throw new Error(`Anthropic API error: ${response.status}`);
|
|
90
|
+
const data = await response.json();
|
|
91
|
+
text = data.content?.[0]?.text || '[]';
|
|
92
|
+
}
|
|
93
|
+
else if (llmConfig.provider === 'openai') {
|
|
94
|
+
const apiKey = llmConfig.apiKey || process.env.OPENAI_API_KEY;
|
|
95
|
+
if (!apiKey)
|
|
96
|
+
return observations;
|
|
97
|
+
const response = await fetch('https://api.openai.com/v1/chat/completions', {
|
|
98
|
+
method: 'POST',
|
|
99
|
+
headers: {
|
|
100
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
101
|
+
'Content-Type': 'application/json',
|
|
102
|
+
},
|
|
103
|
+
body: JSON.stringify({
|
|
104
|
+
model: llmConfig.model || 'gpt-4o-mini',
|
|
105
|
+
max_tokens: 500,
|
|
106
|
+
messages: [{ role: 'user', content: prompt }],
|
|
107
|
+
}),
|
|
108
|
+
});
|
|
109
|
+
if (!response.ok)
|
|
110
|
+
throw new Error(`OpenAI API error: ${response.status}`);
|
|
111
|
+
const data = await response.json();
|
|
112
|
+
text = data.choices?.[0]?.message?.content || '[]';
|
|
113
|
+
}
|
|
114
|
+
else if (llmConfig.provider === 'ollama') {
|
|
115
|
+
const host = process.env.OLLAMA_HOST || 'http://localhost:11434';
|
|
116
|
+
const response = await fetch(`${host}/api/generate`, {
|
|
117
|
+
method: 'POST',
|
|
118
|
+
headers: { 'Content-Type': 'application/json' },
|
|
119
|
+
body: JSON.stringify({
|
|
120
|
+
model: llmConfig.model || 'llama3.2',
|
|
121
|
+
prompt,
|
|
122
|
+
stream: false,
|
|
123
|
+
}),
|
|
124
|
+
});
|
|
125
|
+
if (!response.ok)
|
|
126
|
+
throw new Error(`Ollama error: ${response.status}`);
|
|
127
|
+
const data = await response.json();
|
|
128
|
+
text = data.response || '[]';
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
return observations;
|
|
132
|
+
}
|
|
133
|
+
try {
|
|
134
|
+
const match = text.match(/\[[\s\S]*?\]/);
|
|
135
|
+
if (match) {
|
|
136
|
+
const arr = JSON.parse(match[0]);
|
|
137
|
+
if (Array.isArray(arr) && arr.length > 0) {
|
|
138
|
+
const filtered = arr.filter((s) => typeof s === 'string' && s.length > 0);
|
|
139
|
+
if (filtered.length > 0)
|
|
140
|
+
return filtered;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
catch { }
|
|
145
|
+
return observations;
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=consolidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consolidator.js","sourceRoot":"","sources":["../../src/core/consolidator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAWjD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAsB;IACtD,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;IAClC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACd,OAAO;YACL,YAAY,EAAE,CAAC;YACf,kBAAkB,EAAE,EAAE;YACtB,mBAAmB,EAAE,CAAC;YACtB,kBAAkB,EAAE,CAAC;YACrB,KAAK,EAAE,2DAA2D;SACnE,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,EAAE,GAAG,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC;IAG1C,IAAI,QAAkB,CAAC;IACvB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpC,CAAC;SAAM,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACpB,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IACjE,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAGD,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC;IAEnE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,mBAAmB,EAAE,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;IACpG,CAAC;IAED,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,WAAW,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;QAE1C,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAE7E,IAAI,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;gBAInD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;oBACtC,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACzC,CAAC;gBACD,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;oBACxC,YAAY,EAAE,UAAU;iBACzB,CAAC,CAAC;gBACH,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC;gBAChC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBAEN,UAAU,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;YAC3C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YAEP,UAAU,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO;QACL,YAAY,EAAE,SAAS,CAAC,MAAM;QAC9B,kBAAkB,EAAE,SAAS;QAC7B,mBAAmB,EAAE,WAAW;QAChC,kBAAkB,EAAE,UAAU;KAC/B,CAAC;AACJ,CAAC;AAMD,KAAK,UAAU,oBAAoB,CAAC,YAAsB,EAAE,SAAoB;IAC9E,MAAM,MAAM,GACV,YAAY,YAAY,CAAC,MAAM,+BAA+B;QAC9D,wFAAwF;QACxF,0DAA0D;QAC1D,kBAAkB,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAE9E,IAAI,IAAY,CAAC;IAEjB,IAAI,SAAS,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QACjE,IAAI,CAAC,MAAM;YAAE,OAAO,YAAY,CAAC;QAEjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,uCAAuC,EAAE;YACpE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,WAAW,EAAE,MAAM;gBACnB,mBAAmB,EAAE,YAAY;gBACjC,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,kBAAkB;gBAC5C,UAAU,EAAE,GAAG;gBACf,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;aAC9C,CAAC;SACH,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7E,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAuB,CAAC;QACxD,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC;IACzC,CAAC;SAAM,IAAI,SAAS,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAC9D,IAAI,CAAC,MAAM;YAAE,OAAO,YAAY,CAAC;QAEjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,4CAA4C,EAAE;YACzE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,MAAM,EAAE;gBACnC,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,aAAa;gBACvC,UAAU,EAAE,GAAG;gBACf,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;aAC9C,CAAC;SACH,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1E,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAoB,CAAC;QACrD,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC;IACrD,CAAC;SAAM,IAAI,SAAS,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,wBAAwB,CAAC;QACjE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,eAAe,EAAE;YACnD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,UAAU;gBACpC,MAAM;gBACN,MAAM,EAAE,KAAK;aACd,CAAC;SACH,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACtE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAoB,CAAC;QACrD,IAAI,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,OAAO,YAAY,CAAC;IACtB,CAAC;IAGD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACzC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzC,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC/E,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;oBAAE,OAAO,QAAQ,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,OAAO,YAAY,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function isEmbeddingAvailable(): boolean;
|
|
2
|
+
export declare function resetEmbeddingState(): void;
|
|
3
|
+
export declare function embedText(text: string): Promise<Float32Array | null>;
|
|
4
|
+
export declare function embedAndStore(entityId: number, text: string): Promise<void>;
|
|
5
|
+
export declare function vectorSearch(queryEmbedding: Float32Array, limit?: number): Array<{
|
|
6
|
+
id: number;
|
|
7
|
+
distance: number;
|
|
8
|
+
}>;
|
|
9
|
+
//# sourceMappingURL=embedder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedder.d.ts","sourceRoot":"","sources":["../../src/core/embedder.ts"],"names":[],"mappings":"AAoBA,wBAAgB,oBAAoB,IAAI,OAAO,CAY9C;AAKD,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C;AAiCD,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAS1E;AAMD,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAYf;AAMD,wBAAgB,YAAY,CAC1B,cAAc,EAAE,YAAY,EAC5B,KAAK,GAAE,MAAW,GACjB,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAczC"}
|