fivocell 4.7.0 → 4.9.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__/auto-handoff.test.d.ts +2 -0
- package/dist/__tests__/auto-handoff.test.d.ts.map +1 -0
- package/dist/__tests__/auto-handoff.test.js +65 -0
- package/dist/__tests__/auto-handoff.test.js.map +1 -0
- package/dist/__tests__/memory-digest.test.d.ts +2 -0
- package/dist/__tests__/memory-digest.test.d.ts.map +1 -0
- package/dist/__tests__/memory-digest.test.js +20 -0
- package/dist/__tests__/memory-digest.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__/semantic-memory.test.d.ts +2 -0
- package/dist/__tests__/semantic-memory.test.d.ts.map +1 -0
- package/dist/__tests__/semantic-memory.test.js +31 -0
- package/dist/__tests__/semantic-memory.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 +28 -1
- 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/auto-handoff.d.ts +13 -0
- package/dist/walls/06-memory/stores/auto-handoff.d.ts.map +1 -0
- package/dist/walls/06-memory/stores/auto-handoff.js +149 -0
- package/dist/walls/06-memory/stores/auto-handoff.js.map +1 -0
- package/dist/walls/06-memory/stores/memory-digest.d.ts +13 -0
- package/dist/walls/06-memory/stores/memory-digest.d.ts.map +1 -0
- package/dist/walls/06-memory/stores/memory-digest.js +44 -0
- package/dist/walls/06-memory/stores/memory-digest.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/semantic-memory.d.ts +23 -0
- package/dist/walls/06-memory/stores/semantic-memory.d.ts.map +1 -0
- package/dist/walls/06-memory/stores/semantic-memory.js +119 -0
- package/dist/walls/06-memory/stores/semantic-memory.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 +163 -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 +73 -0
- package/dist/walls/07-runtime/daemon/server.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateEnrichedSummary = generateEnrichedSummary;
|
|
4
|
+
exports.saveEnrichedSummary = saveEnrichedSummary;
|
|
5
|
+
exports.getEnrichedSummaries = getEnrichedSummaries;
|
|
6
|
+
const database_1 = require("../database/database");
|
|
7
|
+
const ai_bridge_1 = require("../../03-knowledge/decisions/ai-bridge");
|
|
8
|
+
function generateEnrichedSummary(project, period = 'daily') {
|
|
9
|
+
const db = (0, database_1.getDb)();
|
|
10
|
+
const now = new Date();
|
|
11
|
+
const dateStr = now.toISOString().slice(0, 10);
|
|
12
|
+
const days = period === 'weekly' ? 7 : 1;
|
|
13
|
+
const since = new Date(Date.now() - days * 86400000).toISOString();
|
|
14
|
+
const events = db.prepare(`
|
|
15
|
+
SELECT type, summary, importance, topic, created_at
|
|
16
|
+
FROM memory_events
|
|
17
|
+
WHERE project = ? AND created_at >= ?
|
|
18
|
+
ORDER BY importance DESC, created_at DESC
|
|
19
|
+
`).all(project, since);
|
|
20
|
+
const totalEvents = events.length;
|
|
21
|
+
const avgImportance = totalEvents > 0
|
|
22
|
+
? Math.round(events.reduce((s, e) => s + e.importance, 0) / totalEvents * 10) / 10
|
|
23
|
+
: 0;
|
|
24
|
+
// Collect topics
|
|
25
|
+
const topicMap = new Map();
|
|
26
|
+
for (const e of events) {
|
|
27
|
+
if (e.topic)
|
|
28
|
+
topicMap.set(e.topic, (topicMap.get(e.topic) || 0) + 1);
|
|
29
|
+
}
|
|
30
|
+
const topTopics = [...topicMap.entries()]
|
|
31
|
+
.sort((a, b) => b[1] - a[1])
|
|
32
|
+
.slice(0, 5)
|
|
33
|
+
.map(([t]) => t);
|
|
34
|
+
// Collect decisions
|
|
35
|
+
const keyDecisions = events
|
|
36
|
+
.filter(e => e.type === 'decision')
|
|
37
|
+
.slice(0, 5)
|
|
38
|
+
.map(e => e.summary);
|
|
39
|
+
// Collect errors
|
|
40
|
+
const errors = events
|
|
41
|
+
.filter(e => e.type === 'error')
|
|
42
|
+
.slice(0, 5)
|
|
43
|
+
.map(e => e.summary);
|
|
44
|
+
// By type
|
|
45
|
+
const byType = {};
|
|
46
|
+
for (const e of events)
|
|
47
|
+
byType[e.type] = (byType[e.type] || 0) + 1;
|
|
48
|
+
// Generate AI prompt
|
|
49
|
+
const aiPrompt = buildSummaryPrompt(project, period, dateStr, events, topTopics, keyDecisions, errors);
|
|
50
|
+
return {
|
|
51
|
+
project,
|
|
52
|
+
period,
|
|
53
|
+
date: dateStr,
|
|
54
|
+
totalEvents,
|
|
55
|
+
avgImportance,
|
|
56
|
+
topTopics,
|
|
57
|
+
keyDecisions,
|
|
58
|
+
errors,
|
|
59
|
+
byType,
|
|
60
|
+
aiPrompt,
|
|
61
|
+
saved: false,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function saveEnrichedSummary(summary) {
|
|
65
|
+
const db = (0, database_1.getDb)();
|
|
66
|
+
// Save to memory_summaries table
|
|
67
|
+
db.prepare(`
|
|
68
|
+
INSERT INTO memory_summaries (project, summary_type, period, content, event_count, date, total_events, avg_importance, top_topics, key_decisions, errors, by_type, ai_prompt)
|
|
69
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
70
|
+
`).run(summary.project, `memory-${summary.period}`, summary.period, summary.aiPrompt, summary.totalEvents, summary.date, summary.totalEvents, summary.avgImportance, JSON.stringify(summary.topTopics), JSON.stringify(summary.keyDecisions), JSON.stringify(summary.errors), JSON.stringify(summary.byType), summary.aiPrompt);
|
|
71
|
+
// Save AI insight via ai-bridge
|
|
72
|
+
const insightContent = formatSummaryAsInsight(summary);
|
|
73
|
+
(0, ai_bridge_1.saveAIInsight)(summary.project, `memory-summary-${summary.period}`, insightContent);
|
|
74
|
+
summary.saved = true;
|
|
75
|
+
}
|
|
76
|
+
function getEnrichedSummaries(project, limit = 10) {
|
|
77
|
+
const db = (0, database_1.getDb)();
|
|
78
|
+
return db.prepare(`
|
|
79
|
+
SELECT date, period, total_events as totalEvents, avg_importance as avgImportance
|
|
80
|
+
FROM memory_summaries
|
|
81
|
+
WHERE project = ?
|
|
82
|
+
ORDER BY date DESC
|
|
83
|
+
LIMIT ?
|
|
84
|
+
`).all(project, limit);
|
|
85
|
+
}
|
|
86
|
+
function buildSummaryPrompt(project, period, date, events, topTopics, keyDecisions, errors) {
|
|
87
|
+
const eventSample = events.slice(0, 30).map(e => `- [IMP:${e.importance}] ${e.type}: ${e.summary}${e.topic ? ` (topic: ${e.topic})` : ''}`).join('\n');
|
|
88
|
+
return `Analyze this ${period} memory summary for project "${project}".
|
|
89
|
+
|
|
90
|
+
DATE: ${date}
|
|
91
|
+
TOTAL EVENTS: ${events.length}
|
|
92
|
+
TOP TOPICS: ${topTopics.join(', ') || 'none'}
|
|
93
|
+
|
|
94
|
+
KEY DECISIONS:
|
|
95
|
+
${keyDecisions.map(d => `- ${d}`).join('\n') || '- none'}
|
|
96
|
+
|
|
97
|
+
ERRORS:
|
|
98
|
+
${errors.map(e => `- ${e}`).join('\n') || '- none'}
|
|
99
|
+
|
|
100
|
+
EVENT SAMPLE (by importance):
|
|
101
|
+
${eventSample}
|
|
102
|
+
|
|
103
|
+
TASK:
|
|
104
|
+
1. Summarize what was accomplished this ${period}
|
|
105
|
+
2. Identify patterns in errors or decisions
|
|
106
|
+
3. Suggest focus areas for next ${period}
|
|
107
|
+
4. Rate overall productivity (1-10) with brief reasoning
|
|
108
|
+
5. List any risks or blockers detected
|
|
109
|
+
|
|
110
|
+
Answer in concise markdown. No code snippets.`;
|
|
111
|
+
}
|
|
112
|
+
function formatSummaryAsInsight(summary) {
|
|
113
|
+
const lines = [
|
|
114
|
+
`# ${summary.period.charAt(0).toUpperCase() + summary.period.slice(1)} Memory Summary`,
|
|
115
|
+
`Generated: ${summary.date}`,
|
|
116
|
+
`Project: ${summary.project}`,
|
|
117
|
+
'',
|
|
118
|
+
`## Stats`,
|
|
119
|
+
`- Total events: ${summary.totalEvents}`,
|
|
120
|
+
`- Avg importance: ${summary.avgImportance}`,
|
|
121
|
+
`- Top topics: ${summary.topTopics.join(', ') || 'none'}`,
|
|
122
|
+
'',
|
|
123
|
+
];
|
|
124
|
+
if (summary.keyDecisions.length > 0) {
|
|
125
|
+
lines.push('## Key Decisions');
|
|
126
|
+
for (const d of summary.keyDecisions)
|
|
127
|
+
lines.push(`- ${d}`);
|
|
128
|
+
lines.push('');
|
|
129
|
+
}
|
|
130
|
+
if (summary.errors.length > 0) {
|
|
131
|
+
lines.push('## Errors');
|
|
132
|
+
for (const e of summary.errors)
|
|
133
|
+
lines.push(`- ${e}`);
|
|
134
|
+
lines.push('');
|
|
135
|
+
}
|
|
136
|
+
if (Object.keys(summary.byType).length > 0) {
|
|
137
|
+
lines.push('## By Type');
|
|
138
|
+
for (const [type, count] of Object.entries(summary.byType).sort((a, b) => b[1] - a[1])) {
|
|
139
|
+
lines.push(`- ${type}: ${count}`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return lines.join('\n');
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=ai-memory-summarizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-memory-summarizer.js","sourceRoot":"","sources":["../../../../src/walls/06-memory/stores/ai-memory-summarizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface AutoHandoff {
|
|
2
|
+
title: string;
|
|
3
|
+
summary: string;
|
|
4
|
+
files: string[];
|
|
5
|
+
impact: string;
|
|
6
|
+
verification: string[];
|
|
7
|
+
nextSteps: string[];
|
|
8
|
+
status: 'active' | 'blocked' | 'done';
|
|
9
|
+
markdown: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function generateAutoHandoff(project: string, projectDir: string, days?: number): AutoHandoff;
|
|
12
|
+
export declare function saveAutoHandoff(projectDir: string, handoff: AutoHandoff): string;
|
|
13
|
+
//# sourceMappingURL=auto-handoff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-handoff.d.ts","sourceRoot":"","sources":["../../../../src/walls/06-memory/stores/auto-handoff.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,GAAE,MAAU,GAAG,WAAW,CA4BtG;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,CAMhF"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.generateAutoHandoff = generateAutoHandoff;
|
|
37
|
+
exports.saveAutoHandoff = saveAutoHandoff;
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const database_1 = require("../database/database");
|
|
41
|
+
function generateAutoHandoff(project, projectDir, days = 3) {
|
|
42
|
+
const db = (0, database_1.getDb)();
|
|
43
|
+
const since = new Date(Date.now() - days * 86400000).toISOString();
|
|
44
|
+
const events = db.prepare(`
|
|
45
|
+
SELECT type, topic, summary, files_json, importance, created_at
|
|
46
|
+
FROM memory_events
|
|
47
|
+
WHERE project = ? AND created_at >= ?
|
|
48
|
+
ORDER BY importance DESC, created_at DESC
|
|
49
|
+
LIMIT 100
|
|
50
|
+
`).all(project, since);
|
|
51
|
+
const files = collectFiles(events).slice(0, 12);
|
|
52
|
+
const decisions = events.filter((e) => e.type === 'decision').slice(0, 5).map((e) => e.summary);
|
|
53
|
+
const errors = events.filter((e) => e.type === 'error').slice(0, 5).map((e) => e.summary);
|
|
54
|
+
const fixes = events.filter((e) => e.type === 'fix').slice(0, 5).map((e) => e.summary);
|
|
55
|
+
const verifications = events.filter((e) => e.type === 'verification').slice(0, 5).map((e) => e.summary);
|
|
56
|
+
const topTopic = mostCommon(events.map((e) => e.topic).filter(Boolean)) || 'recent work';
|
|
57
|
+
const title = `Auto handoff — ${topTopic}`;
|
|
58
|
+
const summary = buildSummary(decisions, fixes, errors, events.length);
|
|
59
|
+
const impact = files.length > 0 ? `Primary impact across ${files.length} file(s), especially ${files.slice(0, 3).join(', ')}` : 'Impact not enough data';
|
|
60
|
+
const nextSteps = buildNextSteps(decisions, errors, verifications);
|
|
61
|
+
const status = errors.length > fixes.length ? 'blocked' : (events.length > 0 ? 'active' : 'done');
|
|
62
|
+
const markdown = buildMarkdown({ title, summary, files, impact, verification: verifications, nextSteps, status });
|
|
63
|
+
return { title, summary, files, impact, verification: verifications, nextSteps, status, markdown };
|
|
64
|
+
}
|
|
65
|
+
function saveAutoHandoff(projectDir, handoff) {
|
|
66
|
+
const dir = path.join(projectDir, '.cell', 'handoff');
|
|
67
|
+
if (!fs.existsSync(dir))
|
|
68
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
69
|
+
const file = path.join(dir, 'current.md');
|
|
70
|
+
fs.writeFileSync(file, handoff.markdown, 'utf-8');
|
|
71
|
+
return file;
|
|
72
|
+
}
|
|
73
|
+
function collectFiles(events) {
|
|
74
|
+
const out = [];
|
|
75
|
+
for (const e of events) {
|
|
76
|
+
if (!e.files_json)
|
|
77
|
+
continue;
|
|
78
|
+
try {
|
|
79
|
+
const files = JSON.parse(e.files_json);
|
|
80
|
+
for (const f of files)
|
|
81
|
+
out.push(f);
|
|
82
|
+
}
|
|
83
|
+
catch { }
|
|
84
|
+
}
|
|
85
|
+
return [...new Set(out)];
|
|
86
|
+
}
|
|
87
|
+
function mostCommon(values) {
|
|
88
|
+
if (values.length === 0)
|
|
89
|
+
return null;
|
|
90
|
+
const map = new Map();
|
|
91
|
+
for (const v of values)
|
|
92
|
+
map.set(v, (map.get(v) || 0) + 1);
|
|
93
|
+
return [...map.entries()].sort((a, b) => b[1] - a[1])[0]?.[0] || null;
|
|
94
|
+
}
|
|
95
|
+
function buildSummary(decisions, fixes, errors, totalEvents) {
|
|
96
|
+
if (totalEvents === 0)
|
|
97
|
+
return 'No recent activity detected.';
|
|
98
|
+
const parts = [`${totalEvents} memory events captured recently.`];
|
|
99
|
+
if (decisions.length > 0)
|
|
100
|
+
parts.push(`Key decisions: ${decisions.slice(0, 2).join('; ')}.`);
|
|
101
|
+
if (fixes.length > 0)
|
|
102
|
+
parts.push(`Fixes applied: ${fixes.slice(0, 2).join('; ')}.`);
|
|
103
|
+
if (errors.length > 0)
|
|
104
|
+
parts.push(`Open issues/errors: ${errors.slice(0, 2).join('; ')}.`);
|
|
105
|
+
return parts.join(' ');
|
|
106
|
+
}
|
|
107
|
+
function buildNextSteps(decisions, errors, verifications) {
|
|
108
|
+
const steps = [];
|
|
109
|
+
if (errors.length > 0)
|
|
110
|
+
steps.push('Resolve remaining errors and record fixes');
|
|
111
|
+
if (verifications.length === 0)
|
|
112
|
+
steps.push('Run verification commands and log results');
|
|
113
|
+
if (decisions.length === 0)
|
|
114
|
+
steps.push('Log architectural or product decisions for context continuity');
|
|
115
|
+
if (steps.length === 0)
|
|
116
|
+
steps.push('Continue current implementation and update handoff when scope changes');
|
|
117
|
+
return steps;
|
|
118
|
+
}
|
|
119
|
+
function buildMarkdown(data) {
|
|
120
|
+
const lines = [];
|
|
121
|
+
lines.push(`## ${new Date().toISOString().slice(0, 16).replace('T', ' ')} - ${data.title}`);
|
|
122
|
+
lines.push('');
|
|
123
|
+
lines.push('### Summary');
|
|
124
|
+
lines.push(data.summary);
|
|
125
|
+
lines.push('');
|
|
126
|
+
lines.push('### Files');
|
|
127
|
+
for (const f of data.files)
|
|
128
|
+
lines.push(`- ${f}`);
|
|
129
|
+
lines.push('');
|
|
130
|
+
lines.push('### Impact');
|
|
131
|
+
lines.push(data.impact);
|
|
132
|
+
lines.push('');
|
|
133
|
+
lines.push('### Verification');
|
|
134
|
+
if (data.verification.length === 0)
|
|
135
|
+
lines.push('- none logged');
|
|
136
|
+
else
|
|
137
|
+
for (const v of data.verification)
|
|
138
|
+
lines.push(`- ${v}`);
|
|
139
|
+
lines.push('');
|
|
140
|
+
lines.push('### Status');
|
|
141
|
+
lines.push(`- ${data.status}`);
|
|
142
|
+
lines.push('');
|
|
143
|
+
lines.push('### Next');
|
|
144
|
+
for (const n of data.nextSteps)
|
|
145
|
+
lines.push(`- ${n}`);
|
|
146
|
+
lines.push('');
|
|
147
|
+
return lines.join('\n');
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=auto-handoff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-handoff.js","sourceRoot":"","sources":["../../../../src/walls/06-memory/stores/auto-handoff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface MemoryDigest {
|
|
2
|
+
project: string;
|
|
3
|
+
totalEvents: number;
|
|
4
|
+
last7d: number;
|
|
5
|
+
decisions: number;
|
|
6
|
+
errors: number;
|
|
7
|
+
fixes: number;
|
|
8
|
+
topTopics: string[];
|
|
9
|
+
mostActiveDay: string | null;
|
|
10
|
+
digestLines: string[];
|
|
11
|
+
}
|
|
12
|
+
export declare function generateMemoryDigest(project: string): MemoryDigest;
|
|
13
|
+
//# sourceMappingURL=memory-digest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-digest.d.ts","sourceRoot":"","sources":["../../../../src/walls/06-memory/stores/memory-digest.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAwClE"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateMemoryDigest = generateMemoryDigest;
|
|
4
|
+
const database_1 = require("../database/database");
|
|
5
|
+
function generateMemoryDigest(project) {
|
|
6
|
+
const db = (0, database_1.getDb)();
|
|
7
|
+
const totalRow = db.prepare('SELECT COUNT(*) as c FROM memory_events WHERE project = ?').get(project);
|
|
8
|
+
const since = new Date(Date.now() - 7 * 86400000).toISOString();
|
|
9
|
+
const recentRow = db.prepare('SELECT COUNT(*) as c FROM memory_events WHERE project = ? AND created_at >= ?').get(project, since);
|
|
10
|
+
const typeRows = db.prepare(`
|
|
11
|
+
SELECT type, COUNT(*) as c FROM memory_events WHERE project = ? GROUP BY type
|
|
12
|
+
`).all(project);
|
|
13
|
+
const topicRows = db.prepare(`
|
|
14
|
+
SELECT topic, COUNT(*) as c FROM memory_events
|
|
15
|
+
WHERE project = ? AND topic IS NOT NULL
|
|
16
|
+
GROUP BY topic ORDER BY c DESC LIMIT 5
|
|
17
|
+
`).all(project);
|
|
18
|
+
const dayRow = db.prepare(`
|
|
19
|
+
SELECT date(created_at) as d, COUNT(*) as c FROM memory_events
|
|
20
|
+
WHERE project = ? GROUP BY d ORDER BY c DESC LIMIT 1
|
|
21
|
+
`).get(project);
|
|
22
|
+
const map = {};
|
|
23
|
+
for (const r of typeRows)
|
|
24
|
+
map[r.type] = r.c;
|
|
25
|
+
const digestLines = [
|
|
26
|
+
`Total memories: ${totalRow.c}`,
|
|
27
|
+
`Last 7d: ${recentRow.c}`,
|
|
28
|
+
`Decisions: ${map.decision || 0}`,
|
|
29
|
+
`Errors/Fixes: ${map.error || 0}/${map.fix || 0}`,
|
|
30
|
+
`Top topics: ${topicRows.map((t) => t.topic).join(', ') || 'none'}`,
|
|
31
|
+
];
|
|
32
|
+
return {
|
|
33
|
+
project,
|
|
34
|
+
totalEvents: totalRow.c,
|
|
35
|
+
last7d: recentRow.c,
|
|
36
|
+
decisions: map.decision || 0,
|
|
37
|
+
errors: map.error || 0,
|
|
38
|
+
fixes: map.fix || 0,
|
|
39
|
+
topTopics: topicRows.map((t) => t.topic),
|
|
40
|
+
mostActiveDay: dayRow?.d || null,
|
|
41
|
+
digestLines,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=memory-digest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-digest.js","sourceRoot":"","sources":["../../../../src/walls/06-memory/stores/memory-digest.ts"],"names":[],"mappings":";;AAcA,oDAwCC;AAtDD,mDAA6C;AAc7C,SAAgB,oBAAoB,CAAC,OAAe;IAClD,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,2DAA2D,CAAC,CAAC,GAAG,CAAC,OAAO,CAAkB,CAAC;IACvH,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAChE,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,+EAA+E,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAkB,CAAC;IACnJ,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC;;GAE3B,CAAC,CAAC,GAAG,CAAC,OAAO,CAAuC,CAAC;IACtD,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC;;;;GAI5B,CAAC,CAAC,GAAG,CAAC,OAAO,CAAwC,CAAC;IACvD,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC;;;GAGzB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAyC,CAAC;IAExD,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,QAAQ;QAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAE5C,MAAM,WAAW,GAAG;QAClB,mBAAmB,QAAQ,CAAC,CAAC,EAAE;QAC/B,YAAY,SAAS,CAAC,CAAC,EAAE;QACzB,cAAc,GAAG,CAAC,QAAQ,IAAI,CAAC,EAAE;QACjC,iBAAiB,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE;QACjD,eAAe,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE;KACpE,CAAC;IAEF,OAAO;QACL,OAAO;QACP,WAAW,EAAE,QAAQ,CAAC,CAAC;QACvB,MAAM,EAAE,SAAS,CAAC,CAAC;QACnB,SAAS,EAAE,GAAG,CAAC,QAAQ,IAAI,CAAC;QAC5B,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;QACtB,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;QACnB,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACxC,aAAa,EAAE,MAAM,EAAE,CAAC,IAAI,IAAI;QAChC,WAAW;KACZ,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"}
|