@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.
Files changed (88) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.js +7 -0
  3. package/dist/index.js.map +1 -0
  4. package/dist/src/aussetzer.d.ts +67 -0
  5. package/dist/src/aussetzer.js +82 -0
  6. package/dist/src/aussetzer.js.map +1 -0
  7. package/dist/src/autor-abzeichen.d.ts +41 -0
  8. package/dist/src/autor-abzeichen.js +56 -0
  9. package/dist/src/autor-abzeichen.js.map +1 -0
  10. package/dist/src/autor.d.ts +101 -0
  11. package/dist/src/autor.js +136 -0
  12. package/dist/src/autor.js.map +1 -0
  13. package/dist/src/bauabdruck-daten.generiert.json +5 -0
  14. package/dist/src/bauabdruck.d.ts +38 -0
  15. package/dist/src/bauabdruck.js +93 -0
  16. package/dist/src/bauabdruck.js.map +1 -0
  17. package/dist/src/bedeutung.d.ts +175 -0
  18. package/dist/src/bedeutung.js +254 -0
  19. package/dist/src/bedeutung.js.map +1 -0
  20. package/dist/src/brain-export.d.ts +24 -0
  21. package/dist/src/brain-export.js +31 -1
  22. package/dist/src/brain-export.js.map +1 -1
  23. package/dist/src/deutsch.d.ts +98 -0
  24. package/dist/src/deutsch.js +223 -0
  25. package/dist/src/deutsch.js.map +1 -0
  26. package/dist/src/eingaenge-nachruesten.d.ts +41 -0
  27. package/dist/src/eingaenge-nachruesten.js +290 -0
  28. package/dist/src/eingaenge-nachruesten.js.map +1 -0
  29. package/dist/src/eingaenge.d.ts +135 -0
  30. package/dist/src/eingaenge.js +228 -0
  31. package/dist/src/eingaenge.js.map +1 -0
  32. package/dist/src/geliefert.d.ts +63 -0
  33. package/dist/src/geliefert.js +114 -0
  34. package/dist/src/geliefert.js.map +1 -0
  35. package/dist/src/handlers/advanced.js +7 -3
  36. package/dist/src/handlers/advanced.js.map +1 -1
  37. package/dist/src/handlers/brain.d.ts +19 -0
  38. package/dist/src/handlers/brain.js +536 -48
  39. package/dist/src/handlers/brain.js.map +1 -1
  40. package/dist/src/handlers/instances.d.ts +24 -0
  41. package/dist/src/handlers/instances.js +49 -1
  42. package/dist/src/handlers/instances.js.map +1 -1
  43. package/dist/src/handlers/team.js +105 -0
  44. package/dist/src/handlers/team.js.map +1 -1
  45. package/dist/src/index.d.ts +20 -0
  46. package/dist/src/index.js +272 -26
  47. package/dist/src/index.js.map +1 -1
  48. package/dist/src/lesson-preview.d.ts +81 -0
  49. package/dist/src/lesson-preview.js +133 -0
  50. package/dist/src/lesson-preview.js.map +1 -0
  51. package/dist/src/rangfolge.d.ts +169 -0
  52. package/dist/src/rangfolge.js +214 -0
  53. package/dist/src/rangfolge.js.map +1 -0
  54. package/dist/src/raumkorrektur.d.ts +100 -0
  55. package/dist/src/raumkorrektur.js +197 -0
  56. package/dist/src/raumkorrektur.js.map +1 -0
  57. package/dist/src/recall-tiefe.d.ts +48 -0
  58. package/dist/src/recall-tiefe.js +42 -0
  59. package/dist/src/recall-tiefe.js.map +1 -0
  60. package/dist/src/rerank.d.ts +0 -14
  61. package/dist/src/rerank.js +39 -2
  62. package/dist/src/rerank.js.map +1 -1
  63. package/dist/src/search.d.ts +56 -17
  64. package/dist/src/search.js +335 -73
  65. package/dist/src/search.js.map +1 -1
  66. package/dist/src/seltenheitsbestand.d.ts +53 -0
  67. package/dist/src/seltenheitsbestand.js +92 -0
  68. package/dist/src/seltenheitsbestand.js.map +1 -0
  69. package/dist/src/spuren.d.ts +97 -0
  70. package/dist/src/spuren.js +150 -0
  71. package/dist/src/spuren.js.map +1 -0
  72. package/dist/src/tools.js +1 -1
  73. package/dist/src/tools.js.map +1 -1
  74. package/dist/src/versuch.d.ts +179 -0
  75. package/dist/src/versuch.js +250 -0
  76. package/dist/src/versuch.js.map +1 -0
  77. package/dist/src/vorspann.d.ts +73 -0
  78. package/dist/src/vorspann.js +146 -0
  79. package/dist/src/vorspann.js.map +1 -0
  80. package/dist/src/werkzeug-nutzung.d.ts +62 -0
  81. package/dist/src/werkzeug-nutzung.js +72 -0
  82. package/dist/src/werkzeug-nutzung.js.map +1 -0
  83. package/dist/src/wertbeitrag.d.ts +57 -0
  84. package/dist/src/wertbeitrag.js +73 -0
  85. package/dist/src/wertbeitrag.js.map +1 -0
  86. package/glama.json +1 -1
  87. package/package.json +12 -4
  88. 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://glama.ai/mcp/schemas/server.json",
3
- "version": "0.10.124",
3
+ "version": "0.10.126",
4
4
  "maintainers": [
5
5
  "HeinrichNebula"
6
6
  ],
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "@cachly-dev/mcp-server",
3
- "version": "0.10.124",
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. Persistent memory + causal root-cause analysis for Claude Code, Cursor, Copilot & Windsurf. Learns from every bug fix, git commit, and CI run automatically. Arrives pre-briefed. Predicts failures before they happen. One-command setup (npx ... autopilot). 122 MCP tools · Free tier forever · GDPR · EU servers.",
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.124",
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.124",
15
+ "version": "0.10.126",
16
16
  "transport": {
17
17
  "type": "stdio"
18
18
  }