@cachly-dev/mcp-server 0.10.129 → 0.10.131

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,182 +1,17 @@
1
- import { computeEmbedding } from '../embeddings.js';
2
- export const CONTEXT_TOOL_NAMES = new Set([
3
- 'remember_context', 'recall_context', 'list_remembered', 'forget_context',
4
- ]);
5
- export async function handleContextTool(name, args, getConnection, apiFetch) {
6
- switch (name) {
7
- case 'remember_context': {
8
- const { instance_id, key, content, category = 'custom', ttl = 86400, } = args;
9
- const redis = await getConnection(instance_id);
10
- const cacheKey = `cachly:ctx:${category}:${key}`;
11
- const meta = JSON.stringify({
12
- key,
13
- category,
14
- size: content.length,
15
- created: new Date().toISOString(),
16
- });
17
- if (ttl && ttl > 0) {
18
- await redis.set(cacheKey, content, 'EX', ttl);
19
- await redis.set(`${cacheKey}:meta`, meta, 'EX', ttl);
20
- }
21
- else {
22
- await redis.set(cacheKey, content);
23
- await redis.set(`${cacheKey}:meta`, meta);
24
- }
25
- // Also index semantically for smart_recall (if vector available)
26
- const inst = await apiFetch(`/api/v1/instances/${instance_id}`);
27
- if (inst.vector_token) {
28
- try {
29
- const embedding = await computeEmbedding(`${key}: ${content.slice(0, 500)}`);
30
- const vectorUrl = `https://api.cachly.dev/v1/sem/${inst.vector_token}`;
31
- const body = {
32
- id: `ctx:${category}:${key}`,
33
- prompt: key,
34
- namespace: 'cachly:ctx',
35
- embedding,
36
- };
37
- if (ttl && ttl > 0) {
38
- body['expires_at'] = new Date(Date.now() + ttl * 1000).toISOString();
39
- }
40
- const res = await fetch(`${vectorUrl}/entries`, {
41
- method: 'POST',
42
- headers: { 'Content-Type': 'application/json' },
43
- body: JSON.stringify(body),
44
- signal: AbortSignal.timeout(8000),
45
- });
46
- if (!res.ok) {
47
- process.stderr.write(`[cachly] semantic index skipped (HTTP ${res.status}) — smart_recall on this context will be keyword-only\n`);
48
- }
49
- }
50
- catch (e) {
51
- // Embedding is optional — keyword recall still works. Log so it's debuggable.
52
- process.stderr.write(`[cachly] semantic index failed: ${e instanceof Error ? e.message : String(e)} — smart_recall on this context will be keyword-only\n`);
53
- }
54
- }
55
- return [
56
- `🧠 **Context Saved**`,
57
- ``,
58
- ` Key: \`${key}\``,
59
- ` Category: ${category}`,
60
- ` Size: ${content.length} chars`,
61
- ` TTL: ${ttl > 0 ? `${ttl}s (${Math.round(ttl / 3600)}h)` : 'no expiry'}`,
62
- ``,
63
- `💡 Use \`recall_context("${key}")\` to retrieve this later.`,
64
- ` Or \`smart_recall("${key.split('_').join(' ')}")\` for semantic search.`,
65
- ].join('\n');
66
- }
67
- case 'recall_context': {
68
- const { instance_id, key } = args;
69
- const redis = await getConnection(instance_id);
70
- // Check if key is a glob pattern
71
- if (key.includes('*')) {
72
- const keys = [];
73
- const stream = redis.scanStream({ match: `cachly:ctx:*:${key}`, count: 100 });
74
- await new Promise((resolve, reject) => {
75
- stream.on('data', (batch) => {
76
- keys.push(...batch.filter((k) => !k.endsWith(':meta')));
77
- if (keys.length >= 20) {
78
- stream.destroy();
79
- resolve();
80
- }
81
- });
82
- stream.on('end', resolve);
83
- stream.on('error', reject);
84
- });
85
- if (keys.length === 0)
86
- return `⚠️ No cached context found matching pattern \`${key}\`.`;
87
- const results = [`🧠 **Recalled ${keys.length} context entries matching \`${key}\`:**\n`];
88
- for (const k of keys.slice(0, 10)) {
89
- const content = await redis.get(k);
90
- const shortKey = k.replace('cachly:ctx:', '');
91
- results.push(`### ${shortKey}\n\`\`\`\n${content?.slice(0, 500)}${(content?.length ?? 0) > 500 ? '…' : ''}\n\`\`\`\n`);
92
- }
93
- if (keys.length > 10)
94
- results.push(`_(+${keys.length - 10} more matches)_`);
95
- return results.join('\n');
96
- }
97
- // Try exact match across categories
98
- const categories = ['overview', 'architecture', 'file_summary', 'dependency', 'thinking', 'custom'];
99
- for (const cat of categories) {
100
- const content = await redis.get(`cachly:ctx:${cat}:${key}`);
101
- if (content) {
102
- const ttl = await redis.ttl(`cachly:ctx:${cat}:${key}`);
103
- return [
104
- `🧠 **Recalled Context: \`${key}\`**`,
105
- ``,
106
- ` Category: ${cat}`,
107
- ` Size: ${content.length} chars`,
108
- ` TTL: ${ttl === -1 ? 'no expiry' : ttl === -2 ? 'expired' : `${ttl}s remaining`}`,
109
- ``,
110
- `---`,
111
- ``,
112
- content,
113
- ].join('\n');
114
- }
115
- }
116
- return `⚠️ No cached context found for key \`${key}\`.\n\nUse \`list_remembered\` to see available cached context.`;
117
- }
118
- case 'list_remembered': {
119
- const { instance_id, category = 'all', limit = 50, } = args;
120
- const redis = await getConnection(instance_id);
121
- const pattern = category === 'all' ? 'cachly:ctx:*' : `cachly:ctx:${category}:*`;
122
- const keys = [];
123
- const stream = redis.scanStream({ match: pattern, count: 100 });
124
- await new Promise((resolve, reject) => {
125
- stream.on('data', (batch) => {
126
- keys.push(...batch.filter((k) => !k.endsWith(':meta')));
127
- if (keys.length >= limit) {
128
- stream.destroy();
129
- resolve();
130
- }
131
- });
132
- stream.on('end', resolve);
133
- stream.on('error', reject);
134
- });
135
- if (keys.length === 0) {
136
- return `📭 No cached context found.\n\nUse \`remember_context\` to cache context for faster future access.`;
137
- }
138
- const lines = [`🧠 **Cached Context** (${keys.length} entries):\n`];
139
- for (const k of keys.slice(0, limit)) {
140
- const ttl = await redis.ttl(k);
141
- const content = await redis.get(k);
142
- const parts = k.replace('cachly:ctx:', '').split(':');
143
- const cat = parts[0];
144
- const key = parts.slice(1).join(':');
145
- const preview = content?.slice(0, 80).replace(/\n/g, ' ') ?? '';
146
- lines.push(` • **${key}** (${cat})`, ` Size: ${content?.length ?? 0} chars · TTL: ${ttl === -1 ? '∞' : `${Math.round(ttl / 60)}m`}`, ` _"${preview}${(content?.length ?? 0) > 80 ? '…' : ''}"_`, ``);
147
- }
148
- return lines.join('\n');
149
- }
150
- case 'forget_context': {
151
- const { instance_id, keys } = args;
152
- const redis = await getConnection(instance_id);
153
- let deleted = 0;
154
- for (const key of keys) {
155
- if (key.includes('*')) {
156
- // Glob delete
157
- const toDelete = [];
158
- const stream = redis.scanStream({ match: `cachly:ctx:*:${key}*`, count: 100 });
159
- await new Promise((resolve, reject) => {
160
- stream.on('data', (batch) => toDelete.push(...batch));
161
- stream.on('end', resolve);
162
- stream.on('error', reject);
163
- });
164
- if (toDelete.length > 0) {
165
- deleted += await redis.del(...toDelete);
166
- }
167
- }
168
- else {
169
- // Try all categories
170
- const categories = ['overview', 'architecture', 'file_summary', 'dependency', 'thinking', 'custom'];
171
- for (const cat of categories) {
172
- deleted += await redis.del(`cachly:ctx:${cat}:${key}`, `cachly:ctx:${cat}:${key}:meta`);
173
- }
174
- }
175
- }
176
- return `🗑️ **Forgot ${deleted} context entries.**\n\nKeys: ${keys.map(k => `\`${k}\``).join(', ')}`;
177
- }
178
- default:
179
- return null;
180
- }
181
- }
182
- //# sourceMappingURL=context.js.map
1
+ import{computeEmbedding as w}from"../embeddings.js";const _=new Set(["remember_context","recall_context","list_remembered","forget_context"]);async function k(f,m,$,x){switch(f){case"remember_context":{const{instance_id:h,key:c,content:a,category:r="custom",ttl:t=86400}=m,e=await $(h),n=`cachly:ctx:${r}:${c}`,i=JSON.stringify({key:c,category:r,size:a.length,created:new Date().toISOString()});t&&t>0?(await e.set(n,a,"EX",t),await e.set(`${n}:meta`,i,"EX",t)):(await e.set(n,a),await e.set(`${n}:meta`,i));const o=await x(`/api/v1/instances/${h}`);if(o.vector_token)try{const s=await w(`${c}: ${a.slice(0,500)}`),l=`https://api.cachly.dev/v1/sem/${o.vector_token}`,d={id:`ctx:${r}:${c}`,prompt:c,namespace:"cachly:ctx",embedding:s};t&&t>0&&(d.expires_at=new Date(Date.now()+t*1e3).toISOString());const y=await fetch(`${l}/entries`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d),signal:AbortSignal.timeout(8e3)});y.ok||process.stderr.write(`[cachly] semantic index skipped (HTTP ${y.status}) \u2014 smart_recall on this context will be keyword-only
2
+ `)}catch(s){process.stderr.write(`[cachly] semantic index failed: ${s instanceof Error?s.message:String(s)} \u2014 smart_recall on this context will be keyword-only
3
+ `)}return["\u{1F9E0} **Context Saved**","",` Key: \`${c}\``,` Category: ${r}`,` Size: ${a.length} chars`,` TTL: ${t>0?`${t}s (${Math.round(t/3600)}h)`:"no expiry"}`,"",`\u{1F4A1} Use \`recall_context("${c}")\` to retrieve this later.`,` Or \`smart_recall("${c.split("_").join(" ")}")\` for semantic search.`].join(`
4
+ `)}case"recall_context":{const{instance_id:h,key:c}=m,a=await $(h);if(c.includes("*")){const t=[],e=a.scanStream({match:`cachly:ctx:*:${c}`,count:100});if(await new Promise((i,o)=>{e.on("data",s=>{t.push(...s.filter(l=>!l.endsWith(":meta"))),t.length>=20&&(e.destroy(),i())}),e.on("end",i),e.on("error",o)}),t.length===0)return`\u26A0\uFE0F No cached context found matching pattern \`${c}\`.`;const n=[`\u{1F9E0} **Recalled ${t.length} context entries matching \`${c}\`:**
5
+ `];for(const i of t.slice(0,10)){const o=await a.get(i),s=i.replace("cachly:ctx:","");n.push(`### ${s}
6
+ \`\`\`
7
+ ${o?.slice(0,500)}${(o?.length??0)>500?"\u2026":""}
8
+ \`\`\`
9
+ `)}return t.length>10&&n.push(`_(+${t.length-10} more matches)_`),n.join(`
10
+ `)}const r=["overview","architecture","file_summary","dependency","thinking","custom"];for(const t of r){const e=await a.get(`cachly:ctx:${t}:${c}`);if(e){const n=await a.ttl(`cachly:ctx:${t}:${c}`);return[`\u{1F9E0} **Recalled Context: \`${c}\`**`,"",` Category: ${t}`,` Size: ${e.length} chars`,` TTL: ${n===-1?"no expiry":n===-2?"expired":`${n}s remaining`}`,"","---","",e].join(`
11
+ `)}}return`\u26A0\uFE0F No cached context found for key \`${c}\`.
12
+
13
+ Use \`list_remembered\` to see available cached context.`}case"list_remembered":{const{instance_id:h,category:c="all",limit:a=50}=m,r=await $(h),t=c==="all"?"cachly:ctx:*":`cachly:ctx:${c}:*`,e=[],n=r.scanStream({match:t,count:100});if(await new Promise((o,s)=>{n.on("data",l=>{e.push(...l.filter(d=>!d.endsWith(":meta"))),e.length>=a&&(n.destroy(),o())}),n.on("end",o),n.on("error",s)}),e.length===0)return"\u{1F4ED} No cached context found.\n\nUse `remember_context` to cache context for faster future access.";const i=[`\u{1F9E0} **Cached Context** (${e.length} entries):
14
+ `];for(const o of e.slice(0,a)){const s=await r.ttl(o),l=await r.get(o),d=o.replace("cachly:ctx:","").split(":"),y=d[0],u=d.slice(1).join(":"),p=l?.slice(0,80).replace(/\n/g," ")??"";i.push(` \u2022 **${u}** (${y})`,` Size: ${l?.length??0} chars \xB7 TTL: ${s===-1?"\u221E":`${Math.round(s/60)}m`}`,` _"${p}${(l?.length??0)>80?"\u2026":""}"_`,"")}return i.join(`
15
+ `)}case"forget_context":{const{instance_id:h,keys:c}=m,a=await $(h);let r=0;for(const t of c)if(t.includes("*")){const e=[],n=a.scanStream({match:`cachly:ctx:*:${t}*`,count:100});await new Promise((i,o)=>{n.on("data",s=>e.push(...s)),n.on("end",i),n.on("error",o)}),e.length>0&&(r+=await a.del(...e))}else{const e=["overview","architecture","file_summary","dependency","thinking","custom"];for(const n of e)r+=await a.del(`cachly:ctx:${n}:${t}`,`cachly:ctx:${n}:${t}:meta`)}return`\u{1F5D1}\uFE0F **Forgot ${r} context entries.**
16
+
17
+ Keys: ${c.map(t=>`\`${t}\``).join(", ")}`}default:return null}}export{_ as CONTEXT_TOOL_NAMES,k as handleContextTool};