@cachly-dev/mcp-server 0.10.124 → 0.10.126
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/dist/index.d.ts +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/src/aussetzer.d.ts +67 -0
- package/dist/src/aussetzer.js +82 -0
- package/dist/src/aussetzer.js.map +1 -0
- package/dist/src/autor-abzeichen.d.ts +41 -0
- package/dist/src/autor-abzeichen.js +56 -0
- package/dist/src/autor-abzeichen.js.map +1 -0
- package/dist/src/autor.d.ts +101 -0
- package/dist/src/autor.js +136 -0
- package/dist/src/autor.js.map +1 -0
- package/dist/src/bauabdruck-daten.generiert.json +5 -0
- package/dist/src/bauabdruck.d.ts +38 -0
- package/dist/src/bauabdruck.js +93 -0
- package/dist/src/bauabdruck.js.map +1 -0
- package/dist/src/bedeutung.d.ts +175 -0
- package/dist/src/bedeutung.js +254 -0
- package/dist/src/bedeutung.js.map +1 -0
- package/dist/src/brain-export.d.ts +24 -0
- package/dist/src/brain-export.js +31 -1
- package/dist/src/brain-export.js.map +1 -1
- package/dist/src/deutsch.d.ts +98 -0
- package/dist/src/deutsch.js +223 -0
- package/dist/src/deutsch.js.map +1 -0
- package/dist/src/eingaenge-nachruesten.d.ts +41 -0
- package/dist/src/eingaenge-nachruesten.js +290 -0
- package/dist/src/eingaenge-nachruesten.js.map +1 -0
- package/dist/src/eingaenge.d.ts +135 -0
- package/dist/src/eingaenge.js +228 -0
- package/dist/src/eingaenge.js.map +1 -0
- package/dist/src/geliefert.d.ts +63 -0
- package/dist/src/geliefert.js +114 -0
- package/dist/src/geliefert.js.map +1 -0
- package/dist/src/handlers/advanced.js +7 -3
- package/dist/src/handlers/advanced.js.map +1 -1
- package/dist/src/handlers/brain.d.ts +19 -0
- package/dist/src/handlers/brain.js +536 -48
- package/dist/src/handlers/brain.js.map +1 -1
- package/dist/src/handlers/instances.d.ts +24 -0
- package/dist/src/handlers/instances.js +49 -1
- package/dist/src/handlers/instances.js.map +1 -1
- package/dist/src/handlers/team.js +105 -0
- package/dist/src/handlers/team.js.map +1 -1
- package/dist/src/index.d.ts +20 -0
- package/dist/src/index.js +272 -26
- package/dist/src/index.js.map +1 -1
- package/dist/src/lesson-preview.d.ts +81 -0
- package/dist/src/lesson-preview.js +133 -0
- package/dist/src/lesson-preview.js.map +1 -0
- package/dist/src/rangfolge.d.ts +169 -0
- package/dist/src/rangfolge.js +214 -0
- package/dist/src/rangfolge.js.map +1 -0
- package/dist/src/raumkorrektur.d.ts +100 -0
- package/dist/src/raumkorrektur.js +197 -0
- package/dist/src/raumkorrektur.js.map +1 -0
- package/dist/src/recall-tiefe.d.ts +48 -0
- package/dist/src/recall-tiefe.js +42 -0
- package/dist/src/recall-tiefe.js.map +1 -0
- package/dist/src/rerank.d.ts +0 -14
- package/dist/src/rerank.js +39 -2
- package/dist/src/rerank.js.map +1 -1
- package/dist/src/search.d.ts +56 -17
- package/dist/src/search.js +335 -73
- package/dist/src/search.js.map +1 -1
- package/dist/src/seltenheitsbestand.d.ts +53 -0
- package/dist/src/seltenheitsbestand.js +92 -0
- package/dist/src/seltenheitsbestand.js.map +1 -0
- package/dist/src/spuren.d.ts +97 -0
- package/dist/src/spuren.js +150 -0
- package/dist/src/spuren.js.map +1 -0
- package/dist/src/tools.js +1 -1
- package/dist/src/tools.js.map +1 -1
- package/dist/src/versuch.d.ts +179 -0
- package/dist/src/versuch.js +250 -0
- package/dist/src/versuch.js.map +1 -0
- package/dist/src/vorspann.d.ts +73 -0
- package/dist/src/vorspann.js +146 -0
- package/dist/src/vorspann.js.map +1 -0
- package/dist/src/werkzeug-nutzung.d.ts +62 -0
- package/dist/src/werkzeug-nutzung.js +72 -0
- package/dist/src/werkzeug-nutzung.js.map +1 -0
- package/dist/src/wertbeitrag.d.ts +57 -0
- package/dist/src/wertbeitrag.js +73 -0
- package/dist/src/wertbeitrag.js.map +1 -0
- package/glama.json +1 -1
- package/package.json +12 -4
- package/server.json +2 -2
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Welche der 122 Werkzeuge werden wirklich benutzt?
|
|
3
|
+
*
|
|
4
|
+
* ANLASS 19.08.2026: Die Glama-Bewertung sagt, cachly habe zu viele Werkzeuge
|
|
5
|
+
* und viele liessen sich zusammenlegen. Der Einwand ist plausibel — nur konnte
|
|
6
|
+
* ihm niemand mit Zahlen begegnen, weil es KEINE Messung gab. Nirgends im
|
|
7
|
+
* Server wurde festgehalten, welches Werkzeug wie oft gerufen wird.
|
|
8
|
+
*
|
|
9
|
+
* Ohne diese Zahl ist jedes Zusammenlegen geraten. Man streicht dann das, was
|
|
10
|
+
* man selbst selten benutzt — und das ist selten dasselbe wie das, was die
|
|
11
|
+
* Nutzer selten benutzen.
|
|
12
|
+
*
|
|
13
|
+
* Diese Datei ist die Rechnung dazu, ohne Datenzugriff und ohne neues
|
|
14
|
+
* Werkzeug: gezaehlt wird an der EINEN Stelle, durch die jeder Aufruf geht
|
|
15
|
+
* (handleTool), und gelesen wird in `brain_metrics`, das es schon gibt. Ein
|
|
16
|
+
* 123. Werkzeug, um zu messen, dass es zu viele Werkzeuge gibt, waere die
|
|
17
|
+
* Pointe, die niemand will.
|
|
18
|
+
*/
|
|
19
|
+
/** Redis-Hash je Brain: Feld = Werkzeugname, Wert = Anzahl der Aufrufe. */
|
|
20
|
+
export declare function nutzungsSchluessel(instanceId: string): string;
|
|
21
|
+
export interface WerkzeugZeile {
|
|
22
|
+
name: string;
|
|
23
|
+
aufrufe: number;
|
|
24
|
+
/** Anteil an allen Aufrufen, 0..1. */
|
|
25
|
+
anteil: number;
|
|
26
|
+
}
|
|
27
|
+
export interface NutzungsBild {
|
|
28
|
+
/** Alle Aufrufe zusammen. */
|
|
29
|
+
gesamt: number;
|
|
30
|
+
/** Wie viele verschiedene Werkzeuge ueberhaupt je gerufen wurden. */
|
|
31
|
+
benutzte: number;
|
|
32
|
+
/** Absteigend sortiert, gekappt. */
|
|
33
|
+
spitze: WerkzeugZeile[];
|
|
34
|
+
/**
|
|
35
|
+
* Wie viele Aufrufe auf die Spitzengruppe entfallen, 0..1.
|
|
36
|
+
*
|
|
37
|
+
* Die eigentlich interessante Zahl: liegt sie bei 0,9, dann traegt eine
|
|
38
|
+
* Handvoll Werkzeuge die ganze Arbeit — und der Rest ist Erklaerungsbedarf,
|
|
39
|
+
* nicht Funktionsumfang.
|
|
40
|
+
*/
|
|
41
|
+
anteilSpitze: number;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Rohzaehler zu einem lesbaren Bild verdichten.
|
|
45
|
+
*
|
|
46
|
+
* Rein, damit sich die Verdichtung ohne Redis pruefen laesst. Ungueltige
|
|
47
|
+
* Zaehler (kein Zahlwert, negativ) fallen heraus statt NaN zu erzeugen — eine
|
|
48
|
+
* kaputte Zeile darf nicht die ganze Auswertung vergiften.
|
|
49
|
+
*/
|
|
50
|
+
export declare function verdichte(roh: Record<string, string | number>, spitzeN?: number): NutzungsBild;
|
|
51
|
+
/**
|
|
52
|
+
* Der Satz, der die Glama-Frage beantwortet.
|
|
53
|
+
*
|
|
54
|
+
* Bewusst mit der Zahl der NIE gerufenen Werkzeuge: das ist die Angabe, an der
|
|
55
|
+
* sich entscheidet, ob zusammengelegt werden sollte — und sie ist unbequem
|
|
56
|
+
* genug, dass niemand sie schoenreden kann.
|
|
57
|
+
*
|
|
58
|
+
* Ohne einen einzigen Aufruf wird NICHT behauptet, alles sei ungenutzt: eine
|
|
59
|
+
* frische Instanz hat noch nichts gemessen, und "0 von 122 benutzt" waere dann
|
|
60
|
+
* eine Aussage ueber die Messung, nicht ueber das Produkt.
|
|
61
|
+
*/
|
|
62
|
+
export declare function nutzungInWorten(bild: NutzungsBild, werkzeugeGesamt: number): string;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Welche der 122 Werkzeuge werden wirklich benutzt?
|
|
3
|
+
*
|
|
4
|
+
* ANLASS 19.08.2026: Die Glama-Bewertung sagt, cachly habe zu viele Werkzeuge
|
|
5
|
+
* und viele liessen sich zusammenlegen. Der Einwand ist plausibel — nur konnte
|
|
6
|
+
* ihm niemand mit Zahlen begegnen, weil es KEINE Messung gab. Nirgends im
|
|
7
|
+
* Server wurde festgehalten, welches Werkzeug wie oft gerufen wird.
|
|
8
|
+
*
|
|
9
|
+
* Ohne diese Zahl ist jedes Zusammenlegen geraten. Man streicht dann das, was
|
|
10
|
+
* man selbst selten benutzt — und das ist selten dasselbe wie das, was die
|
|
11
|
+
* Nutzer selten benutzen.
|
|
12
|
+
*
|
|
13
|
+
* Diese Datei ist die Rechnung dazu, ohne Datenzugriff und ohne neues
|
|
14
|
+
* Werkzeug: gezaehlt wird an der EINEN Stelle, durch die jeder Aufruf geht
|
|
15
|
+
* (handleTool), und gelesen wird in `brain_metrics`, das es schon gibt. Ein
|
|
16
|
+
* 123. Werkzeug, um zu messen, dass es zu viele Werkzeuge gibt, waere die
|
|
17
|
+
* Pointe, die niemand will.
|
|
18
|
+
*/
|
|
19
|
+
/** Redis-Hash je Brain: Feld = Werkzeugname, Wert = Anzahl der Aufrufe. */
|
|
20
|
+
export function nutzungsSchluessel(instanceId) {
|
|
21
|
+
return `cachly:stats:tool_calls:${instanceId}`;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Rohzaehler zu einem lesbaren Bild verdichten.
|
|
25
|
+
*
|
|
26
|
+
* Rein, damit sich die Verdichtung ohne Redis pruefen laesst. Ungueltige
|
|
27
|
+
* Zaehler (kein Zahlwert, negativ) fallen heraus statt NaN zu erzeugen — eine
|
|
28
|
+
* kaputte Zeile darf nicht die ganze Auswertung vergiften.
|
|
29
|
+
*/
|
|
30
|
+
export function verdichte(roh, spitzeN = 15) {
|
|
31
|
+
const zeilen = [];
|
|
32
|
+
for (const [name, wert] of Object.entries(roh)) {
|
|
33
|
+
const n = typeof wert === 'number' ? wert : Number(wert);
|
|
34
|
+
if (!Number.isFinite(n) || n <= 0)
|
|
35
|
+
continue;
|
|
36
|
+
zeilen.push({ name, aufrufe: Math.floor(n) });
|
|
37
|
+
}
|
|
38
|
+
const gesamt = zeilen.reduce((s, z) => s + z.aufrufe, 0);
|
|
39
|
+
zeilen.sort((a, b) => b.aufrufe - a.aufrufe || a.name.localeCompare(b.name));
|
|
40
|
+
const spitze = zeilen.slice(0, Math.max(0, spitzeN)).map((z) => ({
|
|
41
|
+
...z,
|
|
42
|
+
anteil: gesamt > 0 ? z.aufrufe / gesamt : 0,
|
|
43
|
+
}));
|
|
44
|
+
const summeSpitze = spitze.reduce((s, z) => s + z.aufrufe, 0);
|
|
45
|
+
return {
|
|
46
|
+
gesamt,
|
|
47
|
+
benutzte: zeilen.length,
|
|
48
|
+
spitze,
|
|
49
|
+
anteilSpitze: gesamt > 0 ? summeSpitze / gesamt : 0,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Der Satz, der die Glama-Frage beantwortet.
|
|
54
|
+
*
|
|
55
|
+
* Bewusst mit der Zahl der NIE gerufenen Werkzeuge: das ist die Angabe, an der
|
|
56
|
+
* sich entscheidet, ob zusammengelegt werden sollte — und sie ist unbequem
|
|
57
|
+
* genug, dass niemand sie schoenreden kann.
|
|
58
|
+
*
|
|
59
|
+
* Ohne einen einzigen Aufruf wird NICHT behauptet, alles sei ungenutzt: eine
|
|
60
|
+
* frische Instanz hat noch nichts gemessen, und "0 von 122 benutzt" waere dann
|
|
61
|
+
* eine Aussage ueber die Messung, nicht ueber das Produkt.
|
|
62
|
+
*/
|
|
63
|
+
export function nutzungInWorten(bild, werkzeugeGesamt) {
|
|
64
|
+
if (bild.gesamt === 0) {
|
|
65
|
+
return 'Noch keine Werkzeug-Aufrufe gezählt — die Messung beginnt mit dem nächsten Aufruf.';
|
|
66
|
+
}
|
|
67
|
+
const nie = Math.max(0, werkzeugeGesamt - bild.benutzte);
|
|
68
|
+
const prozent = Math.round(bild.anteilSpitze * 100);
|
|
69
|
+
return (`${bild.benutzte} von ${werkzeugeGesamt} Werkzeugen wurden hier je gerufen (${nie} nie). ` +
|
|
70
|
+
`Die ${bild.spitze.length} häufigsten tragen ${prozent} % aller ${bild.gesamt} Aufrufe.`);
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=werkzeug-nutzung.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"werkzeug-nutzung.js","sourceRoot":"","sources":["../../src/werkzeug-nutzung.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,2EAA2E;AAC3E,MAAM,UAAU,kBAAkB,CAAC,UAAkB;IACnD,OAAO,2BAA2B,UAAU,EAAE,CAAC;AACjD,CAAC;AA0BD;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,GAAoC,EAAE,OAAO,GAAG,EAAE;IAC1E,MAAM,MAAM,GAAwC,EAAE,CAAC;IACvD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,CAAC,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAC5C,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACzD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/D,GAAG,CAAC;QACJ,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;KAC5C,CAAC,CAAC,CAAC;IACJ,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC9D,OAAO;QACL,MAAM;QACN,QAAQ,EAAE,MAAM,CAAC,MAAM;QACvB,MAAM;QACN,YAAY,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;KACpD,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,IAAkB,EAAE,eAAuB;IACzE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,oFAAoF,CAAC;IAC9F,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC;IACpD,OAAO,CACL,GAAG,IAAI,CAAC,QAAQ,QAAQ,eAAe,uCAAuC,GAAG,SAAS;QAC1F,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,sBAAsB,OAAO,YAAY,IAAI,CAAC,MAAM,WAAW,CACzF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wertbeitrag — was ein einzelner Abruf zur Zeitersparnis beiträgt.
|
|
3
|
+
*
|
|
4
|
+
* ─── DER ANLASS ────────────────────────────────────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
* Am 17.08.2026 zeigte das Panel eines Brains mit 475 Lektionen eine
|
|
7
|
+
* Zeitersparnis von 54 Tagen und einen Gegenwert von 97.237,50 €. Nachgerechnet
|
|
8
|
+
* stammte praktisch die ganze Zahl aus dem STARTER-KORPUS: `docker:layer-cache`
|
|
9
|
+
* stand bei 973 Abrufen, `cache:stampede` bei 971, dahinter neun weitere
|
|
10
|
+
* Starter-Lektionen mit je rund 208. Die echten, projektbezogenen Lektionen
|
|
11
|
+
* standen bei zwei bis fünf.
|
|
12
|
+
*
|
|
13
|
+
* Der Starter-Korpus ist genau das, wofür er gedacht ist: ein Startvorrat, der
|
|
14
|
+
* dafür sorgt, dass die erste Frage an ein leeres Brain nicht ins Leere geht.
|
|
15
|
+
* Er ist eingekauftes Allgemeinwissen — Docker-Cache, JWT-Uhrzeitversatz,
|
|
16
|
+
* N+1-Abfragen. Er ist NICHT das, was jemand über sein Projekt gelernt hat.
|
|
17
|
+
*
|
|
18
|
+
* Ihn in die Wertschätzung einzurechnen macht die Zahl doppelt falsch:
|
|
19
|
+
* - Sie wächst, ohne dass jemand etwas gelernt hat.
|
|
20
|
+
* - Sie wächst am schnellsten in Brains, die am wenigsten eigenes Wissen
|
|
21
|
+
* haben — dort gibt es ja nichts anderes zu treffen.
|
|
22
|
+
*
|
|
23
|
+
* Eine Kennzahl, die dann am besten aussieht, wenn das Produkt am wenigsten
|
|
24
|
+
* leistet, ist schlimmer als gar keine.
|
|
25
|
+
*
|
|
26
|
+
* ─── WARUM KEINE NAMENSLISTE ───────────────────────────────────────────────
|
|
27
|
+
*
|
|
28
|
+
* Naheliegend wäre gewesen, die sechs auffälligen Themen hart auszuschliessen.
|
|
29
|
+
* Das wäre ein Wächter, der auf den Anlass genagelt ist: Beim nächsten
|
|
30
|
+
* Starter-Korpus mit anderen Namen wäre er blind. Die Starter-Lektionen tragen
|
|
31
|
+
* seit ihrer Einführung `source: 'starter'` im Datensatz — genau dafür. Diese
|
|
32
|
+
* Datei benutzt die Markierung, nicht die Namen.
|
|
33
|
+
*/
|
|
34
|
+
/** fmtStunden macht aus Minuten eine lesbare Angabe ("21 h", "3 d 4 h"). */
|
|
35
|
+
export declare function fmtStunden(minuten: number): string;
|
|
36
|
+
/** Eine Lektion, soweit sie für die Bewertung gebraucht wird. */
|
|
37
|
+
export interface BewertbareLektion {
|
|
38
|
+
severity?: string;
|
|
39
|
+
source?: string;
|
|
40
|
+
[k: string]: unknown;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Stammt die Lektion aus dem mitgelieferten Startvorrat?
|
|
44
|
+
*
|
|
45
|
+
* Solche Lektionen dürfen abgerufen werden und sind nützlich — sie zählen nur
|
|
46
|
+
* nicht als etwas, das dieser Mensch oder dieses Team gelernt hat.
|
|
47
|
+
*/
|
|
48
|
+
export declare function istStarterLektion(lesson: BewertbareLektion | null | undefined): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Minuten, die ein Abruf dieser Lektion einspart — 0 für den Startvorrat.
|
|
51
|
+
*
|
|
52
|
+
* Die Staffel (30 / 60 / 240) ist unverändert; sie stand vorher an drei
|
|
53
|
+
* Stellen im Code und steht jetzt hier. `basis` erlaubt der abweichenden
|
|
54
|
+
* Staffel von causal_trace (60 / 120 / 240) ihren eigenen Grundwert, ohne dass
|
|
55
|
+
* die Starter-Regel ein zweites Mal geschrieben werden muss.
|
|
56
|
+
*/
|
|
57
|
+
export declare function ersparteMinuten(lesson: BewertbareLektion | null | undefined, basis?: 'recall' | 'trace'): number;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wertbeitrag — was ein einzelner Abruf zur Zeitersparnis beiträgt.
|
|
3
|
+
*
|
|
4
|
+
* ─── DER ANLASS ────────────────────────────────────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
* Am 17.08.2026 zeigte das Panel eines Brains mit 475 Lektionen eine
|
|
7
|
+
* Zeitersparnis von 54 Tagen und einen Gegenwert von 97.237,50 €. Nachgerechnet
|
|
8
|
+
* stammte praktisch die ganze Zahl aus dem STARTER-KORPUS: `docker:layer-cache`
|
|
9
|
+
* stand bei 973 Abrufen, `cache:stampede` bei 971, dahinter neun weitere
|
|
10
|
+
* Starter-Lektionen mit je rund 208. Die echten, projektbezogenen Lektionen
|
|
11
|
+
* standen bei zwei bis fünf.
|
|
12
|
+
*
|
|
13
|
+
* Der Starter-Korpus ist genau das, wofür er gedacht ist: ein Startvorrat, der
|
|
14
|
+
* dafür sorgt, dass die erste Frage an ein leeres Brain nicht ins Leere geht.
|
|
15
|
+
* Er ist eingekauftes Allgemeinwissen — Docker-Cache, JWT-Uhrzeitversatz,
|
|
16
|
+
* N+1-Abfragen. Er ist NICHT das, was jemand über sein Projekt gelernt hat.
|
|
17
|
+
*
|
|
18
|
+
* Ihn in die Wertschätzung einzurechnen macht die Zahl doppelt falsch:
|
|
19
|
+
* - Sie wächst, ohne dass jemand etwas gelernt hat.
|
|
20
|
+
* - Sie wächst am schnellsten in Brains, die am wenigsten eigenes Wissen
|
|
21
|
+
* haben — dort gibt es ja nichts anderes zu treffen.
|
|
22
|
+
*
|
|
23
|
+
* Eine Kennzahl, die dann am besten aussieht, wenn das Produkt am wenigsten
|
|
24
|
+
* leistet, ist schlimmer als gar keine.
|
|
25
|
+
*
|
|
26
|
+
* ─── WARUM KEINE NAMENSLISTE ───────────────────────────────────────────────
|
|
27
|
+
*
|
|
28
|
+
* Naheliegend wäre gewesen, die sechs auffälligen Themen hart auszuschliessen.
|
|
29
|
+
* Das wäre ein Wächter, der auf den Anlass genagelt ist: Beim nächsten
|
|
30
|
+
* Starter-Korpus mit anderen Namen wäre er blind. Die Starter-Lektionen tragen
|
|
31
|
+
* seit ihrer Einführung `source: 'starter'` im Datensatz — genau dafür. Diese
|
|
32
|
+
* Datei benutzt die Markierung, nicht die Namen.
|
|
33
|
+
*/
|
|
34
|
+
/** fmtStunden macht aus Minuten eine lesbare Angabe ("21 h", "3 d 4 h"). */
|
|
35
|
+
export function fmtStunden(minuten) {
|
|
36
|
+
const gesamt = Math.max(0, Math.round(minuten));
|
|
37
|
+
if (gesamt < 60)
|
|
38
|
+
return `${gesamt} min`;
|
|
39
|
+
const stunden = Math.floor(gesamt / 60);
|
|
40
|
+
if (stunden < 24)
|
|
41
|
+
return `${stunden} h`;
|
|
42
|
+
const tage = Math.floor(stunden / 24);
|
|
43
|
+
const rest = stunden % 24;
|
|
44
|
+
return rest > 0 ? `${tage} d ${rest} h` : `${tage} d`;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Stammt die Lektion aus dem mitgelieferten Startvorrat?
|
|
48
|
+
*
|
|
49
|
+
* Solche Lektionen dürfen abgerufen werden und sind nützlich — sie zählen nur
|
|
50
|
+
* nicht als etwas, das dieser Mensch oder dieses Team gelernt hat.
|
|
51
|
+
*/
|
|
52
|
+
export function istStarterLektion(lesson) {
|
|
53
|
+
return lesson?.source === 'starter';
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Minuten, die ein Abruf dieser Lektion einspart — 0 für den Startvorrat.
|
|
57
|
+
*
|
|
58
|
+
* Die Staffel (30 / 60 / 240) ist unverändert; sie stand vorher an drei
|
|
59
|
+
* Stellen im Code und steht jetzt hier. `basis` erlaubt der abweichenden
|
|
60
|
+
* Staffel von causal_trace (60 / 120 / 240) ihren eigenen Grundwert, ohne dass
|
|
61
|
+
* die Starter-Regel ein zweites Mal geschrieben werden muss.
|
|
62
|
+
*/
|
|
63
|
+
export function ersparteMinuten(lesson, basis = 'recall') {
|
|
64
|
+
if (!lesson || istStarterLektion(lesson))
|
|
65
|
+
return 0;
|
|
66
|
+
const sev = lesson.severity;
|
|
67
|
+
if (sev === 'critical')
|
|
68
|
+
return 240;
|
|
69
|
+
if (sev === 'major')
|
|
70
|
+
return basis === 'trace' ? 120 : 60;
|
|
71
|
+
return basis === 'trace' ? 60 : 30;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=wertbeitrag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wertbeitrag.js","sourceRoot":"","sources":["../../src/wertbeitrag.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,4EAA4E;AAC5E,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAChD,IAAI,MAAM,GAAG,EAAE;QAAE,OAAO,GAAG,MAAM,MAAM,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IACxC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,IAAI,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,OAAO,GAAG,EAAE,CAAC;IAC1B,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC;AACxD,CAAC;AASD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAA4C;IAC5E,OAAO,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC;AACtC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC7B,MAA4C,EAC5C,QAA4B,QAAQ;IAEpC,IAAI,CAAC,MAAM,IAAI,iBAAiB,CAAC,MAAM,CAAC;QAAE,OAAO,CAAC,CAAC;IAEnD,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC5B,IAAI,GAAG,KAAK,UAAU;QAAE,OAAO,GAAG,CAAC;IACnC,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,OAAO,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACrC,CAAC"}
|
package/glama.json
CHANGED
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cachly-dev/mcp-server",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.126",
|
|
4
4
|
"mcpName": "io.github.cachly-dev/mcp-server",
|
|
5
|
-
"description": "Your AI forgets everything between sessions. cachly fixes that permanently
|
|
5
|
+
"description": "Your AI forgets everything between sessions. cachly fixes that permanently: 122 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",
|
|
7
7
|
"files": [
|
|
8
|
+
"dist/index.*",
|
|
8
9
|
"dist/src/**/*",
|
|
9
10
|
"dist/packages/**/*",
|
|
10
11
|
"scripts/postinstall.js",
|
|
@@ -23,11 +24,15 @@
|
|
|
23
24
|
"capability-docs": "node scripts/capability-docs.mjs markdown",
|
|
24
25
|
"capability-docs:write": "node scripts/capability-docs.mjs write",
|
|
25
26
|
"verify-capability-docs": "node scripts/capability-docs.mjs check",
|
|
27
|
+
"docs-atlas": "node scripts/docs-atlas.mjs summary",
|
|
28
|
+
"docs-atlas:write": "node scripts/docs-atlas.mjs write",
|
|
29
|
+
"verify-docs-atlas": "node scripts/docs-atlas.mjs check",
|
|
26
30
|
"tool-spec-snapshots:write": "node scripts/tool-spec-snapshots.mjs write",
|
|
31
|
+
"version": "node scripts/nummer-nachziehen.mjs && npm run tool-spec-snapshots:write",
|
|
27
32
|
"verify-tool-spec-snapshots": "node scripts/tool-spec-snapshots.mjs check",
|
|
28
33
|
"verify-tool-counts": "node scripts/verify-tool-counts.mjs",
|
|
29
34
|
"verify-capabilities": "node scripts/verify-capabilities.mjs",
|
|
30
|
-
"build": "tsc",
|
|
35
|
+
"build": "tsc && node scripts/bauabdruck.mjs",
|
|
31
36
|
"postinstall": "node scripts/postinstall.js",
|
|
32
37
|
"dev": "tsx src/index.ts",
|
|
33
38
|
"start": "node dist/src/index.js",
|
|
@@ -56,11 +61,14 @@
|
|
|
56
61
|
"@types/node": "^22",
|
|
57
62
|
"eslint": "^9",
|
|
58
63
|
"gpt-tokenizer": "^3.4.0",
|
|
59
|
-
"tsx": "^4",
|
|
64
|
+
"tsx": "^4.23.12",
|
|
60
65
|
"typescript": "^5",
|
|
61
66
|
"typescript-eslint": "^8",
|
|
62
67
|
"vitest": "^3.2.4"
|
|
63
68
|
},
|
|
69
|
+
"overrides": {
|
|
70
|
+
"esbuild": "^0.28.2"
|
|
71
|
+
},
|
|
64
72
|
"engines": {
|
|
65
73
|
"node": ">=20"
|
|
66
74
|
},
|
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.126",
|
|
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.126",
|
|
16
16
|
"transport": {
|
|
17
17
|
"type": "stdio"
|
|
18
18
|
}
|