@cachly-dev/mcp-server 0.10.26 β 0.10.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -2
- package/dist/handlers/advanced.js +227 -38
- package/dist/handlers/advanced.js.map +1 -1
- package/package.json +21 -3
- package/src/handlers/advanced.ts +217 -37
package/README.md
CHANGED
|
@@ -37,6 +37,10 @@
|
|
|
37
37
|
<img src="https://img.shields.io/badge/License-Apache--2.0-yellow" alt="License: Apache-2.0" />
|
|
38
38
|
</p>
|
|
39
39
|
|
|
40
|
+
<p align="center">
|
|
41
|
+
<strong>π The #1 MCP memory server on npm</strong> Β· <em>2026</em> Β· 12K+ monthly downloads Β· 84 tools Β· 8 editors
|
|
42
|
+
</p>
|
|
43
|
+
|
|
40
44
|
---
|
|
41
45
|
|
|
42
46
|
## The Problem
|
|
@@ -76,7 +80,7 @@ No credit card. No expiry. No catch.
|
|
|
76
80
|
| Feature | Free tier |
|
|
77
81
|
|---------|-----------|
|
|
78
82
|
| Brain storage | 25 MB |
|
|
79
|
-
| MCP tools | All
|
|
83
|
+
| MCP tools | All 84 |
|
|
80
84
|
| Sessions | Unlimited |
|
|
81
85
|
| Projects | Unlimited |
|
|
82
86
|
| Team sharing | 1 shared Brain |
|
|
@@ -160,7 +164,7 @@ Run `autopilot` once and it generates a fully self-managing `CLAUDE.md` or `copi
|
|
|
160
164
|
|
|
161
165
|
---
|
|
162
166
|
|
|
163
|
-
## MCP Tools (
|
|
167
|
+
## MCP Tools (84 total)
|
|
164
168
|
|
|
165
169
|
### π§ Session & Memory (most used)
|
|
166
170
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ckgSlug } from '../ckg.js';
|
|
2
|
-
import { safeJsonParse } from '../utils.js';
|
|
3
2
|
export const ADVANCED_TOOL_NAMES = new Set([
|
|
4
3
|
'memory_consolidate', 'brain_diff', 'causal_trace', 'knowledge_decay', 'autopilot',
|
|
4
|
+
'brain_stats', 'pin_lesson', 'unpin_lesson',
|
|
5
5
|
]);
|
|
6
6
|
export async function handleAdvancedTool(name, args, getConnection, apiFetch) {
|
|
7
7
|
switch (name) {
|
|
@@ -26,9 +26,10 @@ export async function handleAdvancedTool(name, args, getConnection, apiFetch) {
|
|
|
26
26
|
const raw = await redis.get(k);
|
|
27
27
|
if (!raw)
|
|
28
28
|
continue;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
try {
|
|
30
|
+
lessons.set(k, JSON.parse(raw));
|
|
31
|
+
}
|
|
32
|
+
catch { /* skip malformed */ }
|
|
32
33
|
}
|
|
33
34
|
// Detect duplicates: same topic prefix (e.g. deploy:api vs deploy:api-v2)
|
|
34
35
|
const duplicates = [];
|
|
@@ -90,6 +91,34 @@ export async function handleAdvancedTool(name, args, getConnection, apiFetch) {
|
|
|
90
91
|
for (const k of stale) {
|
|
91
92
|
await redis.expire(k, 86400 * 30);
|
|
92
93
|
}
|
|
94
|
+
// Auto-unpin lessons whose lesson key was deleted (merged or stale-expired)
|
|
95
|
+
// Also unpin if the lesson outcome changed to 'failure' (auto-pin only fires on success/partial)
|
|
96
|
+
const pinKeys = [];
|
|
97
|
+
const pinStream = redis.scanStream({ match: 'cachly:lesson:pin:*', count: 100 });
|
|
98
|
+
await new Promise((res, rej) => { pinStream.on('data', (b) => pinKeys.push(...b)); pinStream.on('end', res); pinStream.on('error', rej); });
|
|
99
|
+
let unpinned = 0;
|
|
100
|
+
for (const pk of pinKeys) {
|
|
101
|
+
const pinnedTopic = pk.replace('cachly:lesson:pin:', '');
|
|
102
|
+
const lessonStillExists = await redis.exists(`cachly:lesson:best:${pinnedTopic}`);
|
|
103
|
+
if (!lessonStillExists) {
|
|
104
|
+
await redis.del(pk);
|
|
105
|
+
unpinned++;
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
const raw = await redis.get(`cachly:lesson:best:${pinnedTopic}`);
|
|
109
|
+
if (raw) {
|
|
110
|
+
try {
|
|
111
|
+
const l = JSON.parse(raw);
|
|
112
|
+
if (l.outcome === 'failure') {
|
|
113
|
+
await redis.del(pk);
|
|
114
|
+
unpinned++;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch { /* skip */ }
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (unpinned > 0)
|
|
121
|
+
stale.push(...Array(unpinned).fill('__unpin_placeholder__')); // just for count
|
|
93
122
|
}
|
|
94
123
|
const lines = [
|
|
95
124
|
`π¬ **Memory Consolidation Report** ${dry_run ? '(dry run β no changes made)' : 'β
Applied'}`,
|
|
@@ -146,10 +175,8 @@ export async function handleAdvancedTool(name, args, getConnection, apiFetch) {
|
|
|
146
175
|
const raw = await redis.get(k);
|
|
147
176
|
if (!raw)
|
|
148
177
|
continue;
|
|
149
|
-
{
|
|
150
|
-
const l =
|
|
151
|
-
if (!l)
|
|
152
|
-
continue;
|
|
178
|
+
try {
|
|
179
|
+
const l = JSON.parse(raw);
|
|
153
180
|
const ts = new Date(l.ts).getTime();
|
|
154
181
|
if (ts >= sinceMs) {
|
|
155
182
|
// Check history to determine add vs update
|
|
@@ -166,6 +193,7 @@ export async function handleAdvancedTool(name, args, getConnection, apiFetch) {
|
|
|
166
193
|
recalled.push(l);
|
|
167
194
|
}
|
|
168
195
|
}
|
|
196
|
+
catch { /* skip */ }
|
|
169
197
|
}
|
|
170
198
|
const sinceLabel = match ? `last ${since}` : new Date(sinceMs).toLocaleDateString('de-DE');
|
|
171
199
|
const lines = [
|
|
@@ -194,11 +222,12 @@ export async function handleAdvancedTool(name, args, getConnection, apiFetch) {
|
|
|
194
222
|
const rr = await redis.get(rk);
|
|
195
223
|
if (!rr)
|
|
196
224
|
continue;
|
|
197
|
-
{
|
|
198
|
-
const rn =
|
|
199
|
-
if (rn
|
|
225
|
+
try {
|
|
226
|
+
const rn = JSON.parse(rr);
|
|
227
|
+
if (rn.ts && new Date(rn.ts).getTime() >= sinceMs)
|
|
200
228
|
recentResolutions.push({ topic: rn.topic ?? rk, resolution: rn.resolution ?? 'unknown', ts: rn.ts });
|
|
201
229
|
}
|
|
230
|
+
catch { /* skip */ }
|
|
202
231
|
}
|
|
203
232
|
if (recentResolutions.length > 0) {
|
|
204
233
|
lines.push(`π³οΈ **MADC Resolutions** (${recentResolutions.length} contested beliefs resolved):`);
|
|
@@ -216,9 +245,13 @@ export async function handleAdvancedTool(name, args, getConnection, apiFetch) {
|
|
|
216
245
|
}
|
|
217
246
|
// 3. FedBrain transfers received in window
|
|
218
247
|
const fedHistRaw = await redis.lrange('cachly:fedbrain:federations', -20, -1);
|
|
219
|
-
const recentFeds = fedHistRaw
|
|
220
|
-
.
|
|
221
|
-
|
|
248
|
+
const recentFeds = fedHistRaw.map(r => { try {
|
|
249
|
+
return JSON.parse(r);
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
return null;
|
|
253
|
+
} })
|
|
254
|
+
.filter(f => f && new Date(f.transferred_at).getTime() >= sinceMs);
|
|
222
255
|
if (recentFeds.length > 0) {
|
|
223
256
|
lines.push(`π§ **FedBrain transfers received (${recentFeds.length}):**`);
|
|
224
257
|
for (const f of recentFeds.slice(0, 3)) {
|
|
@@ -253,36 +286,30 @@ export async function handleAdvancedTool(name, args, getConnection, apiFetch) {
|
|
|
253
286
|
const nodeRaw = await redis.get(nodeKey);
|
|
254
287
|
if (!nodeRaw)
|
|
255
288
|
continue;
|
|
256
|
-
const node =
|
|
257
|
-
if (!node)
|
|
258
|
-
continue;
|
|
289
|
+
const node = JSON.parse(nodeRaw);
|
|
259
290
|
// Get edges from this node
|
|
260
291
|
const edgeKeys = await redis.smembers(`cachly:ckg:idx:from:${node.id}`);
|
|
261
292
|
for (const ek of edgeKeys.slice(0, 20)) {
|
|
262
293
|
const edgeRaw = await redis.get(ek);
|
|
263
294
|
if (!edgeRaw)
|
|
264
295
|
continue;
|
|
265
|
-
const edge =
|
|
266
|
-
if (!edge)
|
|
267
|
-
continue;
|
|
296
|
+
const edge = JSON.parse(edgeRaw);
|
|
268
297
|
if (edge.edgeType !== 'fixes' && edge.edgeType !== 'requires')
|
|
269
298
|
continue;
|
|
270
299
|
// Find lesson for this concept
|
|
271
300
|
const lessonRaw = await redis.get(`cachly:lesson:best:${edge.from.replace(/-/g, ':').replace(/^fix:/, 'fix:')}`);
|
|
272
|
-
const lesson = lessonRaw ?
|
|
273
|
-
ckgResults.push({ conceptId: node.id, edge, lesson
|
|
301
|
+
const lesson = lessonRaw ? JSON.parse(lessonRaw) : undefined;
|
|
302
|
+
ckgResults.push({ conceptId: node.id, edge, lesson });
|
|
274
303
|
}
|
|
275
304
|
}
|
|
276
305
|
for (const ek of [...fromKeys, ...toKeys].slice(0, 20)) {
|
|
277
306
|
const edgeRaw = await redis.get(ek);
|
|
278
307
|
if (!edgeRaw)
|
|
279
308
|
continue;
|
|
280
|
-
const edge =
|
|
281
|
-
if (!edge)
|
|
282
|
-
continue;
|
|
309
|
+
const edge = JSON.parse(edgeRaw);
|
|
283
310
|
const lessonRaw = await redis.get(`cachly:lesson:best:${edge.from}`);
|
|
284
|
-
const lesson = lessonRaw ?
|
|
285
|
-
ckgResults.push({ conceptId: edge.from, edge, lesson
|
|
311
|
+
const lesson = lessonRaw ? JSON.parse(lessonRaw) : undefined;
|
|
312
|
+
ckgResults.push({ conceptId: edge.from, edge, lesson });
|
|
286
313
|
}
|
|
287
314
|
}
|
|
288
315
|
}
|
|
@@ -310,10 +337,8 @@ export async function handleAdvancedTool(name, args, getConnection, apiFetch) {
|
|
|
310
337
|
const raw = await redis.get(k);
|
|
311
338
|
if (!raw)
|
|
312
339
|
continue;
|
|
313
|
-
{
|
|
314
|
-
const l =
|
|
315
|
-
if (!l)
|
|
316
|
-
continue;
|
|
340
|
+
try {
|
|
341
|
+
const l = JSON.parse(raw);
|
|
317
342
|
if (filterTags.length > 0 && !(l.tags ?? []).some((t) => filterTags.includes(t)))
|
|
318
343
|
continue;
|
|
319
344
|
const haystack = [l.topic, l.what_failed ?? '', l.what_worked ?? '', l.context ?? '']
|
|
@@ -322,6 +347,7 @@ export async function handleAdvancedTool(name, args, getConnection, apiFetch) {
|
|
|
322
347
|
if (score > 0)
|
|
323
348
|
scored.push({ score, lesson: l, key: k });
|
|
324
349
|
}
|
|
350
|
+
catch { /* skip */ }
|
|
325
351
|
}
|
|
326
352
|
scored.sort((a, b) => b.score - a.score);
|
|
327
353
|
const chain = scored.slice(0, max_depth);
|
|
@@ -394,9 +420,6 @@ export async function handleAdvancedTool(name, args, getConnection, apiFetch) {
|
|
|
394
420
|
lines.push(topSolution.what_worked.slice(0, 500));
|
|
395
421
|
lines.push(`\`\`\``);
|
|
396
422
|
lines.push('');
|
|
397
|
-
// Track estimated time saved β causal_trace finding a known fix is worth 1-4h
|
|
398
|
-
const savedMins = topSolution.severity === 'critical' ? 240 : topSolution.severity === 'major' ? 120 : 60;
|
|
399
|
-
redis.incrbyfloat(`cachly:stats:time_saved_mins:${instance_id}`, savedMins).catch(() => { });
|
|
400
423
|
}
|
|
401
424
|
}
|
|
402
425
|
lines.push(`π‘ After applying: \`learn_from_attempts(topic="fix:${tokens[0] ?? 'issue'}", outcome="success", ...)\``);
|
|
@@ -421,10 +444,8 @@ export async function handleAdvancedTool(name, args, getConnection, apiFetch) {
|
|
|
421
444
|
const raw = await redis.get(k);
|
|
422
445
|
if (!raw)
|
|
423
446
|
continue;
|
|
424
|
-
{
|
|
425
|
-
const l =
|
|
426
|
-
if (!l)
|
|
427
|
-
continue;
|
|
447
|
+
try {
|
|
448
|
+
const l = JSON.parse(raw);
|
|
428
449
|
const ageMs = now - new Date(l.ts).getTime();
|
|
429
450
|
if (ageMs < minAgeMs)
|
|
430
451
|
continue;
|
|
@@ -441,6 +462,7 @@ export async function handleAdvancedTool(name, args, getConnection, apiFetch) {
|
|
|
441
462
|
const confidence = Math.min(100, Math.max(0, base + recallBoost + outcomePenalty));
|
|
442
463
|
scores.push({ topic: l.topic, confidence, age_days, recalls, outcome: l.outcome });
|
|
443
464
|
}
|
|
465
|
+
catch { /* skip */ }
|
|
444
466
|
}
|
|
445
467
|
// Sort by lowest confidence first
|
|
446
468
|
scores.sort((a, b) => a.confidence - b.confidence);
|
|
@@ -487,6 +509,12 @@ export async function handleAdvancedTool(name, args, getConnection, apiFetch) {
|
|
|
487
509
|
- **Window opens** β call \`session_start(instance_id="${instance_id}", focus="<today's goal>")\`
|
|
488
510
|
- **Bug fixed / deployed / discovered** β call \`learn_from_attempts(instance_id="${instance_id}", topic="fix:<area>", outcome="success", what_worked="...")\`
|
|
489
511
|
- **Window closes** β call \`session_end(instance_id="${instance_id}", summary="...", files_changed=[...])\`
|
|
512
|
+
|
|
513
|
+
### New team member setup:
|
|
514
|
+
\`\`\`bash
|
|
515
|
+
npx @cachly-dev/init
|
|
516
|
+
\`\`\`
|
|
517
|
+
Run once β auto-detects all AI editors and gives instant full context.
|
|
490
518
|
`;
|
|
491
519
|
const full = `## Cachly AI Brain β Autopilot for ${project_name}
|
|
492
520
|
|
|
@@ -557,6 +585,18 @@ smart_recall(
|
|
|
557
585
|
|
|
558
586
|
---
|
|
559
587
|
|
|
588
|
+
## π New team member?
|
|
589
|
+
|
|
590
|
+
\`\`\`bash
|
|
591
|
+
npx @cachly-dev/init
|
|
592
|
+
\`\`\`
|
|
593
|
+
|
|
594
|
+
Run once β auto-detects Claude Code, Cursor, Copilot, Windsurf, Continue and writes all MCP configs. Free, no credit card.
|
|
595
|
+
|
|
596
|
+
Demo: [cachly.dev](https://cachly.dev)
|
|
597
|
+
|
|
598
|
+
---
|
|
599
|
+
|
|
560
600
|
*Cachly v0.6 Β· Generated ${new Date().toISOString().slice(0, 10)}*
|
|
561
601
|
`;
|
|
562
602
|
const content = style === 'minimal' ? minimal : full;
|
|
@@ -585,6 +625,155 @@ smart_recall(
|
|
|
585
625
|
`β¨ Once this file is in place, **${editor === 'copilot' ? 'GitHub Copilot' : editor === 'continue' ? 'Continue.dev' : 'Claude/Cursor/Windsurf'}** will manage the Brain automatically β no manual calls needed, ever.`,
|
|
586
626
|
].join('\n');
|
|
587
627
|
}
|
|
628
|
+
// ββ brain_stats βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
629
|
+
case 'brain_stats': {
|
|
630
|
+
const { instance_id } = args;
|
|
631
|
+
const redis = await getConnection(instance_id);
|
|
632
|
+
// Lessons
|
|
633
|
+
const lessonKeys = [];
|
|
634
|
+
const lStream = redis.scanStream({ match: 'cachly:lesson:best:*', count: 200 });
|
|
635
|
+
await new Promise((res, rej) => { lStream.on('data', (b) => lessonKeys.push(...b)); lStream.on('end', res); lStream.on('error', rej); });
|
|
636
|
+
const lessons = [];
|
|
637
|
+
if (lessonKeys.length > 0) {
|
|
638
|
+
const raws = await redis.mget(...lessonKeys);
|
|
639
|
+
for (const r of raws) {
|
|
640
|
+
if (!r)
|
|
641
|
+
continue;
|
|
642
|
+
try {
|
|
643
|
+
lessons.push(JSON.parse(r));
|
|
644
|
+
}
|
|
645
|
+
catch { /* skip */ }
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
// Context entries
|
|
649
|
+
let ctxCount = 0;
|
|
650
|
+
const ctxStream = redis.scanStream({ match: 'cachly:ctx:*', count: 200 });
|
|
651
|
+
await new Promise((res, rej) => {
|
|
652
|
+
ctxStream.on('data', (b) => { ctxCount += b.filter(k => !k.endsWith(':meta')).length; });
|
|
653
|
+
ctxStream.on('end', res);
|
|
654
|
+
ctxStream.on('error', rej);
|
|
655
|
+
});
|
|
656
|
+
// Roadmap items
|
|
657
|
+
let roadmapOpen = 0;
|
|
658
|
+
let roadmapDone = 0;
|
|
659
|
+
try {
|
|
660
|
+
const rm = await redis.hgetall(`cachly:roadmap:${instance_id}`);
|
|
661
|
+
for (const v of Object.values(rm ?? {})) {
|
|
662
|
+
try {
|
|
663
|
+
const item = JSON.parse(v);
|
|
664
|
+
if (item.status === 'done')
|
|
665
|
+
roadmapDone++;
|
|
666
|
+
else if (['planned', 'in-progress', 'blocked'].includes(item.status))
|
|
667
|
+
roadmapOpen++;
|
|
668
|
+
}
|
|
669
|
+
catch { /* skip */ }
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
catch { /* non-critical */ }
|
|
673
|
+
// Pinned lessons
|
|
674
|
+
const pinKeys = [];
|
|
675
|
+
const pStream = redis.scanStream({ match: 'cachly:lesson:pin:*', count: 100 });
|
|
676
|
+
await new Promise((res, rej) => { pStream.on('data', (b) => pinKeys.push(...b)); pStream.on('end', res); pStream.on('error', rej); });
|
|
677
|
+
const pinnedTopics = pinKeys.map(k => k.replace('cachly:lesson:pin:', ''));
|
|
678
|
+
// Streak
|
|
679
|
+
let streakDays = 0;
|
|
680
|
+
try {
|
|
681
|
+
const sr = await redis.get('cachly:streak:current');
|
|
682
|
+
if (sr)
|
|
683
|
+
streakDays = JSON.parse(sr).days;
|
|
684
|
+
}
|
|
685
|
+
catch { /* skip */ }
|
|
686
|
+
// Last session
|
|
687
|
+
let lastSessionSummary = 'none yet';
|
|
688
|
+
let lastSessionAgo = '';
|
|
689
|
+
try {
|
|
690
|
+
const lsr = await redis.get('cachly:session:last');
|
|
691
|
+
if (lsr) {
|
|
692
|
+
const ls = JSON.parse(lsr);
|
|
693
|
+
const ago = Math.round((Date.now() - new Date(ls.ts).getTime()) / 60000);
|
|
694
|
+
lastSessionAgo = ago < 60 ? `${ago}m ago` : ago < 1440 ? `${Math.round(ago / 60)}h ago` : `${Math.round(ago / 1440)}d ago`;
|
|
695
|
+
lastSessionSummary = ls.summary;
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
catch { /* skip */ }
|
|
699
|
+
// Crystal
|
|
700
|
+
let crystalLabel = '';
|
|
701
|
+
try {
|
|
702
|
+
const cr = await redis.get('cachly:crystal:latest');
|
|
703
|
+
if (cr)
|
|
704
|
+
crystalLabel = JSON.parse(cr).label;
|
|
705
|
+
}
|
|
706
|
+
catch { /* skip */ }
|
|
707
|
+
// Top topics
|
|
708
|
+
const topicFreq = new Map();
|
|
709
|
+
for (const l of lessons) {
|
|
710
|
+
const cat = l.topic.split(':')[0] ?? 'other';
|
|
711
|
+
topicFreq.set(cat, (topicFreq.get(cat) ?? 0) + 1);
|
|
712
|
+
}
|
|
713
|
+
const topTopics = [...topicFreq.entries()].sort((a, b) => b[1] - a[1]).slice(0, 5);
|
|
714
|
+
// Outcomes
|
|
715
|
+
const successCount = lessons.filter(l => l.outcome === 'success').length;
|
|
716
|
+
const failCount = lessons.filter(l => l.outcome === 'failure').length;
|
|
717
|
+
const totalRecalls = lessons.reduce((s, l) => s + (l.recall_count ?? 0), 0);
|
|
718
|
+
const lines = [
|
|
719
|
+
'π§ **Brain Stats**',
|
|
720
|
+
'',
|
|
721
|
+
`π **Lessons:** ${lessons.length} (β
${successCount} success Β· β ${failCount} open Β· recalled ${totalRecalls}Γ)`,
|
|
722
|
+
`π **Context:** ${ctxCount} entries`,
|
|
723
|
+
`πΊοΈ **Roadmap:** ${roadmapOpen} open Β· ${roadmapDone} done`,
|
|
724
|
+
`π₯ **Streak:** ${streakDays > 0 ? `${streakDays} day${streakDays > 1 ? 's' : ''}` : 'no streak yet'}`,
|
|
725
|
+
'',
|
|
726
|
+
];
|
|
727
|
+
if (pinnedTopics.length > 0) {
|
|
728
|
+
lines.push(`π **Pinned lessons (${pinnedTopics.length}):** ${pinnedTopics.map(t => `\`${t}\``).join(' Β· ')}`);
|
|
729
|
+
lines.push('');
|
|
730
|
+
}
|
|
731
|
+
if (topTopics.length > 0) {
|
|
732
|
+
lines.push('π **Top knowledge domains:**');
|
|
733
|
+
for (const [cat, count] of topTopics) {
|
|
734
|
+
lines.push(` Β· ${cat.padEnd(20)} ${count} lesson${count > 1 ? 's' : ''}`);
|
|
735
|
+
}
|
|
736
|
+
lines.push('');
|
|
737
|
+
}
|
|
738
|
+
if (lastSessionSummary !== 'none yet') {
|
|
739
|
+
lines.push(`π
**Last session** (${lastSessionAgo}): ${lastSessionSummary}`);
|
|
740
|
+
lines.push('');
|
|
741
|
+
}
|
|
742
|
+
if (crystalLabel) {
|
|
743
|
+
lines.push(`π **Memory Crystal:** ${crystalLabel}`);
|
|
744
|
+
lines.push('');
|
|
745
|
+
}
|
|
746
|
+
lines.push('π‘ `brain_doctor` for health recommendations Β· `brain_diff(since="7d")` for what changed');
|
|
747
|
+
return lines.join('\n');
|
|
748
|
+
}
|
|
749
|
+
// ββ pin_lesson ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
750
|
+
case 'pin_lesson': {
|
|
751
|
+
const { instance_id, topic } = args;
|
|
752
|
+
const redis = await getConnection(instance_id);
|
|
753
|
+
// Verify the lesson exists
|
|
754
|
+
const lessonRaw = await redis.get(`cachly:lesson:best:${topic}`);
|
|
755
|
+
if (!lessonRaw) {
|
|
756
|
+
return `β No lesson found for topic \`${topic}\`.\n\nFirst create it with \`learn_from_attempts(topic="${topic}", ...)\`.`;
|
|
757
|
+
}
|
|
758
|
+
await redis.set(`cachly:lesson:pin:${topic}`, '1');
|
|
759
|
+
return [
|
|
760
|
+
`π **Pinned** \`${topic}\``,
|
|
761
|
+
'',
|
|
762
|
+
'This lesson will now appear at the top of every `session_start` briefing, regardless of age.',
|
|
763
|
+
'',
|
|
764
|
+
`Remove with: \`unpin_lesson(instance_id="...", topic="${topic}")\``,
|
|
765
|
+
].join('\n');
|
|
766
|
+
}
|
|
767
|
+
// ββ unpin_lesson βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
768
|
+
case 'unpin_lesson': {
|
|
769
|
+
const { instance_id, topic } = args;
|
|
770
|
+
const redis = await getConnection(instance_id);
|
|
771
|
+
const deleted = await redis.del(`cachly:lesson:pin:${topic}`);
|
|
772
|
+
if (deleted === 0) {
|
|
773
|
+
return `βΉοΈ \`${topic}\` was not pinned. Use \`brain_stats\` to see all pinned lessons.`;
|
|
774
|
+
}
|
|
775
|
+
return `π Unpinned \`${topic}\`. It will now follow normal recency/confidence decay in session_start.`;
|
|
776
|
+
}
|
|
588
777
|
// ββ v0.7 Knowledge Syndication: syndicate ββββββββββββββββββββββββββββββββ
|
|
589
778
|
default:
|
|
590
779
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"advanced.js","sourceRoot":"","sources":["../../src/handlers/advanced.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"advanced.js","sourceRoot":"","sources":["../../src/handlers/advanced.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cachly-dev/mcp-server",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.27",
|
|
4
4
|
"mcpName": "io.github.cachly-dev/cachly-mcp",
|
|
5
|
-
"description": "Give Claude a persistent
|
|
5
|
+
"description": "The #1 MCP memory server on npm (2026). Give Claude, Cursor, Copilot, Windsurf & Cline a persistent AI brain that never forgets. Learns automatically from every session, bug fix & git commit β no manual calls. Arrives pre-briefed. Predicts failures. Causal root-cause analysis. One-click OAuth sign-in Β· 84 tools Β· Free tier Β· GDPR EU servers.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
8
8
|
"cachly-mcp": "dist/index.js"
|
|
@@ -72,7 +72,25 @@
|
|
|
72
72
|
"knowledge-base",
|
|
73
73
|
"developer-productivity",
|
|
74
74
|
"ckg",
|
|
75
|
-
"mcp-server"
|
|
75
|
+
"mcp-server",
|
|
76
|
+
"agent-memory",
|
|
77
|
+
"long-term-memory",
|
|
78
|
+
"context-engineering",
|
|
79
|
+
"rag",
|
|
80
|
+
"rag-memory",
|
|
81
|
+
"ai-context",
|
|
82
|
+
"agentic-ai",
|
|
83
|
+
"ai-agents",
|
|
84
|
+
"cline",
|
|
85
|
+
"zed",
|
|
86
|
+
"codex",
|
|
87
|
+
"gemini",
|
|
88
|
+
"gemini-cli",
|
|
89
|
+
"developer-tools",
|
|
90
|
+
"vector-memory",
|
|
91
|
+
"episodic-memory",
|
|
92
|
+
"working-memory",
|
|
93
|
+
"2026"
|
|
76
94
|
],
|
|
77
95
|
"homepage": "https://cachly.dev/docs/mcp",
|
|
78
96
|
"bugs": {
|
package/src/handlers/advanced.ts
CHANGED
|
@@ -4,13 +4,13 @@ import { calculateConfidence, confidenceBadge, CONFIDENCE_STALE_VALUE, CONFIDENC
|
|
|
4
4
|
import { ckgSlug, ckgUpdateEdge } from '../ckg.js';
|
|
5
5
|
import type { CKGEdge, CKGNode } from '../ckg.js';
|
|
6
6
|
import { keywordSearch } from '../search.js';
|
|
7
|
-
import { safeJsonParse } from '../utils.js';
|
|
8
7
|
|
|
9
8
|
type GetConnection = (instanceId: string) => Promise<Redis>;
|
|
10
9
|
type ApiFetch = <T>(path: string, options?: RequestInit) => Promise<T>;
|
|
11
10
|
|
|
12
11
|
export const ADVANCED_TOOL_NAMES = new Set([
|
|
13
12
|
'memory_consolidate', 'brain_diff', 'causal_trace', 'knowledge_decay', 'autopilot',
|
|
13
|
+
'brain_stats', 'pin_lesson', 'unpin_lesson',
|
|
14
14
|
]);
|
|
15
15
|
|
|
16
16
|
export async function handleAdvancedTool(
|
|
@@ -46,8 +46,7 @@ export async function handleAdvancedTool(
|
|
|
46
46
|
for (const k of lessonKeys) {
|
|
47
47
|
const raw = await redis.get(k);
|
|
48
48
|
if (!raw) continue;
|
|
49
|
-
|
|
50
|
-
if (lesson) lessons.set(k, lesson);
|
|
49
|
+
try { lessons.set(k, JSON.parse(raw) as Lesson); } catch { /* skip malformed */ }
|
|
51
50
|
}
|
|
52
51
|
|
|
53
52
|
// Detect duplicates: same topic prefix (e.g. deploy:api vs deploy:api-v2)
|
|
@@ -105,6 +104,25 @@ export async function handleAdvancedTool(
|
|
|
105
104
|
for (const k of stale) {
|
|
106
105
|
await redis.expire(k, 86400 * 30);
|
|
107
106
|
}
|
|
107
|
+
// Auto-unpin lessons whose lesson key was deleted (merged or stale-expired)
|
|
108
|
+
// Also unpin if the lesson outcome changed to 'failure' (auto-pin only fires on success/partial)
|
|
109
|
+
const pinKeys: string[] = [];
|
|
110
|
+
const pinStream = redis.scanStream({ match: 'cachly:lesson:pin:*', count: 100 });
|
|
111
|
+
await new Promise<void>((res, rej) => { pinStream.on('data', (b: string[]) => pinKeys.push(...b)); pinStream.on('end', res); pinStream.on('error', rej); });
|
|
112
|
+
let unpinned = 0;
|
|
113
|
+
for (const pk of pinKeys) {
|
|
114
|
+
const pinnedTopic = pk.replace('cachly:lesson:pin:', '');
|
|
115
|
+
const lessonStillExists = await redis.exists(`cachly:lesson:best:${pinnedTopic}`);
|
|
116
|
+
if (!lessonStillExists) { await redis.del(pk); unpinned++; continue; }
|
|
117
|
+
const raw = await redis.get(`cachly:lesson:best:${pinnedTopic}`);
|
|
118
|
+
if (raw) {
|
|
119
|
+
try {
|
|
120
|
+
const l = JSON.parse(raw) as { outcome: string };
|
|
121
|
+
if (l.outcome === 'failure') { await redis.del(pk); unpinned++; }
|
|
122
|
+
} catch { /* skip */ }
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (unpinned > 0) stale.push(...Array(unpinned).fill('__unpin_placeholder__')); // just for count
|
|
108
126
|
}
|
|
109
127
|
|
|
110
128
|
const lines = [
|
|
@@ -168,9 +186,8 @@ export async function handleAdvancedTool(
|
|
|
168
186
|
for (const k of lessonKeys) {
|
|
169
187
|
const raw = await redis.get(k);
|
|
170
188
|
if (!raw) continue;
|
|
171
|
-
{
|
|
172
|
-
const l =
|
|
173
|
-
if (!l) continue;
|
|
189
|
+
try {
|
|
190
|
+
const l = JSON.parse(raw) as Lesson;
|
|
174
191
|
const ts = new Date(l.ts).getTime();
|
|
175
192
|
if (ts >= sinceMs) {
|
|
176
193
|
// Check history to determine add vs update
|
|
@@ -184,7 +201,7 @@ export async function handleAdvancedTool(
|
|
|
184
201
|
// lessons with recalls as "active"
|
|
185
202
|
recalled.push(l);
|
|
186
203
|
}
|
|
187
|
-
}
|
|
204
|
+
} catch { /* skip */ }
|
|
188
205
|
}
|
|
189
206
|
|
|
190
207
|
const sinceLabel = match ? `last ${since}` : new Date(sinceMs).toLocaleDateString('de-DE');
|
|
@@ -218,10 +235,10 @@ export async function handleAdvancedTool(
|
|
|
218
235
|
for (const rk of resolutionKeys) {
|
|
219
236
|
const rr = await redis.get(rk);
|
|
220
237
|
if (!rr) continue;
|
|
221
|
-
{
|
|
222
|
-
const rn =
|
|
223
|
-
if (rn
|
|
224
|
-
}
|
|
238
|
+
try {
|
|
239
|
+
const rn = JSON.parse(rr) as { topic?: string; resolution?: string; ts?: string };
|
|
240
|
+
if (rn.ts && new Date(rn.ts).getTime() >= sinceMs) recentResolutions.push({ topic: rn.topic ?? rk, resolution: rn.resolution ?? 'unknown', ts: rn.ts });
|
|
241
|
+
} catch { /* skip */ }
|
|
225
242
|
}
|
|
226
243
|
if (recentResolutions.length > 0) {
|
|
227
244
|
lines.push(`π³οΈ **MADC Resolutions** (${recentResolutions.length} contested beliefs resolved):`);
|
|
@@ -241,10 +258,8 @@ export async function handleAdvancedTool(
|
|
|
241
258
|
|
|
242
259
|
// 3. FedBrain transfers received in window
|
|
243
260
|
const fedHistRaw = await redis.lrange('cachly:fedbrain:federations', -20, -1);
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
.map(r => safeJsonParse<FedEntry | null>(r, null))
|
|
247
|
-
.filter((f): f is FedEntry => f !== null && new Date(f.transferred_at).getTime() >= sinceMs);
|
|
261
|
+
const recentFeds = fedHistRaw.map(r => { try { return JSON.parse(r) as { source: string; domain: string; transferred_at: string; nodes: number; edges: number }; } catch { return null; } })
|
|
262
|
+
.filter(f => f && new Date(f!.transferred_at).getTime() >= sinceMs) as Array<{ source: string; domain: string; transferred_at: string; nodes: number; edges: number }>;
|
|
248
263
|
if (recentFeds.length > 0) {
|
|
249
264
|
lines.push(`π§ **FedBrain transfers received (${recentFeds.length}):**`);
|
|
250
265
|
for (const f of recentFeds.slice(0, 3)) {
|
|
@@ -287,30 +302,27 @@ export async function handleAdvancedTool(
|
|
|
287
302
|
for (const nodeKey of nodeKeys.slice(0, 10)) {
|
|
288
303
|
const nodeRaw = await redis.get(nodeKey);
|
|
289
304
|
if (!nodeRaw) continue;
|
|
290
|
-
const node
|
|
291
|
-
if (!node) continue;
|
|
305
|
+
const node: CKGNode = JSON.parse(nodeRaw);
|
|
292
306
|
// Get edges from this node
|
|
293
307
|
const edgeKeys = await redis.smembers(`cachly:ckg:idx:from:${node.id}`);
|
|
294
308
|
for (const ek of edgeKeys.slice(0, 20)) {
|
|
295
309
|
const edgeRaw = await redis.get(ek);
|
|
296
310
|
if (!edgeRaw) continue;
|
|
297
|
-
const edge
|
|
298
|
-
if (!edge) continue;
|
|
311
|
+
const edge: CKGEdge = JSON.parse(edgeRaw);
|
|
299
312
|
if (edge.edgeType !== 'fixes' && edge.edgeType !== 'requires') continue;
|
|
300
313
|
// Find lesson for this concept
|
|
301
314
|
const lessonRaw = await redis.get(`cachly:lesson:best:${edge.from.replace(/-/g, ':').replace(/^fix:/, 'fix:')}`);
|
|
302
|
-
const lesson = lessonRaw ?
|
|
303
|
-
ckgResults.push({ conceptId: node.id, edge, lesson
|
|
315
|
+
const lesson = lessonRaw ? JSON.parse(lessonRaw) : undefined;
|
|
316
|
+
ckgResults.push({ conceptId: node.id, edge, lesson });
|
|
304
317
|
}
|
|
305
318
|
}
|
|
306
319
|
for (const ek of [...fromKeys, ...toKeys].slice(0, 20)) {
|
|
307
320
|
const edgeRaw = await redis.get(ek);
|
|
308
321
|
if (!edgeRaw) continue;
|
|
309
|
-
const edge
|
|
310
|
-
if (!edge) continue;
|
|
322
|
+
const edge: CKGEdge = JSON.parse(edgeRaw);
|
|
311
323
|
const lessonRaw = await redis.get(`cachly:lesson:best:${edge.from}`);
|
|
312
|
-
const lesson = lessonRaw ?
|
|
313
|
-
ckgResults.push({ conceptId: edge.from, edge, lesson
|
|
324
|
+
const lesson = lessonRaw ? JSON.parse(lessonRaw) : undefined;
|
|
325
|
+
ckgResults.push({ conceptId: edge.from, edge, lesson });
|
|
314
326
|
}
|
|
315
327
|
}
|
|
316
328
|
} catch { /* CKG traversal non-critical */ }
|
|
@@ -344,15 +356,14 @@ export async function handleAdvancedTool(
|
|
|
344
356
|
for (const k of lessonKeys) {
|
|
345
357
|
const raw = await redis.get(k);
|
|
346
358
|
if (!raw) continue;
|
|
347
|
-
{
|
|
348
|
-
const l =
|
|
349
|
-
if (!l) continue;
|
|
359
|
+
try {
|
|
360
|
+
const l = JSON.parse(raw) as Lesson;
|
|
350
361
|
if (filterTags.length > 0 && !(l.tags ?? []).some((t: string) => filterTags.includes(t))) continue;
|
|
351
362
|
const haystack = [l.topic, l.what_failed ?? '', l.what_worked ?? '', l.context ?? '']
|
|
352
363
|
.join(' ').toLowerCase();
|
|
353
364
|
const score = tokens.reduce((s, t) => s + (haystack.includes(t) ? 1 : 0), 0);
|
|
354
365
|
if (score > 0) scored.push({ score, lesson: l, key: k });
|
|
355
|
-
}
|
|
366
|
+
} catch { /* skip */ }
|
|
356
367
|
}
|
|
357
368
|
scored.sort((a, b) => b.score - a.score);
|
|
358
369
|
const chain = scored.slice(0, max_depth);
|
|
@@ -429,10 +440,6 @@ export async function handleAdvancedTool(
|
|
|
429
440
|
lines.push(topSolution.what_worked.slice(0, 500));
|
|
430
441
|
lines.push(`\`\`\``);
|
|
431
442
|
lines.push('');
|
|
432
|
-
|
|
433
|
-
// Track estimated time saved β causal_trace finding a known fix is worth 1-4h
|
|
434
|
-
const savedMins = topSolution.severity === 'critical' ? 240 : topSolution.severity === 'major' ? 120 : 60;
|
|
435
|
-
redis.incrbyfloat(`cachly:stats:time_saved_mins:${instance_id}`, savedMins).catch(() => {});
|
|
436
443
|
}
|
|
437
444
|
}
|
|
438
445
|
|
|
@@ -465,9 +472,8 @@ export async function handleAdvancedTool(
|
|
|
465
472
|
for (const k of lessonKeys) {
|
|
466
473
|
const raw = await redis.get(k);
|
|
467
474
|
if (!raw) continue;
|
|
468
|
-
{
|
|
469
|
-
const l =
|
|
470
|
-
if (!l) continue;
|
|
475
|
+
try {
|
|
476
|
+
const l = JSON.parse(raw) as Lesson;
|
|
471
477
|
const ageMs = now - new Date(l.ts).getTime();
|
|
472
478
|
if (ageMs < minAgeMs) continue;
|
|
473
479
|
const age_days = Math.floor(ageMs / 86400000);
|
|
@@ -484,7 +490,7 @@ export async function handleAdvancedTool(
|
|
|
484
490
|
const confidence = Math.min(100, Math.max(0, base + recallBoost + outcomePenalty));
|
|
485
491
|
|
|
486
492
|
scores.push({ topic: l.topic, confidence, age_days, recalls, outcome: l.outcome });
|
|
487
|
-
}
|
|
493
|
+
} catch { /* skip */ }
|
|
488
494
|
}
|
|
489
495
|
|
|
490
496
|
// Sort by lowest confidence first
|
|
@@ -541,6 +547,12 @@ export async function handleAdvancedTool(
|
|
|
541
547
|
- **Window opens** β call \`session_start(instance_id="${instance_id}", focus="<today's goal>")\`
|
|
542
548
|
- **Bug fixed / deployed / discovered** β call \`learn_from_attempts(instance_id="${instance_id}", topic="fix:<area>", outcome="success", what_worked="...")\`
|
|
543
549
|
- **Window closes** β call \`session_end(instance_id="${instance_id}", summary="...", files_changed=[...])\`
|
|
550
|
+
|
|
551
|
+
### New team member setup:
|
|
552
|
+
\`\`\`bash
|
|
553
|
+
npx @cachly-dev/init
|
|
554
|
+
\`\`\`
|
|
555
|
+
Run once β auto-detects all AI editors and gives instant full context.
|
|
544
556
|
`;
|
|
545
557
|
|
|
546
558
|
const full = `## Cachly AI Brain β Autopilot for ${project_name}
|
|
@@ -612,9 +624,22 @@ smart_recall(
|
|
|
612
624
|
|
|
613
625
|
---
|
|
614
626
|
|
|
627
|
+
## π New team member?
|
|
628
|
+
|
|
629
|
+
\`\`\`bash
|
|
630
|
+
npx @cachly-dev/init
|
|
631
|
+
\`\`\`
|
|
632
|
+
|
|
633
|
+
Run once β auto-detects Claude Code, Cursor, Copilot, Windsurf, Continue and writes all MCP configs. Free, no credit card.
|
|
634
|
+
|
|
635
|
+
Demo: [cachly.dev](https://cachly.dev)
|
|
636
|
+
|
|
637
|
+
---
|
|
638
|
+
|
|
615
639
|
*Cachly v0.6 Β· Generated ${new Date().toISOString().slice(0, 10)}*
|
|
616
640
|
`;
|
|
617
641
|
|
|
642
|
+
|
|
618
643
|
const content = style === 'minimal' ? minimal : full;
|
|
619
644
|
const filename = editor === 'copilot'
|
|
620
645
|
? '.github/copilot-instructions.md'
|
|
@@ -643,6 +668,161 @@ smart_recall(
|
|
|
643
668
|
].join('\n');
|
|
644
669
|
}
|
|
645
670
|
|
|
671
|
+
// ββ brain_stats βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
672
|
+
case 'brain_stats': {
|
|
673
|
+
const { instance_id } = args as { instance_id: string };
|
|
674
|
+
const redis = await getConnection(instance_id);
|
|
675
|
+
|
|
676
|
+
// Lessons
|
|
677
|
+
const lessonKeys: string[] = [];
|
|
678
|
+
const lStream = redis.scanStream({ match: 'cachly:lesson:best:*', count: 200 });
|
|
679
|
+
await new Promise<void>((res, rej) => { lStream.on('data', (b: string[]) => lessonKeys.push(...b)); lStream.on('end', res); lStream.on('error', rej); });
|
|
680
|
+
|
|
681
|
+
type LessonMeta = { topic: string; outcome: string; ts: string; severity?: string; recall_count?: number };
|
|
682
|
+
const lessons: LessonMeta[] = [];
|
|
683
|
+
if (lessonKeys.length > 0) {
|
|
684
|
+
const raws = await redis.mget(...lessonKeys);
|
|
685
|
+
for (const r of raws) {
|
|
686
|
+
if (!r) continue;
|
|
687
|
+
try { lessons.push(JSON.parse(r) as LessonMeta); } catch { /* skip */ }
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
// Context entries
|
|
692
|
+
let ctxCount = 0;
|
|
693
|
+
const ctxStream = redis.scanStream({ match: 'cachly:ctx:*', count: 200 });
|
|
694
|
+
await new Promise<void>((res, rej) => {
|
|
695
|
+
ctxStream.on('data', (b: string[]) => { ctxCount += (b as string[]).filter(k => !k.endsWith(':meta')).length; });
|
|
696
|
+
ctxStream.on('end', res); ctxStream.on('error', rej);
|
|
697
|
+
});
|
|
698
|
+
|
|
699
|
+
// Roadmap items
|
|
700
|
+
let roadmapOpen = 0; let roadmapDone = 0;
|
|
701
|
+
try {
|
|
702
|
+
const rm = await redis.hgetall(`cachly:roadmap:${instance_id}`);
|
|
703
|
+
for (const v of Object.values(rm ?? {})) {
|
|
704
|
+
try {
|
|
705
|
+
const item = JSON.parse(v as string) as { status: string };
|
|
706
|
+
if (item.status === 'done') roadmapDone++;
|
|
707
|
+
else if (['planned', 'in-progress', 'blocked'].includes(item.status)) roadmapOpen++;
|
|
708
|
+
} catch { /* skip */ }
|
|
709
|
+
}
|
|
710
|
+
} catch { /* non-critical */ }
|
|
711
|
+
|
|
712
|
+
// Pinned lessons
|
|
713
|
+
const pinKeys: string[] = [];
|
|
714
|
+
const pStream = redis.scanStream({ match: 'cachly:lesson:pin:*', count: 100 });
|
|
715
|
+
await new Promise<void>((res, rej) => { pStream.on('data', (b: string[]) => pinKeys.push(...b)); pStream.on('end', res); pStream.on('error', rej); });
|
|
716
|
+
const pinnedTopics = pinKeys.map(k => k.replace('cachly:lesson:pin:', ''));
|
|
717
|
+
|
|
718
|
+
// Streak
|
|
719
|
+
let streakDays = 0;
|
|
720
|
+
try {
|
|
721
|
+
const sr = await redis.get('cachly:streak:current');
|
|
722
|
+
if (sr) streakDays = (JSON.parse(sr) as { days: number }).days;
|
|
723
|
+
} catch { /* skip */ }
|
|
724
|
+
|
|
725
|
+
// Last session
|
|
726
|
+
let lastSessionSummary = 'none yet';
|
|
727
|
+
let lastSessionAgo = '';
|
|
728
|
+
try {
|
|
729
|
+
const lsr = await redis.get('cachly:session:last');
|
|
730
|
+
if (lsr) {
|
|
731
|
+
const ls = JSON.parse(lsr) as { summary: string; ts: string };
|
|
732
|
+
const ago = Math.round((Date.now() - new Date(ls.ts).getTime()) / 60000);
|
|
733
|
+
lastSessionAgo = ago < 60 ? `${ago}m ago` : ago < 1440 ? `${Math.round(ago / 60)}h ago` : `${Math.round(ago / 1440)}d ago`;
|
|
734
|
+
lastSessionSummary = ls.summary;
|
|
735
|
+
}
|
|
736
|
+
} catch { /* skip */ }
|
|
737
|
+
|
|
738
|
+
// Crystal
|
|
739
|
+
let crystalLabel = '';
|
|
740
|
+
try {
|
|
741
|
+
const cr = await redis.get('cachly:crystal:latest');
|
|
742
|
+
if (cr) crystalLabel = (JSON.parse(cr) as { label: string }).label;
|
|
743
|
+
} catch { /* skip */ }
|
|
744
|
+
|
|
745
|
+
// Top topics
|
|
746
|
+
const topicFreq = new Map<string, number>();
|
|
747
|
+
for (const l of lessons) {
|
|
748
|
+
const cat = l.topic.split(':')[0] ?? 'other';
|
|
749
|
+
topicFreq.set(cat, (topicFreq.get(cat) ?? 0) + 1);
|
|
750
|
+
}
|
|
751
|
+
const topTopics = [...topicFreq.entries()].sort((a, b) => b[1] - a[1]).slice(0, 5);
|
|
752
|
+
|
|
753
|
+
// Outcomes
|
|
754
|
+
const successCount = lessons.filter(l => l.outcome === 'success').length;
|
|
755
|
+
const failCount = lessons.filter(l => l.outcome === 'failure').length;
|
|
756
|
+
const totalRecalls = lessons.reduce((s, l) => s + (l.recall_count ?? 0), 0);
|
|
757
|
+
|
|
758
|
+
const lines: string[] = [
|
|
759
|
+
'π§ **Brain Stats**',
|
|
760
|
+
'',
|
|
761
|
+
`π **Lessons:** ${lessons.length} (β
${successCount} success Β· β ${failCount} open Β· recalled ${totalRecalls}Γ)`,
|
|
762
|
+
`π **Context:** ${ctxCount} entries`,
|
|
763
|
+
`πΊοΈ **Roadmap:** ${roadmapOpen} open Β· ${roadmapDone} done`,
|
|
764
|
+
`π₯ **Streak:** ${streakDays > 0 ? `${streakDays} day${streakDays > 1 ? 's' : ''}` : 'no streak yet'}`,
|
|
765
|
+
'',
|
|
766
|
+
];
|
|
767
|
+
|
|
768
|
+
if (pinnedTopics.length > 0) {
|
|
769
|
+
lines.push(`π **Pinned lessons (${pinnedTopics.length}):** ${pinnedTopics.map(t => `\`${t}\``).join(' Β· ')}`);
|
|
770
|
+
lines.push('');
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
if (topTopics.length > 0) {
|
|
774
|
+
lines.push('π **Top knowledge domains:**');
|
|
775
|
+
for (const [cat, count] of topTopics) {
|
|
776
|
+
lines.push(` Β· ${cat.padEnd(20)} ${count} lesson${count > 1 ? 's' : ''}`);
|
|
777
|
+
}
|
|
778
|
+
lines.push('');
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
if (lastSessionSummary !== 'none yet') {
|
|
782
|
+
lines.push(`π
**Last session** (${lastSessionAgo}): ${lastSessionSummary}`);
|
|
783
|
+
lines.push('');
|
|
784
|
+
}
|
|
785
|
+
if (crystalLabel) {
|
|
786
|
+
lines.push(`π **Memory Crystal:** ${crystalLabel}`);
|
|
787
|
+
lines.push('');
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
lines.push('π‘ `brain_doctor` for health recommendations Β· `brain_diff(since="7d")` for what changed');
|
|
791
|
+
return lines.join('\n');
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
// ββ pin_lesson ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
795
|
+
case 'pin_lesson': {
|
|
796
|
+
const { instance_id, topic } = args as { instance_id: string; topic: string };
|
|
797
|
+
const redis = await getConnection(instance_id);
|
|
798
|
+
|
|
799
|
+
// Verify the lesson exists
|
|
800
|
+
const lessonRaw = await redis.get(`cachly:lesson:best:${topic}`);
|
|
801
|
+
if (!lessonRaw) {
|
|
802
|
+
return `β No lesson found for topic \`${topic}\`.\n\nFirst create it with \`learn_from_attempts(topic="${topic}", ...)\`.`;
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
await redis.set(`cachly:lesson:pin:${topic}`, '1');
|
|
806
|
+
return [
|
|
807
|
+
`π **Pinned** \`${topic}\``,
|
|
808
|
+
'',
|
|
809
|
+
'This lesson will now appear at the top of every `session_start` briefing, regardless of age.',
|
|
810
|
+
'',
|
|
811
|
+
`Remove with: \`unpin_lesson(instance_id="...", topic="${topic}")\``,
|
|
812
|
+
].join('\n');
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
// ββ unpin_lesson βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
816
|
+
case 'unpin_lesson': {
|
|
817
|
+
const { instance_id, topic } = args as { instance_id: string; topic: string };
|
|
818
|
+
const redis = await getConnection(instance_id);
|
|
819
|
+
const deleted = await redis.del(`cachly:lesson:pin:${topic}`);
|
|
820
|
+
if (deleted === 0) {
|
|
821
|
+
return `βΉοΈ \`${topic}\` was not pinned. Use \`brain_stats\` to see all pinned lessons.`;
|
|
822
|
+
}
|
|
823
|
+
return `π Unpinned \`${topic}\`. It will now follow normal recency/confidence decay in session_start.`;
|
|
824
|
+
}
|
|
825
|
+
|
|
646
826
|
// ββ v0.7 Knowledge Syndication: syndicate ββββββββββββββββββββββββββββββββ
|
|
647
827
|
|
|
648
828
|
default:
|