cmp-memory-system 1.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 +541 -0
- package/dist/analytics/index.d.ts +5 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/index.js +5 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/tracker.d.ts +107 -0
- package/dist/analytics/tracker.d.ts.map +1 -0
- package/dist/analytics/tracker.js +333 -0
- package/dist/analytics/tracker.js.map +1 -0
- package/dist/auto-improve/eslint-generator.d.ts +36 -0
- package/dist/auto-improve/eslint-generator.d.ts.map +1 -0
- package/dist/auto-improve/eslint-generator.js +280 -0
- package/dist/auto-improve/eslint-generator.js.map +1 -0
- package/dist/auto-improve/index.d.ts +6 -0
- package/dist/auto-improve/index.d.ts.map +1 -0
- package/dist/auto-improve/index.js +6 -0
- package/dist/auto-improve/index.js.map +1 -0
- package/dist/auto-improve/pattern-detector.d.ts +92 -0
- package/dist/auto-improve/pattern-detector.d.ts.map +1 -0
- package/dist/auto-improve/pattern-detector.js +231 -0
- package/dist/auto-improve/pattern-detector.js.map +1 -0
- package/dist/cli/index.d.ts +16 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +636 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/dashboard/index.d.ts +6 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +6 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/dashboard/server.d.ts +15 -0
- package/dist/dashboard/server.d.ts.map +1 -0
- package/dist/dashboard/server.js +373 -0
- package/dist/dashboard/server.js.map +1 -0
- package/dist/dashboard/ui.d.ts +9 -0
- package/dist/dashboard/ui.d.ts.map +1 -0
- package/dist/dashboard/ui.js +530 -0
- package/dist/dashboard/ui.js.map +1 -0
- package/dist/db/client.d.ts +66 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +159 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/drizzle-client.d.ts +302 -0
- package/dist/db/drizzle-client.d.ts.map +1 -0
- package/dist/db/drizzle-client.js +404 -0
- package/dist/db/drizzle-client.js.map +1 -0
- package/dist/db/index.d.ts +5 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +5 -0
- package/dist/db/index.js.map +1 -0
- package/dist/feedback/collector.d.ts +74 -0
- package/dist/feedback/collector.d.ts.map +1 -0
- package/dist/feedback/collector.js +231 -0
- package/dist/feedback/collector.js.map +1 -0
- package/dist/feedback/index.d.ts +5 -0
- package/dist/feedback/index.d.ts.map +1 -0
- package/dist/feedback/index.js +5 -0
- package/dist/feedback/index.js.map +1 -0
- package/dist/hooks/index.d.ts +8 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +8 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/memory-checkpoint.d.ts +43 -0
- package/dist/hooks/memory-checkpoint.d.ts.map +1 -0
- package/dist/hooks/memory-checkpoint.js +257 -0
- package/dist/hooks/memory-checkpoint.js.map +1 -0
- package/dist/hooks/post-tool-use.d.ts +61 -0
- package/dist/hooks/post-tool-use.d.ts.map +1 -0
- package/dist/hooks/post-tool-use.js +262 -0
- package/dist/hooks/post-tool-use.js.map +1 -0
- package/dist/hooks/pre-tool-use.d.ts +34 -0
- package/dist/hooks/pre-tool-use.d.ts.map +1 -0
- package/dist/hooks/pre-tool-use.js +358 -0
- package/dist/hooks/pre-tool-use.js.map +1 -0
- package/dist/hooks/session-start.d.ts +38 -0
- package/dist/hooks/session-start.d.ts.map +1 -0
- package/dist/hooks/session-start.js +274 -0
- package/dist/hooks/session-start.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +5 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +5 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +42 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +599 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/registry/embeddings.d.ts +38 -0
- package/dist/registry/embeddings.d.ts.map +1 -0
- package/dist/registry/embeddings.js +110 -0
- package/dist/registry/embeddings.js.map +1 -0
- package/dist/registry/generator.d.ts +41 -0
- package/dist/registry/generator.d.ts.map +1 -0
- package/dist/registry/generator.js +323 -0
- package/dist/registry/generator.js.map +1 -0
- package/dist/registry/index.d.ts +6 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +6 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/services/IdeaCollector.d.ts +103 -0
- package/dist/services/IdeaCollector.d.ts.map +1 -0
- package/dist/services/IdeaCollector.js +371 -0
- package/dist/services/IdeaCollector.js.map +1 -0
- package/dist/services/TaskTracker.d.ts +89 -0
- package/dist/services/TaskTracker.d.ts.map +1 -0
- package/dist/services/TaskTracker.js +324 -0
- package/dist/services/TaskTracker.js.map +1 -0
- package/dist/services/WorkPlanManager.d.ts +107 -0
- package/dist/services/WorkPlanManager.d.ts.map +1 -0
- package/dist/services/WorkPlanManager.js +440 -0
- package/dist/services/WorkPlanManager.js.map +1 -0
- package/dist/services/auto-inject.d.ts +77 -0
- package/dist/services/auto-inject.d.ts.map +1 -0
- package/dist/services/auto-inject.js +289 -0
- package/dist/services/auto-inject.js.map +1 -0
- package/dist/services/auto-tag.d.ts +61 -0
- package/dist/services/auto-tag.d.ts.map +1 -0
- package/dist/services/auto-tag.js +203 -0
- package/dist/services/auto-tag.js.map +1 -0
- package/dist/services/cross-project-sync.d.ts +76 -0
- package/dist/services/cross-project-sync.d.ts.map +1 -0
- package/dist/services/cross-project-sync.js +235 -0
- package/dist/services/cross-project-sync.js.map +1 -0
- package/dist/services/index.d.ts +15 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +18 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/memory-consolidation.d.ts +77 -0
- package/dist/services/memory-consolidation.d.ts.map +1 -0
- package/dist/services/memory-consolidation.js +298 -0
- package/dist/services/memory-consolidation.js.map +1 -0
- package/dist/services/semantic-search.d.ts +93 -0
- package/dist/services/semantic-search.d.ts.map +1 -0
- package/dist/services/semantic-search.js +278 -0
- package/dist/services/semantic-search.js.map +1 -0
- package/dist/services/weekly-digest.d.ts +105 -0
- package/dist/services/weekly-digest.d.ts.map +1 -0
- package/dist/services/weekly-digest.js +292 -0
- package/dist/services/weekly-digest.js.map +1 -0
- package/dist/types/index.d.ts +274 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +84 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/config.d.ts +21 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +89 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/paths.d.ts +28 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +80 -0
- package/dist/utils/paths.js.map +1 -0
- package/package.json +89 -0
- package/templates/memory-config.json +82 -0
- package/templates/memory-config.schema.json +212 -0
- package/templates/settings.json +58 -0
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-Inject Service
|
|
3
|
+
*
|
|
4
|
+
* Automatically injects relevant memories into Claude sessions.
|
|
5
|
+
* - Detects working module from git diff
|
|
6
|
+
* - Finds semantically relevant memories
|
|
7
|
+
* - Formats context for injection
|
|
8
|
+
*/
|
|
9
|
+
import { exec } from 'child_process';
|
|
10
|
+
import { promisify } from 'util';
|
|
11
|
+
const execAsync = promisify(exec);
|
|
12
|
+
// =============================================================================
|
|
13
|
+
// AUTO-INJECT SERVICE
|
|
14
|
+
// =============================================================================
|
|
15
|
+
export class AutoInjectService {
|
|
16
|
+
client;
|
|
17
|
+
searchService;
|
|
18
|
+
config;
|
|
19
|
+
constructor(client, searchService, config) {
|
|
20
|
+
this.client = client;
|
|
21
|
+
this.searchService = searchService;
|
|
22
|
+
this.config = config;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Generate session context for auto-injection
|
|
26
|
+
*/
|
|
27
|
+
async generateSessionContext(projectRoot) {
|
|
28
|
+
// 1. Detect working module from git
|
|
29
|
+
const { module, recentFiles } = await this.detectWorkingModule(projectRoot);
|
|
30
|
+
// 2. Get relevant memories
|
|
31
|
+
const memories = await this.getRelevantMemories(module, recentFiles);
|
|
32
|
+
// 3. Get triggered patterns
|
|
33
|
+
const patterns = await this.getTriggeredPatterns();
|
|
34
|
+
// 4. Get stats
|
|
35
|
+
const stats = await this.getSessionStats(memories.length, patterns.length);
|
|
36
|
+
return {
|
|
37
|
+
system: this.config.system,
|
|
38
|
+
projectName: this.config.projectName,
|
|
39
|
+
detectedModule: module,
|
|
40
|
+
recentFiles: recentFiles.slice(0, 10),
|
|
41
|
+
memories,
|
|
42
|
+
patterns,
|
|
43
|
+
stats,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Format context for Claude injection
|
|
48
|
+
*/
|
|
49
|
+
formatForInjection(context) {
|
|
50
|
+
const lines = [];
|
|
51
|
+
// Header
|
|
52
|
+
lines.push(`# Session Context: ${context.projectName}`);
|
|
53
|
+
lines.push(`System: ${context.system}`);
|
|
54
|
+
lines.push('');
|
|
55
|
+
// Module detection
|
|
56
|
+
if (context.detectedModule) {
|
|
57
|
+
lines.push(`## Working Module: ${context.detectedModule}`);
|
|
58
|
+
lines.push('');
|
|
59
|
+
}
|
|
60
|
+
// Relevant memories
|
|
61
|
+
if (context.memories.length > 0) {
|
|
62
|
+
lines.push('## Relevant Memories');
|
|
63
|
+
lines.push('');
|
|
64
|
+
for (const memory of context.memories) {
|
|
65
|
+
lines.push(`### ${memory.title}`);
|
|
66
|
+
if (memory.relevanceScore) {
|
|
67
|
+
lines.push(`*Relevance: ${Math.round(memory.relevanceScore * 100)}%*`);
|
|
68
|
+
}
|
|
69
|
+
lines.push('');
|
|
70
|
+
lines.push(memory.body);
|
|
71
|
+
lines.push('');
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Triggered patterns
|
|
75
|
+
if (context.patterns.length > 0) {
|
|
76
|
+
lines.push('## Active Patterns (Auto-Improvement Triggered)');
|
|
77
|
+
lines.push('');
|
|
78
|
+
for (const pattern of context.patterns) {
|
|
79
|
+
lines.push(`- **${pattern.patternId}** (${pattern.occurrences}x, ${pattern.severity})`);
|
|
80
|
+
lines.push(` ${pattern.description}`);
|
|
81
|
+
}
|
|
82
|
+
lines.push('');
|
|
83
|
+
}
|
|
84
|
+
// Stats footer
|
|
85
|
+
lines.push('---');
|
|
86
|
+
lines.push(`Loaded ${context.stats.loadedMemories}/${context.stats.totalMemories} memories`);
|
|
87
|
+
if (context.stats.triggeredPatterns > 0) {
|
|
88
|
+
lines.push(`${context.stats.triggeredPatterns} patterns require auto-improvement`);
|
|
89
|
+
}
|
|
90
|
+
return lines.join('\n');
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Quick context for minimal injection
|
|
94
|
+
*/
|
|
95
|
+
async getQuickContext(projectRoot) {
|
|
96
|
+
const { module } = await this.detectWorkingModule(projectRoot);
|
|
97
|
+
// Get 3 most recent memories for the module
|
|
98
|
+
const memories = await this.client.getMemories(module ?? undefined, 3);
|
|
99
|
+
if (memories.length === 0) {
|
|
100
|
+
return `Session: ${this.config.projectName} (${this.config.system})\nNo recent memories.`;
|
|
101
|
+
}
|
|
102
|
+
const lines = [
|
|
103
|
+
`Session: ${this.config.projectName} (${this.config.system})`,
|
|
104
|
+
module ? `Module: ${module}` : '',
|
|
105
|
+
'',
|
|
106
|
+
'Recent memories:',
|
|
107
|
+
];
|
|
108
|
+
for (const m of memories) {
|
|
109
|
+
const content = m.content;
|
|
110
|
+
if (content) {
|
|
111
|
+
lines.push(`- ${content.title}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return lines.filter(Boolean).join('\n');
|
|
115
|
+
}
|
|
116
|
+
// ===========================================================================
|
|
117
|
+
// PRIVATE METHODS
|
|
118
|
+
// ===========================================================================
|
|
119
|
+
/**
|
|
120
|
+
* Detect working module from git diff
|
|
121
|
+
*/
|
|
122
|
+
async detectWorkingModule(projectRoot) {
|
|
123
|
+
try {
|
|
124
|
+
// Try multiple git commands
|
|
125
|
+
let stdout = '';
|
|
126
|
+
try {
|
|
127
|
+
const result = await execAsync('git diff --name-only HEAD~10..HEAD 2>/dev/null', { cwd: projectRoot });
|
|
128
|
+
stdout = result.stdout;
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
// Try unstaged changes
|
|
132
|
+
try {
|
|
133
|
+
const result = await execAsync('git diff --name-only', { cwd: projectRoot });
|
|
134
|
+
stdout = result.stdout;
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
// No git changes
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
const recentFiles = stdout.trim().split('\n').filter(Boolean);
|
|
141
|
+
if (recentFiles.length === 0) {
|
|
142
|
+
return { module: null, recentFiles: [] };
|
|
143
|
+
}
|
|
144
|
+
// Score modules from file paths
|
|
145
|
+
const moduleScores = new Map();
|
|
146
|
+
for (const domain of this.config.domains) {
|
|
147
|
+
moduleScores.set(domain, 0);
|
|
148
|
+
}
|
|
149
|
+
// Common patterns
|
|
150
|
+
const patterns = [
|
|
151
|
+
{ pattern: /marketing[-_]?hub/i, module: 'marketing', score: 10 },
|
|
152
|
+
{ pattern: /video[-_]?studio/i, module: 'video-studio', score: 10 },
|
|
153
|
+
{ pattern: /avatars?/i, module: 'avatars', score: 10 },
|
|
154
|
+
{ pattern: /content[-_]?ideas?/i, module: 'content-ideas', score: 10 },
|
|
155
|
+
{ pattern: /campaigns?/i, module: 'campaigns', score: 10 },
|
|
156
|
+
{ pattern: /knowledge[-_]?base/i, module: 'knowledge', score: 10 },
|
|
157
|
+
{ pattern: /social[-_]?media/i, module: 'social', score: 10 },
|
|
158
|
+
{ pattern: /server\/api/i, module: 'api', score: 5 },
|
|
159
|
+
{ pattern: /server\/schema/i, module: 'schema', score: 5 },
|
|
160
|
+
{ pattern: /hooks\//i, module: 'hooks', score: 3 },
|
|
161
|
+
{ pattern: /components\//i, module: 'components', score: 2 },
|
|
162
|
+
];
|
|
163
|
+
// Score each file
|
|
164
|
+
for (const file of recentFiles) {
|
|
165
|
+
// Check domains
|
|
166
|
+
for (const domain of this.config.domains) {
|
|
167
|
+
if (file.toLowerCase().includes(domain.toLowerCase())) {
|
|
168
|
+
moduleScores.set(domain, (moduleScores.get(domain) ?? 0) + 5);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// Check patterns
|
|
172
|
+
for (const { pattern, module, score } of patterns) {
|
|
173
|
+
if (pattern.test(file)) {
|
|
174
|
+
moduleScores.set(module, (moduleScores.get(module) ?? 0) + score);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// Find highest scoring module
|
|
179
|
+
let bestModule = null;
|
|
180
|
+
let bestScore = 0;
|
|
181
|
+
for (const [module, score] of moduleScores) {
|
|
182
|
+
if (score > bestScore) {
|
|
183
|
+
bestScore = score;
|
|
184
|
+
bestModule = module;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return { module: bestModule, recentFiles };
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
return { module: null, recentFiles: [] };
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Get relevant memories using semantic search
|
|
195
|
+
*/
|
|
196
|
+
async getRelevantMemories(module, recentFiles) {
|
|
197
|
+
const memories = [];
|
|
198
|
+
// 1. Get module-specific memories first
|
|
199
|
+
if (module) {
|
|
200
|
+
const moduleMemories = await this.searchService.search(module, {
|
|
201
|
+
domain: module,
|
|
202
|
+
limit: 3,
|
|
203
|
+
threshold: 0.4,
|
|
204
|
+
});
|
|
205
|
+
for (const result of moduleMemories) {
|
|
206
|
+
memories.push({
|
|
207
|
+
id: result.item.id,
|
|
208
|
+
title: result.content.title,
|
|
209
|
+
body: result.content.body,
|
|
210
|
+
domain: result.content.domain,
|
|
211
|
+
relevanceScore: result.score,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// 2. Get file-based context
|
|
216
|
+
if (recentFiles.length > 0 && memories.length < 5) {
|
|
217
|
+
// Build query from file paths
|
|
218
|
+
const fileContext = recentFiles.slice(0, 5).join(' ');
|
|
219
|
+
const fileMemories = await this.searchService.search(fileContext, {
|
|
220
|
+
limit: 5 - memories.length,
|
|
221
|
+
threshold: 0.35,
|
|
222
|
+
});
|
|
223
|
+
for (const result of fileMemories) {
|
|
224
|
+
// Avoid duplicates
|
|
225
|
+
if (!memories.some(m => m.id === result.item.id)) {
|
|
226
|
+
memories.push({
|
|
227
|
+
id: result.item.id,
|
|
228
|
+
title: result.content.title,
|
|
229
|
+
body: result.content.body,
|
|
230
|
+
domain: result.content.domain,
|
|
231
|
+
relevanceScore: result.score,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// 3. Fill with recent if needed
|
|
237
|
+
if (memories.length < 3) {
|
|
238
|
+
const recent = await this.client.getRecentMemories(3 - memories.length);
|
|
239
|
+
for (const item of recent) {
|
|
240
|
+
const content = item.content;
|
|
241
|
+
if (content && !memories.some(m => m.id === item.id)) {
|
|
242
|
+
memories.push({
|
|
243
|
+
id: item.id,
|
|
244
|
+
title: content.title,
|
|
245
|
+
body: content.body,
|
|
246
|
+
domain: content.domain,
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return memories.slice(0, 5);
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Get triggered patterns
|
|
255
|
+
*/
|
|
256
|
+
async getTriggeredPatterns() {
|
|
257
|
+
const patterns = await this.client.getTriggeredPatterns(3);
|
|
258
|
+
return patterns.map(item => {
|
|
259
|
+
const content = item.content;
|
|
260
|
+
return {
|
|
261
|
+
patternId: content?.patternId ?? 'unknown',
|
|
262
|
+
description: content?.description ?? '',
|
|
263
|
+
occurrences: content?.occurrences ?? 0,
|
|
264
|
+
severity: content?.severity ?? 'medium',
|
|
265
|
+
};
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Get session statistics
|
|
270
|
+
*/
|
|
271
|
+
async getSessionStats(loadedMemories, triggeredPatterns) {
|
|
272
|
+
const stats = await this.client.getStats();
|
|
273
|
+
return {
|
|
274
|
+
totalMemories: stats.totalMemories,
|
|
275
|
+
loadedMemories,
|
|
276
|
+
triggeredPatterns,
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
// =============================================================================
|
|
281
|
+
// FACTORY
|
|
282
|
+
// =============================================================================
|
|
283
|
+
/**
|
|
284
|
+
* Create an auto-inject service
|
|
285
|
+
*/
|
|
286
|
+
export function createAutoInjectService(client, searchService, config) {
|
|
287
|
+
return new AutoInjectService(client, searchService, config);
|
|
288
|
+
}
|
|
289
|
+
//# sourceMappingURL=auto-inject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-inject.js","sourceRoot":"","sources":["../../src/services/auto-inject.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-Tag Service
|
|
3
|
+
*
|
|
4
|
+
* Automatically tags memories using AI analysis:
|
|
5
|
+
* - Extracts domain from content
|
|
6
|
+
* - Identifies key concepts
|
|
7
|
+
* - Suggests tags based on content
|
|
8
|
+
*/
|
|
9
|
+
import type { DrizzleMemoryClient } from '../db/drizzle-client.js';
|
|
10
|
+
import type { MemoryContent } from '../types/index.js';
|
|
11
|
+
export interface AutoTagResult {
|
|
12
|
+
memoryId: string;
|
|
13
|
+
suggestedTags: string[];
|
|
14
|
+
suggestedDomain: string | null;
|
|
15
|
+
confidence: number;
|
|
16
|
+
}
|
|
17
|
+
export interface BatchTagResult {
|
|
18
|
+
processed: number;
|
|
19
|
+
tagged: number;
|
|
20
|
+
skipped: number;
|
|
21
|
+
}
|
|
22
|
+
export declare class AutoTagService {
|
|
23
|
+
private client;
|
|
24
|
+
constructor(client: DrizzleMemoryClient);
|
|
25
|
+
/**
|
|
26
|
+
* Analyze memory and suggest tags
|
|
27
|
+
*/
|
|
28
|
+
analyzeMemory(memoryId: string): Promise<AutoTagResult | null>;
|
|
29
|
+
/**
|
|
30
|
+
* Analyze content and suggest tags
|
|
31
|
+
*/
|
|
32
|
+
analyzeContent(memoryId: string, content: MemoryContent): AutoTagResult;
|
|
33
|
+
/**
|
|
34
|
+
* Auto-tag a memory and update it
|
|
35
|
+
*/
|
|
36
|
+
autoTag(memoryId: string, options?: {
|
|
37
|
+
append?: boolean;
|
|
38
|
+
minConfidence?: number;
|
|
39
|
+
}): Promise<AutoTagResult | null>;
|
|
40
|
+
/**
|
|
41
|
+
* Batch auto-tag all memories
|
|
42
|
+
*/
|
|
43
|
+
batchAutoTag(options?: {
|
|
44
|
+
limit?: number;
|
|
45
|
+
onlyUntagged?: boolean;
|
|
46
|
+
minConfidence?: number;
|
|
47
|
+
}): Promise<BatchTagResult>;
|
|
48
|
+
/**
|
|
49
|
+
* Get tag statistics
|
|
50
|
+
*/
|
|
51
|
+
getTagStats(): Promise<{
|
|
52
|
+
totalTags: number;
|
|
53
|
+
tagCounts: Record<string, number>;
|
|
54
|
+
untaggedCount: number;
|
|
55
|
+
}>;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Create an auto-tag service
|
|
59
|
+
*/
|
|
60
|
+
export declare function createAutoTagService(client: DrizzleMemoryClient): AutoTagService;
|
|
61
|
+
//# sourceMappingURL=auto-tag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-tag.d.ts","sourceRoot":"","sources":["../../src/services/auto-tag.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAClE,OAAO,KAAK,EAAW,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAM/D,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB;AAoDD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAqB;gBAEvB,MAAM,EAAE,mBAAmB;IAIvC;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAUpE;;OAEG;IACH,cAAc,CACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,GACrB,aAAa;IA4ChB;;OAEG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QACxC,MAAM,CAAC,EAAE,OAAO,CAAA;QAChB,aAAa,CAAC,EAAE,MAAM,CAAA;KACvB,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAmCjC;;OAEG;IACG,YAAY,CAAC,OAAO,CAAC,EAAE;QAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,YAAY,CAAC,EAAE,OAAO,CAAA;QACtB,aAAa,CAAC,EAAE,MAAM,CAAA;KACvB,GAAG,OAAO,CAAC,cAAc,CAAC;IAkC3B;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC;QAC3B,SAAS,EAAE,MAAM,CAAA;QACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACjC,aAAa,EAAE,MAAM,CAAA;KACtB,CAAC;CAuBH;AAMD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,GAAG,cAAc,CAEhF"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-Tag Service
|
|
3
|
+
*
|
|
4
|
+
* Automatically tags memories using AI analysis:
|
|
5
|
+
* - Extracts domain from content
|
|
6
|
+
* - Identifies key concepts
|
|
7
|
+
* - Suggests tags based on content
|
|
8
|
+
*/
|
|
9
|
+
// =============================================================================
|
|
10
|
+
// TAG PATTERNS
|
|
11
|
+
// =============================================================================
|
|
12
|
+
const TAG_PATTERNS = [
|
|
13
|
+
// Tech patterns
|
|
14
|
+
{ pattern: /typescript|ts\b/i, tags: ['typescript', 'frontend'] },
|
|
15
|
+
{ pattern: /react|jsx|tsx/i, tags: ['react', 'frontend'] },
|
|
16
|
+
{ pattern: /next\.?js/i, tags: ['nextjs', 'frontend'] },
|
|
17
|
+
{ pattern: /trpc/i, tags: ['trpc', 'api'] },
|
|
18
|
+
{ pattern: /drizzle|orm/i, tags: ['database', 'drizzle'] },
|
|
19
|
+
{ pattern: /mysql|sql\b/i, tags: ['database', 'sql'] },
|
|
20
|
+
{ pattern: /api|endpoint|router/i, tags: ['api'] },
|
|
21
|
+
{ pattern: /schema|migration/i, tags: ['database', 'schema'] },
|
|
22
|
+
{ pattern: /hook|use[A-Z]/i, tags: ['hooks', 'react'] },
|
|
23
|
+
{ pattern: /component/i, tags: ['components', 'frontend'] },
|
|
24
|
+
{ pattern: /test|spec|vitest/i, tags: ['testing'] },
|
|
25
|
+
{ pattern: /eslint|lint/i, tags: ['linting', 'code-quality'] },
|
|
26
|
+
{ pattern: /tailwind|css/i, tags: ['styling', 'tailwind'] },
|
|
27
|
+
// Domain patterns
|
|
28
|
+
{ pattern: /video|veo|generation/i, tags: ['ai', 'video'], domain: 'video-studio' },
|
|
29
|
+
{ pattern: /avatar|character/i, tags: ['ai', 'avatar'], domain: 'avatars' },
|
|
30
|
+
{ pattern: /campaign|marketing/i, tags: ['marketing'], domain: 'campaigns' },
|
|
31
|
+
{ pattern: /content|ideas?|brainstorm/i, tags: ['content'], domain: 'content-ideas' },
|
|
32
|
+
{ pattern: /knowledge|brand/i, tags: ['knowledge'], domain: 'knowledge' },
|
|
33
|
+
{ pattern: /social|post|publish/i, tags: ['social'], domain: 'social' },
|
|
34
|
+
{ pattern: /finance|payment|money/i, tags: ['finance'] },
|
|
35
|
+
{ pattern: /auth|login|session/i, tags: ['auth'] },
|
|
36
|
+
// Quality patterns
|
|
37
|
+
{ pattern: /bug|fix|error/i, tags: ['bugfix'] },
|
|
38
|
+
{ pattern: /refactor/i, tags: ['refactor'] },
|
|
39
|
+
{ pattern: /performance|optimize/i, tags: ['performance'] },
|
|
40
|
+
{ pattern: /security|vulnerability/i, tags: ['security'] },
|
|
41
|
+
{ pattern: /deprecat/i, tags: ['deprecated'] },
|
|
42
|
+
// Priority indicators
|
|
43
|
+
{ pattern: /critical|urgent|important/i, tags: ['high-priority'] },
|
|
44
|
+
{ pattern: /todo|fixme/i, tags: ['todo'] },
|
|
45
|
+
];
|
|
46
|
+
// =============================================================================
|
|
47
|
+
// AUTO-TAG SERVICE
|
|
48
|
+
// =============================================================================
|
|
49
|
+
export class AutoTagService {
|
|
50
|
+
client;
|
|
51
|
+
constructor(client) {
|
|
52
|
+
this.client = client;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Analyze memory and suggest tags
|
|
56
|
+
*/
|
|
57
|
+
async analyzeMemory(memoryId) {
|
|
58
|
+
const memory = await this.client.get(memoryId);
|
|
59
|
+
if (!memory)
|
|
60
|
+
return null;
|
|
61
|
+
const content = memory.content;
|
|
62
|
+
if (!content)
|
|
63
|
+
return null;
|
|
64
|
+
return this.analyzeContent(memoryId, content);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Analyze content and suggest tags
|
|
68
|
+
*/
|
|
69
|
+
analyzeContent(memoryId, content) {
|
|
70
|
+
const text = `${content.title}\n${content.body}`;
|
|
71
|
+
const suggestedTags = new Set();
|
|
72
|
+
let suggestedDomain = null;
|
|
73
|
+
let matchCount = 0;
|
|
74
|
+
// Apply pattern matching
|
|
75
|
+
for (const { pattern, tags, domain } of TAG_PATTERNS) {
|
|
76
|
+
if (pattern.test(text)) {
|
|
77
|
+
tags.forEach(tag => suggestedTags.add(tag));
|
|
78
|
+
if (domain && !suggestedDomain) {
|
|
79
|
+
suggestedDomain = domain;
|
|
80
|
+
}
|
|
81
|
+
matchCount++;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Extract keywords from title
|
|
85
|
+
const titleWords = content.title.toLowerCase().split(/\s+/);
|
|
86
|
+
for (const word of titleWords) {
|
|
87
|
+
if (word.length > 3 && !['the', 'and', 'for', 'with', 'from', 'that'].includes(word)) {
|
|
88
|
+
// Check if it's a technical term
|
|
89
|
+
if (/^[a-z]+$/i.test(word) && word.length > 4) {
|
|
90
|
+
suggestedTags.add(word);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Use existing domain if present
|
|
95
|
+
if (content.domain && !suggestedDomain) {
|
|
96
|
+
suggestedDomain = content.domain;
|
|
97
|
+
}
|
|
98
|
+
// Calculate confidence based on matches
|
|
99
|
+
const confidence = Math.min(matchCount / 5, 1.0);
|
|
100
|
+
return {
|
|
101
|
+
memoryId,
|
|
102
|
+
suggestedTags: Array.from(suggestedTags).slice(0, 10),
|
|
103
|
+
suggestedDomain,
|
|
104
|
+
confidence,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Auto-tag a memory and update it
|
|
109
|
+
*/
|
|
110
|
+
async autoTag(memoryId, options) {
|
|
111
|
+
const append = options?.append ?? true;
|
|
112
|
+
const minConfidence = options?.minConfidence ?? 0.3;
|
|
113
|
+
const result = await this.analyzeMemory(memoryId);
|
|
114
|
+
if (!result || result.confidence < minConfidence) {
|
|
115
|
+
return result;
|
|
116
|
+
}
|
|
117
|
+
const memory = await this.client.get(memoryId);
|
|
118
|
+
if (!memory)
|
|
119
|
+
return result;
|
|
120
|
+
const content = memory.content;
|
|
121
|
+
if (!content)
|
|
122
|
+
return result;
|
|
123
|
+
// Merge or replace tags
|
|
124
|
+
const existingTags = memory.tags ?? [];
|
|
125
|
+
const newTags = append
|
|
126
|
+
? Array.from(new Set([...existingTags, ...result.suggestedTags]))
|
|
127
|
+
: result.suggestedTags;
|
|
128
|
+
// Update domain if suggested and not present
|
|
129
|
+
const updateContent = { ...content };
|
|
130
|
+
if (result.suggestedDomain && !content.domain) {
|
|
131
|
+
updateContent.domain = result.suggestedDomain;
|
|
132
|
+
}
|
|
133
|
+
await this.client.update(memoryId, {
|
|
134
|
+
tags: newTags,
|
|
135
|
+
content: updateContent,
|
|
136
|
+
});
|
|
137
|
+
return result;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Batch auto-tag all memories
|
|
141
|
+
*/
|
|
142
|
+
async batchAutoTag(options) {
|
|
143
|
+
const limit = options?.limit ?? 100;
|
|
144
|
+
const onlyUntagged = options?.onlyUntagged ?? true;
|
|
145
|
+
const minConfidence = options?.minConfidence ?? 0.3;
|
|
146
|
+
const memories = await this.client.list({ type: 'memory', limit });
|
|
147
|
+
let processed = 0;
|
|
148
|
+
let tagged = 0;
|
|
149
|
+
let skipped = 0;
|
|
150
|
+
for (const memory of memories) {
|
|
151
|
+
processed++;
|
|
152
|
+
// Skip if already has tags
|
|
153
|
+
if (onlyUntagged && memory.tags && memory.tags.length > 0) {
|
|
154
|
+
skipped++;
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
const result = await this.autoTag(memory.id, { minConfidence });
|
|
158
|
+
if (result && result.suggestedTags.length > 0) {
|
|
159
|
+
tagged++;
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
skipped++;
|
|
163
|
+
}
|
|
164
|
+
// Small delay to avoid rate limits
|
|
165
|
+
await new Promise(r => setTimeout(r, 50));
|
|
166
|
+
}
|
|
167
|
+
return { processed, tagged, skipped };
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Get tag statistics
|
|
171
|
+
*/
|
|
172
|
+
async getTagStats() {
|
|
173
|
+
const memories = await this.client.list({ type: 'memory', limit: 1000 });
|
|
174
|
+
const tagCounts = {};
|
|
175
|
+
let untaggedCount = 0;
|
|
176
|
+
for (const memory of memories) {
|
|
177
|
+
const tags = memory.tags ?? [];
|
|
178
|
+
if (tags.length === 0) {
|
|
179
|
+
untaggedCount++;
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
for (const tag of tags) {
|
|
183
|
+
tagCounts[tag] = (tagCounts[tag] ?? 0) + 1;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return {
|
|
188
|
+
totalTags: Object.keys(tagCounts).length,
|
|
189
|
+
tagCounts,
|
|
190
|
+
untaggedCount,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// =============================================================================
|
|
195
|
+
// FACTORY
|
|
196
|
+
// =============================================================================
|
|
197
|
+
/**
|
|
198
|
+
* Create an auto-tag service
|
|
199
|
+
*/
|
|
200
|
+
export function createAutoTagService(client) {
|
|
201
|
+
return new AutoTagService(client);
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=auto-tag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-tag.js","sourceRoot":"","sources":["../../src/services/auto-tag.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-Project Sync Service
|
|
3
|
+
*
|
|
4
|
+
* Synchronizes memories across different projects in the MetaNautical ecosystem.
|
|
5
|
+
* - Shares relevant learnings between projects
|
|
6
|
+
* - Maintains project isolation while enabling knowledge transfer
|
|
7
|
+
* - Syncs common patterns and gotchas
|
|
8
|
+
*/
|
|
9
|
+
import type { DevSystem, DevItem } from '../types/index.js';
|
|
10
|
+
export interface SyncConfig {
|
|
11
|
+
sourceSystem: DevSystem;
|
|
12
|
+
targetSystems: DevSystem[];
|
|
13
|
+
syncTags: string[];
|
|
14
|
+
excludeTags: string[];
|
|
15
|
+
}
|
|
16
|
+
export interface SyncResult {
|
|
17
|
+
synced: number;
|
|
18
|
+
skipped: number;
|
|
19
|
+
errors: string[];
|
|
20
|
+
}
|
|
21
|
+
export interface SharedMemory {
|
|
22
|
+
originalId: string;
|
|
23
|
+
originalSystem: DevSystem;
|
|
24
|
+
title: string;
|
|
25
|
+
body: string;
|
|
26
|
+
domain?: string;
|
|
27
|
+
tags: string[];
|
|
28
|
+
syncedAt: string;
|
|
29
|
+
}
|
|
30
|
+
export declare const ECOSYSTEM_SYSTEMS: DevSystem[];
|
|
31
|
+
export declare class CrossProjectSyncService {
|
|
32
|
+
private clients;
|
|
33
|
+
/**
|
|
34
|
+
* Get or create a client for a system
|
|
35
|
+
*/
|
|
36
|
+
private getClient;
|
|
37
|
+
/**
|
|
38
|
+
* Sync memories from source to target systems
|
|
39
|
+
*/
|
|
40
|
+
sync(config: SyncConfig): Promise<SyncResult>;
|
|
41
|
+
/**
|
|
42
|
+
* Get ecosystem-wide patterns (shared across all systems)
|
|
43
|
+
*/
|
|
44
|
+
getEcosystemPatterns(): Promise<DevItem[]>;
|
|
45
|
+
/**
|
|
46
|
+
* Get memories shared across all systems (tagged with 'ecosystem' or 'shared')
|
|
47
|
+
*/
|
|
48
|
+
getSharedMemories(): Promise<Array<DevItem & {
|
|
49
|
+
system: DevSystem;
|
|
50
|
+
}>>;
|
|
51
|
+
/**
|
|
52
|
+
* Share a memory to the ecosystem (tag it for sync)
|
|
53
|
+
*/
|
|
54
|
+
shareToEcosystem(memoryId: string, sourceSystem: DevSystem): Promise<boolean>;
|
|
55
|
+
/**
|
|
56
|
+
* Get sync status for a system
|
|
57
|
+
*/
|
|
58
|
+
getSyncStatus(system: DevSystem): Promise<{
|
|
59
|
+
totalMemories: number;
|
|
60
|
+
sharedMemories: number;
|
|
61
|
+
receivedMemories: number;
|
|
62
|
+
}>;
|
|
63
|
+
/**
|
|
64
|
+
* Get memories that should be synced
|
|
65
|
+
*/
|
|
66
|
+
private getShareableMemories;
|
|
67
|
+
/**
|
|
68
|
+
* Sync a single memory to a target system
|
|
69
|
+
*/
|
|
70
|
+
private syncMemoryToSystem;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Create a cross-project sync service
|
|
74
|
+
*/
|
|
75
|
+
export declare function createCrossProjectSyncService(): CrossProjectSyncService;
|
|
76
|
+
//# sourceMappingURL=cross-project-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-project-sync.d.ts","sourceRoot":"","sources":["../../src/services/cross-project-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAiB,MAAM,mBAAmB,CAAA;AAO1E,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,SAAS,CAAA;IACvB,aAAa,EAAE,SAAS,EAAE,CAAA;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,WAAW,EAAE,MAAM,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,SAAS,CAAA;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;CACjB;AAMD,eAAO,MAAM,iBAAiB,EAAE,SAAS,EAOxC,CAAA;AAMD,qBAAa,uBAAuB;IAClC,OAAO,CAAC,OAAO,CAAiD;IAEhE;;OAEG;IACH,OAAO,CAAC,SAAS;IASjB;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IA0CnD;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IA0BhD;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG;QAAE,MAAM,EAAE,SAAS,CAAA;KAAE,CAAC,CAAC;IAuB1E;;OAEG;IACG,gBAAgB,CACpB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,SAAS,GACtB,OAAO,CAAC,OAAO,CAAC;IAgBnB;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;QAC9C,aAAa,EAAE,MAAM,CAAA;QACrB,cAAc,EAAE,MAAM,CAAA;QACtB,gBAAgB,EAAE,MAAM,CAAA;KACzB,CAAC;IAoBF;;OAEG;YACW,oBAAoB;IAyBlC;;OAEG;YACW,kBAAkB;CAyDjC;AAMD;;GAEG;AACH,wBAAgB,6BAA6B,IAAI,uBAAuB,CAEvE"}
|