@cachly-dev/mcp-server 0.10.139 → 0.10.141
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 +19 -5
- package/dist/src/bench/cachly-bench.js +2 -2
- package/dist/src/brand-wachhund.js +2 -0
- package/dist/src/doctor.js +2 -2
- package/dist/src/ersetzung-vorschlag.js +1 -0
- package/dist/src/etiketten.js +1 -0
- package/dist/src/handlers/advanced.js +10 -10
- package/dist/src/handlers/brain.js +63 -63
- package/dist/src/index.js +98 -97
- package/dist/src/rangfolge-stellschrauben.js +1 -1
- package/dist/src/rangfolge.js +1 -1
- package/dist/src/recall-trichter.js +1 -0
- package/dist/src/stdin-ende.js +1 -0
- package/dist/src/tools.js +2 -2
- package/dist/src/utils.js +1 -1
- package/dist/src/werkzeug-auswahl.js +2 -0
- package/dist/src/zeit-normalisieren.js +1 -1
- package/dist/src/zulassung-und-urteil.js +1 -0
- package/glama.json +1 -1
- package/package.json +1 -1
- package/server.json +2 -2
package/dist/src/utils.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function p(e,t){if(!e)return t;try{return JSON.parse(e)}catch{return t}}async function y(e,t,r){let n;const i=new Promise(c=>{n=setTimeout(()=>c(r),t)});try{return await Promise.race([e,i])}catch{return r}finally{n&&clearTimeout(n)}}function h(e,t,r={}){const n=r.max??1e3,i=r.timeoutMs??3e3;return new Promise(c=>{const s=[];let l=!1;const o=()=>{l||(l=!0,c(s))},u=setTimeout(o,i);try{const a=e.scanStream({match:t,count:r.count??200});a.on("data",m=>{for(const f of m)if(s.push(f),s.length>=n){clearTimeout(u),o();return}}),a.on("end",()=>{clearTimeout(u),o()}),a.on("error",()=>{clearTimeout(u),o()})}catch{clearTimeout(u),o()}})}function x(e){let t=e.trim();if(!t)return t;t=t.replace(/\{[^}]*=>\s*([^}]*)\}/g,(n,i)=>i.trim());const r=t.split("=>");return r.length===2&&(t=r[1].trim()),t.replace(/\/{2,}/g,"/").replace(/^\/|\/$/g,"")}function T(e){if(!e)return null;try{const t=JSON.parse(e);return t===null||typeof t!="object"||Array.isArray(t)?null:t}catch{return null}}function d(e){return e===null?!1:e.visibility!=="private"}export{d as darfHeraus,T as leseOderNull,x as normalizeGitPath,p as safeJsonParse,h as scanKeys,y as withTimeout};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const s=["session_start","session_end","smart_recall","recall_best_solution","learn_from_attempts","remember_context","recall_context","forget_context","list_remembered","causal_trace","brain_predict","semantic_search","brain_search","autopilot","brain_doctor","brain_from_git","index_project","team_recall","team_learn","cache_get","cache_set","roadmap_add","roadmap_list","roadmap_next","roadmap_update","session_handoff"],u="cachly_tool";function l(e){return["Run any of cachly's specialist tools by name.","","The most-used tools are listed separately above. This one reaches the",`other ${e.length} without their schemas taking up room in every request.`,"","Unsure about a tool's arguments? Call it with describe:true first \u2014 that","returns its input schema instead of running it.","",`Available: ${e.join(", ")}`].join(`
|
|
2
|
+
`)}function m(e){return{name:u,description:l(e),inputSchema:{type:"object",properties:{tool:{type:"string",description:'Name of the tool to run, e.g. "team_roster".'},arguments:{type:"object",description:"Arguments for that tool. Use describe:true if unsure."},describe:{type:"boolean",description:"Return the tool's input schema instead of running it."}},required:["tool"]}}}function p(e,i=process.env){const c=new Set(e.map(t=>t.name)),n=s.filter(t=>!c.has(t));if(i.CACHLY_ALLE_WERKZEUGE==="1")return{katalog:[...e],uebrige:[],unbekannteKernnamen:n};const o=new Set(s),a=e.filter(t=>o.has(t.name)),r=e.filter(t=>!o.has(t.name)).map(t=>t.name);return r.length>0&&a.push(m(r)),{katalog:a,uebrige:r,unbekannteKernnamen:n}}export{s as KERNWERKZEUGE,u as VERTEILER,p as sichtbareWerkzeuge,l as verteilerBeschreibung,m as verteilerWerkzeug};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function f(e){const t=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),n=String(e.getDate()).padStart(2,"0");return`${t}-${r}-${n}`}function s(e,t){const r=new Date(e.getTime());return r.setDate(r.getDate()-t),r}function b(e,t){const r=new Date(e.getTime());return r.setMonth(r.getMonth()-t),r}const m=[{re:/\bvorgestern\b/gi,versatz:e=>s(e,2)},{re:/\buebermorgen\b|\bübermorgen\b/gi,versatz:e=>s(e,-2)},{re:/\bgestern\b/gi,versatz:e=>s(e,1)},{re:/\bmorgen\b/gi,versatz:e=>s(e,-1)},{re:/\bheute\b/gi,versatz:e=>e},{re:/\bvor\s+(\d{1,3})\s+Tagen\b/gi,versatz:(e,t)=>s(e,Number(t[1]))},{re:/\bvor\s+(\d{1,3})\s+Wochen\b/gi,versatz:(e,t)=>s(e,7*Number(t[1]))},{re:/\bvor\s+(\d{1,3})\s+Monaten\b/gi,versatz:(e,t)=>b(e,Number(t[1]))},{re:/\bvor\s+einer\s+Woche\b/gi,versatz:e=>s(e,7)},{re:/\bvor\s+einem\s+Monat\b/gi,versatz:e=>b(e,1)},{re:/\b(letzte|letzten|letzter|vorige|vorigen)\s+Woche\b/gi,versatz:e=>s(e,7)},{re:/\b(letzten|letzter|vorigen)\s+Monat\b/gi,versatz:e=>b(e,1)},{re:/\bthe\s+day\s+before\s+yesterday\b/gi,versatz:e=>s(e,2)},{re:/\byesterday\b/gi,versatz:e=>s(e,1)},{re:/\btomorrow\b/gi,versatz:e=>s(e,-1)},{re:/\btoday\b/gi,versatz:e=>e},{re:/\b(\d{1,3})\s+days?\s+ago\b/gi,versatz:(e,t)=>s(e,Number(t[1]))},{re:/\b(\d{1,3})\s+weeks?\s+ago\b/gi,versatz:(e,t)=>s(e,7*Number(t[1]))},{re:/\b(\d{1,3})\s+months?\s+ago\b/gi,versatz:(e,t)=>b(e,Number(t[1]))},{re:/\blast\s+week\b/gi,versatz:e=>s(e,7)},{re:/\blast\s+month\b/gi,versatz:e=>b(e,1)}];function z(e){const t=[];for(const r of[/```[\s\S]*?```/g,/`[^`\n]*`/g])for(const n of e.matchAll(r))n.index!==void 0&&t.push([n.index,n.index+n[0].length]);return t}const h=(e,t,r)=>e.some(([n,g])=>t<g&&r>n);function l(e,t){if(!e)return e;const r=z(e),n=[],g=[];for(const{re:o,versatz:u}of m){o.lastIndex=0;for(const d of e.matchAll(o)){const a=d.index;if(a===void 0)continue;const i=a+d[0].length;if(h(r,a,i)||h(g,a,i)||/^\s*\(\d{4}-\d{2}-\d{2}\)/.test(e.slice(i)))continue;const v=u(t,d);!v||Number.isNaN(v.getTime())||(g.push([a,i]),n.push({ende:i,datum:f(v)}))}}if(n.length===0)return e;n.sort((o,u)=>u.ende-o.ende);let c=e;for(const o of n)c=`${c.slice(0,o.ende)} (${o.datum})${c.slice(o.ende)}`;return c}function N(e,t){if(!e)return 0;const r=(e.match(/\(\d{4}-\d{2}-\d{2}\)/g)??[]).length;return(l(e,t).match(/\(\d{4}-\d{2}-\d{2}\)/g)??[]).length-r}export{l as normalisiereZeit,N as zaehleZeitangaben};
|
|
1
|
+
function f(e){const t=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),n=String(e.getDate()).padStart(2,"0");return`${t}-${r}-${n}`}function s(e,t){const r=new Date(e.getTime());return r.setDate(r.getDate()-t),r}function b(e,t){const r=new Date(e.getTime());return r.setMonth(r.getMonth()-t),r}const m=[{re:/\bvorgestern\b/gi,versatz:e=>s(e,2)},{re:/\buebermorgen\b|\bübermorgen\b/gi,versatz:e=>s(e,-2)},{re:/\bgestern\b/gi,versatz:e=>s(e,1)},{re:/\bmorgen\b/gi,versatz:e=>s(e,-1)},{re:/\bheute\b/gi,versatz:e=>e},{re:/\bvor\s+(\d{1,3})\s+Tagen\b/gi,versatz:(e,t)=>s(e,Number(t[1]))},{re:/\bvor\s+(\d{1,3})\s+Wochen\b/gi,versatz:(e,t)=>s(e,7*Number(t[1]))},{re:/\bvor\s+(\d{1,3})\s+Monaten\b/gi,versatz:(e,t)=>b(e,Number(t[1]))},{re:/\bvor\s+einer\s+Woche\b/gi,versatz:e=>s(e,7)},{re:/\bvor\s+einem\s+Monat\b/gi,versatz:e=>b(e,1)},{re:/\b(letzte|letzten|letzter|vorige|vorigen)\s+Woche\b/gi,versatz:e=>s(e,7)},{re:/\b(letzten|letzter|vorigen)\s+Monat\b/gi,versatz:e=>b(e,1)},{re:/\bthe\s+day\s+before\s+yesterday\b/gi,versatz:e=>s(e,2)},{re:/\byesterday\b/gi,versatz:e=>s(e,1)},{re:/\btomorrow\b/gi,versatz:e=>s(e,-1)},{re:/\btoday\b/gi,versatz:e=>e},{re:/\b(\d{1,3})\s+days?\s+ago\b/gi,versatz:(e,t)=>s(e,Number(t[1]))},{re:/\b(\d{1,3})\s+weeks?\s+ago\b/gi,versatz:(e,t)=>s(e,7*Number(t[1]))},{re:/\b(\d{1,3})\s+months?\s+ago\b/gi,versatz:(e,t)=>b(e,Number(t[1]))},{re:/\blast\s+week\b/gi,versatz:e=>s(e,7)},{re:/\blast\s+month\b/gi,versatz:e=>b(e,1)}];function z(e){const t=[];for(const r of[/```[\s\S]*?```/g,/`[^`\n]*`/g,/"[^"\n]*"/g,/„[^“\n]*“/g,/«[^»\n]*»/g])for(const n of e.matchAll(r))n.index!==void 0&&t.push([n.index,n.index+n[0].length]);return t}const h=(e,t,r)=>e.some(([n,g])=>t<g&&r>n);function l(e,t){if(!e)return e;const r=z(e),n=[],g=[];for(const{re:o,versatz:u}of m){o.lastIndex=0;for(const d of e.matchAll(o)){const a=d.index;if(a===void 0)continue;const i=a+d[0].length;if(h(r,a,i)||h(g,a,i)||/^\s*\(\d{4}-\d{2}-\d{2}\)/.test(e.slice(i)))continue;const v=u(t,d);!v||Number.isNaN(v.getTime())||(g.push([a,i]),n.push({ende:i,datum:f(v)}))}}if(n.length===0)return e;n.sort((o,u)=>u.ende-o.ende);let c=e;for(const o of n)c=`${c.slice(0,o.ende)} (${o.datum})${c.slice(o.ende)}`;return c}function N(e,t){if(!e)return 0;const r=(e.match(/\(\d{4}-\d{2}-\d{2}\)/g)??[]).length;return(l(e,t).match(/\(\d{4}-\d{2}-\d{2}\)/g)??[]).length-r}export{l as normalisiereZeit,N as zaehleZeitangaben};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function b(e){return new Set(String(e??"").toLowerCase().split(/[^a-z0-9äöüß]+/).filter(t=>t.length>=2))}function g(e,t){const n=b(e),r=b(t);if(n.size===0||r.size===0)return 0;let i=0;for(const o of n)r.has(o)&&i++;return i/(n.size+r.size-i)}const a=.3,h=[/\bnicht\b/i,/\bkein(e|en|em|er)?\b/i,/\bstatt\b/i,/\bfalsch\b/i,/\bwar falsch\b/i,/\bkorrektur\b/i,/\bdoch nicht\b/i,/\bentgegen\b/i,/\bnever\b/i,/\bwrong\b/i,/\binstead\b/i,/\bno longer\b/i],d=[/\bnicht mehr\b/i,/\bseit\b/i,/\bab (sofort|heute|dem)\b/i,/\bumgestellt\b/i,/\bmigriert\b/i,/\breplaced\b/i,/\bmoved to\b/i],m=e=>`${e.what_worked??""} ${e.what_failed??""}`;function f(e,t){return g(e.topic,t.topic)>=a}function l(e,t){const n=m(e),r=m(t);if(n.trim()===r.trim()&&n.trim()!=="")return{beziehung:"doppelung",grund:"beide Texte sind Zeichen fuer Zeichen gleich"};const i=d.some(u=>u.test(n)),o=d.some(u=>u.test(r));if(i!==o)return{beziehung:"ersetzung",grund:`${i?"der erste":"der zweite"} Eintrag nennt eine Aenderung ("nicht mehr", "seit", "umgestellt") \u2014 das ist Nachfolge, kein Streit`};const s=h.some(u=>u.test(n)),c=h.some(u=>u.test(r));return s!==c?{beziehung:"widerspruch",grund:`genau einer der beiden Texte traegt eine Verneinung \u2014 ${s?"der erste":"der zweite"}`}:e.outcome&&t.outcome&&e.outcome!==t.outcome?{beziehung:"widerspruch",grund:`gleiches Subjekt, verschiedener Ausgang (${e.outcome} gegen ${t.outcome})`}:e.outcome&&t.outcome&&e.outcome===t.outcome?{beziehung:"stuetzung",grund:`beide melden ${e.outcome} zum selben Subjekt`}:{beziehung:"unverwandt",grund:"zugelassen, aber kein Merkmal spricht fuer eine Beziehung"}}function z(e){const t=[];for(let n=0;n<e.length;n++)for(let r=n+1;r<e.length;r++){const i=e[n],o=e[r];if(!f(i,o))continue;const{beziehung:s,grund:c}=l(i,o);t.push({a:i,b:o,naehe:g(i.topic,o.topic),beziehung:s,grund:c})}return t}export{a as ZULASSUNG,z as findePaare,g as naehe,b as themenWoerter,l as urteile,f as zugelassen};
|
package/glama.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cachly-dev/mcp-server",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.141",
|
|
4
4
|
"mcpName": "io.github.cachly-dev/mcp-server",
|
|
5
5
|
"description": "Your AI forgets everything between sessions. cachly fixes that permanently: 123 MCP tools for Claude Code, Cursor, Copilot & Windsurf. Learns from every bug fix, commit and CI run. Arrives pre-briefed. Free tier forever, EU servers, GDPR.",
|
|
6
6
|
"type": "module",
|
package/server.json
CHANGED
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
"url": "https://github.com/cachly-dev/cachly-mcp",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "0.10.
|
|
9
|
+
"version": "0.10.141",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"name": "@cachly-dev/mcp-server",
|
|
14
14
|
"identifier": "@cachly-dev/mcp-server",
|
|
15
|
-
"version": "0.10.
|
|
15
|
+
"version": "0.10.141",
|
|
16
16
|
"transport": {
|
|
17
17
|
"type": "stdio"
|
|
18
18
|
}
|