fivocell 4.9.0 → 5.0.0

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 (39) hide show
  1. package/dist/__tests__/context-compression.test.d.ts +2 -0
  2. package/dist/__tests__/context-compression.test.d.ts.map +1 -0
  3. package/dist/__tests__/context-compression.test.js +77 -0
  4. package/dist/__tests__/context-compression.test.js.map +1 -0
  5. package/dist/__tests__/memory-automation.test.d.ts +2 -0
  6. package/dist/__tests__/memory-automation.test.d.ts.map +1 -0
  7. package/dist/__tests__/memory-automation.test.js +136 -0
  8. package/dist/__tests__/memory-automation.test.js.map +1 -0
  9. package/dist/__tests__/memory-health.test.d.ts +2 -0
  10. package/dist/__tests__/memory-health.test.d.ts.map +1 -0
  11. package/dist/__tests__/memory-health.test.js +66 -0
  12. package/dist/__tests__/memory-health.test.js.map +1 -0
  13. package/dist/__tests__/smart-recommendations.test.d.ts +2 -0
  14. package/dist/__tests__/smart-recommendations.test.d.ts.map +1 -0
  15. package/dist/__tests__/smart-recommendations.test.js +74 -0
  16. package/dist/__tests__/smart-recommendations.test.js.map +1 -0
  17. package/dist/walls/06-memory/automation/memory-automation.d.ts +49 -0
  18. package/dist/walls/06-memory/automation/memory-automation.d.ts.map +1 -0
  19. package/dist/walls/06-memory/automation/memory-automation.js +396 -0
  20. package/dist/walls/06-memory/automation/memory-automation.js.map +1 -0
  21. package/dist/walls/06-memory/stores/context-compression.d.ts +33 -0
  22. package/dist/walls/06-memory/stores/context-compression.d.ts.map +1 -0
  23. package/dist/walls/06-memory/stores/context-compression.js +265 -0
  24. package/dist/walls/06-memory/stores/context-compression.js.map +1 -0
  25. package/dist/walls/06-memory/stores/memory-health.d.ts +32 -0
  26. package/dist/walls/06-memory/stores/memory-health.d.ts.map +1 -0
  27. package/dist/walls/06-memory/stores/memory-health.js +221 -0
  28. package/dist/walls/06-memory/stores/memory-health.js.map +1 -0
  29. package/dist/walls/06-memory/stores/smart-recommendations.d.ts +30 -0
  30. package/dist/walls/06-memory/stores/smart-recommendations.d.ts.map +1 -0
  31. package/dist/walls/06-memory/stores/smart-recommendations.js +222 -0
  32. package/dist/walls/06-memory/stores/smart-recommendations.js.map +1 -0
  33. package/dist/walls/06-memory/stores/weekly-report.js +1 -1
  34. package/dist/walls/07-runtime/cli/cli.js +92 -0
  35. package/dist/walls/07-runtime/cli/cli.js.map +1 -1
  36. package/dist/walls/07-runtime/daemon/server.d.ts.map +1 -1
  37. package/dist/walls/07-runtime/daemon/server.js +32 -0
  38. package/dist/walls/07-runtime/daemon/server.js.map +1 -1
  39. package/package.json +1 -1
@@ -0,0 +1,265 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compressContext = compressContext;
4
+ exports.compressToMinimal = compressToMinimal;
5
+ exports.compressForAITool = compressForAITool;
6
+ exports.formatCompressedContext = formatCompressedContext;
7
+ exports.estimateTokens = estimateTokens;
8
+ const database_1 = require("../database/database");
9
+ function compressContext(options) {
10
+ const db = (0, database_1.getDb)();
11
+ const mode = options.mode || 'compact';
12
+ const maxWords = options.maxWords || getDefaultMaxWords(mode);
13
+ const days = options.days || getDefaultDays(mode);
14
+ const since = new Date(Date.now() - days * 86400000).toISOString();
15
+ const sections = [];
16
+ // Overview
17
+ const totalRow = db.prepare('SELECT COUNT(*) as c FROM memory_events WHERE project = ?').get(options.project);
18
+ const recentRow = db.prepare('SELECT COUNT(*) as c FROM memory_events WHERE project = ? AND created_at >= ?').get(options.project, since);
19
+ sections.push({
20
+ type: 'overview',
21
+ title: 'Overview',
22
+ content: `${totalRow.c} total memories, ${recentRow.c} in last ${days}d`,
23
+ wordCount: 12,
24
+ importance: 10,
25
+ compressed: true,
26
+ });
27
+ // Recent high-importance events
28
+ const recentEvents = db.prepare(`
29
+ SELECT type, summary, importance, topic, created_at FROM memory_events
30
+ WHERE project = ? AND created_at >= ?
31
+ ORDER BY importance DESC, created_at DESC
32
+ LIMIT ?
33
+ `).all(options.project, since, mode === 'compact' ? 10 : 25);
34
+ if (recentEvents.length > 0) {
35
+ const lines = recentEvents.map(e => {
36
+ const age = formatAge(e.created_at);
37
+ const topic = e.topic ? `[${e.topic}]` : '';
38
+ return `- [${e.type}]${topic} ${e.summary.slice(0, 100)} (${age})`;
39
+ });
40
+ sections.push({
41
+ type: 'recent',
42
+ title: 'Recent Activity',
43
+ content: lines.join('\n'),
44
+ wordCount: lines.length * 8,
45
+ importance: 9,
46
+ compressed: true,
47
+ });
48
+ }
49
+ // Decisions
50
+ const decisions = db.prepare(`
51
+ SELECT summary, topic, created_at FROM memory_events
52
+ WHERE project = ? AND type = 'decision' AND created_at >= ?
53
+ ORDER BY importance DESC, created_at DESC LIMIT ?
54
+ `).all(options.project, since, mode === 'compact' ? 5 : 15);
55
+ if (decisions.length > 0) {
56
+ const lines = decisions.map(d => `- ${d.summary.slice(0, 120)}`);
57
+ sections.push({
58
+ type: 'decisions',
59
+ title: 'Key Decisions',
60
+ content: lines.join('\n'),
61
+ wordCount: lines.length * 6,
62
+ importance: 9,
63
+ compressed: true,
64
+ });
65
+ }
66
+ // Errors
67
+ const errors = db.prepare(`
68
+ SELECT summary, topic, importance, created_at FROM memory_events
69
+ WHERE project = ? AND type = 'error' AND created_at >= ?
70
+ ORDER BY importance DESC, created_at DESC LIMIT ?
71
+ `).all(options.project, since, mode === 'compact' ? 5 : 15);
72
+ if (errors.length > 0) {
73
+ const lines = errors.map(e => `- [${e.importance}/10] ${e.summary.slice(0, 100)}`);
74
+ sections.push({
75
+ type: 'errors',
76
+ title: 'Errors',
77
+ content: lines.join('\n'),
78
+ wordCount: lines.length * 6,
79
+ importance: 8,
80
+ compressed: true,
81
+ });
82
+ }
83
+ // Fixes
84
+ const fixes = db.prepare(`
85
+ SELECT summary, topic, created_at FROM memory_events
86
+ WHERE project = ? AND type = 'fix' AND created_at >= ?
87
+ ORDER BY importance DESC, created_at DESC LIMIT ?
88
+ `).all(options.project, since, mode === 'compact' ? 5 : 15);
89
+ if (fixes.length > 0) {
90
+ const lines = fixes.map(f => `- ${f.summary.slice(0, 100)}`);
91
+ sections.push({
92
+ type: 'fixes',
93
+ title: 'Fixes Applied',
94
+ content: lines.join('\n'),
95
+ wordCount: lines.length * 5,
96
+ importance: 7,
97
+ compressed: true,
98
+ });
99
+ }
100
+ // Patterns
101
+ if (mode === 'full') {
102
+ const patterns = db.prepare(`
103
+ SELECT pattern, category, importance, confidence FROM memory_patterns
104
+ WHERE project = ?
105
+ ORDER BY importance DESC, confidence DESC LIMIT 10
106
+ `).all(options.project);
107
+ if (patterns.length > 0) {
108
+ const lines = patterns.map(p => `- [${p.category}] ${p.pattern.slice(0, 80)} (imp:${p.importance} conf:${p.confidence})`);
109
+ sections.push({
110
+ type: 'patterns',
111
+ title: 'Learned Patterns',
112
+ content: lines.join('\n'),
113
+ wordCount: lines.length * 8,
114
+ importance: 7,
115
+ compressed: true,
116
+ });
117
+ }
118
+ }
119
+ // Handoff
120
+ if (options.includeHandoff !== false) {
121
+ try {
122
+ const { getCurrentHandoff } = require('../handoff/handoff-store');
123
+ const handoff = getCurrentHandoff(options.project);
124
+ if (handoff?.content) {
125
+ const handoffContent = handoff.content.slice(0, 500);
126
+ sections.push({
127
+ type: 'handoff',
128
+ title: 'Current Handoff',
129
+ content: handoffContent,
130
+ wordCount: handoffContent.split(/\s+/).length,
131
+ importance: 8,
132
+ compressed: handoff.content.length > 500,
133
+ });
134
+ }
135
+ }
136
+ catch { }
137
+ }
138
+ // Recommendations
139
+ if (options.includeRecommendations !== false && mode !== 'compact') {
140
+ try {
141
+ const { generateSmartRecommendations } = require('./smart-recommendations');
142
+ const recs = generateSmartRecommendations(options.project);
143
+ if (recs.length > 0) {
144
+ const lines = recs.slice(0, 5).map((r) => `- [${r.priority}] ${r.title}`);
145
+ sections.push({
146
+ type: 'recommendations',
147
+ title: 'Recommendations',
148
+ content: lines.join('\n'),
149
+ wordCount: lines.length * 6,
150
+ importance: 6,
151
+ compressed: true,
152
+ });
153
+ }
154
+ }
155
+ catch { }
156
+ }
157
+ // Topic filter
158
+ if (options.topic) {
159
+ const topicEvents = db.prepare(`
160
+ SELECT type, summary, importance, created_at FROM memory_events
161
+ WHERE project = ? AND topic LIKE ? AND created_at >= ?
162
+ ORDER BY importance DESC, created_at DESC LIMIT 20
163
+ `).all(options.project, `%${options.topic}%`, since);
164
+ if (topicEvents.length > 0) {
165
+ const lines = topicEvents.map(e => `- [${e.type}] ${e.summary.slice(0, 100)}`);
166
+ sections.push({
167
+ type: 'topics',
168
+ title: `Topic: ${options.topic}`,
169
+ content: lines.join('\n'),
170
+ wordCount: lines.length * 8,
171
+ importance: 8,
172
+ compressed: true,
173
+ });
174
+ }
175
+ }
176
+ // Limit sections
177
+ const maxSections = options.maxSections || getDefaultMaxSections(mode);
178
+ const sorted = sections.sort((a, b) => b.importance - a.importance).slice(0, maxSections);
179
+ // Trim to max words
180
+ let totalWords = 0;
181
+ const trimmed = [];
182
+ for (const s of sorted) {
183
+ if (totalWords + s.wordCount > maxWords)
184
+ break;
185
+ trimmed.push(s);
186
+ totalWords += s.wordCount;
187
+ }
188
+ const tokenEstimate = Math.ceil(totalWords * 1.3);
189
+ const summary = `${trimmed.length} sections, ~${tokenEstimate} tokens`;
190
+ return {
191
+ project: options.project,
192
+ mode,
193
+ tokenEstimate,
194
+ sections: trimmed,
195
+ compressedAt: new Date().toISOString(),
196
+ summary,
197
+ };
198
+ }
199
+ function compressToMinimal(project) {
200
+ return compressContext({ project, mode: 'compact', maxWords: 500, maxSections: 3, includeHandoff: false, includeRecommendations: false, includeFiles: false });
201
+ }
202
+ function compressForAITool(project, tool) {
203
+ const profiles = {
204
+ cursor: { mode: 'compact', maxWords: 1500, maxSections: 5, includeHandoff: true, includeRecommendations: false },
205
+ copilot: { mode: 'compact', maxWords: 1000, maxSections: 4, includeHandoff: true, includeRecommendations: false },
206
+ 'claude-code': { mode: 'full', maxWords: 4000, maxSections: 8, includeHandoff: true, includeRecommendations: true },
207
+ 'opencode': { mode: 'full', maxWords: 3000, maxSections: 7, includeHandoff: true, includeRecommendations: true },
208
+ windsurf: { mode: 'compact', maxWords: 2000, maxSections: 5, includeHandoff: true, includeRecommendations: false },
209
+ aider: { mode: 'compact', maxWords: 1500, maxSections: 5, includeHandoff: true, includeRecommendations: false },
210
+ };
211
+ const opts = profiles[tool] || profiles['opencode'];
212
+ return compressContext({ project, ...opts });
213
+ }
214
+ function formatCompressedContext(ctx) {
215
+ const lines = [];
216
+ lines.push(`## Context (${ctx.mode}) — ${ctx.project}`);
217
+ lines.push(`> ${ctx.summary}\n`);
218
+ for (const s of ctx.sections) {
219
+ lines.push(`### ${s.title}`);
220
+ lines.push(s.content);
221
+ lines.push('');
222
+ }
223
+ return lines.join('\n');
224
+ }
225
+ function estimateTokens(text) {
226
+ return Math.ceil(text.split(/\s+/).length * 1.3);
227
+ }
228
+ function getDefaultMaxWords(mode) {
229
+ switch (mode) {
230
+ case 'compact': return 1500;
231
+ case 'full': return 5000;
232
+ case 'topic': return 2000;
233
+ default: return 1500;
234
+ }
235
+ }
236
+ function getDefaultDays(mode) {
237
+ switch (mode) {
238
+ case 'compact': return 7;
239
+ case 'full': return 30;
240
+ case 'topic': return 14;
241
+ default: return 7;
242
+ }
243
+ }
244
+ function getDefaultMaxSections(mode) {
245
+ switch (mode) {
246
+ case 'compact': return 5;
247
+ case 'full': return 10;
248
+ case 'topic': return 6;
249
+ default: return 5;
250
+ }
251
+ }
252
+ function formatAge(dateStr) {
253
+ const ms = Date.now() - new Date(dateStr).getTime();
254
+ const hours = Math.round(ms / 3600000);
255
+ if (hours < 1)
256
+ return 'just now';
257
+ if (hours < 24)
258
+ return `${hours}h`;
259
+ const days = Math.round(hours / 24);
260
+ if (days < 7)
261
+ return `${days}d`;
262
+ const weeks = Math.round(days / 7);
263
+ return `${weeks}w`;
264
+ }
265
+ //# sourceMappingURL=context-compression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-compression.js","sourceRoot":"","sources":["../../../../src/walls/06-memory/stores/context-compression.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ export interface MemoryHealthScore {
2
+ project: string;
3
+ overallScore: number;
4
+ grade: 'A+' | 'A' | 'B+' | 'B' | 'C+' | 'C' | 'D' | 'F';
5
+ breakdown: {
6
+ completeness: number;
7
+ freshness: number;
8
+ quality: number;
9
+ balance: number;
10
+ engagement: number;
11
+ };
12
+ suggestions: string[];
13
+ metrics: {
14
+ totalEvents: number;
15
+ recentEvents7d: number;
16
+ avgImportance: number;
17
+ decisionsLogged: number;
18
+ errorsLogged: number;
19
+ fixesLogged: number;
20
+ verificationsLogged: number;
21
+ patternsLearned: number;
22
+ handoffCurrent: boolean;
23
+ styleProfileExists: boolean;
24
+ uniqueTopics: number;
25
+ daysSinceFirstEvent: number;
26
+ daysSinceLastEvent: number;
27
+ };
28
+ computedAt: string;
29
+ }
30
+ export declare function computeMemoryHealth(project: string): MemoryHealthScore;
31
+ export declare function formatHealthReport(health: MemoryHealthScore): string;
32
+ //# sourceMappingURL=memory-health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-health.d.ts","sourceRoot":"","sources":["../../../../src/walls/06-memory/stores/memory-health.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,SAAS,EAAE;QACT,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,OAAO,CAAC;QACxB,kBAAkB,EAAE,OAAO,CAAC;QAC5B,YAAY,EAAE,MAAM,CAAC;QACrB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,CAqLtE;AAaD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAuCpE"}
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.computeMemoryHealth = computeMemoryHealth;
4
+ exports.formatHealthReport = formatHealthReport;
5
+ const database_1 = require("../database/database");
6
+ function computeMemoryHealth(project) {
7
+ const db = (0, database_1.getDb)();
8
+ const suggestions = [];
9
+ // Metrics
10
+ const totalRow = db.prepare('SELECT COUNT(*) as c FROM memory_events WHERE project = ?').get(project);
11
+ const since7d = new Date(Date.now() - 7 * 86400000).toISOString();
12
+ const since30d = new Date(Date.now() - 30 * 86400000).toISOString();
13
+ const recentRow = db.prepare('SELECT COUNT(*) as c FROM memory_events WHERE project = ? AND created_at >= ?').get(project, since7d);
14
+ const avgRow = db.prepare('SELECT AVG(importance) as a FROM memory_events WHERE project = ?').get(project);
15
+ const decisionsRow = db.prepare("SELECT COUNT(*) as c FROM memory_events WHERE project = ? AND type = 'decision'").get(project);
16
+ const errorsRow = db.prepare("SELECT COUNT(*) as c FROM memory_events WHERE project = ? AND type = 'error'").get(project);
17
+ const fixesRow = db.prepare("SELECT COUNT(*) as c FROM memory_events WHERE project = ? AND type = 'fix'").get(project);
18
+ const verificationsRow = db.prepare("SELECT COUNT(*) as c FROM memory_events WHERE project = ? AND type = 'verification'").get(project);
19
+ const patternsRow = db.prepare('SELECT COUNT(*) as c FROM memory_patterns WHERE project = ?').get(project);
20
+ const topicsRow = db.prepare('SELECT COUNT(DISTINCT topic) as c FROM memory_events WHERE project = ? AND topic IS NOT NULL').get(project);
21
+ const oldestRow = db.prepare('SELECT MIN(created_at) as o FROM memory_events WHERE project = ?').get(project);
22
+ const newestRow = db.prepare('SELECT MAX(created_at) as n FROM memory_events WHERE project = ?').get(project);
23
+ const daysSinceFirst = oldestRow.o ? Math.round((Date.now() - new Date(oldestRow.o).getTime()) / 86400000) : 0;
24
+ const daysSinceLast = newestRow.n ? Math.round((Date.now() - new Date(newestRow.n).getTime()) / 86400000) : 999;
25
+ // Handoff check
26
+ let handoffCurrent = false;
27
+ try {
28
+ const fs = require('fs');
29
+ const path = require('path');
30
+ const cellDir = path.join(process.cwd(), '.cell', 'handoff', 'current.md');
31
+ handoffCurrent = fs.existsSync(cellDir);
32
+ }
33
+ catch { }
34
+ // Style check
35
+ let styleProfileExists = false;
36
+ try {
37
+ const styleRow = db.prepare('SELECT COUNT(*) as c FROM style_profiles WHERE project = ?').get(project);
38
+ styleProfileExists = styleRow.c > 0;
39
+ }
40
+ catch { }
41
+ const metrics = {
42
+ totalEvents: totalRow.c,
43
+ recentEvents7d: recentRow.c,
44
+ avgImportance: Math.round((avgRow.a || 0) * 10) / 10,
45
+ decisionsLogged: decisionsRow.c,
46
+ errorsLogged: errorsRow.c,
47
+ fixesLogged: fixesRow.c,
48
+ verificationsLogged: verificationsRow.c,
49
+ patternsLearned: patternsRow.c,
50
+ handoffCurrent,
51
+ styleProfileExists,
52
+ uniqueTopics: topicsRow.c,
53
+ daysSinceFirstEvent: daysSinceFirst,
54
+ daysSinceLastEvent: daysSinceLast,
55
+ };
56
+ // Completeness score (0-100): do you have all event types?
57
+ let completeness = 0;
58
+ if (metrics.totalEvents > 0)
59
+ completeness += 10;
60
+ if (metrics.decisionsLogged > 0)
61
+ completeness += 20;
62
+ if (metrics.errorsLogged > 0)
63
+ completeness += 15;
64
+ if (metrics.fixesLogged > 0)
65
+ completeness += 15;
66
+ if (metrics.verificationsLogged > 0)
67
+ completeness += 15;
68
+ if (metrics.patternsLearned > 0)
69
+ completeness += 15;
70
+ if (metrics.handoffCurrent)
71
+ completeness += 10;
72
+ if (metrics.decisionsLogged === 0)
73
+ suggestions.push('Log decisions with `cell memory record --type decision`');
74
+ if (metrics.verificationsLogged === 0)
75
+ suggestions.push('Log test runs with `cell memory record --type verification`');
76
+ if (metrics.patternsLearned === 0)
77
+ suggestions.push('Learn patterns with `cell memory record --type pattern`');
78
+ // Freshness score (0-100): how recent is data?
79
+ let freshness = 100;
80
+ if (metrics.daysSinceLastEvent > 1)
81
+ freshness -= 10;
82
+ if (metrics.daysSinceLastEvent > 3)
83
+ freshness -= 20;
84
+ if (metrics.daysSinceLastEvent > 7)
85
+ freshness -= 30;
86
+ if (metrics.daysSinceLastEvent > 14)
87
+ freshness -= 20;
88
+ if (metrics.recentEvents7d === 0)
89
+ freshness -= 20;
90
+ if (metrics.daysSinceLastEvent > 7)
91
+ suggestions.push('Update handoff context — it may be stale');
92
+ // Quality score (0-100): avg importance + error ratio
93
+ let quality = 50;
94
+ if (metrics.avgImportance > 5)
95
+ quality += 20;
96
+ else if (metrics.avgImportance > 3)
97
+ quality += 10;
98
+ if (metrics.avgImportance > 7)
99
+ quality += 10;
100
+ const errorRate = metrics.totalEvents > 0 ? metrics.errorsLogged / metrics.totalEvents : 0;
101
+ if (errorRate < 0.1)
102
+ quality += 20;
103
+ else if (errorRate < 0.2)
104
+ quality += 10;
105
+ else
106
+ quality -= 10;
107
+ if (metrics.fixesLogged > metrics.errorsLogged)
108
+ quality += 10;
109
+ // Balance score (0-100): ratio of different event types
110
+ const typeCounts = {};
111
+ const typeRows = db.prepare('SELECT type, COUNT(*) as c FROM memory_events WHERE project = ? GROUP BY type').all(project);
112
+ for (const r of typeRows)
113
+ typeCounts[r.type] = r.c;
114
+ const types = Object.keys(typeCounts).length;
115
+ let balance = Math.min(types * 12, 60);
116
+ if (types >= 5)
117
+ balance += 20;
118
+ if (types >= 8)
119
+ balance += 20;
120
+ if (types < 3)
121
+ suggestions.push('Record more diverse event types (errors, fixes, decisions)');
122
+ // Engagement score (0-100): consistency of recording
123
+ let engagement = 0;
124
+ if (metrics.totalEvents > 5)
125
+ engagement += 20;
126
+ if (metrics.totalEvents > 20)
127
+ engagement += 20;
128
+ if (metrics.totalEvents > 50)
129
+ engagement += 20;
130
+ if (metrics.recentEvents7d > 0)
131
+ engagement += 20;
132
+ if (metrics.recentEvents7d > 5)
133
+ engagement += 10;
134
+ if (metrics.uniqueTopics > 3)
135
+ engagement += 10;
136
+ if (metrics.totalEvents < 10)
137
+ suggestions.push('Record more events to build memory depth');
138
+ // Overall score
139
+ const overallScore = Math.round(completeness * 0.25 +
140
+ freshness * 0.20 +
141
+ quality * 0.20 +
142
+ balance * 0.15 +
143
+ engagement * 0.20);
144
+ const grade = scoreToGrade(overallScore);
145
+ if (overallScore < 50)
146
+ suggestions.push('Memory system needs attention — run `cell memory health` regularly');
147
+ if (!metrics.handoffCurrent)
148
+ suggestions.push('Create a handoff with `cell handoff --log`');
149
+ if (!metrics.styleProfileExists)
150
+ suggestions.push('Set up your style profile with `cell style update`');
151
+ return {
152
+ project,
153
+ overallScore,
154
+ grade,
155
+ breakdown: {
156
+ completeness,
157
+ freshness,
158
+ quality,
159
+ balance,
160
+ engagement,
161
+ },
162
+ suggestions: [...new Set(suggestions)].slice(0, 8),
163
+ metrics,
164
+ computedAt: new Date().toISOString(),
165
+ };
166
+ }
167
+ function scoreToGrade(score) {
168
+ if (score >= 95)
169
+ return 'A+';
170
+ if (score >= 90)
171
+ return 'A';
172
+ if (score >= 85)
173
+ return 'B+';
174
+ if (score >= 75)
175
+ return 'B';
176
+ if (score >= 70)
177
+ return 'C+';
178
+ if (score >= 60)
179
+ return 'C';
180
+ if (score >= 40)
181
+ return 'D';
182
+ return 'F';
183
+ }
184
+ function formatHealthReport(health) {
185
+ const lines = [];
186
+ lines.push(`## Memory Health — ${health.project}`);
187
+ lines.push(`**Score: ${health.overallScore}/100 (${health.grade})**\n`);
188
+ lines.push('### Breakdown');
189
+ lines.push(`| Dimension | Score |`);
190
+ lines.push(`|-----------|-------|`);
191
+ lines.push(`| Completeness | ${health.breakdown.completeness} |`);
192
+ lines.push(`| Freshness | ${health.breakdown.freshness} |`);
193
+ lines.push(`| Quality | ${health.breakdown.quality} |`);
194
+ lines.push(`| Balance | ${health.breakdown.balance} |`);
195
+ lines.push(`| Engagement | ${health.breakdown.engagement} |`);
196
+ lines.push('');
197
+ lines.push('### Metrics');
198
+ lines.push(`| Metric | Value |`);
199
+ lines.push(`|--------|-------|`);
200
+ lines.push(`| Total events | ${health.metrics.totalEvents} |`);
201
+ lines.push(`| Last 7d events | ${health.metrics.recentEvents7d} |`);
202
+ lines.push(`| Avg importance | ${health.metrics.avgImportance} |`);
203
+ lines.push(`| Decisions | ${health.metrics.decisionsLogged} |`);
204
+ lines.push(`| Errors | ${health.metrics.errorsLogged} |`);
205
+ lines.push(`| Fixes | ${health.metrics.fixesLogged} |`);
206
+ lines.push(`| Verifications | ${health.metrics.verificationsLogged} |`);
207
+ lines.push(`| Patterns | ${health.metrics.patternsLearned} |`);
208
+ lines.push(`| Unique topics | ${health.metrics.uniqueTopics} |`);
209
+ lines.push(`| Handoff current | ${health.metrics.handoffCurrent ? 'yes' : 'no'} |`);
210
+ lines.push(`| Style profile | ${health.metrics.styleProfileExists ? 'yes' : 'no'} |`);
211
+ lines.push(`| Days tracked | ${health.metrics.daysSinceFirstEvent} |`);
212
+ lines.push('');
213
+ if (health.suggestions.length > 0) {
214
+ lines.push('### Suggestions');
215
+ for (const s of health.suggestions)
216
+ lines.push(`- ${s}`);
217
+ lines.push('');
218
+ }
219
+ return lines.join('\n');
220
+ }
221
+ //# sourceMappingURL=memory-health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-health.js","sourceRoot":"","sources":["../../../../src/walls/06-memory/stores/memory-health.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export interface SmartRecommendation {
2
+ id: string;
3
+ category: 'action' | 'focus' | 'improve' | 'learn' | 'prevent' | 'optimize';
4
+ priority: 'high' | 'medium' | 'low';
5
+ title: string;
6
+ description: string;
7
+ rationale: string;
8
+ confidence: number;
9
+ relatedFiles: string[];
10
+ relatedTopics: string[];
11
+ createdAt: string;
12
+ }
13
+ export interface RecommendationContext {
14
+ project: string;
15
+ recentActivity?: boolean;
16
+ errorPatterns?: boolean;
17
+ codeQuality?: boolean;
18
+ workflow?: boolean;
19
+ learning?: boolean;
20
+ }
21
+ export declare function generateSmartRecommendations(project: string, context?: RecommendationContext): SmartRecommendation[];
22
+ export declare function getRecommendationSummary(project: string): {
23
+ total: number;
24
+ high: number;
25
+ medium: number;
26
+ low: number;
27
+ byCategory: Record<string, number>;
28
+ top3: SmartRecommendation[];
29
+ };
30
+ //# sourceMappingURL=smart-recommendations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smart-recommendations.d.ts","sourceRoot":"","sources":["../../../../src/walls/06-memory/stores/smart-recommendations.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;IAC5E,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,qBAAqB,GAC9B,mBAAmB,EAAE,CAoMvB;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,IAAI,EAAE,mBAAmB,EAAE,CAAC;CAC7B,CAaA"}