super-memory-pro 0.3.1 → 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/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/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"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
// ─── Project Context Module ───────────────────────────────────────────────
|
|
2
|
+
// Automatic project context detection and maintenance.
|
|
3
|
+
// Tracks tech stack, architecture, conventions, and recent changes.
|
|
4
|
+
import { getPool } from '../db/connection.js';
|
|
5
|
+
// ─── Context Building ────────────────────────────────────────────────────
|
|
6
|
+
/**
|
|
7
|
+
* Build or update project context from stored memories and project info.
|
|
8
|
+
*/
|
|
9
|
+
export async function buildProjectContext(projectId) {
|
|
10
|
+
try {
|
|
11
|
+
const pool = getPool();
|
|
12
|
+
// Fetch project record
|
|
13
|
+
const projectResult = await pool.query('SELECT * FROM projects WHERE id = $1', [projectId]);
|
|
14
|
+
const project = projectResult.rows[0];
|
|
15
|
+
// Fetch project memories
|
|
16
|
+
const memoriesResult = await pool.query(`SELECT * FROM memories
|
|
17
|
+
WHERE project_id = $1
|
|
18
|
+
ORDER BY created_at DESC
|
|
19
|
+
LIMIT 200`, [projectId]);
|
|
20
|
+
const memories = memoriesResult.rows;
|
|
21
|
+
// Build context
|
|
22
|
+
const context = {
|
|
23
|
+
name: project?.name ?? 'Unknown Project',
|
|
24
|
+
techStack: extractProjectTechStack(memories, project ?? null),
|
|
25
|
+
architecture: detectArchitecture(memories),
|
|
26
|
+
conventions: extractConventions(memories),
|
|
27
|
+
recentChanges: extractRecentChanges(memories),
|
|
28
|
+
activeBranches: [], // Would need git integration
|
|
29
|
+
lastUpdated: new Date().toISOString(),
|
|
30
|
+
};
|
|
31
|
+
return context;
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
console.error('[UltraMemory] Failed to build project context:', err);
|
|
35
|
+
return getDefaultContext();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get project insights with recommendations.
|
|
40
|
+
*/
|
|
41
|
+
export async function getProjectInsights(projectId) {
|
|
42
|
+
try {
|
|
43
|
+
const pool = getPool();
|
|
44
|
+
const result = await pool.query(`SELECT * FROM memories
|
|
45
|
+
WHERE project_id = $1
|
|
46
|
+
AND memory_type IN ('tech_stack', 'decision', 'pattern', 'project_context')
|
|
47
|
+
ORDER BY importance DESC, created_at DESC
|
|
48
|
+
LIMIT 100`, [projectId]);
|
|
49
|
+
const memories = result.rows;
|
|
50
|
+
const insights = [];
|
|
51
|
+
// Tech stack analysis
|
|
52
|
+
const techStack = extractProjectTechStack(memories, null);
|
|
53
|
+
if (techStack.length > 0) {
|
|
54
|
+
insights.push({
|
|
55
|
+
category: 'tech_stack',
|
|
56
|
+
insight: `Project uses: ${techStack.join(', ')}`,
|
|
57
|
+
confidence: Math.min(1, techStack.length / 3),
|
|
58
|
+
recommendations: generateTechRecommendations(techStack),
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
// Architecture analysis
|
|
62
|
+
const architecture = detectArchitecture(memories);
|
|
63
|
+
insights.push({
|
|
64
|
+
category: 'architecture',
|
|
65
|
+
insight: `Architecture: ${architecture}`,
|
|
66
|
+
confidence: 0.6,
|
|
67
|
+
recommendations: [],
|
|
68
|
+
});
|
|
69
|
+
// Convention analysis
|
|
70
|
+
const conventions = extractConventions(memories);
|
|
71
|
+
if (conventions.length > 0) {
|
|
72
|
+
insights.push({
|
|
73
|
+
category: 'conventions',
|
|
74
|
+
insight: `Conventions: ${conventions.slice(0, 3).join('; ')}`,
|
|
75
|
+
confidence: Math.min(1, conventions.length / 2),
|
|
76
|
+
recommendations: [],
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
// Decision analysis
|
|
80
|
+
const decisions = memories.filter((m) => m.memory_type === 'decision');
|
|
81
|
+
if (decisions.length > 0) {
|
|
82
|
+
insights.push({
|
|
83
|
+
category: 'decisions',
|
|
84
|
+
insight: `${decisions.length} decisions recorded`,
|
|
85
|
+
confidence: 0.8,
|
|
86
|
+
recommendations: [],
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
return insights;
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
console.error('[UltraMemory] Failed to get project insights:', err);
|
|
93
|
+
return [];
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// ─── Extraction Helpers ──────────────────────────────────────────────────
|
|
97
|
+
function extractProjectTechStack(memories, project) {
|
|
98
|
+
const techSet = new Set();
|
|
99
|
+
// From project record
|
|
100
|
+
if (project?.tech_stack) {
|
|
101
|
+
for (const tech of project.tech_stack) {
|
|
102
|
+
techSet.add(tech);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// From memories
|
|
106
|
+
for (const mem of memories) {
|
|
107
|
+
if (mem.memory_type === 'tech_stack') {
|
|
108
|
+
const tech = mem.metadata?.technology;
|
|
109
|
+
if (tech)
|
|
110
|
+
techSet.add(tech);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return [...techSet].sort();
|
|
114
|
+
}
|
|
115
|
+
function detectArchitecture(memories) {
|
|
116
|
+
const archIndicators = [
|
|
117
|
+
{ pattern: /\b(?:monolith|monolithic)\b/i, arch: 'Monolith' },
|
|
118
|
+
{ pattern: /\b(?:microservice|microservices)\b/i, arch: 'Microservices' },
|
|
119
|
+
{ pattern: /\b(?:serverless|lambda|cloud\s*function)\b/i, arch: 'Serverless' },
|
|
120
|
+
{ pattern: /\b(?:monorepo|mono-repo)\b/i, arch: 'Monorepo' },
|
|
121
|
+
{ pattern: /\b(?:multi[- ]repo|polyrepo)\b/i, arch: 'Multi-repo' },
|
|
122
|
+
{ pattern: /\b(?:event[- ]driven|event\s+driven)\b/i, arch: 'Event-driven' },
|
|
123
|
+
{ pattern: /\b(?:cqrs|event\s+sourcing)\b/i, arch: 'CQRS/Event Sourcing' },
|
|
124
|
+
{ pattern: /\b(?:mvc|MVC)\b/i, arch: 'MVC' },
|
|
125
|
+
];
|
|
126
|
+
for (const mem of memories) {
|
|
127
|
+
for (const { pattern, arch } of archIndicators) {
|
|
128
|
+
if (pattern.test(mem.content)) {
|
|
129
|
+
return arch;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return 'Unknown';
|
|
134
|
+
}
|
|
135
|
+
function extractConventions(memories) {
|
|
136
|
+
const conventions = [];
|
|
137
|
+
const conventionPatterns = [
|
|
138
|
+
/\b(?:convention|conventions|style\s+guide|coding\s+standard)\b/i,
|
|
139
|
+
/\b(?:naming\s+convention|naming\s+pattern)\b/i,
|
|
140
|
+
/\b(?:file\s+structure|directory\s+structure|folder\s+structure)\b/i,
|
|
141
|
+
/\b(?:commit\s+message|commit\s+convention|conventional\s+commits)\b/i,
|
|
142
|
+
];
|
|
143
|
+
for (const mem of memories) {
|
|
144
|
+
if (mem.memory_type === 'pattern' || mem.memory_type === 'project_context') {
|
|
145
|
+
for (const pattern of conventionPatterns) {
|
|
146
|
+
if (pattern.test(mem.content)) {
|
|
147
|
+
conventions.push(mem.content.slice(0, 100));
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return [...new Set(conventions)].slice(0, 10);
|
|
154
|
+
}
|
|
155
|
+
function extractRecentChanges(memories) {
|
|
156
|
+
return memories
|
|
157
|
+
.filter((m) => m.memory_type === 'decision' || m.memory_type === 'project_context')
|
|
158
|
+
.slice(0, 10)
|
|
159
|
+
.map((m) => m.content.slice(0, 100));
|
|
160
|
+
}
|
|
161
|
+
function generateTechRecommendations(techStack) {
|
|
162
|
+
const recommendations = [];
|
|
163
|
+
// Check for common missing tools
|
|
164
|
+
if (techStack.includes('TypeScript') && !techStack.includes('ESLint')) {
|
|
165
|
+
recommendations.push('Consider adding ESLint for code quality');
|
|
166
|
+
}
|
|
167
|
+
if (techStack.includes('React') && !techStack.includes('Testing Library')) {
|
|
168
|
+
recommendations.push('Consider adding Testing Library for component testing');
|
|
169
|
+
}
|
|
170
|
+
if (techStack.includes('Node.js') && !techStack.includes('Docker')) {
|
|
171
|
+
recommendations.push('Consider adding Docker for containerization');
|
|
172
|
+
}
|
|
173
|
+
return recommendations;
|
|
174
|
+
}
|
|
175
|
+
function getDefaultContext() {
|
|
176
|
+
return {
|
|
177
|
+
name: 'Unknown Project',
|
|
178
|
+
techStack: [],
|
|
179
|
+
architecture: 'Unknown',
|
|
180
|
+
conventions: [],
|
|
181
|
+
recentChanges: [],
|
|
182
|
+
activeBranches: [],
|
|
183
|
+
lastUpdated: new Date().toISOString(),
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=project-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-context.js","sourceRoot":"","sources":["../../src/memory/project-context.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,uDAAuD;AACvD,oEAAoE;AAEpE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAsB9C,4EAA4E;AAE5E;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAAiB;IAEjB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QAEvB,uBAAuB;QACvB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,KAAK,CACpC,sCAAsC,EACtC,CAAC,SAAS,CAAC,CACZ,CAAC;QAEF,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEtC,yBAAyB;QACzB,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,KAAK,CACrC;;;iBAGW,EACX,CAAC,SAAS,CAAC,CACZ,CAAC;QAEF,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC;QAErC,gBAAgB;QAChB,MAAM,OAAO,GAAmB;YAC9B,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,iBAAiB;YACxC,SAAS,EAAE,uBAAuB,CAAC,QAAQ,EAAE,OAAO,IAAI,IAAI,CAAC;YAC7D,YAAY,EAAE,kBAAkB,CAAC,QAAQ,CAAC;YAC1C,WAAW,EAAE,kBAAkB,CAAC,QAAQ,CAAC;YACzC,aAAa,EAAE,oBAAoB,CAAC,QAAQ,CAAC;YAC7C,cAAc,EAAE,EAAE,EAAE,6BAA6B;YACjD,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC;QAEF,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAE,GAAG,CAAC,CAAC;QACrE,OAAO,iBAAiB,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,SAAiB;IAEjB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QAEvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAC7B;;;;iBAIW,EACX,CAAC,SAAS,CAAC,CACZ,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;QAC7B,MAAM,QAAQ,GAAqB,EAAE,CAAC;QAEtC,sBAAsB;QACtB,MAAM,SAAS,GAAG,uBAAuB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC1D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC;gBACZ,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,iBAAiB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAChD,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC7C,eAAe,EAAE,2BAA2B,CAAC,SAAS,CAAC;aACxD,CAAC,CAAC;QACL,CAAC;QAED,wBAAwB;QACxB,MAAM,YAAY,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAClD,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,cAAc;YACxB,OAAO,EAAE,iBAAiB,YAAY,EAAE;YACxC,UAAU,EAAE,GAAG;YACf,eAAe,EAAE,EAAE;SACpB,CAAC,CAAC;QAEH,sBAAsB;QACtB,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC;gBACZ,QAAQ,EAAE,aAAa;gBACvB,OAAO,EAAE,gBAAgB,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC7D,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC/C,eAAe,EAAE,EAAE;aACpB,CAAC,CAAC;QACL,CAAC;QAED,oBAAoB;QACpB,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,UAAU,CAAC,CAAC;QACvE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC;gBACZ,QAAQ,EAAE,WAAW;gBACrB,OAAO,EAAE,GAAG,SAAS,CAAC,MAAM,qBAAqB;gBACjD,UAAU,EAAE,GAAG;gBACf,eAAe,EAAE,EAAE;aACpB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,GAAG,CAAC,CAAC;QACpE,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,4EAA4E;AAE5E,SAAS,uBAAuB,CAC9B,QAAwB,EACxB,OAAuB;IAEvB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,sBAAsB;IACtB,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;QACxB,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,WAAW,KAAK,YAAY,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,EAAE,UAAoB,CAAC;YAChD,IAAI,IAAI;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAwB;IAClD,MAAM,cAAc,GAAG;QACrB,EAAE,OAAO,EAAE,8BAA8B,EAAE,IAAI,EAAE,UAAU,EAAE;QAC7D,EAAE,OAAO,EAAE,qCAAqC,EAAE,IAAI,EAAE,eAAe,EAAE;QACzE,EAAE,OAAO,EAAE,6CAA6C,EAAE,IAAI,EAAE,YAAY,EAAE;QAC9E,EAAE,OAAO,EAAE,6BAA6B,EAAE,IAAI,EAAE,UAAU,EAAE;QAC5D,EAAE,OAAO,EAAE,iCAAiC,EAAE,IAAI,EAAE,YAAY,EAAE;QAClE,EAAE,OAAO,EAAE,yCAAyC,EAAE,IAAI,EAAE,cAAc,EAAE;QAC5E,EAAE,OAAO,EAAE,gCAAgC,EAAE,IAAI,EAAE,qBAAqB,EAAE;QAC1E,EAAE,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE;KAC7C,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,cAAc,EAAE,CAAC;YAC/C,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9B,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAwB;IAClD,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,MAAM,kBAAkB,GAAG;QACzB,iEAAiE;QACjE,+CAA+C;QAC/C,oEAAoE;QACpE,sEAAsE;KACvE,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,GAAG,CAAC,WAAW,KAAK,iBAAiB,EAAE,CAAC;YAC3E,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE,CAAC;gBACzC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC9B,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBAC5C,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAwB;IACpD,OAAO,QAAQ;SACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,UAAU,IAAI,CAAC,CAAC,WAAW,KAAK,iBAAiB,CAAC;SAClF,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,2BAA2B,CAAC,SAAmB;IACtD,MAAM,eAAe,GAAa,EAAE,CAAC;IAErC,iCAAiC;IACjC,IAAI,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtE,eAAe,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC1E,eAAe,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnE,eAAe,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,SAAS,EAAE,EAAE;QACb,YAAY,EAAE,SAAS;QACvB,WAAW,EAAE,EAAE;QACf,aAAa,EAAE,EAAE;QACjB,cAAc,EAAE,EAAE;QAClB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface Suggestion {
|
|
2
|
+
type: 'workflow' | 'tool' | 'pattern' | 'optimization' | 'reminder';
|
|
3
|
+
message: string;
|
|
4
|
+
confidence: number;
|
|
5
|
+
source: string;
|
|
6
|
+
actionable: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface SuggestionContext {
|
|
9
|
+
currentMessage?: string;
|
|
10
|
+
sessionId?: string;
|
|
11
|
+
projectId?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Generate contextual workflow suggestions.
|
|
15
|
+
*/
|
|
16
|
+
export declare function getSuggestions(context: SuggestionContext): Promise<Suggestion[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Get quick suggestions for a specific context.
|
|
19
|
+
*/
|
|
20
|
+
export declare function getQuickSuggestions(projectId?: string): Promise<Suggestion[]>;
|
|
21
|
+
//# sourceMappingURL=suggestions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggestions.d.ts","sourceRoot":"","sources":["../../src/memory/suggestions.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,UAAU,CAAC;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,UAAU,EAAE,CAAC,CAqCvB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,EAAE,CAAC,CAQvB"}
|