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,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":"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"}
|
|
@@ -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"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
// ─── Workflow Suggestions Module ──────────────────────────────────────────
|
|
2
|
+
// Generates contextual workflow suggestions based on detected patterns,
|
|
3
|
+
// user profile, and project context.
|
|
4
|
+
import { detectPatterns } from './pattern-detector.js';
|
|
5
|
+
import { buildUserProfile } from './user-profile.js';
|
|
6
|
+
import { buildProjectContext } from './project-context.js';
|
|
7
|
+
// ─── Suggestion Generation ───────────────────────────────────────────────
|
|
8
|
+
/**
|
|
9
|
+
* Generate contextual workflow suggestions.
|
|
10
|
+
*/
|
|
11
|
+
export async function getSuggestions(context) {
|
|
12
|
+
try {
|
|
13
|
+
const { projectId, currentMessage } = context;
|
|
14
|
+
// Gather context data
|
|
15
|
+
const [patterns, userProfile, projectContext] = await Promise.all([
|
|
16
|
+
detectPatterns({ projectId }),
|
|
17
|
+
buildUserProfile(projectId),
|
|
18
|
+
projectId ? buildProjectContext(projectId) : null,
|
|
19
|
+
]);
|
|
20
|
+
const suggestions = [];
|
|
21
|
+
// Generate suggestions from patterns
|
|
22
|
+
suggestions.push(...generatePatternSuggestions(patterns.patterns));
|
|
23
|
+
// Generate suggestions from user profile
|
|
24
|
+
suggestions.push(...generateProfileSuggestions(userProfile));
|
|
25
|
+
// Generate suggestions from project context
|
|
26
|
+
if (projectContext) {
|
|
27
|
+
suggestions.push(...generateProjectSuggestions(projectContext));
|
|
28
|
+
}
|
|
29
|
+
// Generate contextual suggestions based on current message
|
|
30
|
+
if (currentMessage) {
|
|
31
|
+
suggestions.push(...generateContextualSuggestions(currentMessage, patterns.patterns));
|
|
32
|
+
}
|
|
33
|
+
// Sort by confidence and return top suggestions
|
|
34
|
+
return suggestions
|
|
35
|
+
.sort((a, b) => b.confidence - a.confidence)
|
|
36
|
+
.slice(0, 10);
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
console.error('[UltraMemory] Failed to generate suggestions:', err);
|
|
40
|
+
return [];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get quick suggestions for a specific context.
|
|
45
|
+
*/
|
|
46
|
+
export async function getQuickSuggestions(projectId) {
|
|
47
|
+
try {
|
|
48
|
+
const patterns = await detectPatterns({ projectId, limit: 50 });
|
|
49
|
+
return generatePatternSuggestions(patterns.patterns).slice(0, 5);
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
console.error('[UltraMemory] Failed to get quick suggestions:', err);
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// ─── Suggestion Generators ──────────────────────────────────────────────
|
|
57
|
+
function generatePatternSuggestions(patterns) {
|
|
58
|
+
const suggestions = [];
|
|
59
|
+
// Workflow suggestions from recurring patterns
|
|
60
|
+
const workflowPatterns = patterns.filter((p) => p.type === 'workflow');
|
|
61
|
+
for (const pattern of workflowPatterns.slice(0, 3)) {
|
|
62
|
+
suggestions.push({
|
|
63
|
+
type: 'workflow',
|
|
64
|
+
message: `Based on your pattern: ${pattern.pattern.slice(0, 80)}`,
|
|
65
|
+
confidence: pattern.confidence * 0.8,
|
|
66
|
+
source: 'pattern-detector',
|
|
67
|
+
actionable: true,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
// Technology suggestions
|
|
71
|
+
const techPatterns = patterns.filter((p) => p.type === 'technology');
|
|
72
|
+
if (techPatterns.length > 0) {
|
|
73
|
+
const topTech = techPatterns[0];
|
|
74
|
+
if (topTech && topTech.frequency > 5) {
|
|
75
|
+
suggestions.push({
|
|
76
|
+
type: 'pattern',
|
|
77
|
+
message: `You frequently use ${topTech.pattern}. Consider creating a template or shortcut.`,
|
|
78
|
+
confidence: 0.7,
|
|
79
|
+
source: 'pattern-detector',
|
|
80
|
+
actionable: true,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Preference suggestions
|
|
85
|
+
const prefPatterns = patterns.filter((p) => p.type === 'preference');
|
|
86
|
+
for (const pattern of prefPatterns.slice(0, 2)) {
|
|
87
|
+
suggestions.push({
|
|
88
|
+
type: 'reminder',
|
|
89
|
+
message: `Your preference: ${pattern.pattern.slice(0, 80)}`,
|
|
90
|
+
confidence: pattern.confidence * 0.6,
|
|
91
|
+
source: 'pattern-detector',
|
|
92
|
+
actionable: false,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
return suggestions;
|
|
96
|
+
}
|
|
97
|
+
function generateProfileSuggestions(profile) {
|
|
98
|
+
const suggestions = [];
|
|
99
|
+
// Language-based suggestions
|
|
100
|
+
if (profile.preferredLanguages.length > 0) {
|
|
101
|
+
const lang = profile.preferredLanguages[0];
|
|
102
|
+
suggestions.push({
|
|
103
|
+
type: 'workflow',
|
|
104
|
+
message: `Using your preferred language: ${lang}`,
|
|
105
|
+
confidence: 0.6,
|
|
106
|
+
source: 'user-profile',
|
|
107
|
+
actionable: false,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
// Coding style suggestions
|
|
111
|
+
if (profile.codingStyle !== 'mixed') {
|
|
112
|
+
suggestions.push({
|
|
113
|
+
type: 'pattern',
|
|
114
|
+
message: `Following your ${profile.codingStyle} coding style`,
|
|
115
|
+
confidence: 0.5,
|
|
116
|
+
source: 'user-profile',
|
|
117
|
+
actionable: false,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
// Framework suggestions
|
|
121
|
+
if (profile.frameworks.length > 0) {
|
|
122
|
+
suggestions.push({
|
|
123
|
+
type: 'tool',
|
|
124
|
+
message: `Known frameworks: ${profile.frameworks.slice(0, 3).join(', ')}`,
|
|
125
|
+
confidence: 0.5,
|
|
126
|
+
source: 'user-profile',
|
|
127
|
+
actionable: false,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
return suggestions;
|
|
131
|
+
}
|
|
132
|
+
function generateProjectSuggestions(context) {
|
|
133
|
+
const suggestions = [];
|
|
134
|
+
// Tech stack suggestions
|
|
135
|
+
if (context.techStack.length > 0) {
|
|
136
|
+
suggestions.push({
|
|
137
|
+
type: 'tool',
|
|
138
|
+
message: `Project tech stack: ${context.techStack.slice(0, 5).join(', ')}`,
|
|
139
|
+
confidence: 0.6,
|
|
140
|
+
source: 'project-context',
|
|
141
|
+
actionable: false,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
// Architecture suggestions
|
|
145
|
+
if (context.architecture !== 'Unknown') {
|
|
146
|
+
suggestions.push({
|
|
147
|
+
type: 'pattern',
|
|
148
|
+
message: `Project architecture: ${context.architecture}`,
|
|
149
|
+
confidence: 0.5,
|
|
150
|
+
source: 'project-context',
|
|
151
|
+
actionable: false,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
// Convention suggestions
|
|
155
|
+
if (context.conventions.length > 0) {
|
|
156
|
+
suggestions.push({
|
|
157
|
+
type: 'reminder',
|
|
158
|
+
message: `Project conventions: ${context.conventions[0]?.slice(0, 60)}`,
|
|
159
|
+
confidence: 0.5,
|
|
160
|
+
source: 'project-context',
|
|
161
|
+
actionable: false,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
return suggestions;
|
|
165
|
+
}
|
|
166
|
+
function generateContextualSuggestions(message, patterns) {
|
|
167
|
+
const suggestions = [];
|
|
168
|
+
const lowerMessage = message.toLowerCase();
|
|
169
|
+
// Check if message mentions a known technology
|
|
170
|
+
const techPatterns = patterns.filter((p) => p.type === 'technology');
|
|
171
|
+
for (const pattern of techPatterns) {
|
|
172
|
+
if (lowerMessage.includes(pattern.pattern.toLowerCase())) {
|
|
173
|
+
suggestions.push({
|
|
174
|
+
type: 'workflow',
|
|
175
|
+
message: `Working with ${pattern.pattern} (used ${pattern.frequency} times before)`,
|
|
176
|
+
confidence: 0.7,
|
|
177
|
+
source: 'contextual',
|
|
178
|
+
actionable: true,
|
|
179
|
+
});
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// Check if message indicates a common task
|
|
184
|
+
const taskIndicators = [
|
|
185
|
+
{ pattern: /\b(?:deploy|deployment|release)\b/i, suggestion: 'Remember to run tests before deploying' },
|
|
186
|
+
{ pattern: /\b(?:test|testing|spec)\b/i, suggestion: 'Consider adding edge case tests' },
|
|
187
|
+
{ pattern: /\b(?:fix|bug|error|issue)\b/i, suggestion: 'Check if this issue exists in other parts of the codebase' },
|
|
188
|
+
{ pattern: /\b(?:refactor|cleanup|clean)\b/i, suggestion: 'Run linter after refactoring' },
|
|
189
|
+
{ pattern: /\b(?:commit|push|merge)\b/i, suggestion: 'Use conventional commit messages' },
|
|
190
|
+
];
|
|
191
|
+
for (const { pattern, suggestion } of taskIndicators) {
|
|
192
|
+
if (pattern.test(message)) {
|
|
193
|
+
suggestions.push({
|
|
194
|
+
type: 'reminder',
|
|
195
|
+
message: suggestion,
|
|
196
|
+
confidence: 0.6,
|
|
197
|
+
source: 'contextual',
|
|
198
|
+
actionable: true,
|
|
199
|
+
});
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return suggestions;
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=suggestions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggestions.js","sourceRoot":"","sources":["../../src/memory/suggestions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface UserProfile {
|
|
2
|
+
preferredLanguages: string[];
|
|
3
|
+
codingStyle: 'functional' | 'oop' | 'procedural' | 'mixed';
|
|
4
|
+
frameworks: string[];
|
|
5
|
+
patterns: string[];
|
|
6
|
+
avoidPatterns: string[];
|
|
7
|
+
experienceLevel: 'beginner' | 'intermediate' | 'expert';
|
|
8
|
+
lastUpdated: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ProfileInsight {
|
|
11
|
+
category: string;
|
|
12
|
+
insight: string;
|
|
13
|
+
confidence: number;
|
|
14
|
+
evidence: string[];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Build or update user profile from stored memories.
|
|
18
|
+
*/
|
|
19
|
+
export declare function buildUserProfile(projectId?: string): Promise<UserProfile>;
|
|
20
|
+
/**
|
|
21
|
+
* Get profile insights with confidence scores.
|
|
22
|
+
*/
|
|
23
|
+
export declare function getProfileInsights(projectId?: string): Promise<ProfileInsight[]>;
|
|
24
|
+
//# sourceMappingURL=user-profile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-profile.d.ts","sourceRoot":"","sources":["../../src/memory/user-profile.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,WAAW;IAC1B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,WAAW,EAAE,YAAY,GAAG,KAAK,GAAG,YAAY,GAAG,OAAO,CAAC;IAC3D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,UAAU,GAAG,cAAc,GAAG,QAAQ,CAAC;IACxD,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,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAID;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC,CAgCtB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,EAAE,CAAC,CAmE3B"}
|