@cachly-dev/mcp-server 0.10.128 → 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 (217) 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 -82
  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 -228
  31. package/dist/src/embeddings.js +13 -223
  32. package/dist/src/feldreparatur.js +3 -0
  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 -4181
  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 -1850
  47. package/dist/src/handlers/viz.js +3 -148
  48. package/dist/src/index.js +321 -4281
  49. package/dist/src/interferenz.js +1 -0
  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 -214
  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 -0
  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 -250
  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 -73
  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 -67
  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 -135
  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/first-contact.d.ts +0 -56
  141. package/dist/src/first-contact.js.map +0 -1
  142. package/dist/src/first-recall-proof.d.ts +0 -19
  143. package/dist/src/first-recall-proof.js.map +0 -1
  144. package/dist/src/funnel-milestones.d.ts +0 -5
  145. package/dist/src/funnel-milestones.js.map +0 -1
  146. package/dist/src/geliefert.d.ts +0 -63
  147. package/dist/src/geliefert.js.map +0 -1
  148. package/dist/src/handlers/advanced.d.ts +0 -6
  149. package/dist/src/handlers/advanced.js.map +0 -1
  150. package/dist/src/handlers/brain.d.ts +0 -41
  151. package/dist/src/handlers/brain.js.map +0 -1
  152. package/dist/src/handlers/cache.d.ts +0 -6
  153. package/dist/src/handlers/cache.js.map +0 -1
  154. package/dist/src/handlers/context.d.ts +0 -6
  155. package/dist/src/handlers/context.js.map +0 -1
  156. package/dist/src/handlers/fedbrain.d.ts +0 -18
  157. package/dist/src/handlers/fedbrain.js.map +0 -1
  158. package/dist/src/handlers/instances.d.ts +0 -33
  159. package/dist/src/handlers/instances.js.map +0 -1
  160. package/dist/src/handlers/roadmap.d.ts +0 -6
  161. package/dist/src/handlers/roadmap.js.map +0 -1
  162. package/dist/src/handlers/share.d.ts +0 -8
  163. package/dist/src/handlers/share.js.map +0 -1
  164. package/dist/src/handlers/syndicate.d.ts +0 -6
  165. package/dist/src/handlers/syndicate.js.map +0 -1
  166. package/dist/src/handlers/team.d.ts +0 -45
  167. package/dist/src/handlers/team.js.map +0 -1
  168. package/dist/src/handlers/viz.d.ts +0 -6
  169. package/dist/src/handlers/viz.js.map +0 -1
  170. package/dist/src/index.d.ts +0 -93
  171. package/dist/src/index.js.map +0 -1
  172. package/dist/src/kostprobe.d.ts +0 -25
  173. package/dist/src/kostprobe.js.map +0 -1
  174. package/dist/src/lesson-preview.d.ts +0 -81
  175. package/dist/src/lesson-preview.js.map +0 -1
  176. package/dist/src/namespace.d.ts +0 -20
  177. package/dist/src/namespace.js.map +0 -1
  178. package/dist/src/notifier.d.ts +0 -5
  179. package/dist/src/notifier.js.map +0 -1
  180. package/dist/src/rangfolge.d.ts +0 -169
  181. package/dist/src/rangfolge.js.map +0 -1
  182. package/dist/src/raumkorrektur.d.ts +0 -100
  183. package/dist/src/raumkorrektur.js.map +0 -1
  184. package/dist/src/recall-tiefe.d.ts +0 -48
  185. package/dist/src/recall-tiefe.js.map +0 -1
  186. package/dist/src/rerank.d.ts +0 -48
  187. package/dist/src/rerank.js.map +0 -1
  188. package/dist/src/search.d.ts +0 -153
  189. package/dist/src/search.js.map +0 -1
  190. package/dist/src/seltenheitsbestand.d.ts +0 -53
  191. package/dist/src/seltenheitsbestand.js.map +0 -1
  192. package/dist/src/speicherlage.d.ts +0 -51
  193. package/dist/src/speicherlage.js.map +0 -1
  194. package/dist/src/spuren.d.ts +0 -97
  195. package/dist/src/spuren.js.map +0 -1
  196. package/dist/src/starter-corpus.d.ts +0 -28
  197. package/dist/src/starter-corpus.js.map +0 -1
  198. package/dist/src/telemetry-types.d.ts +0 -87
  199. package/dist/src/telemetry-types.js.map +0 -1
  200. package/dist/src/tools.d.ts +0 -2933
  201. package/dist/src/tools.js.map +0 -1
  202. package/dist/src/toolspecs.d.ts +0 -43
  203. package/dist/src/toolspecs.js.map +0 -1
  204. package/dist/src/upgrade-nudge.d.ts +0 -15
  205. package/dist/src/upgrade-nudge.js.map +0 -1
  206. package/dist/src/utils.d.ts +0 -34
  207. package/dist/src/utils.js.map +0 -1
  208. package/dist/src/versuch.d.ts +0 -179
  209. package/dist/src/versuch.js.map +0 -1
  210. package/dist/src/vorspann.d.ts +0 -73
  211. package/dist/src/vorspann.js.map +0 -1
  212. package/dist/src/wartung/vektoren-verdichten.d.ts +0 -50
  213. package/dist/src/wartung/vektoren-verdichten.js.map +0 -1
  214. package/dist/src/werkzeug-nutzung.d.ts +0 -62
  215. package/dist/src/werkzeug-nutzung.js.map +0 -1
  216. package/dist/src/wertbeitrag.d.ts +0 -57
  217. package/dist/src/wertbeitrag.js.map +0 -1
@@ -1,148 +1,3 @@
1
- import { safeJsonParse } from '../utils.js';
2
- export const VIZ_TOOL_NAMES = new Set(['brain_graph']);
3
- // Stable color groups so the 3D frontend can theme node kinds consistently.
4
- const NODE_GROUP = {
5
- concept: 1, person: 2, file: 3, service: 4,
6
- };
7
- function nodeKind(id) {
8
- if (id.startsWith('person:'))
9
- return 'person';
10
- if (id.startsWith('file:'))
11
- return 'file';
12
- if (id.startsWith('service:'))
13
- return 'service';
14
- return 'concept';
15
- }
16
- function nodeLabel(n, kind) {
17
- if (kind === 'person')
18
- return n.handle ?? n.id.replace(/^person:/, '');
19
- if (kind === 'file')
20
- return (n.path ?? n.id.replace(/^file:/, '')).split('/').slice(-1)[0] ?? n.id;
21
- if (kind === 'service')
22
- return n.name ?? n.id.replace(/^service:/, '');
23
- return n.id;
24
- }
25
- async function scanAll(redis, match, limit) {
26
- const keys = [];
27
- const stream = redis.scanStream({ match, count: 200 });
28
- await new Promise((resolve, reject) => {
29
- stream.on('data', (batch) => {
30
- for (const k of batch) {
31
- if (keys.length < limit)
32
- keys.push(k);
33
- }
34
- if (keys.length >= limit)
35
- stream.destroy();
36
- });
37
- stream.on('end', resolve);
38
- stream.on('close', resolve);
39
- stream.on('error', reject);
40
- });
41
- return keys;
42
- }
43
- export async function handleVizTool(name, args, getConnection, _apiFetch) {
44
- if (name !== 'brain_graph')
45
- return null;
46
- const { instance_id, max_nodes = 400, domain = '', min_confidence = 0, format = 'json', } = args;
47
- const redis = await getConnection(instance_id);
48
- const nodeCap = Math.max(1, Math.min(2000, Number(max_nodes) || 400));
49
- const minConf = Math.max(0, Math.min(1, Number(min_confidence) || 0));
50
- const domainFilter = String(domain || '').toLowerCase().trim();
51
- // ── Nodes ────────────────────────────────────────────────────────────────
52
- const nodeKeys = await scanAll(redis, 'cachly:ckg:node:*', nodeCap);
53
- const nodes = [];
54
- const present = new Set();
55
- for (const key of nodeKeys) {
56
- const raw = await redis.get(key);
57
- const stored = safeJsonParse(raw, null);
58
- if (!stored || !stored.id)
59
- continue;
60
- const kind = nodeKind(stored.id);
61
- const ndomain = String(stored.domain ?? '').toLowerCase();
62
- if (domainFilter && !ndomain.includes(domainFilter) && !stored.id.toLowerCase().includes(domainFilter))
63
- continue;
64
- const count = Number(stored.count ?? 1) || 1;
65
- nodes.push({
66
- id: stored.id,
67
- name: nodeLabel(stored, kind),
68
- type: kind,
69
- group: NODE_GROUP[kind] ?? 0,
70
- domain: stored.domain ?? '',
71
- val: Math.max(1, Math.round(Math.sqrt(count) * 3)),
72
- count,
73
- });
74
- present.add(stored.id);
75
- }
76
- // ── Edges ──────────────────────────────────────────────────────────────────
77
- // Edge keys: cachly:ckg:edge:{from}:{edgeType}:{to}. We read the stored CKGEdge
78
- // (not the key) so from/to/confidence come straight from the value — robust to
79
- // ids that themselves contain ':' (e.g. "docker:layer-cache").
80
- const edgeKeys = await scanAll(redis, 'cachly:ckg:edge:*', nodeCap * 8);
81
- const links = [];
82
- let edgesSkippedConf = 0;
83
- let edgesSkippedDangling = 0;
84
- for (const key of edgeKeys) {
85
- const raw = await redis.get(key);
86
- const edge = safeJsonParse(raw, null);
87
- if (!edge || !edge.from || !edge.to)
88
- continue;
89
- if ((edge.confidence ?? 0) < minConf) {
90
- edgesSkippedConf++;
91
- continue;
92
- }
93
- // Drop dangling edges (endpoint filtered out) so the 3D graph stays consistent.
94
- if (!present.has(edge.from) || !present.has(edge.to)) {
95
- edgesSkippedDangling++;
96
- continue;
97
- }
98
- links.push({
99
- source: edge.from,
100
- target: edge.to,
101
- type: edge.edgeType ?? 'related',
102
- value: Number((edge.confidence ?? 0).toFixed(3)),
103
- trials: edge.trials ?? 0,
104
- });
105
- }
106
- const byType = {};
107
- for (const n of nodes)
108
- byType[n.type] = (byType[n.type] ?? 0) + 1;
109
- const graph = {
110
- schema: 'cachly.brain_graph/v1',
111
- nodes,
112
- links,
113
- meta: {
114
- instance_id,
115
- generated_at: new Date().toISOString(),
116
- node_count: nodes.length,
117
- link_count: links.length,
118
- node_types: byType,
119
- truncated: nodeKeys.length >= nodeCap,
120
- filters: { domain: domainFilter || null, min_confidence: minConf, max_nodes: nodeCap },
121
- },
122
- };
123
- if (format === 'summary') {
124
- const lines = [
125
- `## 🧠 Brain Graph — 3D Viz Export`,
126
- '',
127
- `**${nodes.length}** nodes · **${links.length}** links`,
128
- ...Object.entries(byType).map(([t, c]) => ` • ${t}: ${c}`),
129
- edgesSkippedConf ? ` • ${edgesSkippedConf} edges below confidence ${minConf}` : '',
130
- edgesSkippedDangling ? ` • ${edgesSkippedDangling} dangling edges dropped` : '',
131
- '',
132
- graph.meta.truncated ? `⚠️ Truncated at ${nodeCap} nodes — raise \`max_nodes\` for the full graph.` : '',
133
- '',
134
- `Call \`brain_graph(instance_id="${instance_id}", format="json")\` for the full payload the 3D frontend renders.`,
135
- ].filter(Boolean);
136
- return lines.join('\n');
137
- }
138
- // Default: emit the renderable payload in a fenced block so the frontend /
139
- // API can lift it verbatim into react-force-graph-3d.
140
- return [
141
- `🧠 **Brain Graph** — ${nodes.length} nodes, ${links.length} links (schema \`cachly.brain_graph/v1\`)`,
142
- '',
143
- '```json',
144
- JSON.stringify(graph, null, 2),
145
- '```',
146
- ].join('\n');
147
- }
148
- //# sourceMappingURL=viz.js.map
1
+ import{safeJsonParse as M}from"../utils.js";const B=new Set(["brain_graph"]),j={concept:1,person:2,file:3,service:4};function D(n){return n.startsWith("person:")?"person":n.startsWith("file:")?"file":n.startsWith("service:")?"service":"concept"}function L(n,o){return o==="person"?n.handle??n.id.replace(/^person:/,""):o==="file"?(n.path??n.id.replace(/^file:/,"")).split("/").slice(-1)[0]??n.id:o==="service"?n.name??n.id.replace(/^service:/,""):n.id}async function C(n,o,l){const i=[],t=n.scanStream({match:o,count:200});return await new Promise((f,m)=>{t.on("data",g=>{for(const y of g)i.length<l&&i.push(y);i.length>=l&&t.destroy()}),t.on("end",f),t.on("close",f),t.on("error",m)}),i}async function E(n,o,l,i){if(n!=="brain_graph")return null;const{instance_id:t,max_nodes:f=400,domain:m="",min_confidence:g=0,format:y="json"}=o,u=await l(t),s=Math.max(1,Math.min(2e3,Number(f)||400)),_=Math.max(0,Math.min(1,Number(g)||0)),p=String(m||"").toLowerCase().trim(),$=await C(u,"cachly:ckg:node:*",s),a=[],w=new Set;for(const r of $){const d=await u.get(r),e=M(d,null);if(!e||!e.id)continue;const S=D(e.id),O=String(e.domain??"").toLowerCase();if(p&&!O.includes(p)&&!e.id.toLowerCase().includes(p))continue;const v=Number(e.count??1)||1;a.push({id:e.id,name:L(e,S),type:S,group:j[S]??0,domain:e.domain??"",val:Math.max(1,Math.round(Math.sqrt(v)*3)),count:v}),w.add(e.id)}const N=await C(u,"cachly:ckg:edge:*",s*8),c=[];let b=0,k=0;for(const r of N){const d=await u.get(r),e=M(d,null);if(!(!e||!e.from||!e.to)){if((e.confidence??0)<_){b++;continue}if(!w.has(e.from)||!w.has(e.to)){k++;continue}c.push({source:e.from,target:e.to,type:e.edgeType??"related",value:Number((e.confidence??0).toFixed(3)),trials:e.trials??0})}}const h={};for(const r of a)h[r.type]=(h[r.type]??0)+1;const x={schema:"cachly.brain_graph/v1",nodes:a,links:c,meta:{instance_id:t,generated_at:new Date().toISOString(),node_count:a.length,link_count:c.length,node_types:h,truncated:$.length>=s,filters:{domain:p||null,min_confidence:_,max_nodes:s}}};return y==="summary"?["## \u{1F9E0} Brain Graph \u2014 3D Viz Export","",`**${a.length}** nodes \xB7 **${c.length}** links`,...Object.entries(h).map(([d,e])=>` \u2022 ${d}: ${e}`),b?` \u2022 ${b} edges below confidence ${_}`:"",k?` \u2022 ${k} dangling edges dropped`:"","",x.meta.truncated?`\u26A0\uFE0F Truncated at ${s} nodes \u2014 raise \`max_nodes\` for the full graph.`:"","",`Call \`brain_graph(instance_id="${t}", format="json")\` for the full payload the 3D frontend renders.`].filter(Boolean).join(`
2
+ `):[`\u{1F9E0} **Brain Graph** \u2014 ${a.length} nodes, ${c.length} links (schema \`cachly.brain_graph/v1\`)`,"","```json",JSON.stringify(x,null,2),"```"].join(`
3
+ `)}export{B as VIZ_TOOL_NAMES,E as handleVizTool};