@cachly-dev/mcp-server 0.10.129 → 0.10.130

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 (223) hide show
  1. package/README.md +2 -2
  2. package/dist/index.js +1 -7
  3. package/dist/packages/telegram-notify/client.js +2 -75
  4. package/dist/src/ambient-cli.js +7 -253
  5. package/dist/src/ambient-deps.js +1 -55
  6. package/dist/src/ambient-hooks.js +5 -278
  7. package/dist/src/ambient-ledger.js +6 -95
  8. package/dist/src/ambient-memory.js +1 -67
  9. package/dist/src/ambient-recall.js +1 -221
  10. package/dist/src/aussetzer.js +1 -225
  11. package/dist/src/auth.js +9 -140
  12. package/dist/src/autor-abzeichen.js +1 -56
  13. package/dist/src/autor.js +1 -136
  14. package/dist/src/bauabdruck.js +1 -93
  15. package/dist/src/bedeutung.js +2 -323
  16. package/dist/src/bench/cachly-bench.js +4 -249
  17. package/dist/src/bench/external-corpus.js +4 -135
  18. package/dist/src/bench/fixtures.js +1 -225
  19. package/dist/src/brain-export.js +16 -119
  20. package/dist/src/brain-watch-hook.js +8 -86
  21. package/dist/src/cachly-url.js +1 -21
  22. package/dist/src/ckg.js +1 -108
  23. package/dist/src/cls-hook.js +8 -94
  24. package/dist/src/confidence.js +1 -50
  25. package/dist/src/credentials.js +1 -85
  26. package/dist/src/deutsch.js +1 -223
  27. package/dist/src/doctor.js +2 -248
  28. package/dist/src/editor.js +1 -63
  29. package/dist/src/eingaenge-nachruesten.js +1 -290
  30. package/dist/src/eingaenge.js +2 -260
  31. package/dist/src/embeddings.js +13 -223
  32. package/dist/src/feldreparatur.js +3 -113
  33. package/dist/src/first-contact.js +4 -108
  34. package/dist/src/first-recall-proof.js +4 -41
  35. package/dist/src/funnel-milestones.js +2 -48
  36. package/dist/src/geliefert.js +1 -114
  37. package/dist/src/handlers/advanced.js +38 -537
  38. package/dist/src/handlers/brain.js +69 -4397
  39. package/dist/src/handlers/cache.js +59 -638
  40. package/dist/src/handlers/context.js +17 -182
  41. package/dist/src/handlers/fedbrain.js +40 -1436
  42. package/dist/src/handlers/instances.js +16 -201
  43. package/dist/src/handlers/roadmap.js +13 -175
  44. package/dist/src/handlers/share.js +19 -530
  45. package/dist/src/handlers/syndicate.js +38 -904
  46. package/dist/src/handlers/team.js +89 -1865
  47. package/dist/src/handlers/viz.js +3 -148
  48. package/dist/src/index.js +321 -4281
  49. package/dist/src/interferenz.js +1 -141
  50. package/dist/src/kostprobe.js +7 -125
  51. package/dist/src/lesson-preview.js +2 -133
  52. package/dist/src/namespace.js +1 -128
  53. package/dist/src/notifier.js +1 -6
  54. package/dist/src/rangfolge-stellschrauben.js +1 -0
  55. package/dist/src/rangfolge.js +1 -249
  56. package/dist/src/raumkorrektur.js +1 -197
  57. package/dist/src/recall-tiefe.js +1 -42
  58. package/dist/src/rerank.js +1 -154
  59. package/dist/src/resonanz.js +1 -140
  60. package/dist/src/search.js +1 -2104
  61. package/dist/src/seltenheitsbestand.js +1 -92
  62. package/dist/src/speicherlage.js +1 -84
  63. package/dist/src/spuren.js +1 -150
  64. package/dist/src/starter-corpus.js +1 -165
  65. package/dist/src/telemetry-types.js +0 -13
  66. package/dist/src/tools.js +10 -2465
  67. package/dist/src/toolspecs.js +1 -121
  68. package/dist/src/upgrade-nudge.js +1 -29
  69. package/dist/src/utils.js +1 -89
  70. package/dist/src/versuch.js +1 -264
  71. package/dist/src/vorspann.js +1 -146
  72. package/dist/src/wartung/vektoren-verdichten.js +1 -200
  73. package/dist/src/werkzeug-nutzung.js +1 -72
  74. package/dist/src/wertbeitrag.js +1 -203
  75. package/dist/src/wirkungsspur.js +1 -0
  76. package/glama.json +1 -1
  77. package/package.json +8 -7
  78. package/server.json +3 -3
  79. package/dist/index.d.ts +0 -1
  80. package/dist/index.js.map +0 -1
  81. package/dist/packages/telegram-notify/client.d.ts +0 -19
  82. package/dist/packages/telegram-notify/client.js.map +0 -1
  83. package/dist/src/ambient-cli.d.ts +0 -101
  84. package/dist/src/ambient-cli.js.map +0 -1
  85. package/dist/src/ambient-deps.d.ts +0 -26
  86. package/dist/src/ambient-deps.js.map +0 -1
  87. package/dist/src/ambient-hooks.d.ts +0 -137
  88. package/dist/src/ambient-hooks.js.map +0 -1
  89. package/dist/src/ambient-ledger.d.ts +0 -19
  90. package/dist/src/ambient-ledger.js.map +0 -1
  91. package/dist/src/ambient-memory.d.ts +0 -12
  92. package/dist/src/ambient-memory.js.map +0 -1
  93. package/dist/src/ambient-recall.d.ts +0 -127
  94. package/dist/src/ambient-recall.js.map +0 -1
  95. package/dist/src/aussetzer.d.ts +0 -156
  96. package/dist/src/aussetzer.js.map +0 -1
  97. package/dist/src/auth.d.ts +0 -43
  98. package/dist/src/auth.js.map +0 -1
  99. package/dist/src/autor-abzeichen.d.ts +0 -41
  100. package/dist/src/autor-abzeichen.js.map +0 -1
  101. package/dist/src/autor.d.ts +0 -101
  102. package/dist/src/autor.js.map +0 -1
  103. package/dist/src/bauabdruck-daten.generiert.json +0 -5
  104. package/dist/src/bauabdruck.d.ts +0 -38
  105. package/dist/src/bauabdruck.js.map +0 -1
  106. package/dist/src/bedeutung.d.ts +0 -168
  107. package/dist/src/bedeutung.js.map +0 -1
  108. package/dist/src/bench/cachly-bench.d.ts +0 -61
  109. package/dist/src/bench/cachly-bench.js.map +0 -1
  110. package/dist/src/bench/external-corpus.d.ts +0 -44
  111. package/dist/src/bench/external-corpus.js.map +0 -1
  112. package/dist/src/bench/fixtures.d.ts +0 -37
  113. package/dist/src/bench/fixtures.js.map +0 -1
  114. package/dist/src/brain-export.d.ts +0 -64
  115. package/dist/src/brain-export.js.map +0 -1
  116. package/dist/src/brain-watch-hook.d.ts +0 -21
  117. package/dist/src/brain-watch-hook.js.map +0 -1
  118. package/dist/src/cachly-url.d.ts +0 -68
  119. package/dist/src/cachly-url.js.map +0 -1
  120. package/dist/src/ckg.d.ts +0 -54
  121. package/dist/src/ckg.js.map +0 -1
  122. package/dist/src/cls-hook.d.ts +0 -15
  123. package/dist/src/cls-hook.js.map +0 -1
  124. package/dist/src/confidence.d.ts +0 -19
  125. package/dist/src/confidence.js.map +0 -1
  126. package/dist/src/credentials.d.ts +0 -37
  127. package/dist/src/credentials.js.map +0 -1
  128. package/dist/src/deutsch.d.ts +0 -98
  129. package/dist/src/deutsch.js.map +0 -1
  130. package/dist/src/doctor.d.ts +0 -47
  131. package/dist/src/doctor.js.map +0 -1
  132. package/dist/src/editor.d.ts +0 -9
  133. package/dist/src/editor.js.map +0 -1
  134. package/dist/src/eingaenge-nachruesten.d.ts +0 -41
  135. package/dist/src/eingaenge-nachruesten.js.map +0 -1
  136. package/dist/src/eingaenge.d.ts +0 -159
  137. package/dist/src/eingaenge.js.map +0 -1
  138. package/dist/src/embeddings.d.ts +0 -48
  139. package/dist/src/embeddings.js.map +0 -1
  140. package/dist/src/feldreparatur.d.ts +0 -58
  141. package/dist/src/feldreparatur.js.map +0 -1
  142. package/dist/src/first-contact.d.ts +0 -56
  143. package/dist/src/first-contact.js.map +0 -1
  144. package/dist/src/first-recall-proof.d.ts +0 -19
  145. package/dist/src/first-recall-proof.js.map +0 -1
  146. package/dist/src/funnel-milestones.d.ts +0 -5
  147. package/dist/src/funnel-milestones.js.map +0 -1
  148. package/dist/src/geliefert.d.ts +0 -63
  149. package/dist/src/geliefert.js.map +0 -1
  150. package/dist/src/handlers/advanced.d.ts +0 -6
  151. package/dist/src/handlers/advanced.js.map +0 -1
  152. package/dist/src/handlers/brain.d.ts +0 -41
  153. package/dist/src/handlers/brain.js.map +0 -1
  154. package/dist/src/handlers/cache.d.ts +0 -6
  155. package/dist/src/handlers/cache.js.map +0 -1
  156. package/dist/src/handlers/context.d.ts +0 -6
  157. package/dist/src/handlers/context.js.map +0 -1
  158. package/dist/src/handlers/fedbrain.d.ts +0 -18
  159. package/dist/src/handlers/fedbrain.js.map +0 -1
  160. package/dist/src/handlers/instances.d.ts +0 -33
  161. package/dist/src/handlers/instances.js.map +0 -1
  162. package/dist/src/handlers/roadmap.d.ts +0 -6
  163. package/dist/src/handlers/roadmap.js.map +0 -1
  164. package/dist/src/handlers/share.d.ts +0 -8
  165. package/dist/src/handlers/share.js.map +0 -1
  166. package/dist/src/handlers/syndicate.d.ts +0 -6
  167. package/dist/src/handlers/syndicate.js.map +0 -1
  168. package/dist/src/handlers/team.d.ts +0 -45
  169. package/dist/src/handlers/team.js.map +0 -1
  170. package/dist/src/handlers/viz.d.ts +0 -6
  171. package/dist/src/handlers/viz.js.map +0 -1
  172. package/dist/src/index.d.ts +0 -93
  173. package/dist/src/index.js.map +0 -1
  174. package/dist/src/interferenz.d.ts +0 -111
  175. package/dist/src/interferenz.js.map +0 -1
  176. package/dist/src/kostprobe.d.ts +0 -25
  177. package/dist/src/kostprobe.js.map +0 -1
  178. package/dist/src/lesson-preview.d.ts +0 -81
  179. package/dist/src/lesson-preview.js.map +0 -1
  180. package/dist/src/namespace.d.ts +0 -20
  181. package/dist/src/namespace.js.map +0 -1
  182. package/dist/src/notifier.d.ts +0 -5
  183. package/dist/src/notifier.js.map +0 -1
  184. package/dist/src/rangfolge.d.ts +0 -205
  185. package/dist/src/rangfolge.js.map +0 -1
  186. package/dist/src/raumkorrektur.d.ts +0 -100
  187. package/dist/src/raumkorrektur.js.map +0 -1
  188. package/dist/src/recall-tiefe.d.ts +0 -48
  189. package/dist/src/recall-tiefe.js.map +0 -1
  190. package/dist/src/rerank.d.ts +0 -48
  191. package/dist/src/rerank.js.map +0 -1
  192. package/dist/src/resonanz.d.ts +0 -85
  193. package/dist/src/resonanz.js.map +0 -1
  194. package/dist/src/search.d.ts +0 -153
  195. package/dist/src/search.js.map +0 -1
  196. package/dist/src/seltenheitsbestand.d.ts +0 -53
  197. package/dist/src/seltenheitsbestand.js.map +0 -1
  198. package/dist/src/speicherlage.d.ts +0 -51
  199. package/dist/src/speicherlage.js.map +0 -1
  200. package/dist/src/spuren.d.ts +0 -97
  201. package/dist/src/spuren.js.map +0 -1
  202. package/dist/src/starter-corpus.d.ts +0 -28
  203. package/dist/src/starter-corpus.js.map +0 -1
  204. package/dist/src/telemetry-types.d.ts +0 -87
  205. package/dist/src/telemetry-types.js.map +0 -1
  206. package/dist/src/tools.d.ts +0 -2933
  207. package/dist/src/tools.js.map +0 -1
  208. package/dist/src/toolspecs.d.ts +0 -43
  209. package/dist/src/toolspecs.js.map +0 -1
  210. package/dist/src/upgrade-nudge.d.ts +0 -15
  211. package/dist/src/upgrade-nudge.js.map +0 -1
  212. package/dist/src/utils.d.ts +0 -34
  213. package/dist/src/utils.js.map +0 -1
  214. package/dist/src/versuch.d.ts +0 -187
  215. package/dist/src/versuch.js.map +0 -1
  216. package/dist/src/vorspann.d.ts +0 -73
  217. package/dist/src/vorspann.js.map +0 -1
  218. package/dist/src/wartung/vektoren-verdichten.d.ts +0 -50
  219. package/dist/src/wartung/vektoren-verdichten.js.map +0 -1
  220. package/dist/src/werkzeug-nutzung.d.ts +0 -62
  221. package/dist/src/werkzeug-nutzung.js.map +0 -1
  222. package/dist/src/wertbeitrag.d.ts +0 -148
  223. package/dist/src/wertbeitrag.js.map +0 -1
@@ -1,156 +0,0 @@
1
- /**
2
- * Meldestelle fuer stille Aussetzer.
3
- *
4
- * ── Warum es das gibt ───────────────────────────────────────────────────────
5
- *
6
- * Am 20.08.2026 wurde am Produktionsspeicher gemessen: `cachly:lesson:vec:*`
7
- * war LEER — 0 Vektoren bei 506 Lektionen. Der Recall-Pfad steigt bei
8
- * `vektorbestand.groesse === 0` aus und faellt auf den reinen Wortabgleich
9
- * zurueck. Er tut das STUMM.
10
- *
11
- * Von aussen ist dieser Zustand von "alles in Ordnung" nicht zu
12
- * unterscheiden: die Suche liefert weiter Ergebnisse, nur schlechtere. Die am
13
- * 19.08. gemessene Verbesserung von 21 auf 40 Prozent existierte in
14
- * Produktion nie, und nichts hat es gesagt.
15
- *
16
- * Das ist die Fehlerklasse "Stille wird als gruen gebucht". Diese Datei ist
17
- * die Gegenmassnahme an der billigsten Stelle: eine Zeile im Protokoll.
18
- *
19
- * ── Warum nur EINMAL je Grund ───────────────────────────────────────────────
20
- *
21
- * Der Recall-Pfad laeuft bei jeder Anfrage. Eine Zeile je Anfrage waere nach
22
- * einer Stunde ein Protokoll, das niemand mehr liest — und ein Protokoll, das
23
- * niemand liest, ist wieder Stille. Einmal je Grund und Prozess ist die
24
- * Menge, die auffaellt, ohne zu ermueden.
25
- *
26
- * ── Warum stderr und nicht stdout ───────────────────────────────────────────
27
- *
28
- * Ueber stdout laeuft das MCP-Protokoll. Eine Zeile Text dort ist kein
29
- * Hinweis, sondern ein Verbindungsabbruch.
30
- */
31
- /**
32
- * Aus einem geworfenen Wert einen lesbaren Grund machen.
33
- *
34
- * JavaScript laesst zu, dass ALLES geworfen wird — ein Error, ein String, ein
35
- * undefined. `String(e)` auf einem leeren Objekt ergibt "[object Object]", und
36
- * das ist als Ursachenangabe wertlos.
37
- *
38
- * Gekuerzt auf 200 Zeichen: der Grund gehoert in EINE Protokollzeile. Manche
39
- * Anbieter antworten mit einer ganzen HTML-Seite, und ein Protokoll, das
40
- * niemand mehr liest, ist wieder Stille.
41
- */
42
- export declare function fehlerText(e: unknown): string;
43
- /**
44
- * Meldet einen Aussetzer genau einmal je Grund und Prozess.
45
- *
46
- * @param grund kurzer Schluessel, z. B. 'bedeutung-ohne-vektoren'
47
- * @param text was ausgefallen ist und was das fuer das Ergebnis heisst
48
- * @returns true, wenn diese Meldung wirklich hinausging
49
- */
50
- export declare function meldeEinmal(grund: string, text: string): boolean;
51
- /**
52
- * Wurde dieser Grund in diesem Prozess schon gemeldet?
53
- *
54
- * Fuer `brain_doctor`: dort soll stehen, was hier passiert ist, ohne dass
55
- * jemand ein Protokoll durchsuchen muss.
56
- */
57
- export declare function schonGemeldet(grund: string): boolean;
58
- /** Alle bisher gemeldeten Gruende, in der Reihenfolge des Auftretens. */
59
- export declare function gemeldeteGruende(): string[];
60
- /**
61
- * Setzt die Merkliste zurueck.
62
- *
63
- * Nur fuer Tests. Ohne das wuerde die erste Testdatei alle weiteren blind
64
- * machen — genau der Fehler, gegen den diese Datei antritt.
65
- */
66
- export declare function setzeAussetzerZurueck(): void;
67
- /** Der Grund, um den es beim Anlass ging: Bedeutungsabgleich ohne Vektoren. */
68
- export declare const OHNE_VEKTOREN = "bedeutung-ohne-vektoren";
69
- /** Der Nachbarfall: es gibt gar keinen Dienst zum Einbetten. */
70
- export declare const OHNE_DIENST = "bedeutung-ohne-dienst";
71
- /**
72
- * Der Bestand ist da, aber die FRAGE liess sich nicht einbetten.
73
- *
74
- * Eigener Grund und nicht mit OHNE_VEKTOREN zusammengelegt: hier ist der
75
- * Bestand gesund und der fremde Dienst hat gerade nicht geantwortet. Das ist
76
- * ein Netzproblem und keine fehlende Nachruestung — wer beides unter einem
77
- * Namen fuehrt, sucht spaeter an der falschen Stelle.
78
- */
79
- export declare const OHNE_FRAGEVEKTOR = "bedeutung-ohne-fragevektor";
80
- /**
81
- * Der Auffang-catch am Ende des Bedeutungspfads.
82
- *
83
- * Eigener Grund, weil er etwas anderes bedeutet als die drei darueber: die
84
- * sind BENANNTE Ausstiege ("kein Dienst", "keine Vektoren", "Frage nicht
85
- * einbettbar") — hier ist etwas Unerwartetes passiert. Wer beides unter einem
86
- * Namen fuehrt, sieht nicht, dass er einen Fehler hat statt einer Luecke.
87
- */
88
- export declare const SINNPFAD_ABBRUCH = "bedeutung-abbruch";
89
- /**
90
- * Die Einbettung BEIM SCHREIBEN einer Lektion ist fehlgeschlagen.
91
- *
92
- * ── Warum dieser Grund am 22.08.2026 dazukam ────────────────────────────────
93
- *
94
- * Alle Gruende darueber betreffen das SUCHEN. Das Schreiben hatte keinen: in
95
- * handlers/brain.ts standen drei leere `catch { }` um die drei Einbettungen
96
- * (Volltext, Themenname, Eingaenge). Sie sind mit Absicht fehlertolerant —
97
- * eine Lektion muss auch ohne Netz gespeichert werden koennen — aber sie
98
- * warfen den GRUND weg.
99
- *
100
- * Gemessen am 22.08.2026 ueber den Admin-Endpunkt: von 50 gezogenen Instanzen
101
- * hatten drei Lektionen (10, 2 und 46) und NULL Vektoren. Warum, konnte
102
- * niemand sagen — kein Protokoll, keine Zahl, nichts. Der Wachhund meldete
103
- * seit zwei Tagen "Bedeutungsabgleich AUS", ohne dass eine Ursache
104
- * feststellbar war.
105
- *
106
- * Die Fehlerklasse ist bekannt: "Stille wird als gruen gebucht". Der
107
- * Unterschied hier ist, dass nicht einmal der Ausfall still war, sondern nur
108
- * sein Grund. Ein Alarm ohne Ursache ist ein Alarm, den man abschaltet.
109
- *
110
- * Die Lektion wird weiterhin gespeichert. Es aendert sich NUR, dass der Grund
111
- * einmal je Prozess im Protokoll steht.
112
- */
113
- export declare const OHNE_SCHREIBVEKTOR = "einbettung-beim-schreiben";
114
- /** Der Versuch ist eingeschaltet, laeuft aber ohne Wirkung (siehe versuch.ts). */
115
- export declare const VERSUCH_LEER = "versuch-laeuft-leer";
116
- /** Schluessel-Vorsatz der Vermerke. */
117
- export declare const AUSSETZER_VORSATZ = "cachly:aussetzer:";
118
- /** 30 Tage. Wird bei jedem Vermerk erneuert. */
119
- export declare const AUSSETZER_TTL_SEKUNDEN: number;
120
- /** Was ein Vermerk enthaelt. */
121
- export interface Aussetzervermerk {
122
- grund: string;
123
- anzahl: number;
124
- zuletzt: string;
125
- text: string;
126
- }
127
- /** So viel wie ein Vermerk braucht, ohne den Speicher zu belasten. */
128
- interface VermerkSpeicher {
129
- hincrby(key: string, field: string, increment: number): Promise<number>;
130
- hset(key: string, values: Record<string, string>): Promise<unknown>;
131
- expire(key: string, seconds: number): Promise<unknown>;
132
- keys(pattern: string): Promise<string[]>;
133
- hgetall(key: string): Promise<Record<string, string>>;
134
- }
135
- /**
136
- * Meldet den Aussetzer (einmal je Prozess) UND vermerkt ihn dauerhaft.
137
- *
138
- * Der Vermerk darf die Anfrage NIE zum Scheitern bringen: wer eine Suche
139
- * abbricht, weil er den Ausfall nicht aufschreiben konnte, hat aus einer
140
- * Verschlechterung einen Ausfall gemacht. Scheitert das Schreiben, bleibt es
141
- * bei der stderr-Zeile — gemeldet ueber meldeEinmal, damit auch dieser
142
- * Rueckfall nicht still ist.
143
- *
144
- * @returns true, wenn die stderr-Meldung wirklich hinausging
145
- */
146
- export declare function meldeUndVermerke(redis: VermerkSpeicher | null | undefined, grund: string, text: string): Promise<boolean>;
147
- /**
148
- * Alle Vermerke der letzten 30 Tage, der haeufigste zuerst.
149
- *
150
- * Fuer `brain_doctor`. Ein Fehler beim Lesen liefert eine leere Liste — aber
151
- * NICHT still: der Aufrufer bekommt `null` und kann "nicht gemessen" von
152
- * "nichts gefunden" unterscheiden. Genau dieser Unterschied fehlte an allen
153
- * Stellen, aus denen diese Datei entstanden ist.
154
- */
155
- export declare function leseVermerke(redis: VermerkSpeicher | null | undefined): Promise<Aussetzervermerk[] | null>;
156
- export {};
@@ -1 +0,0 @@
1
- {"version":3,"file":"aussetzer.js","sourceRoot":"","sources":["../../src/aussetzer.ts"],"names":[],"mappings":"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"}
@@ -1,43 +0,0 @@
1
- export declare function jwtExpiryMs(token: string): number | null;
2
- /** Long-lived API keys cannot expire silently; raw access tokens can. */
3
- export declare const API_KEY_PREFIX = "cky_";
4
- export type AuthState = 'healthy' | 'no_jwt' | 'expired' | 'near_expiry' | 'long_lived';
5
- export interface AuthDiagnosis {
6
- state: AuthState;
7
- /** Safe to make API calls right now? (healthy, near_expiry and long_lived all are.) */
8
- usable: boolean;
9
- /** ms until expiry, or null for tokens with no exp claim (long-lived keys). */
10
- expiresInMs: number | null;
11
- /** Human-facing message with the single fix, when action is needed. */
12
- message: string;
13
- }
14
- /** A long-lived API key (cky_live_… / cky_…) has no exp and never expires silently. */
15
- export declare function isLongLivedApiKey(token: string): boolean;
16
- export declare const NEAR_EXPIRY_MS: number;
17
- /**
18
- * Diagnose the current credential without making any network call. Pure +
19
- * deterministic (pass `now` in tests).
20
- */
21
- export declare function diagnoseAuth(jwt: string, now?: number): AuthDiagnosis;
22
- export type AuthHealAction = 'none' | 'refresh' | 'reauth';
23
- /**
24
- * Decide what self-healing step (if any) to take for a diagnosis. Pure so the
25
- * decision is unit-testable independently of the network-bound executor.
26
- */
27
- export declare function planAuthHeal(d: AuthDiagnosis): AuthHealAction;
28
- export declare function checkJwt(jwt: string): void;
29
- export declare const DEFAULT_AUTH_BASE = "https://auth.cachly.dev/realms/cachly/protocol/openid-connect";
30
- export interface ClientCredentials {
31
- clientId: string;
32
- clientSecret: string;
33
- scope?: string;
34
- /** Override the Keycloak realm token base (self-host). */
35
- authBase?: string;
36
- }
37
- /** Read M2M client credentials from the environment, if both are present. */
38
- export declare function readClientCredentialsFromEnv(env?: NodeJS.ProcessEnv): ClientCredentials | null;
39
- /** Build the application/x-www-form-urlencoded body for a client_credentials grant. */
40
- export declare function buildClientCredentialsBody(c: ClientCredentials): string;
41
- /** Token endpoint URL for a given credentials/realm config. */
42
- export declare function clientCredentialsTokenUrl(c: ClientCredentials): string;
43
- export declare function handleApiError(status: number, detail: string): never;
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"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"}
@@ -1,41 +0,0 @@
1
- /**
2
- * Wer hat diese Lektion geschrieben — ich oder jemand anderes?
3
- *
4
- * `session_start_summary` nimmt seit jeher einen Parameter `author` entgegen
5
- * und beschreibt ihn in der Werkzeug-Spezifikation so:
6
- *
7
- * "Your name or handle (optional). Same as session_start — used for team
8
- * lesson filtering."
9
- *
10
- * Die Zusage wurde nie eingeloest. Der Handler holte den Wert aus den
11
- * Argumenten und benutzte ihn danach nirgends; eslint meldete ihn seit
12
- * Monaten als ungenutzte Variable. Wer den Parameter setzte, bekam exakt
13
- * dieselbe Ausgabe wie ohne ihn.
14
- *
15
- * Fehlerklasse: eine Zusage an zwei Orten — hier in der Spezifikation, dort
16
- * im Code — und nur einer wurde gepflegt. Dieselbe Form wie die Kommentarzeile
17
- * am Frei-Limit, die "the #1 result is always returned" versprach, waehrend
18
- * der Zweig darunter null lieferte.
19
- *
20
- * Reines Modul, weil die Entscheidung eine Rechnung ist: dieselbe Regel, die
21
- * `smart_recall` schon anwendet, an EINER Stelle statt zweimal abgeschrieben.
22
- */
23
- /**
24
- * Das Abzeichen hinter einer Lektion — leer, wenn sie von mir selbst stammt
25
- * oder niemand als Autor eingetragen ist.
26
- *
27
- * Bewusst KEIN Abzeichen fuer die eigenen Lektionen: in einem Brain, das
28
- * ueberwiegend einer Person gehoert, stuende sonst hinter jeder Zeile derselbe
29
- * Name, und das Abzeichen verlöre genau die Aussage, für die es da ist.
30
- */
31
- export declare function autorAbzeichen(lektionsAutor: string | null | undefined, anfragender: string | null | undefined): string;
32
- /**
33
- * Wie viele der gezeigten Lektionen von jemand anderem stammen.
34
- *
35
- * Das ist der Wert, den nur ein GETEILTES Gedaechtnis liefert — und deshalb
36
- * die Zahl, die es zu nennen lohnt. Ist sie null, wird auch nichts gesagt:
37
- * "0 von Teamkollegen" ist keine Nachricht, sondern Rauschen.
38
- */
39
- export declare function fremdanteil(lektionen: readonly {
40
- author?: string | null;
41
- }[], anfragender: string | null | undefined): number;
@@ -1 +0,0 @@
1
- {"version":3,"file":"autor-abzeichen.js","sourceRoot":"","sources":["../../src/autor-abzeichen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,aAAwC,EAAE,WAAsC;IAC7G,MAAM,KAAK,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACvC,IAAI,GAAG,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,EAAE,CAAC;IACpC,OAAO,SAAS,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CACzB,SAAgD,EAChD,WAAsC;IAEtC,MAAM,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACvC,IAAI,CAAC,GAAG;QAAE,OAAO,CAAC,CAAC;IACnB,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QAC1B,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,KAAK,GAAG,CAAC;IAC3C,CAAC,CAAC,CAAC,MAAM,CAAC;AACZ,CAAC"}
@@ -1,101 +0,0 @@
1
- /**
2
- * Wer hat diese Lektion geschrieben?
3
- *
4
- * ── Der Befund, gemessen am 19.08.2026 ──────────────────────────────────────
5
- *
6
- * 195 von 493 Lektionen tragen keinen Autor — zwei Fuenftel. Ohne Autor zaehlt
7
- * keine Team-Wiederverwendung, brain_who_knows findet niemanden, und das
8
- * Versprechen "geteiltes Gedaechtnis" ist von einer Notizdatei nicht zu
9
- * unterscheiden.
10
- *
11
- * ── Und es war unser Fehler, nicht der der Nutzer ───────────────────────────
12
- *
13
- * Heinrich, 19.08.2026: "das mit dem Autor war doch eher ein Fehler von uns
14
- * bzw. wie cachly die Anweisungen fuer das Brain geschrieben hat, denn der
15
- * Autor steht doch in den Git-Zugangsdaten."
16
- *
17
- * Genau so ist es. `author` war ein OPTIONALES Feld, das ein Agent bei jedem
18
- * Aufruf mitschicken sollte — und natuerlich vergisst. Dabei steht der Name
19
- * seit jeher zwei Zeilen entfernt in `git config user.name`. Der Code holte
20
- * ihn sogar schon, aber nur an einer anderen Stelle (index.ts, fuer die
21
- * Demo-Ausgabe) und nie fuer die Lektion selbst.
22
- *
23
- * Ein Pflichtfeld, das man vergessen kann, ist kein Pflichtfeld. Ein Wert, der
24
- * sich herleiten laesst, gehoert hergeleitet.
25
- *
26
- * ── Reihenfolge, absichtlich in dieser Richtung ─────────────────────────────
27
- *
28
- * 1. was ausdruecklich uebergeben wurde — der Aufrufer weiss es besser
29
- * 2. CACHLY_AUTHOR — bewusst gesetzt, etwa in der CI
30
- * 3. git config user.name — der angemeldete Mensch
31
- * 4. git config user.email (Teil vor dem @)
32
- * 5. leer — dann steht dort ehrlich nichts statt eines geratenen Namens
33
- *
34
- * Schritt 5 ist wichtig: lieber kein Autor als ein falscher. Ein erfundener
35
- * Name macht aus einer fehlenden Zuordnung eine falsche, und die faellt
36
- * niemandem mehr auf.
37
- */
38
- /** Ein Git-Wert, oder leer. Wirft nie — Git kann fehlen, das ist kein Fehler. */
39
- export type GitLeser = (schluessel: string) => string;
40
- export declare const echterGitLeser: (cwd?: string) => GitLeser;
41
- /**
42
- * Einen Namen auf die Form bringen, in der Autoren gespeichert werden.
43
- *
44
- * Klein geschrieben und ohne Leerzeichen: "Heinrich Neb" wird zu "heinrich".
45
- * Das ist keine Kosmetik — brain_who_knows, team_recall und die
46
- * Wiederverwendungs-Zaehlung vergleichen Autoren als Zeichenketten. "Heinrich"
47
- * und "heinrich" waeren zwei Menschen.
48
- */
49
- export declare function normalisiere(roh: string): string;
50
- export interface AutorHerkunft {
51
- /** Der ermittelte Name, oder leer. */
52
- autor: string;
53
- /** Woher er kam — steht im Hinweis an den Aufrufer. */
54
- quelle: 'uebergeben' | 'umgebung' | 'git-name' | 'git-mail' | 'anonym' | 'unbekannt';
55
- }
56
- export declare function ermittleAutor(input: {
57
- uebergeben?: string;
58
- umgebung?: string;
59
- git: GitLeser;
60
- }): AutorHerkunft;
61
- /**
62
- * Der Mitautor — standardmaessig AUS.
63
- *
64
- * Heinrich: "Wir koennen im gleichen Zuge ja auch zum Beispiel claude als
65
- * Co-Author nehmen, wenn der User das moechte? Einstellungssache,
66
- * standardmaessig aber aus."
67
- *
68
- * Aus zwei Gruenden aus: erstens gehoert die Entscheidung dem Menschen, und
69
- * zweitens wuerde ein automatisch gesetzter Mitautor die Zahl, um die es hier
70
- * geht — wie viele Lektionen einen MENSCHEN als Autor haben — sofort wieder
71
- * unbrauchbar machen.
72
- *
73
- * Eingeschaltet wird er mit
74
- * brain_set_pref(key="coauthor", value="claude")
75
- * und wieder aus mit value="" oder "off".
76
- */
77
- export declare const COAUTHOR_PREF_KEY = "coauthor";
78
- /** Aus dem gespeicherten Wert den Mitautor lesen — leer heisst aus. */
79
- export declare function coautorAus(prefWert: string | null | undefined): string;
80
- /**
81
- * Wie der Autor gespeichert wird, wenn ein Mitautor eingeschaltet ist.
82
- *
83
- * "heinrich+claude" — ein Feld, kein zweites. Ein zweites Feld haette jede
84
- * Abfrage im ganzen Haus anfassen muessen (who_knows, team_recall,
85
- * reuse_pairs, das Briefing), und die Zahl "wie viele Lektionen haben einen
86
- * Autor" waere dabei zweideutig geworden.
87
- *
88
- * Der Mensch steht VORN. Wer die Zeichenkette an "+" trennt, bekommt zuerst
89
- * den, der die Entscheidung getroffen hat.
90
- */
91
- export declare function mitCoautor(autor: string, coautor: string): string;
92
- /** Nur der Mensch, ohne Mitautor — fuer Zaehlungen und Vergleiche. */
93
- export declare function nurMensch(autorFeld: string): string;
94
- /**
95
- * Ein Satz an den Aufrufer, wenn kein Autor ermittelt werden konnte.
96
- *
97
- * Wieder ein HINWEIS und keine Ablehnung: eine abgelehnte Lektion ist immer
98
- * schlechter als eine ohne Autor. Aber schweigen waere falsch — genau das
99
- * Schweigen hat die 195 erzeugt.
100
- */
101
- export declare function autorHinweis(h: AutorHerkunft): string | null;
@@ -1 +0,0 @@
1
- {"version":3,"file":"autor.js","sourceRoot":"","sources":["../../src/autor.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- {
2
- "version": "0.10.129",
3
- "commit": "2df4e88",
4
- "gebautAm": "2026-08-22T10:34:37.954Z"
5
- }
@@ -1,38 +0,0 @@
1
- export interface Bauabdruck {
2
- version: string;
3
- commit: string;
4
- /** ISO-Zeitstempel, oder "unbekannt" solange nie gebaut wurde. */
5
- gebautAm: string;
6
- }
7
- /** Rueckfall, solange kein Bauabdruck generiert wurde (kein Absturz, keine Erfindung). */
8
- export declare const RUECKFALL_BAUABDRUCK: Bauabdruck;
9
- /**
10
- * Laedt den generierten Bauabdruck aus dem eigenen Verzeichnis.
11
- *
12
- * Faellt auf RUECKFALL_BAUABDRUCK zurueck, wenn die Datei fehlt, kein gueltiges
13
- * JSON enthaelt oder die falsche Form hat — ein fehlender Bauabdruck ist kein
14
- * Grund, den Server gar nicht erst zu starten.
15
- */
16
- export declare function ladeBauabdruck(verzeichnis?: string): Bauabdruck;
17
- /** Der Bauabdruck dieses laufenden Prozesses — einmal beim Start geladen. */
18
- export declare const bauabdruck: Bauabdruck;
19
- /** Ab wie vielen Tagen der Bauabdruck in brain_doctor als alt gilt (🟡). */
20
- export declare const ALTER_SCHWELLE_TAGE = 14;
21
- /**
22
- * Der Waechter: ist der Bauabdruck aelter als die Schwelle?
23
- *
24
- * Eigene Funktion, damit sie einzeln aufrufbar und pruefbar ist — aus
25
- * demselben Grund wie beurteileDeckung in eingaenge.ts: ein Wächter, den man
26
- * nicht einzeln aufrufen kann, ist ein Wächter, dessen Nein niemand je sieht.
27
- * "unbekannt" gilt NICHT als alt — ein Server, der nie gebaut wurde, ist ein
28
- * anderer Zustand als einer, der seit Wochen laeuft.
29
- */
30
- export declare function istAlt(gebautAm: string, jetzt?: Date): boolean;
31
- /**
32
- * Baut die Zeile fuer brain_doctor — Form und Ton wie die Zeile
33
- * "Semantic coverage" dort: Emoji, Fettdruck-Label, Zahlen statt Adjektive.
34
- *
35
- * Ein Server, der seit Wochen laeuft, ist kein Fehler — aber man muss es
36
- * sehen koennen. Darum 🟡 statt ❌ fuer den Altersfall.
37
- */
38
- export declare function formatiereBauabdruck(a: Bauabdruck, jetzt?: Date): string;
@@ -1 +0,0 @@
1
- {"version":3,"file":"bauabdruck.js","sourceRoot":"","sources":["../../src/bauabdruck.ts"],"names":[],"mappings":"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"}
@@ -1,168 +0,0 @@
1
- /**
2
- * Bedeutungsabgleich: die Frage findet die Lektion auch ohne gemeinsame Wörter.
3
- *
4
- * ── Warum es das gibt ────────────────────────────────────────────────────────
5
- *
6
- * Gemessen am 19.08.2026 an 499 echten Lektionen mit 100 Fragen in Alltags-
7
- * sprache:
8
- *
9
- * Verfahren Platz 1 Top 3 MRR
10
- * Wörter (bisher) 21 % 33 % 29,3 %
11
- * Bedeutung (bge-m3) 40 % 60 % 51,4 %
12
- *
13
- * Der Wortabgleich war ausgereizt: nach drei Reparaturen brachten weitere
14
- * Eingriffe je eine Frage. Der Grund liegt in der Aufgabe, nicht in der
15
- * Umsetzung. Eine Frage beschreibt ein SYMPTOM, die Lektion eine URSACHE.
16
- * "Der Deploy hängt beim Bauen" und "No space left on device" teilen kein Wort
17
- * und meinen dasselbe. Kein Wörterbuch schließt diese Lücke.
18
- *
19
- * ── Und es ist SCHNELLER, nicht langsamer ───────────────────────────────────
20
- *
21
- * Das war die Überraschung. Am selben Tag gemessen:
22
- *
23
- * Wortabgleich (heute, 499 Lektionen) 788 ms (Mitte)
24
- * Einbettung der Frage (Netzaufruf) 282 ms
25
- * Vergleich gegen 494 Vektoren 0 ms (14 ms im schlechtesten Fall)
26
- *
27
- * Der Wortabgleich baut seinen Index bei JEDER Frage neu: alle Datensätze
28
- * holen, zerlegen, Worthäufigkeiten und Bigramme rechnen. Das wächst linear
29
- * mit dem Bestand — gemessen 1,6 ms je Lektion und Frage:
30
- *
31
- * Lektionen 50 100 250 499 998 1996
32
- * Wartezeit 75ms 156ms 408ms 792ms 1601ms 3185ms
33
- *
34
- * Bei 2000 Lektionen sind das 3,2 Sekunden. Die automatische Einblendung hat
35
- * ein 3-Sekunden-Budget — das erklärt, warum sie nichts liefert
36
- * (cachly:ambient-recall-blendet-nichts-ein).
37
- *
38
- * Der Bedeutungsabgleich kostet dagegen konstant einen Netzaufruf. Er wird
39
- * nicht langsamer, wenn der Bestand wächst.
40
- *
41
- * ── Was das Modul NICHT tut ─────────────────────────────────────────────────
42
- *
43
- * Es ersetzt den Wortabgleich nicht. Zwei Gründe:
44
- *
45
- * 1. Ohne Netz gibt es keine Einbettung. Der Wortabgleich läuft immer.
46
- * 2. Gemischt sind die ersten zehn Treffer besser als bei beiden einzeln
47
- * (71 % gegen 68 und 47). Wörter finden das wörtlich Genannte, Bedeutung
48
- * das sinngemäß Gemeinte.
49
- */
50
- import type { Redis } from 'ioredis';
51
- /** Wo ein Lektionsvektor liegt. Ein Schlüssel je Lektion, neben der Lektion. */
52
- export declare const VEKTOR_PRAEFIX = "cachly:lesson:vec:";
53
- /**
54
- * Wo der Vektor des THEMENNAMENS liegt.
55
- *
56
- * Warum getrennt vom Volltextvektor: der Name ist kurz und frageähnlich, der
57
- * Volltext ist 1376 Zeichen lang. Eine 60-Zeichen-Frage gegen 60 Zeichen zu
58
- * halten ist symmetrisch, gegen 1376 nicht — der Sortierer bewertet beide
59
- * deshalb als eigene Merkmale (`naeheText` 1,0 und `naeheThema` 0,6).
60
- *
61
- * Gemessen am 19.08.2026: der Name allein findet nur 26 %, im Verbund trägt er
62
- * verlässlich. Bis zum 20.08. gab es diese Vektoren nur im Messstand
63
- * (korpus-gross.sicht-c.json), im Produkt nicht — der Sortierer aus
64
- * rangfolge.ts war deshalb auch gar nicht verdrahtet.
65
- */
66
- export declare const NAME_VEKTOR_PRAEFIX = "cachly:lesson:vecname:";
67
- /** Der Text, aus dem der Namensvektor gebildet wird: Trennzeichen zu Wörtern. */
68
- export declare function textFuerNamensVektor(topic: string): string;
69
- export declare function packe(vektor: number[]): string;
70
- export declare function entpacke(s: string): number[] | null;
71
- /**
72
- * Kosinus-Ähnlichkeit zweier Vektoren.
73
- *
74
- * Die Länge wird bei JEDEM Aufruf neu gerechnet statt einmal vorher. Das ist
75
- * absichtlich: gemessen liegt der gesamte Vergleich gegen 494 Vektoren bei
76
- * 0 ms. Eine Vorberechnung wäre eine zweite Wahrheit über denselben Vektor —
77
- * und der Gewinn wäre nicht messbar.
78
- */
79
- export declare function kosinus(a: number[], b: number[]): number;
80
- /**
81
- * Der Text, aus dem der Vektor einer Lektion gebildet wird.
82
- *
83
- * Bewusst NICHT das rohe JSON: Feldnamen, Zeitstempel und Prüfspuren tragen
84
- * keine Bedeutung, verbrauchen aber vom Fenster des Einbettungsmodells. Der
85
- * Dienst kürzt bei rund 2000 Zeichen — gemessen liefern 2000, 4000 und 6000
86
- * Zeichen denselben Vektor. Was hinten steht, existiert für ihn nicht.
87
- */
88
- export declare function textFuerVektor(lektion: Record<string, unknown>): string;
89
- /**
90
- * Ein Vektorbestand, der im Arbeitsspeicher bleibt.
91
- *
92
- * Warum: 494 Vektoren sind rund 2 MB. Die bei jeder Frage aus dem Speicher zu
93
- * holen wäre langsamer als der Wortabgleich, den wir gerade ersetzen — der
94
- * Gewinn wäre weg, bevor er anfängt.
95
- *
96
- * Der MCP-Server läuft lange, also wird einmal geladen und danach nur
97
- * nachgetragen. Die Prüfung "hat sich etwas geändert" läuft über die ANZAHL
98
- * der Schlüssel, nicht über ihren Inhalt: eine geänderte Lektion bekommt beim
99
- * Lernen sofort ihren neuen Vektor geschrieben, und dieser Bestand holt ihn
100
- * beim nächsten Nachladen.
101
- */
102
- export declare class Vektorbestand {
103
- private readonly frischeMs;
104
- private readonly praefix;
105
- private vektoren;
106
- private geladen;
107
- /**
108
- * @param frischeMs wie lange ein geladener Bestand als frisch gilt
109
- * @param praefix welche Sicht — Volltext (Standard) oder Themenname
110
- *
111
- * Der Präfix ist ein Parameter und keine zweite Klasse: die Mechanik ist
112
- * identisch (scannen, in Blöcken holen, entpacken, Gelöschtes vergessen).
113
- * Zwei Klassen dafür wären zwei Orte, an denen dieselbe Änderung nachgezogen
114
- * werden müsste.
115
- */
116
- constructor(frischeMs?: number, praefix?: string);
117
- /** Die Nähe einer Frage zu EINER Lektion. -2, wenn sie keinen Vektor hat. */
118
- naehe(frage: number[], topic: string): number;
119
- /**
120
- * Der Vektor selbst — für die Rückkopplung, die aus den besten Treffern
121
- * einen angereicherten Fragevektor baut (`reichereAn`). `null`, wenn die
122
- * Lektion keinen hat; der Aufrufer filtert das weg.
123
- */
124
- rohvektor(topic: string): number[] | null;
125
- get groesse(): number;
126
- /** Lädt fehlende Vektoren nach. Tut nichts, wenn kürzlich geladen wurde. */
127
- aktualisiere(redis: Redis, jetzt?: number): Promise<void>;
128
- /**
129
- * Die ähnlichsten Lektionen zu einem Fragevektor.
130
- *
131
- * Zurück kommen die THEMEN, nicht die Schlüssel — der Aufrufer arbeitet mit
132
- * Themen und soll das Schlüsselformat nicht kennen müssen.
133
- */
134
- aehnlichste(frage: number[], anzahl: number): Array<{
135
- topic: string;
136
- naehe: number;
137
- }>;
138
- }
139
- /**
140
- * Mischt zwei Rangfolgen über die PLATZIERUNG, nicht über die Punktzahl.
141
- *
142
- * Punktzahlen aus BM25 und aus einem Kosinus sind nicht vergleichbar: die eine
143
- * ist nach oben offen, die andere liegt zwischen -1 und 1. Wer sie addiert oder
144
- * skaliert, wählt unbeabsichtigt einen Gewinner und merkt es nie.
145
- *
146
- * Reciprocal Rank Fusion braucht keine gemeinsame Einheit.
147
- *
148
- * ── Wie viel Wortabgleich? ──────────────────────────────────────────────────
149
- *
150
- * Gemessen am 19.08.2026 an 499 Lektionen mit 100 Fragen:
151
- *
152
- * Wortgewicht Platz 1 Top 3 Top 10 MRR
153
- * 0,0 (nur Sinn) 40 % 60 % 68 % 51,4 %
154
- * 0,1 41 % 63 % 71 % 53,5 %
155
- * 0,2 42 % 57 % 70 % 52,0 %
156
- * 0,3 39 % 55 % 71 % 49,0 %
157
- * 0,4 38 % 51 % 69 % 47,7 %
158
- * 1,0 (nur Wörter) 21 % 33 % 47 % 29,3 %
159
- *
160
- * 0,1 ist auf drei von vier Maßen vorn und überall besser als reine Bedeutung.
161
- * Wenig Wortabgleich hilft, viel schadet: die Wörter fangen den Fall, in dem
162
- * jemand eine Fehlermeldung wörtlich einfügt, und stören sonst.
163
- *
164
- * Zu 0,2 ist der Abstand bei Platz 1 EINE Frage. Das ist kein Beleg, sondern
165
- * eine Richtung — wer hier dreht, misst nach.
166
- */
167
- export declare const WORT_GEWICHT = 0.1;
168
- export declare function mischeRangfolgen(woerter: string[], bedeutung: string[], wortGewicht?: number, k?: number): string[];
@@ -1 +0,0 @@
1
- {"version":3,"file":"bedeutung.js","sourceRoot":"","sources":["../../src/bedeutung.ts"],"names":[],"mappings":"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"}