super-memory-pro 0.3.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +7 -0
- package/dist/config.js.map +1 -1
- package/dist/db/connection.d.ts.map +1 -1
- package/dist/db/connection.js +86 -6
- package/dist/db/connection.js.map +1 -1
- package/dist/hooks/event-handler.d.ts.map +1 -1
- package/dist/hooks/event-handler.js +9 -0
- package/dist/hooks/event-handler.js.map +1 -1
- package/dist/hooks/message-handler.d.ts.map +1 -1
- package/dist/hooks/message-handler.js +3 -0
- package/dist/hooks/message-handler.js.map +1 -1
- package/dist/hooks/system-transform.d.ts +5 -12
- package/dist/hooks/system-transform.d.ts.map +1 -1
- package/dist/hooks/system-transform.js +43 -24
- package/dist/hooks/system-transform.js.map +1 -1
- package/dist/memory/embeddings.d.ts +22 -0
- package/dist/memory/embeddings.d.ts.map +1 -0
- package/dist/memory/embeddings.js +139 -0
- package/dist/memory/embeddings.js.map +1 -0
- package/dist/memory/extractor.d.ts.map +1 -1
- package/dist/memory/extractor.js +5 -1
- package/dist/memory/extractor.js.map +1 -1
- package/dist/memory/index.d.ts +13 -1
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +7 -1
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/llm-extractor.d.ts +22 -0
- package/dist/memory/llm-extractor.d.ts.map +1 -0
- package/dist/memory/llm-extractor.js +117 -0
- package/dist/memory/llm-extractor.js.map +1 -0
- package/dist/memory/pattern-detector.d.ts +28 -0
- package/dist/memory/pattern-detector.d.ts.map +1 -0
- package/dist/memory/pattern-detector.js +221 -0
- package/dist/memory/pattern-detector.js.map +1 -0
- package/dist/memory/processor.d.ts +7 -1
- package/dist/memory/processor.d.ts.map +1 -1
- package/dist/memory/processor.js +112 -15
- package/dist/memory/processor.js.map +1 -1
- package/dist/memory/project-context.d.ts +24 -0
- package/dist/memory/project-context.d.ts.map +1 -0
- package/dist/memory/project-context.js +186 -0
- package/dist/memory/project-context.js.map +1 -0
- package/dist/memory/suggestions.d.ts +21 -0
- package/dist/memory/suggestions.d.ts.map +1 -0
- package/dist/memory/suggestions.js +205 -0
- package/dist/memory/suggestions.js.map +1 -0
- package/dist/memory/user-profile.d.ts +24 -0
- package/dist/memory/user-profile.d.ts.map +1 -0
- package/dist/memory/user-profile.js +220 -0
- package/dist/memory/user-profile.js.map +1 -0
- package/dist/types.d.ts +8 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -5
- package/dist/db/migrations/migrations/001_initial.sql +0 -102
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
// ─── Pattern Detector ─────────────────────────────────────────────────────
|
|
2
|
+
// Detects patterns across sessions: recurring workflows, repeated errors,
|
|
3
|
+
// consistent preferences, and frequent technologies.
|
|
4
|
+
import { getPool } from '../db/connection.js';
|
|
5
|
+
// ─── Pattern Detection ───────────────────────────────────────────────────
|
|
6
|
+
/**
|
|
7
|
+
* Detect patterns across all sessions by analyzing stored memories.
|
|
8
|
+
*/
|
|
9
|
+
export async function detectPatterns(options = {}) {
|
|
10
|
+
const { limit = 100, projectId, minFrequency = 2 } = options;
|
|
11
|
+
try {
|
|
12
|
+
const pool = getPool();
|
|
13
|
+
// Fetch recent memories for analysis
|
|
14
|
+
const result = await pool.query(`SELECT * FROM memories
|
|
15
|
+
WHERE ($1::text IS NULL OR project_id = $1)
|
|
16
|
+
ORDER BY created_at DESC
|
|
17
|
+
LIMIT $2`, [projectId ?? null, limit]);
|
|
18
|
+
const memories = result.rows;
|
|
19
|
+
// Analyze patterns
|
|
20
|
+
const techPatterns = detectTechnologyPatterns(memories, minFrequency);
|
|
21
|
+
const workflowPatterns = detectWorkflowPatterns(memories, minFrequency);
|
|
22
|
+
const preferencePatterns = detectPreferencePatterns(memories, minFrequency);
|
|
23
|
+
const decisionPatterns = detectDecisionPatterns(memories);
|
|
24
|
+
// Combine all patterns
|
|
25
|
+
const allPatterns = [
|
|
26
|
+
...techPatterns,
|
|
27
|
+
...workflowPatterns,
|
|
28
|
+
...preferencePatterns,
|
|
29
|
+
...decisionPatterns,
|
|
30
|
+
];
|
|
31
|
+
// Sort by frequency and confidence
|
|
32
|
+
allPatterns.sort((a, b) => b.frequency * b.confidence - a.frequency * a.confidence);
|
|
33
|
+
// Generate summary
|
|
34
|
+
const summary = generatePatternSummary(allPatterns);
|
|
35
|
+
return {
|
|
36
|
+
patterns: allPatterns.slice(0, 20),
|
|
37
|
+
topTechnologies: getTopTechnologies(memories),
|
|
38
|
+
recurringWorkflows: workflowPatterns.map((p) => p.pattern).slice(0, 5),
|
|
39
|
+
consistentPreferences: preferencePatterns.map((p) => p.pattern).slice(0, 5),
|
|
40
|
+
recentDecisions: decisionPatterns.map((p) => p.example).slice(0, 5),
|
|
41
|
+
summary,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
console.error('[UltraMemory] Pattern detection failed:', err);
|
|
46
|
+
return {
|
|
47
|
+
patterns: [],
|
|
48
|
+
topTechnologies: [],
|
|
49
|
+
recurringWorkflows: [],
|
|
50
|
+
consistentPreferences: [],
|
|
51
|
+
recentDecisions: [],
|
|
52
|
+
summary: 'Pattern detection unavailable',
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// ─── Technology Patterns ─────────────────────────────────────────────────
|
|
57
|
+
function detectTechnologyPatterns(memories, minFrequency) {
|
|
58
|
+
const techCounts = new Map();
|
|
59
|
+
for (const mem of memories) {
|
|
60
|
+
if (mem.memory_type !== 'tech_stack')
|
|
61
|
+
continue;
|
|
62
|
+
const tech = mem.metadata?.technology;
|
|
63
|
+
if (!tech)
|
|
64
|
+
continue;
|
|
65
|
+
const existing = techCounts.get(tech) || { count: 0, sessions: new Set(), example: mem.content };
|
|
66
|
+
existing.count++;
|
|
67
|
+
if (mem.session_id)
|
|
68
|
+
existing.sessions.add(mem.session_id);
|
|
69
|
+
techCounts.set(tech, existing);
|
|
70
|
+
}
|
|
71
|
+
const patterns = [];
|
|
72
|
+
for (const [tech, data] of techCounts) {
|
|
73
|
+
if (data.count >= minFrequency) {
|
|
74
|
+
patterns.push({
|
|
75
|
+
type: 'technology',
|
|
76
|
+
pattern: tech,
|
|
77
|
+
frequency: data.count,
|
|
78
|
+
sessions: [...data.sessions],
|
|
79
|
+
confidence: Math.min(1, data.count / 10),
|
|
80
|
+
example: data.example,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return patterns;
|
|
85
|
+
}
|
|
86
|
+
// ─── Workflow Patterns ───────────────────────────────────────────────────
|
|
87
|
+
function detectWorkflowPatterns(memories, minFrequency) {
|
|
88
|
+
const workflowCounts = new Map();
|
|
89
|
+
for (const mem of memories) {
|
|
90
|
+
if (mem.memory_type !== 'pattern')
|
|
91
|
+
continue;
|
|
92
|
+
// Normalize workflow pattern
|
|
93
|
+
const normalized = normalizeWorkflow(mem.content);
|
|
94
|
+
if (!normalized || normalized.length < 10)
|
|
95
|
+
continue;
|
|
96
|
+
const existing = workflowCounts.get(normalized) || {
|
|
97
|
+
count: 0,
|
|
98
|
+
sessions: new Set(),
|
|
99
|
+
example: mem.content,
|
|
100
|
+
};
|
|
101
|
+
existing.count++;
|
|
102
|
+
if (mem.session_id)
|
|
103
|
+
existing.sessions.add(mem.session_id);
|
|
104
|
+
workflowCounts.set(normalized, existing);
|
|
105
|
+
}
|
|
106
|
+
const patterns = [];
|
|
107
|
+
for (const [workflow, data] of workflowCounts) {
|
|
108
|
+
if (data.count >= minFrequency) {
|
|
109
|
+
patterns.push({
|
|
110
|
+
type: 'workflow',
|
|
111
|
+
pattern: workflow,
|
|
112
|
+
frequency: data.count,
|
|
113
|
+
sessions: [...data.sessions],
|
|
114
|
+
confidence: Math.min(1, data.count / 8),
|
|
115
|
+
example: data.example,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return patterns;
|
|
120
|
+
}
|
|
121
|
+
// ─── Preference Patterns ─────────────────────────────────────────────────
|
|
122
|
+
function detectPreferencePatterns(memories, minFrequency) {
|
|
123
|
+
const prefCounts = new Map();
|
|
124
|
+
for (const mem of memories) {
|
|
125
|
+
if (mem.memory_type !== 'user_profile')
|
|
126
|
+
continue;
|
|
127
|
+
const normalized = normalizePreference(mem.content);
|
|
128
|
+
if (!normalized || normalized.length < 5)
|
|
129
|
+
continue;
|
|
130
|
+
const existing = prefCounts.get(normalized) || {
|
|
131
|
+
count: 0,
|
|
132
|
+
sessions: new Set(),
|
|
133
|
+
example: mem.content,
|
|
134
|
+
};
|
|
135
|
+
existing.count++;
|
|
136
|
+
if (mem.session_id)
|
|
137
|
+
existing.sessions.add(mem.session_id);
|
|
138
|
+
prefCounts.set(normalized, existing);
|
|
139
|
+
}
|
|
140
|
+
const patterns = [];
|
|
141
|
+
for (const [pref, data] of prefCounts) {
|
|
142
|
+
if (data.count >= minFrequency) {
|
|
143
|
+
patterns.push({
|
|
144
|
+
type: 'preference',
|
|
145
|
+
pattern: pref,
|
|
146
|
+
frequency: data.count,
|
|
147
|
+
sessions: [...data.sessions],
|
|
148
|
+
confidence: Math.min(1, data.count / 6),
|
|
149
|
+
example: data.example,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return patterns;
|
|
154
|
+
}
|
|
155
|
+
// ─── Decision Patterns ───────────────────────────────────────────────────
|
|
156
|
+
function detectDecisionPatterns(memories) {
|
|
157
|
+
const recentDecisions = memories
|
|
158
|
+
.filter((m) => m.memory_type === 'decision')
|
|
159
|
+
.slice(0, 10)
|
|
160
|
+
.map((m) => ({
|
|
161
|
+
type: 'decision',
|
|
162
|
+
pattern: m.content,
|
|
163
|
+
frequency: 1,
|
|
164
|
+
sessions: m.session_id ? [m.session_id] : [],
|
|
165
|
+
confidence: 0.8,
|
|
166
|
+
example: m.content,
|
|
167
|
+
}));
|
|
168
|
+
return recentDecisions;
|
|
169
|
+
}
|
|
170
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────
|
|
171
|
+
function normalizeWorkflow(text) {
|
|
172
|
+
return text
|
|
173
|
+
.toLowerCase()
|
|
174
|
+
.replace(/\b(every\s+time|whenever|always|usually|typically|normally)\b/g, '')
|
|
175
|
+
.replace(/\s+/g, ' ')
|
|
176
|
+
.trim()
|
|
177
|
+
.slice(0, 100);
|
|
178
|
+
}
|
|
179
|
+
function normalizePreference(text) {
|
|
180
|
+
return text
|
|
181
|
+
.toLowerCase()
|
|
182
|
+
.replace(/\b(i\s+prefer|i\s+like|i\s+love|i\s+enjoy|i\s+dislike|i\s+hate)\b/g, '')
|
|
183
|
+
.replace(/\s+/g, ' ')
|
|
184
|
+
.trim()
|
|
185
|
+
.slice(0, 80);
|
|
186
|
+
}
|
|
187
|
+
function getTopTechnologies(memories) {
|
|
188
|
+
const techCounts = new Map();
|
|
189
|
+
for (const mem of memories) {
|
|
190
|
+
if (mem.memory_type !== 'tech_stack')
|
|
191
|
+
continue;
|
|
192
|
+
const tech = mem.metadata?.technology;
|
|
193
|
+
if (tech) {
|
|
194
|
+
techCounts.set(tech, (techCounts.get(tech) || 0) + 1);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return [...techCounts.entries()]
|
|
198
|
+
.map(([name, count]) => ({ name, count }))
|
|
199
|
+
.sort((a, b) => b.count - a.count)
|
|
200
|
+
.slice(0, 10);
|
|
201
|
+
}
|
|
202
|
+
function generatePatternSummary(patterns) {
|
|
203
|
+
if (patterns.length === 0) {
|
|
204
|
+
return 'No significant patterns detected yet.';
|
|
205
|
+
}
|
|
206
|
+
const techs = patterns.filter((p) => p.type === 'technology');
|
|
207
|
+
const workflows = patterns.filter((p) => p.type === 'workflow');
|
|
208
|
+
const prefs = patterns.filter((p) => p.type === 'preference');
|
|
209
|
+
const parts = [];
|
|
210
|
+
if (techs.length > 0) {
|
|
211
|
+
parts.push(`Frequently uses: ${techs.slice(0, 3).map((p) => p.pattern).join(', ')}`);
|
|
212
|
+
}
|
|
213
|
+
if (workflows.length > 0 && workflows[0]) {
|
|
214
|
+
parts.push(`Common workflow: ${workflows[0].pattern}`);
|
|
215
|
+
}
|
|
216
|
+
if (prefs.length > 0) {
|
|
217
|
+
parts.push(`Prefers: ${prefs.slice(0, 2).map((p) => p.pattern).join(', ')}`);
|
|
218
|
+
}
|
|
219
|
+
return parts.join('. ') + '.';
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=pattern-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-detector.js","sourceRoot":"","sources":["../../src/memory/pattern-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import type { MemoryRecord } from '../types.js';
|
|
1
|
+
import type { MemoryRecord, PluginConfig } from '../types.js';
|
|
2
2
|
import { type SearchOptions } from './search.js';
|
|
3
3
|
export interface ProcessMessageMetadata {
|
|
4
4
|
sessionId?: string;
|
|
5
5
|
projectId?: string;
|
|
6
6
|
source?: string;
|
|
7
|
+
config?: PluginConfig;
|
|
7
8
|
}
|
|
8
9
|
/**
|
|
9
10
|
* Process a message: extract patterns → classify → store memories.
|
|
@@ -47,4 +48,9 @@ export interface ContextQueryOptions {
|
|
|
47
48
|
* @returns - Formatted context string (empty if nothing relevant)
|
|
48
49
|
*/
|
|
49
50
|
export declare function getContextForQuery(query: string, options?: ContextQueryOptions): Promise<string>;
|
|
51
|
+
/**
|
|
52
|
+
* Summarize a session and store it as a memory.
|
|
53
|
+
* Uses LLM if available, otherwise creates a basic summary.
|
|
54
|
+
*/
|
|
55
|
+
export declare function summarizeSession(sessionId: string, messages: string[], config?: PluginConfig): Promise<string>;
|
|
50
56
|
//# sourceMappingURL=processor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../../src/memory/processor.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAgB,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../../src/memory/processor.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAgB,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAU5E,OAAO,EAAmD,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAQlG,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,sBAAsB,GAC/B,OAAO,CAAC,YAAY,EAAE,CAAC,CAsKzB;AAID,MAAM,WAAW,mBAAmB;IAClC,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sCAAsC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CAChC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAsBjB;AA8CD;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAAE,EAClB,MAAM,CAAC,EAAE,YAAY,GACpB,OAAO,CAAC,MAAM,CAAC,CA0CjB"}
|
package/dist/memory/processor.js
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
// This is the primary entry point for the memory system.
|
|
4
4
|
import { ensureDbReady } from '../db/connection.js';
|
|
5
5
|
import { extractTechStack, extractDecisions, extractUserPreferences, extractPatterns, classifyContent, } from './extractor.js';
|
|
6
|
-
import {
|
|
6
|
+
import { extractWithLLM, summarizeWithLLM } from './llm-extractor.js';
|
|
7
|
+
import { storeMemory, storeMemories } from './store.js';
|
|
7
8
|
import { searchRelevantMemories, formatMemoriesForPrompt } from './search.js';
|
|
8
9
|
// ─── Constants ─────────────────────────────────────────────────────────────
|
|
9
10
|
const DEFAULT_MAX_INJECTIONS = 5;
|
|
@@ -30,24 +31,44 @@ export async function processMessage(content, metadata) {
|
|
|
30
31
|
if (!content || content.trim().length === 0) {
|
|
31
32
|
return [];
|
|
32
33
|
}
|
|
33
|
-
const { sessionId, projectId, source } = metadata;
|
|
34
|
+
const { sessionId, projectId, source, config } = metadata;
|
|
34
35
|
try {
|
|
35
36
|
// Lazy-init the database (fire-and-forget — errors are caught below).
|
|
36
37
|
await ensureDbReady();
|
|
37
|
-
// Step 1: Run
|
|
38
|
+
// Step 1: Run extractors (LLM + regex fallback)
|
|
39
|
+
let llmContext = null;
|
|
40
|
+
// Try LLM extraction first if enabled
|
|
41
|
+
if (config?.llm.enabled && config.llm.apiKey) {
|
|
42
|
+
try {
|
|
43
|
+
llmContext = await extractWithLLM(content, config);
|
|
44
|
+
console.log(`[UltraMemory] LLM extracted: ${llmContext.technologies.length} techs, ${llmContext.decisions.length} decisions`);
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
console.error('[UltraMemory] LLM extraction failed, falling back to regex:', err);
|
|
48
|
+
llmContext = null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Run regex extractors as fallback/supplement
|
|
38
52
|
const [techStack, decisions, preferences, patterns] = await Promise.all([
|
|
39
53
|
safeExtract(() => extractTechStack(content)),
|
|
40
54
|
safeExtract(() => extractDecisions(content)),
|
|
41
55
|
safeExtract(() => extractUserPreferences(content)),
|
|
42
56
|
safeExtract(() => extractPatterns(content)),
|
|
43
57
|
]);
|
|
58
|
+
// Merge LLM results with regex results
|
|
59
|
+
const allTechs = [...new Set([...techStack, ...(llmContext?.technologies ?? [])])];
|
|
60
|
+
const allDecisions = [
|
|
61
|
+
...decisions,
|
|
62
|
+
...(llmContext?.decisions ?? []),
|
|
63
|
+
];
|
|
64
|
+
const allPreferences = [...new Set([...preferences, ...(llmContext?.preferences ?? [])])];
|
|
44
65
|
// Step 2: Classify content
|
|
45
66
|
const memoryType = classifyContent(content);
|
|
46
67
|
// Step 3: Build memory payloads
|
|
47
68
|
const memoryPayloads = [];
|
|
48
69
|
// 3a. Tech stack
|
|
49
|
-
if (
|
|
50
|
-
for (const tech of
|
|
70
|
+
if (allTechs.length > 0) {
|
|
71
|
+
for (const tech of allTechs) {
|
|
51
72
|
memoryPayloads.push({
|
|
52
73
|
memory_type: 'tech_stack',
|
|
53
74
|
project_id: projectId ?? null,
|
|
@@ -56,12 +77,12 @@ export async function processMessage(content, metadata) {
|
|
|
56
77
|
content: `Project uses ${tech}`,
|
|
57
78
|
importance: 4,
|
|
58
79
|
source: source ?? 'processor',
|
|
59
|
-
metadata: { technology: tech, extracted: true },
|
|
80
|
+
metadata: { technology: tech, extracted: true, llm: llmContext !== null },
|
|
60
81
|
});
|
|
61
82
|
}
|
|
62
83
|
}
|
|
63
84
|
// 3b. Decisions
|
|
64
|
-
for (const d of
|
|
85
|
+
for (const d of allDecisions) {
|
|
65
86
|
memoryPayloads.push({
|
|
66
87
|
memory_type: 'decision',
|
|
67
88
|
project_id: projectId ?? null,
|
|
@@ -70,11 +91,11 @@ export async function processMessage(content, metadata) {
|
|
|
70
91
|
content: d.decision,
|
|
71
92
|
importance: 4,
|
|
72
93
|
source: source ?? 'processor',
|
|
73
|
-
metadata: { context: d.context, extracted: true },
|
|
94
|
+
metadata: { context: d.context, extracted: true, llm: llmContext !== null },
|
|
74
95
|
});
|
|
75
96
|
}
|
|
76
97
|
// 3c. Preferences
|
|
77
|
-
for (const pref of
|
|
98
|
+
for (const pref of allPreferences) {
|
|
78
99
|
memoryPayloads.push({
|
|
79
100
|
memory_type: 'user_profile',
|
|
80
101
|
project_id: projectId ?? null,
|
|
@@ -83,7 +104,7 @@ export async function processMessage(content, metadata) {
|
|
|
83
104
|
content: pref,
|
|
84
105
|
importance: 3,
|
|
85
106
|
source: source ?? 'processor',
|
|
86
|
-
metadata: { extracted: true },
|
|
107
|
+
metadata: { extracted: true, llm: llmContext !== null },
|
|
87
108
|
});
|
|
88
109
|
}
|
|
89
110
|
// 3d. Patterns
|
|
@@ -99,7 +120,37 @@ export async function processMessage(content, metadata) {
|
|
|
99
120
|
metadata: { extracted: true },
|
|
100
121
|
});
|
|
101
122
|
}
|
|
102
|
-
// 3e.
|
|
123
|
+
// 3e. Project context from LLM
|
|
124
|
+
if (llmContext?.projectContext && llmContext.projectContext.length > 0) {
|
|
125
|
+
for (const ctx of llmContext.projectContext) {
|
|
126
|
+
memoryPayloads.push({
|
|
127
|
+
memory_type: 'project_context',
|
|
128
|
+
project_id: projectId ?? null,
|
|
129
|
+
session_id: sessionId ?? null,
|
|
130
|
+
key: `context:${normalizeKeyFragment(ctx)}`,
|
|
131
|
+
content: ctx,
|
|
132
|
+
importance: 3,
|
|
133
|
+
source: source ?? 'processor',
|
|
134
|
+
metadata: { extracted: true, llm: true },
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// 3f. Key facts from LLM
|
|
139
|
+
if (llmContext?.keyFacts && llmContext.keyFacts.length > 0) {
|
|
140
|
+
for (const fact of llmContext.keyFacts) {
|
|
141
|
+
memoryPayloads.push({
|
|
142
|
+
memory_type: 'explicit',
|
|
143
|
+
project_id: projectId ?? null,
|
|
144
|
+
session_id: sessionId ?? null,
|
|
145
|
+
key: `fact:${normalizeKeyFragment(fact)}`,
|
|
146
|
+
content: fact,
|
|
147
|
+
importance: 3,
|
|
148
|
+
source: source ?? 'processor',
|
|
149
|
+
metadata: { extracted: true, llm: true },
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// 3g. Classified content — store the whole message
|
|
103
154
|
if (content.trim().length > 10) {
|
|
104
155
|
memoryPayloads.push({
|
|
105
156
|
memory_type: memoryType,
|
|
@@ -107,14 +158,15 @@ export async function processMessage(content, metadata) {
|
|
|
107
158
|
session_id: sessionId ?? null,
|
|
108
159
|
key: `msg:${memoryType}:${createContentHash(content)}`,
|
|
109
160
|
content: content.trim(),
|
|
110
|
-
importance:
|
|
161
|
+
importance: 2,
|
|
111
162
|
source: source ?? 'processor',
|
|
112
163
|
metadata: {
|
|
113
164
|
classified_as: memoryType,
|
|
114
|
-
tech_stack:
|
|
115
|
-
decisions_count:
|
|
116
|
-
preferences_count:
|
|
165
|
+
tech_stack: allTechs,
|
|
166
|
+
decisions_count: allDecisions.length,
|
|
167
|
+
preferences_count: allPreferences.length,
|
|
117
168
|
patterns_count: patterns.length,
|
|
169
|
+
llm_used: llmContext !== null,
|
|
118
170
|
},
|
|
119
171
|
});
|
|
120
172
|
}
|
|
@@ -199,4 +251,49 @@ function normalizeKeyFragment(text) {
|
|
|
199
251
|
.replace(/^_+|_+$/g, '')
|
|
200
252
|
.slice(0, 60);
|
|
201
253
|
}
|
|
254
|
+
// ─── Session Summarization ───────────────────────────────────────────────
|
|
255
|
+
/**
|
|
256
|
+
* Summarize a session and store it as a memory.
|
|
257
|
+
* Uses LLM if available, otherwise creates a basic summary.
|
|
258
|
+
*/
|
|
259
|
+
export async function summarizeSession(sessionId, messages, config) {
|
|
260
|
+
if (!messages.length) {
|
|
261
|
+
return '';
|
|
262
|
+
}
|
|
263
|
+
let summary = '';
|
|
264
|
+
// Try LLM summarization if enabled
|
|
265
|
+
if (config?.llm.enabled && config.llm.apiKey && config.llm.summarizeSessions) {
|
|
266
|
+
try {
|
|
267
|
+
summary = await summarizeWithLLM(messages, config);
|
|
268
|
+
console.log(`[UltraMemory] LLM generated summary for session ${sessionId}`);
|
|
269
|
+
}
|
|
270
|
+
catch (err) {
|
|
271
|
+
console.error('[UltraMemory] LLM summarization failed:', err);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
// Fallback: create basic summary from message count
|
|
275
|
+
if (!summary) {
|
|
276
|
+
summary = `Session with ${messages.length} messages`;
|
|
277
|
+
}
|
|
278
|
+
// Store summary as session memory
|
|
279
|
+
try {
|
|
280
|
+
await storeMemory({
|
|
281
|
+
memory_type: 'session',
|
|
282
|
+
key: `session:${sessionId}:summary`,
|
|
283
|
+
content: summary,
|
|
284
|
+
importance: 4,
|
|
285
|
+
source: 'processor',
|
|
286
|
+
metadata: {
|
|
287
|
+
sessionId,
|
|
288
|
+
messageCount: messages.length,
|
|
289
|
+
llmSummarized: config?.llm.enabled && config.llm.apiKey ? true : false,
|
|
290
|
+
},
|
|
291
|
+
});
|
|
292
|
+
console.log(`[UltraMemory] Session ${sessionId} summary stored`);
|
|
293
|
+
}
|
|
294
|
+
catch (err) {
|
|
295
|
+
console.error(`[UltraMemory] Failed to store session summary:`, err);
|
|
296
|
+
}
|
|
297
|
+
return summary;
|
|
298
|
+
}
|
|
202
299
|
//# sourceMappingURL=processor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processor.js","sourceRoot":"","sources":["../../src/memory/processor.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,8DAA8D;AAC9D,yDAAyD;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,eAAe,GAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"processor.js","sourceRoot":"","sources":["../../src/memory/processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface ProjectContext {
|
|
2
|
+
name: string;
|
|
3
|
+
techStack: string[];
|
|
4
|
+
architecture: string;
|
|
5
|
+
conventions: string[];
|
|
6
|
+
recentChanges: string[];
|
|
7
|
+
activeBranches: string[];
|
|
8
|
+
lastUpdated: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ProjectInsight {
|
|
11
|
+
category: string;
|
|
12
|
+
insight: string;
|
|
13
|
+
confidence: number;
|
|
14
|
+
recommendations: string[];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Build or update project context from stored memories and project info.
|
|
18
|
+
*/
|
|
19
|
+
export declare function buildProjectContext(projectId: string): Promise<ProjectContext>;
|
|
20
|
+
/**
|
|
21
|
+
* Get project insights with recommendations.
|
|
22
|
+
*/
|
|
23
|
+
export declare function getProjectInsights(projectId: string): Promise<ProjectInsight[]>;
|
|
24
|
+
//# sourceMappingURL=project-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-context.d.ts","sourceRoot":"","sources":["../../src/memory/project-context.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAID;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC,CAuCzB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,EAAE,CAAC,CA+D3B"}
|