@cachly-dev/mcp-server 0.10.159 → 0.10.161

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -153,14 +153,20 @@ them.
153
153
  Install the **[cachly Brain](https://marketplace.visualstudio.com/items?itemName=cachly-dev.cachly-brain)**
154
154
  extension. It signs you in silently and creates your brain — no account form.
155
155
 
156
- ### JetBrains — awaiting marketplace approval
157
-
158
- The IntelliJ plugin is built and uploaded, but JetBrains has not approved the
159
- listing yet — so there is no link here, because there is nothing to click.
160
- The source is at
161
- [cachly-dev/cachly-intellij](https://github.com/cachly-dev/cachly-intellij);
162
- until the listing goes live, use the `npx … autopilot` path below, which
163
- configures JetBrains AI Assistant along with every other editor it finds.
156
+ ### JetBrains — one click
157
+
158
+ Install **[Cachly Brain](https://plugins.jetbrains.com/plugin/32059-cachly-brain)**
159
+ from the JetBrains Marketplace (IntelliJ, PyCharm, GoLand, WebStorm, Rider).
160
+ Status bar, brain health and the lessons view live in the IDE; the source is
161
+ at [cachly-dev/cachly-intellij](https://github.com/cachly-dev/cachly-intellij).
162
+ The `npx … autopilot` path below also configures JetBrains AI Assistant.
163
+
164
+ ### MCP Registry — for any client that reads it
165
+
166
+ The server is listed in the official **[MCP Registry](https://registry.modelcontextprotocol.io/v0/servers?search=cachly)**
167
+ as `io.github.cachly-dev/mcp-server`, every release, same day. Clients that
168
+ browse the registry (Claude Desktop, Goose, VS Code's MCP gallery and others)
169
+ find it there by name; the entry points at this npm package.
164
170
 
165
171
  ### Anything else — one command
166
172
 
@@ -1,2 +1,2 @@
1
- const x="cachly:lesson:vec:",E="cachly:lesson:vecname:",w="cachly:lesson:vec2:";function b(o){return o.replace(/[:_-]+/g," ").replace(/\s+/g," ").trim()}const f=1,a=7;function d(o){let e=0;for(const t of o){const n=Math.abs(t);n>e&&(e=n)}const i=e>0?e/127:1;let r=a+o.length;for(;r%4!==1;)r++;const s=Buffer.alloc(r);s.writeUInt8(f,0),s.writeUInt16LE(o.length,1),s.writeFloatLE(i,3);for(let t=0;t<o.length;t++){const n=Math.round(o[t]/i);s.writeInt8(n>127?127:n<-127?-127:n,a+t)}return s.toString("base64")}function k(o){try{const e=Buffer.from(o,"base64");if(e.byteLength===0)return null;if(e[0]===f&&e.byteLength%4===1&&e.byteLength>a){const r=e.readUInt16LE(1);if(r===0||a+r>e.byteLength)return null;const s=e.readFloatLE(3);if(!Number.isFinite(s))return null;const t=new Array(r);for(let n=0;n<r;n++)t[n]=e.readInt8(a+n)*s;return t}if(e.byteLength%4!==0)return null;const i=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);return Array.from(i)}catch{return null}}function u(o,e){if(o.length!==e.length)return-1;let i=0,r=0,s=0;for(let t=0;t<o.length;t++)i+=o[t]*e[t],r+=o[t]*o[t],s+=e[t]*e[t];return r&&s?i/Math.sqrt(r*s):0}function v(o){const e=i=>typeof i=="string"?i:"";return[e(o.topic),e(o.what_worked),e(o.what_failed)].filter(Boolean).join(`
2
- `).slice(0,2e3)}class _{frischeMs;praefix;vektoren=new Map;geladen=0;constructor(e=6e4,i=x){this.frischeMs=e,this.praefix=i}naehe(e,i){const r=this.vektoren.get(`${this.praefix}${i}`);return r?u(e,r):-2}rohvektor(e){return this.vektoren.get(`${this.praefix}${e}`)??null}get groesse(){return this.vektoren.size}async aktualisiere(e,i=Date.now()){if(this.vektoren.size>0&&i-this.geladen<this.frischeMs)return;const r=[];let s="0";do{const[n,c]=await e.scan(s,"MATCH",`${this.praefix}*`,"COUNT",500);s=n,r.push(...c)}while(s!=="0");const t=r.filter(n=>!this.vektoren.has(n));for(let n=0;n<t.length;n+=100){const c=t.slice(n,n+100),g=await e.mget(...c);for(const[p,l]of g.entries()){if(!l)continue;const h=k(l);h&&this.vektoren.set(c[p],h)}}if(r.length<this.vektoren.size){const n=new Set(r);for(const c of[...this.vektoren.keys()])n.has(c)||this.vektoren.delete(c)}this.geladen=i}aehnlichste(e,i){const r=[];for(const[s,t]of this.vektoren)r.push({topic:s.slice(this.praefix.length),naehe:u(e,t)});return r.sort((s,t)=>t.naehe-s.naehe),r.slice(0,i)}}const y=.1;function I(o,e,i=y,r=60){const s=new Map;return o.forEach((t,n)=>s.set(t,(s.get(t)??0)+i/(r+n+1))),e.forEach((t,n)=>s.set(t,(s.get(t)??0)+(1-i)/(r+n+1))),[...s.entries()].sort((t,n)=>n[1]-t[1]).map(([t])=>t)}export{E as NAME_VEKTOR_PRAEFIX,x as VEKTOR_PRAEFIX,_ as Vektorbestand,y as WORT_GEWICHT,w as ZWEIT_VEKTOR_PRAEFIX,k as entpacke,u as kosinus,I as mischeRangfolgen,d as packe,b as textFuerNamensVektor,v as textFuerVektor};
1
+ const x="cachly:lesson:vec:",E="cachly:lesson:vecname:",w="cachly:lesson:vec2:";function v(o){return o.replace(/[:_-]+/g," ").replace(/\s+/g," ").trim()}const f=1,c=7;function b(o){let e=0;for(const t of o){const n=Math.abs(t);n>e&&(e=n)}const i=e>0?e/127:1;let r=c+o.length;for(;r%4!==1;)r++;const s=Buffer.alloc(r);s.writeUInt8(f,0),s.writeUInt16LE(o.length,1),s.writeFloatLE(i,3);for(let t=0;t<o.length;t++){const n=Math.round(o[t]/i);s.writeInt8(n>127?127:n<-127?-127:n,c+t)}return s.toString("base64")}function k(o){try{const e=Buffer.from(o,"base64");if(e.byteLength===0)return null;if(e[0]===f&&e.byteLength%4===1&&e.byteLength>c){const r=e.readUInt16LE(1);if(r===0||c+r>e.byteLength)return null;const s=e.readFloatLE(3);if(!Number.isFinite(s))return null;const t=new Array(r);for(let n=0;n<r;n++)t[n]=e.readInt8(c+n)*s;return t}if(e.byteLength%4!==0)return null;const i=new Float32Array(e.buffer,e.byteOffset,e.byteLength/4);return Array.from(i)}catch{return null}}function u(o,e){if(o.length!==e.length)return-1;let i=0,r=0,s=0;for(let t=0;t<o.length;t++)i+=o[t]*e[t],r+=o[t]*o[t],s+=e[t]*e[t];return r&&s?i/Math.sqrt(r*s):0}function d(o){const e=i=>typeof i=="string"?i:"";return[e(o.topic),e(o.what_worked),e(o.what_failed)].filter(Boolean).join(`
2
+ `).slice(0,2e3)}class _{frischeMs;praefix;vektoren=new Map;geladen=0;constructor(e=6e4,i=x){this.frischeMs=e,this.praefix=i}naehe(e,i){const r=this.vektoren.get(`${this.praefix}${i}`);return r?u(e,r):-2}rohvektor(e){return this.vektoren.get(`${this.praefix}${e}`)??null}get groesse(){return this.vektoren.size}hat(e){return this.vektoren.has(`${this.praefix}${e}`)}themen(){return[...this.vektoren.keys()].map(e=>e.slice(this.praefix.length))}async aktualisiere(e,i=Date.now()){if(this.vektoren.size>0&&i-this.geladen<this.frischeMs)return;const r=[];let s="0";do{const[n,a]=await e.scan(s,"MATCH",`${this.praefix}*`,"COUNT",500);s=n,r.push(...a)}while(s!=="0");const t=r.filter(n=>!this.vektoren.has(n));for(let n=0;n<t.length;n+=100){const a=t.slice(n,n+100),g=await e.mget(...a);for(const[p,h]of g.entries()){if(!h)continue;const l=k(h);l&&this.vektoren.set(a[p],l)}}if(r.length<this.vektoren.size){const n=new Set(r);for(const a of[...this.vektoren.keys()])n.has(a)||this.vektoren.delete(a)}this.geladen=i}aehnlichste(e,i){const r=[];for(const[s,t]of this.vektoren)r.push({topic:s.slice(this.praefix.length),naehe:u(e,t)});return r.sort((s,t)=>t.naehe-s.naehe),r.slice(0,i)}}const y=.1;function m(o,e,i=y,r=60){const s=new Map;return o.forEach((t,n)=>s.set(t,(s.get(t)??0)+i/(r+n+1))),e.forEach((t,n)=>s.set(t,(s.get(t)??0)+(1-i)/(r+n+1))),[...s.entries()].sort((t,n)=>n[1]-t[1]).map(([t])=>t)}export{E as NAME_VEKTOR_PRAEFIX,x as VEKTOR_PRAEFIX,_ as Vektorbestand,y as WORT_GEWICHT,w as ZWEIT_VEKTOR_PRAEFIX,k as entpacke,u as kosinus,m as mischeRangfolgen,b as packe,v as textFuerNamensVektor,d as textFuerVektor};