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.
- package/dist/__tests__/ai-memory-summarizer.test.d.ts +2 -0
- package/dist/__tests__/ai-memory-summarizer.test.d.ts.map +1 -0
- package/dist/__tests__/ai-memory-summarizer.test.js +40 -0
- package/dist/__tests__/ai-memory-summarizer.test.js.map +1 -0
- package/dist/__tests__/cross-project-memory.test.d.ts +2 -0
- package/dist/__tests__/cross-project-memory.test.d.ts.map +1 -0
- package/dist/__tests__/cross-project-memory.test.js +105 -0
- package/dist/__tests__/cross-project-memory.test.js.map +1 -0
- package/dist/__tests__/memory-charts.test.d.ts +2 -0
- package/dist/__tests__/memory-charts.test.d.ts.map +1 -0
- package/dist/__tests__/memory-charts.test.js +52 -0
- package/dist/__tests__/memory-charts.test.js.map +1 -0
- package/dist/__tests__/memory-insights.test.d.ts +2 -0
- package/dist/__tests__/memory-insights.test.d.ts.map +1 -0
- package/dist/__tests__/memory-insights.test.js +71 -0
- package/dist/__tests__/memory-insights.test.js.map +1 -0
- package/dist/__tests__/memory-search.test.d.ts +2 -0
- package/dist/__tests__/memory-search.test.d.ts.map +1 -0
- package/dist/__tests__/memory-search.test.js +48 -0
- package/dist/__tests__/memory-search.test.js.map +1 -0
- package/dist/__tests__/proactive-insights.test.d.ts +2 -0
- package/dist/__tests__/proactive-insights.test.d.ts.map +1 -0
- package/dist/__tests__/proactive-insights.test.js +50 -0
- package/dist/__tests__/proactive-insights.test.js.map +1 -0
- package/dist/__tests__/weekly-report.test.d.ts +2 -0
- package/dist/__tests__/weekly-report.test.d.ts.map +1 -0
- package/dist/__tests__/weekly-report.test.js +83 -0
- package/dist/__tests__/weekly-report.test.js.map +1 -0
- package/dist/walls/06-memory/database/database.d.ts.map +1 -1
- package/dist/walls/06-memory/database/database.js +44 -2
- package/dist/walls/06-memory/database/database.js.map +1 -1
- package/dist/walls/06-memory/stores/ai-memory-summarizer.d.ts +22 -0
- package/dist/walls/06-memory/stores/ai-memory-summarizer.d.ts.map +1 -0
- package/dist/walls/06-memory/stores/ai-memory-summarizer.js +144 -0
- package/dist/walls/06-memory/stores/ai-memory-summarizer.js.map +1 -0
- package/dist/walls/06-memory/stores/cross-project-memory.d.ts +53 -0
- package/dist/walls/06-memory/stores/cross-project-memory.d.ts.map +1 -0
- package/dist/walls/06-memory/stores/cross-project-memory.js +200 -0
- package/dist/walls/06-memory/stores/cross-project-memory.js.map +1 -0
- package/dist/walls/06-memory/stores/memory-charts.d.ts +14 -0
- package/dist/walls/06-memory/stores/memory-charts.d.ts.map +1 -0
- package/dist/walls/06-memory/stores/memory-charts.js +128 -0
- package/dist/walls/06-memory/stores/memory-charts.js.map +1 -0
- package/dist/walls/06-memory/stores/memory-insights.d.ts +26 -0
- package/dist/walls/06-memory/stores/memory-insights.d.ts.map +1 -0
- package/dist/walls/06-memory/stores/memory-insights.js +218 -0
- package/dist/walls/06-memory/stores/memory-insights.js.map +1 -0
- package/dist/walls/06-memory/stores/memory-search.d.ts +26 -0
- package/dist/walls/06-memory/stores/memory-search.d.ts.map +1 -0
- package/dist/walls/06-memory/stores/memory-search.js +129 -0
- package/dist/walls/06-memory/stores/memory-search.js.map +1 -0
- package/dist/walls/06-memory/stores/proactive-insights.d.ts +19 -0
- package/dist/walls/06-memory/stores/proactive-insights.d.ts.map +1 -0
- package/dist/walls/06-memory/stores/proactive-insights.js +142 -0
- package/dist/walls/06-memory/stores/proactive-insights.js.map +1 -0
- package/dist/walls/06-memory/stores/weekly-report.d.ts +19 -0
- package/dist/walls/06-memory/stores/weekly-report.d.ts.map +1 -0
- package/dist/walls/06-memory/stores/weekly-report.js +206 -0
- package/dist/walls/06-memory/stores/weekly-report.js.map +1 -0
- package/dist/walls/07-runtime/cli/cli.js +299 -0
- package/dist/walls/07-runtime/cli/cli.js.map +1 -1
- package/dist/walls/07-runtime/daemon/server.d.ts.map +1 -1
- package/dist/walls/07-runtime/daemon/server.js +98 -0
- package/dist/walls/07-runtime/daemon/server.js.map +1 -1
- 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":"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"}
|
|
@@ -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"}
|