fivocell 4.6.0 → 4.8.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 (65) hide show
  1. package/dist/__tests__/ai-memory-summarizer.test.d.ts +2 -0
  2. package/dist/__tests__/ai-memory-summarizer.test.d.ts.map +1 -0
  3. package/dist/__tests__/ai-memory-summarizer.test.js +40 -0
  4. package/dist/__tests__/ai-memory-summarizer.test.js.map +1 -0
  5. package/dist/__tests__/cross-project-memory.test.d.ts +2 -0
  6. package/dist/__tests__/cross-project-memory.test.d.ts.map +1 -0
  7. package/dist/__tests__/cross-project-memory.test.js +105 -0
  8. package/dist/__tests__/cross-project-memory.test.js.map +1 -0
  9. package/dist/__tests__/memory-charts.test.d.ts +2 -0
  10. package/dist/__tests__/memory-charts.test.d.ts.map +1 -0
  11. package/dist/__tests__/memory-charts.test.js +52 -0
  12. package/dist/__tests__/memory-charts.test.js.map +1 -0
  13. package/dist/__tests__/memory-insights.test.d.ts +2 -0
  14. package/dist/__tests__/memory-insights.test.d.ts.map +1 -0
  15. package/dist/__tests__/memory-insights.test.js +71 -0
  16. package/dist/__tests__/memory-insights.test.js.map +1 -0
  17. package/dist/__tests__/memory-search.test.d.ts +2 -0
  18. package/dist/__tests__/memory-search.test.d.ts.map +1 -0
  19. package/dist/__tests__/memory-search.test.js +48 -0
  20. package/dist/__tests__/memory-search.test.js.map +1 -0
  21. package/dist/__tests__/proactive-insights.test.d.ts +2 -0
  22. package/dist/__tests__/proactive-insights.test.d.ts.map +1 -0
  23. package/dist/__tests__/proactive-insights.test.js +50 -0
  24. package/dist/__tests__/proactive-insights.test.js.map +1 -0
  25. package/dist/__tests__/weekly-report.test.d.ts +2 -0
  26. package/dist/__tests__/weekly-report.test.d.ts.map +1 -0
  27. package/dist/__tests__/weekly-report.test.js +83 -0
  28. package/dist/__tests__/weekly-report.test.js.map +1 -0
  29. package/dist/walls/06-memory/database/database.d.ts.map +1 -1
  30. package/dist/walls/06-memory/database/database.js +44 -2
  31. package/dist/walls/06-memory/database/database.js.map +1 -1
  32. package/dist/walls/06-memory/stores/ai-memory-summarizer.d.ts +22 -0
  33. package/dist/walls/06-memory/stores/ai-memory-summarizer.d.ts.map +1 -0
  34. package/dist/walls/06-memory/stores/ai-memory-summarizer.js +144 -0
  35. package/dist/walls/06-memory/stores/ai-memory-summarizer.js.map +1 -0
  36. package/dist/walls/06-memory/stores/cross-project-memory.d.ts +53 -0
  37. package/dist/walls/06-memory/stores/cross-project-memory.d.ts.map +1 -0
  38. package/dist/walls/06-memory/stores/cross-project-memory.js +200 -0
  39. package/dist/walls/06-memory/stores/cross-project-memory.js.map +1 -0
  40. package/dist/walls/06-memory/stores/memory-charts.d.ts +14 -0
  41. package/dist/walls/06-memory/stores/memory-charts.d.ts.map +1 -0
  42. package/dist/walls/06-memory/stores/memory-charts.js +128 -0
  43. package/dist/walls/06-memory/stores/memory-charts.js.map +1 -0
  44. package/dist/walls/06-memory/stores/memory-insights.d.ts +26 -0
  45. package/dist/walls/06-memory/stores/memory-insights.d.ts.map +1 -0
  46. package/dist/walls/06-memory/stores/memory-insights.js +218 -0
  47. package/dist/walls/06-memory/stores/memory-insights.js.map +1 -0
  48. package/dist/walls/06-memory/stores/memory-search.d.ts +26 -0
  49. package/dist/walls/06-memory/stores/memory-search.d.ts.map +1 -0
  50. package/dist/walls/06-memory/stores/memory-search.js +129 -0
  51. package/dist/walls/06-memory/stores/memory-search.js.map +1 -0
  52. package/dist/walls/06-memory/stores/proactive-insights.d.ts +19 -0
  53. package/dist/walls/06-memory/stores/proactive-insights.d.ts.map +1 -0
  54. package/dist/walls/06-memory/stores/proactive-insights.js +142 -0
  55. package/dist/walls/06-memory/stores/proactive-insights.js.map +1 -0
  56. package/dist/walls/06-memory/stores/weekly-report.d.ts +19 -0
  57. package/dist/walls/06-memory/stores/weekly-report.d.ts.map +1 -0
  58. package/dist/walls/06-memory/stores/weekly-report.js +206 -0
  59. package/dist/walls/06-memory/stores/weekly-report.js.map +1 -0
  60. package/dist/walls/07-runtime/cli/cli.js +299 -0
  61. package/dist/walls/07-runtime/cli/cli.js.map +1 -1
  62. package/dist/walls/07-runtime/daemon/server.d.ts.map +1 -1
  63. package/dist/walls/07-runtime/daemon/server.js +98 -0
  64. package/dist/walls/07-runtime/daemon/server.js.map +1 -1
  65. package/package.json +1 -1
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderActivityChart = renderActivityChart;
4
+ exports.renderTypeDistribution = renderTypeDistribution;
5
+ exports.renderImportanceChart = renderImportanceChart;
6
+ exports.renderTimelineChart = renderTimelineChart;
7
+ exports.renderFullDashboard = renderFullDashboard;
8
+ const database_1 = require("../database/database");
9
+ function renderActivityChart(project, days = 14) {
10
+ const db = (0, database_1.getDb)();
11
+ const since = new Date(Date.now() - days * 86400000).toISOString().slice(0, 10);
12
+ const rows = db.prepare(`
13
+ SELECT date(created_at) as day, COUNT(*) as c
14
+ FROM memory_events
15
+ WHERE project = ? AND date(created_at) >= date(?)
16
+ GROUP BY day ORDER BY day
17
+ `).all(project, since);
18
+ const rowMap = new Map(rows.map(r => [r.day, r.c]));
19
+ const lines = [];
20
+ lines.push(` ── Activity Chart (${days} days) ──`);
21
+ lines.push('');
22
+ const maxCount = Math.max(...rows.map(r => r.c), 1);
23
+ const barWidth = 30;
24
+ for (let i = days - 1; i >= 0; i--) {
25
+ const d = new Date(Date.now() - i * 86400000).toISOString().slice(0, 10);
26
+ const count = rowMap.get(d) || 0;
27
+ const barLen = Math.round((count / maxCount) * barWidth);
28
+ const bar = '█'.repeat(barLen) + '░'.repeat(barWidth - barLen);
29
+ const dayShort = d.slice(5); // MM-DD
30
+ lines.push(` ${dayShort} ${bar} ${count}`);
31
+ }
32
+ lines.push('');
33
+ const total = rows.reduce((s, r) => s + r.c, 0);
34
+ const avg = rows.length > 0 ? Math.round(total / rows.length * 10) / 10 : 0;
35
+ lines.push(` Total: ${total} | Avg/day: ${avg} | Max: ${maxCount}`);
36
+ return lines.join('\n');
37
+ }
38
+ function renderTypeDistribution(project) {
39
+ const db = (0, database_1.getDb)();
40
+ const rows = db.prepare(`
41
+ SELECT type, COUNT(*) as c FROM memory_events
42
+ WHERE project = ?
43
+ GROUP BY type ORDER BY c DESC
44
+ `).all(project);
45
+ const lines = [];
46
+ lines.push(' ── Event Type Distribution ──');
47
+ lines.push('');
48
+ const maxCount = Math.max(...rows.map(r => r.c), 1);
49
+ const barWidth = 25;
50
+ const colors = {
51
+ decision: '🟢', error: '🔴', edit: '🔵', fix: '🟡',
52
+ file_event: '⚪', publish: '🟣', handoff: '🟠', pattern: '⭐',
53
+ verification: '✅', risk: '⚠️', question: '❓', session: '📋',
54
+ branch: '🌿', style: '🎨', ai_work: '🤖',
55
+ };
56
+ for (const row of rows) {
57
+ const barLen = Math.round((row.c / maxCount) * barWidth);
58
+ const bar = '█'.repeat(barLen);
59
+ const icon = colors[row.type] || '📊';
60
+ lines.push(` ${icon} ${row.type.padEnd(14)} ${bar} ${row.c}`);
61
+ }
62
+ lines.push('');
63
+ lines.push(` Total: ${rows.reduce((s, r) => s + r.c, 0)} events`);
64
+ return lines.join('\n');
65
+ }
66
+ function renderImportanceChart(project) {
67
+ const db = (0, database_1.getDb)();
68
+ const rows = db.prepare(`
69
+ SELECT
70
+ CASE
71
+ WHEN importance >= 8 THEN '8-10 (Critical)'
72
+ WHEN importance >= 5 THEN '5-7 (Medium)'
73
+ WHEN importance >= 3 THEN '3-4 (Low)'
74
+ ELSE '1-2 (Minimal)'
75
+ END as tier,
76
+ COUNT(*) as c
77
+ FROM memory_events
78
+ WHERE project = ?
79
+ GROUP BY tier
80
+ ORDER BY MIN(importance) DESC
81
+ `).all(project);
82
+ const lines = [];
83
+ lines.push(' ── Importance Distribution ──');
84
+ lines.push('');
85
+ const maxCount = Math.max(...rows.map(r => r.c), 1);
86
+ const barWidth = 25;
87
+ for (const row of rows) {
88
+ const barLen = Math.round((row.c / maxCount) * barWidth);
89
+ const bar = '█'.repeat(barLen);
90
+ lines.push(` ${row.tier.padEnd(20)} ${bar} ${row.c}`);
91
+ }
92
+ return lines.join('\n');
93
+ }
94
+ function renderTimelineChart(project, days = 7) {
95
+ const db = (0, database_1.getDb)();
96
+ const lines = [];
97
+ lines.push(` ── Hourly Activity (last ${days} days) ──`);
98
+ lines.push('');
99
+ const since = new Date(Date.now() - days * 86400000).toISOString();
100
+ const rows = db.prepare(`
101
+ SELECT CAST(strftime('%H', created_at) AS INTEGER) as hour, COUNT(*) as c
102
+ FROM memory_events
103
+ WHERE project = ? AND created_at >= ?
104
+ GROUP BY hour ORDER BY hour
105
+ `).all(project, since);
106
+ const hourMap = new Map(rows.map(r => [r.hour, r.c]));
107
+ const maxCount = Math.max(...rows.map(r => r.c), 1);
108
+ const barWidth = 25;
109
+ for (let h = 0; h < 24; h++) {
110
+ const count = hourMap.get(h) || 0;
111
+ const barLen = Math.round((count / maxCount) * barWidth);
112
+ const bar = '█'.repeat(barLen);
113
+ const label = h.toString().padStart(2, '0') + ':00';
114
+ lines.push(` ${label} ${bar} ${count}`);
115
+ }
116
+ return lines.join('\n');
117
+ }
118
+ function renderFullDashboard(project) {
119
+ const sections = [
120
+ renderActivityChart(project, 14),
121
+ '',
122
+ renderTypeDistribution(project),
123
+ '',
124
+ renderImportanceChart(project),
125
+ ];
126
+ return sections.join('\n');
127
+ }
128
+ //# sourceMappingURL=memory-charts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-charts.js","sourceRoot":"","sources":["../../../../src/walls/06-memory/stores/memory-charts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface MemoryInsight {
2
+ type: 'trend' | 'risk' | 'pattern' | 'recommendation' | 'milestone';
3
+ severity: 'info' | 'warning' | 'critical';
4
+ title: string;
5
+ description: string;
6
+ evidence: string[];
7
+ confidence: number;
8
+ category: string;
9
+ createdAt: string;
10
+ }
11
+ export interface TrendData {
12
+ period: string;
13
+ eventCount: number;
14
+ avgImportance: number;
15
+ topType: string;
16
+ errorRate: number;
17
+ decisionRate: number;
18
+ }
19
+ export declare function generateMemoryInsights(project: string, days?: number): MemoryInsight[];
20
+ export declare function getInsightSummary(project: string, days?: number): {
21
+ total: number;
22
+ byType: Record<string, number>;
23
+ bySeverity: Record<string, number>;
24
+ topInsights: MemoryInsight[];
25
+ };
26
+ //# sourceMappingURL=memory-insights.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-insights.d.ts","sourceRoot":"","sources":["../../../../src/walls/06-memory/stores/memory-insights.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,gBAAgB,GAAG,WAAW,CAAC;IACpE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,aAAa,EAAE,CAsE1F;AA2JD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,WAAW,EAAE,aAAa,EAAE,CAAC;CAC9B,CAgBA"}
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateMemoryInsights = generateMemoryInsights;
4
+ exports.getInsightSummary = getInsightSummary;
5
+ const database_1 = require("../database/database");
6
+ function generateMemoryInsights(project, days = 30) {
7
+ const db = (0, database_1.getDb)();
8
+ const insights = [];
9
+ const since = new Date(Date.now() - days * 86400000).toISOString();
10
+ // 1. Trend Analysis — is activity increasing or decreasing?
11
+ const trends = analyzeTrends(project, days);
12
+ if (trends.length >= 2) {
13
+ const recent = trends[trends.length - 1];
14
+ const prev = trends[trends.length - 2];
15
+ if (recent.eventCount > prev.eventCount * 1.5) {
16
+ insights.push({
17
+ type: 'trend',
18
+ severity: 'info',
19
+ title: 'Activity spike detected',
20
+ description: `Activity increased ${Math.round((recent.eventCount / prev.eventCount - 1) * 100)}% from ${prev.period} to ${recent.period}`,
21
+ evidence: [`${prev.period}: ${prev.eventCount} events`, `${recent.period}: ${recent.eventCount} events`],
22
+ confidence: 0.8,
23
+ category: 'productivity',
24
+ createdAt: new Date().toISOString(),
25
+ });
26
+ }
27
+ else if (recent.eventCount < prev.eventCount * 0.5 && prev.eventCount > 5) {
28
+ insights.push({
29
+ type: 'trend',
30
+ severity: 'warning',
31
+ title: 'Activity drop detected',
32
+ description: `Activity dropped ${Math.round((1 - recent.eventCount / prev.eventCount) * 100)}% — possible blocker or context switch`,
33
+ evidence: [`${prev.period}: ${prev.eventCount} events`, `${recent.period}: ${recent.eventCount} events`],
34
+ confidence: 0.7,
35
+ category: 'productivity',
36
+ createdAt: new Date().toISOString(),
37
+ });
38
+ }
39
+ }
40
+ // 2. Error Pattern — repeated errors in same area
41
+ const errorPattern = detectErrorPatterns(project, since);
42
+ if (errorPattern)
43
+ insights.push(errorPattern);
44
+ // 3. Decision Velocity — are decisions being made?
45
+ const decisionInsight = analyzeDecisionVelocity(project, since);
46
+ if (decisionInsight)
47
+ insights.push(decisionInsight);
48
+ // 4. File Risk — files with too many events (hotspot)
49
+ const hotspots = detectHotspots(project, since);
50
+ insights.push(...hotspots);
51
+ // 5. Milestone — total events milestone
52
+ const totalRow = db.prepare('SELECT COUNT(*) as c FROM memory_events WHERE project = ?').get(project);
53
+ if (totalRow.c > 0 && totalRow.c % 100 === 0) {
54
+ insights.push({
55
+ type: 'milestone',
56
+ severity: 'info',
57
+ title: `Memory milestone: ${totalRow.c} events`,
58
+ description: `Project "${project}" has accumulated ${totalRow.c} memory events`,
59
+ evidence: [`${totalRow.c} total events`],
60
+ confidence: 1.0,
61
+ category: 'growth',
62
+ createdAt: new Date().toISOString(),
63
+ });
64
+ }
65
+ // 6. Style Consistency — check if verification commands are being used
66
+ const styleInsight = analyzeStyleConsistency(project);
67
+ if (styleInsight)
68
+ insights.push(styleInsight);
69
+ return insights.sort((a, b) => {
70
+ const sevOrder = { critical: 0, warning: 1, info: 2 };
71
+ return sevOrder[a.severity] - sevOrder[b.severity];
72
+ });
73
+ }
74
+ function analyzeTrends(project, days) {
75
+ const db = (0, database_1.getDb)();
76
+ const weeks = Math.ceil(days / 7);
77
+ const trends = [];
78
+ for (let w = weeks - 1; w >= 0; w--) {
79
+ const weekStart = new Date(Date.now() - (w + 1) * 7 * 86400000);
80
+ const weekEnd = new Date(Date.now() - w * 7 * 86400000);
81
+ const startStr = weekStart.toISOString().slice(0, 10);
82
+ const endStr = weekEnd.toISOString().slice(0, 10);
83
+ const row = db.prepare(`
84
+ SELECT COUNT(*) as c, AVG(importance) as avg_imp,
85
+ SUM(CASE WHEN type = 'error' THEN 1 ELSE 0 END) as errors,
86
+ SUM(CASE WHEN type = 'decision' THEN 1 ELSE 0 END) as decisions
87
+ FROM memory_events
88
+ WHERE project = ? AND date(created_at) BETWEEN date(?) AND date(?)
89
+ `).get(project, startStr, endStr);
90
+ const topTypeRow = db.prepare(`
91
+ SELECT type, COUNT(*) as c FROM memory_events
92
+ WHERE project = ? AND date(created_at) BETWEEN date(?) AND date(?)
93
+ GROUP BY type ORDER BY c DESC LIMIT 1
94
+ `).get(project, startStr, endStr);
95
+ trends.push({
96
+ period: `${startStr}_to_${endStr}`,
97
+ eventCount: row.c,
98
+ avgImportance: Math.round((row.avg_imp || 0) * 10) / 10,
99
+ topType: topTypeRow?.type || 'none',
100
+ errorRate: row.c > 0 ? Math.round(row.errors / row.c * 100) : 0,
101
+ decisionRate: row.c > 0 ? Math.round(row.decisions / row.c * 100) : 0,
102
+ });
103
+ }
104
+ return trends;
105
+ }
106
+ function detectErrorPatterns(project, since) {
107
+ const db = (0, database_1.getDb)();
108
+ const errors = db.prepare(`
109
+ SELECT summary, topic, COUNT(*) as c FROM memory_events
110
+ WHERE project = ? AND type = 'error' AND created_at >= ?
111
+ GROUP BY summary HAVING c >= 2
112
+ ORDER BY c DESC LIMIT 5
113
+ `).all(project, since);
114
+ if (errors.length === 0)
115
+ return null;
116
+ return {
117
+ type: 'risk',
118
+ severity: 'warning',
119
+ title: 'Repeated error patterns detected',
120
+ description: `${errors.length} error pattern(s) occurred multiple times — may need systematic fix`,
121
+ evidence: errors.map(e => `${e.c}x: ${e.summary}`),
122
+ confidence: 0.85,
123
+ category: 'quality',
124
+ createdAt: new Date().toISOString(),
125
+ };
126
+ }
127
+ function analyzeDecisionVelocity(project, since) {
128
+ const db = (0, database_1.getDb)();
129
+ const row = db.prepare(`
130
+ SELECT COUNT(*) as c FROM memory_events
131
+ WHERE project = ? AND type = 'decision' AND created_at >= ?
132
+ `).get(project, since);
133
+ const totalRow = db.prepare(`
134
+ SELECT COUNT(*) as c FROM memory_events
135
+ WHERE project = ? AND created_at >= ?
136
+ `).get(project, since);
137
+ if (totalRow.c < 10)
138
+ return null;
139
+ const decisionRate = totalRow.c > 0 ? row.c / totalRow.c : 0;
140
+ if (decisionRate < 0.05 && totalRow.c > 20) {
141
+ return {
142
+ type: 'recommendation',
143
+ severity: 'info',
144
+ title: 'Low decision logging',
145
+ description: `Only ${Math.round(decisionRate * 100)}% of events are decisions — consider logging more decisions for better memory`,
146
+ evidence: [`${row.c} decisions out of ${totalRow.c} events`],
147
+ confidence: 0.6,
148
+ category: 'process',
149
+ createdAt: new Date().toISOString(),
150
+ };
151
+ }
152
+ return null;
153
+ }
154
+ function detectHotspots(project, since) {
155
+ const db = (0, database_1.getDb)();
156
+ const insights = [];
157
+ const hotspots = db.prepare(`
158
+ SELECT files_json, COUNT(*) as c, AVG(importance) as avg_imp
159
+ FROM memory_events
160
+ WHERE project = ? AND files_json IS NOT NULL AND created_at >= ?
161
+ GROUP BY files_json
162
+ HAVING c >= 3
163
+ ORDER BY c DESC LIMIT 3
164
+ `).all(project, since);
165
+ for (const hs of hotspots) {
166
+ try {
167
+ const files = JSON.parse(hs.files_json);
168
+ if (files.length > 0) {
169
+ insights.push({
170
+ type: 'risk',
171
+ severity: hs.avg_imp >= 7 ? 'warning' : 'info',
172
+ title: `Hotspot: ${files[0]}`,
173
+ description: `File touched ${hs.c} times with avg importance ${Math.round(hs.avg_imp * 10) / 10} — may need refactoring`,
174
+ evidence: [`${hs.c} events`, `Avg importance: ${hs.avg_imp}`],
175
+ confidence: 0.7,
176
+ category: 'code-health',
177
+ createdAt: new Date().toISOString(),
178
+ });
179
+ }
180
+ }
181
+ catch { }
182
+ }
183
+ return insights;
184
+ }
185
+ function analyzeStyleConsistency(project) {
186
+ const db = (0, database_1.getDb)();
187
+ const editCount = db.prepare("SELECT COUNT(*) as c FROM memory_events WHERE project = ? AND type = 'edit'").get(project);
188
+ const verificationCount = db.prepare("SELECT COUNT(*) as c FROM memory_events WHERE project = ? AND type = 'verification'").get(project);
189
+ if (editCount.c > 10 && verificationCount.c === 0) {
190
+ return {
191
+ type: 'recommendation',
192
+ severity: 'warning',
193
+ title: 'No verification events logged',
194
+ description: `${editCount.c} edits but no verifications — consider logging test/lint runs`,
195
+ evidence: [`${editCount.c} edits, 0 verifications`],
196
+ confidence: 0.6,
197
+ category: 'quality',
198
+ createdAt: new Date().toISOString(),
199
+ };
200
+ }
201
+ return null;
202
+ }
203
+ function getInsightSummary(project, days = 30) {
204
+ const insights = generateMemoryInsights(project, days);
205
+ const byType = {};
206
+ const bySeverity = {};
207
+ for (const i of insights) {
208
+ byType[i.type] = (byType[i.type] || 0) + 1;
209
+ bySeverity[i.severity] = (bySeverity[i.severity] || 0) + 1;
210
+ }
211
+ return {
212
+ total: insights.length,
213
+ byType,
214
+ bySeverity,
215
+ topInsights: insights.slice(0, 5),
216
+ };
217
+ }
218
+ //# sourceMappingURL=memory-insights.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-insights.js","sourceRoot":"","sources":["../../../../src/walls/06-memory/stores/memory-insights.ts"],"names":[],"mappings":";;AAsBA,wDAsEC;AA2JD,8CAqBC;AA5QD,mDAA6C;AAsB7C,SAAgB,sBAAsB,CAAC,OAAe,EAAE,OAAe,EAAE;IACvE,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAEnE,4DAA4D;IAC5D,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC5C,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACvC,IAAI,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;YAC9C,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,yBAAyB;gBAChC,WAAW,EAAE,sBAAsB,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,IAAI,CAAC,MAAM,OAAO,MAAM,CAAC,MAAM,EAAE;gBACzI,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,SAAS,EAAE,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,UAAU,SAAS,CAAC;gBACxG,UAAU,EAAE,GAAG;gBACf,QAAQ,EAAE,cAAc;gBACxB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,GAAG,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YAC5E,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,SAAS;gBACnB,KAAK,EAAE,wBAAwB;gBAC/B,WAAW,EAAE,oBAAoB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,wCAAwC;gBACpI,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,SAAS,EAAE,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,UAAU,SAAS,CAAC;gBACxG,UAAU,EAAE,GAAG;gBACf,QAAQ,EAAE,cAAc;gBACxB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,kDAAkD;IAClD,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACzD,IAAI,YAAY;QAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAE9C,mDAAmD;IACnD,MAAM,eAAe,GAAG,uBAAuB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAChE,IAAI,eAAe;QAAE,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAEpD,sDAAsD;IACtD,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAChD,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;IAE3B,wCAAwC;IACxC,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,2DAA2D,CAAC,CAAC,GAAG,CAAC,OAAO,CAAkB,CAAC;IACvH,IAAI,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;QAC7C,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,qBAAqB,QAAQ,CAAC,CAAC,SAAS;YAC/C,WAAW,EAAE,YAAY,OAAO,qBAAqB,QAAQ,CAAC,CAAC,gBAAgB;YAC/E,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,eAAe,CAAC;YACxC,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE,QAAQ;YAClB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAED,uEAAuE;IACvE,MAAM,YAAY,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACtD,IAAI,YAAY;QAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAE9C,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC5B,MAAM,QAAQ,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACtD,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,OAAe,EAAE,IAAY;IAClD,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IAClC,MAAM,MAAM,GAAgB,EAAE,CAAC;IAE/B,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAElD,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;KAMtB,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAsE,CAAC;QAEvG,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC;;;;KAI7B,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAA4C,CAAC;QAE7E,MAAM,CAAC,IAAI,CAAC;YACV,MAAM,EAAE,GAAG,QAAQ,OAAO,MAAM,EAAE;YAClC,UAAU,EAAE,GAAG,CAAC,CAAC;YACjB,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE;YACvD,OAAO,EAAE,UAAU,EAAE,IAAI,IAAI,MAAM;YACnC,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/D,YAAY,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SACtE,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAe,EAAE,KAAa;IACzD,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;GAKzB,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAgE,CAAC;IAEtF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,SAAS;QACnB,KAAK,EAAE,kCAAkC;QACzC,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,qEAAqE;QAClG,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;QAClD,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,SAAS;QACnB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAe,EAAE,KAAa;IAC7D,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC;;;GAGtB,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAkB,CAAC;IAExC,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC;;;GAG3B,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAkB,CAAC;IAExC,IAAI,QAAQ,CAAC,CAAC,GAAG,EAAE;QAAE,OAAO,IAAI,CAAC;IAEjC,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7D,IAAI,YAAY,GAAG,IAAI,IAAI,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;QAC3C,OAAO;YACL,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,sBAAsB;YAC7B,WAAW,EAAE,QAAQ,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,+EAA+E;YAClI,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,qBAAqB,QAAQ,CAAC,CAAC,SAAS,CAAC;YAC5D,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE,SAAS;YACnB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,cAAc,CAAC,OAAe,EAAE,KAAa;IACpD,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,MAAM,QAAQ,GAAoB,EAAE,CAAC;IAErC,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;GAO3B,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAA8D,CAAC;IAEpF,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAa,CAAC;YACpD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,EAAE,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;oBAC9C,KAAK,EAAE,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE;oBAC7B,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC,8BAA8B,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,GAAG,EAAE,yBAAyB;oBACxH,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,mBAAmB,EAAE,CAAC,OAAO,EAAE,CAAC;oBAC7D,UAAU,EAAE,GAAG;oBACf,QAAQ,EAAE,aAAa;oBACvB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAe;IAC9C,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAC1B,6EAA6E,CAC9E,CAAC,GAAG,CAAC,OAAO,CAAkB,CAAC;IAEhC,MAAM,iBAAiB,GAAG,EAAE,CAAC,OAAO,CAClC,qFAAqF,CACtF,CAAC,GAAG,CAAC,OAAO,CAAkB,CAAC;IAEhC,IAAI,SAAS,CAAC,CAAC,GAAG,EAAE,IAAI,iBAAiB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO;YACL,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,SAAS;YACnB,KAAK,EAAE,+BAA+B;YACtC,WAAW,EAAE,GAAG,SAAS,CAAC,CAAC,+DAA+D;YAC1F,QAAQ,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,yBAAyB,CAAC;YACnD,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE,SAAS;YACnB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,iBAAiB,CAAC,OAAe,EAAE,OAAe,EAAE;IAMlE,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACvD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,UAAU,GAA2B,EAAE,CAAC;IAE9C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3C,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,MAAM;QACtB,MAAM;QACN,UAAU;QACV,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;KAClC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ export interface SearchResult {
2
+ id: number;
3
+ project: string;
4
+ type: string;
5
+ summary: string;
6
+ topic: string | null;
7
+ importance: number;
8
+ details_json: string | null;
9
+ files_json: string | null;
10
+ created_at: string;
11
+ score: number;
12
+ }
13
+ export interface SearchOptions {
14
+ query?: string;
15
+ project?: string;
16
+ type?: string;
17
+ minImportance?: number;
18
+ maxImportance?: number;
19
+ topic?: string;
20
+ days?: number;
21
+ limit?: number;
22
+ sortBy?: 'relevance' | 'importance' | 'recent';
23
+ }
24
+ export declare function fuzzySearchMemory(options: SearchOptions): SearchResult[];
25
+ export declare function getSearchSuggestions(project: string, partial: string): string[];
26
+ //# sourceMappingURL=memory-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-search.d.ts","sourceRoot":"","sources":["../../../../src/walls/06-memory/stores/memory-search.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,GAAG,YAAY,GAAG,QAAQ,CAAC;CAChD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,YAAY,EAAE,CA8DxE;AAmCD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAqB/E"}
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fuzzySearchMemory = fuzzySearchMemory;
4
+ exports.getSearchSuggestions = getSearchSuggestions;
5
+ const database_1 = require("../database/database");
6
+ function fuzzySearchMemory(options) {
7
+ const db = (0, database_1.getDb)();
8
+ const { query, project, type, minImportance, maxImportance, topic, days, limit = 20, sortBy = 'relevance' } = options;
9
+ let sql = 'SELECT * FROM memory_events WHERE 1=1';
10
+ const params = [];
11
+ if (project) {
12
+ sql += ' AND project = ?';
13
+ params.push(project);
14
+ }
15
+ if (type) {
16
+ sql += ' AND type = ?';
17
+ params.push(type);
18
+ }
19
+ if (minImportance !== undefined) {
20
+ sql += ' AND importance >= ?';
21
+ params.push(minImportance);
22
+ }
23
+ if (maxImportance !== undefined) {
24
+ sql += ' AND importance <= ?';
25
+ params.push(maxImportance);
26
+ }
27
+ if (topic) {
28
+ sql += ' AND topic = ?';
29
+ params.push(topic);
30
+ }
31
+ if (days) {
32
+ const since = new Date(Date.now() - days * 86400000).toISOString();
33
+ sql += ' AND created_at >= ?';
34
+ params.push(since);
35
+ }
36
+ // Text search with LIKE for fuzzy matching
37
+ if (query) {
38
+ const terms = query.toLowerCase().split(/\s+/).filter(Boolean);
39
+ const conditions = terms.map(() => '(LOWER(summary) LIKE ? OR LOWER(details_json) LIKE ? OR LOWER(topic) LIKE ? OR LOWER(files_json) LIKE ?)');
40
+ sql += ` AND (${conditions.join(' OR ')})`;
41
+ for (const term of terms) {
42
+ const like = `%${term}%`;
43
+ params.push(like, like, like, like);
44
+ }
45
+ }
46
+ // Sort
47
+ switch (sortBy) {
48
+ case 'importance':
49
+ sql += ' ORDER BY importance DESC, created_at DESC';
50
+ break;
51
+ case 'recent':
52
+ sql += ' ORDER BY created_at DESC';
53
+ break;
54
+ case 'relevance':
55
+ default:
56
+ if (query) {
57
+ // Boost by importance and match quality
58
+ sql += ' ORDER BY importance DESC, created_at DESC';
59
+ }
60
+ else {
61
+ sql += ' ORDER BY created_at DESC';
62
+ }
63
+ }
64
+ sql += ` LIMIT ?`;
65
+ params.push(limit);
66
+ const rows = db.prepare(sql).all(...params);
67
+ // Calculate relevance score
68
+ if (query && sortBy === 'relevance') {
69
+ const terms = query.toLowerCase().split(/\s+/).filter(Boolean);
70
+ for (const row of rows) {
71
+ row.score = calcRelevanceScore(row, terms);
72
+ }
73
+ rows.sort((a, b) => b.score - a.score);
74
+ }
75
+ return rows;
76
+ }
77
+ function calcRelevanceScore(row, terms) {
78
+ let score = 0;
79
+ const summaryLower = (row.summary || '').toLowerCase();
80
+ const detailsLower = (row.details_json || '').toLowerCase();
81
+ const topicLower = (row.topic || '').toLowerCase();
82
+ const filesLower = (row.files_json || '').toLowerCase();
83
+ for (const term of terms) {
84
+ // Exact match in summary = high score
85
+ if (summaryLower.includes(term))
86
+ score += 30;
87
+ // Match in topic
88
+ if (topicLower.includes(term))
89
+ score += 25;
90
+ // Match in details
91
+ if (detailsLower.includes(term))
92
+ score += 20;
93
+ // Match in files
94
+ if (filesLower.includes(term))
95
+ score += 15;
96
+ }
97
+ // Importance boost
98
+ score += row.importance * 3;
99
+ // Recency boost (last 24h = +20, last 7d = +10)
100
+ const ageHours = (Date.now() - new Date(row.created_at).getTime()) / 3600000;
101
+ if (ageHours < 24)
102
+ score += 20;
103
+ else if (ageHours < 168)
104
+ score += 10;
105
+ // Type boost for important types
106
+ const typeBoost = { decision: 15, error: 12, fix: 14, pattern: 13, product_rule: 16 };
107
+ score += typeBoost[row.type] || 0;
108
+ return score;
109
+ }
110
+ function getSearchSuggestions(project, partial) {
111
+ const db = (0, database_1.getDb)();
112
+ const like = `%${partial.toLowerCase()}%`;
113
+ const rows = db.prepare(`
114
+ SELECT DISTINCT topic FROM memory_events
115
+ WHERE project = ? AND topic IS NOT NULL AND LOWER(topic) LIKE ?
116
+ ORDER BY topic LIMIT 10
117
+ `).all(project, like);
118
+ const summaryRows = db.prepare(`
119
+ SELECT DISTINCT summary FROM memory_events
120
+ WHERE project = ? AND LOWER(summary) LIKE ?
121
+ ORDER BY created_at DESC LIMIT 5
122
+ `).all(project, like);
123
+ const suggestions = [
124
+ ...rows.map(r => r.topic),
125
+ ...summaryRows.map(r => r.summary.slice(0, 60)),
126
+ ];
127
+ return [...new Set(suggestions)].slice(0, 10);
128
+ }
129
+ //# sourceMappingURL=memory-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-search.js","sourceRoot":"","sources":["../../../../src/walls/06-memory/stores/memory-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export interface ProactiveAlert {
2
+ type: 'repeat_mistake' | 'error_spike' | 'stalled_handoff' | 'low_verification' | 'complexity_grow' | 'decision_gap' | 'file_hotspot';
3
+ severity: 'critical' | 'warning' | 'info';
4
+ title: string;
5
+ description: string;
6
+ suggestion: string;
7
+ confidence: number;
8
+ evidence: string[];
9
+ createdAt: string;
10
+ }
11
+ export declare function generateProactiveAlerts(project: string, days?: number): ProactiveAlert[];
12
+ export declare function getAlertSummary(project: string, days?: number): {
13
+ total: number;
14
+ critical: number;
15
+ warnings: number;
16
+ info: number;
17
+ alerts: ProactiveAlert[];
18
+ };
19
+ //# sourceMappingURL=proactive-insights.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proactive-insights.d.ts","sourceRoot":"","sources":["../../../../src/walls/06-memory/stores/proactive-insights.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,gBAAgB,GAAG,aAAa,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,cAAc,GAAG,cAAc,CAAC;IACtI,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,cAAc,EAAE,CA+I5F;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG;IACnE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,EAAE,CAAC;CAC1B,CASA"}