cmp-standards 2.8.1 → 2.9.1

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.
Files changed (95) hide show
  1. package/dist/analytics/CrossProjectAnalytics.d.ts +128 -0
  2. package/dist/analytics/CrossProjectAnalytics.d.ts.map +1 -0
  3. package/dist/analytics/CrossProjectAnalytics.js +431 -0
  4. package/dist/analytics/CrossProjectAnalytics.js.map +1 -0
  5. package/dist/analytics/index.d.ts +1 -0
  6. package/dist/analytics/index.d.ts.map +1 -1
  7. package/dist/analytics/index.js +2 -0
  8. package/dist/analytics/index.js.map +1 -1
  9. package/dist/cache/EmbeddingCache.d.ts +6 -4
  10. package/dist/cache/EmbeddingCache.d.ts.map +1 -1
  11. package/dist/cache/EmbeddingCache.js +28 -17
  12. package/dist/cache/EmbeddingCache.js.map +1 -1
  13. package/dist/cli/index.js +247 -141
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/cli/ui.d.ts +134 -0
  16. package/dist/cli/ui.d.ts.map +1 -0
  17. package/dist/cli/ui.js +311 -0
  18. package/dist/cli/ui.js.map +1 -0
  19. package/dist/dashboard/tokens.d.ts +228 -0
  20. package/dist/dashboard/tokens.d.ts.map +1 -0
  21. package/dist/dashboard/tokens.js +450 -0
  22. package/dist/dashboard/tokens.js.map +1 -0
  23. package/dist/dashboard/ui.d.ts +3 -0
  24. package/dist/dashboard/ui.d.ts.map +1 -1
  25. package/dist/dashboard/ui.js +95 -61
  26. package/dist/dashboard/ui.js.map +1 -1
  27. package/dist/db/cloud.d.ts +11 -0
  28. package/dist/db/cloud.d.ts.map +1 -1
  29. package/dist/db/cloud.js +49 -1
  30. package/dist/db/cloud.js.map +1 -1
  31. package/dist/db/migrations.d.ts +1 -0
  32. package/dist/db/migrations.d.ts.map +1 -1
  33. package/dist/db/migrations.js +109 -0
  34. package/dist/db/migrations.js.map +1 -1
  35. package/dist/hooks/index.d.ts +1 -0
  36. package/dist/hooks/index.d.ts.map +1 -1
  37. package/dist/hooks/index.js +2 -0
  38. package/dist/hooks/index.js.map +1 -1
  39. package/dist/hooks/startup-verify.d.ts +31 -0
  40. package/dist/hooks/startup-verify.d.ts.map +1 -0
  41. package/dist/hooks/startup-verify.js +360 -0
  42. package/dist/hooks/startup-verify.js.map +1 -0
  43. package/dist/plugins/PluginManager.d.ts +160 -0
  44. package/dist/plugins/PluginManager.d.ts.map +1 -0
  45. package/dist/plugins/PluginManager.js +417 -0
  46. package/dist/plugins/PluginManager.js.map +1 -0
  47. package/dist/plugins/index.d.ts +7 -0
  48. package/dist/plugins/index.d.ts.map +1 -0
  49. package/dist/plugins/index.js +7 -0
  50. package/dist/plugins/index.js.map +1 -0
  51. package/dist/services/AuditLog.d.ts +205 -0
  52. package/dist/services/AuditLog.d.ts.map +1 -0
  53. package/dist/services/AuditLog.js +352 -0
  54. package/dist/services/AuditLog.js.map +1 -0
  55. package/dist/services/FeedbackCollector.d.ts +8 -0
  56. package/dist/services/FeedbackCollector.d.ts.map +1 -1
  57. package/dist/services/FeedbackCollector.js +19 -2
  58. package/dist/services/FeedbackCollector.js.map +1 -1
  59. package/dist/services/GitIntegration.d.ts +140 -0
  60. package/dist/services/GitIntegration.d.ts.map +1 -0
  61. package/dist/services/GitIntegration.js +423 -0
  62. package/dist/services/GitIntegration.js.map +1 -0
  63. package/dist/services/HookVerifier.d.ts +95 -0
  64. package/dist/services/HookVerifier.d.ts.map +1 -0
  65. package/dist/services/HookVerifier.js +493 -0
  66. package/dist/services/HookVerifier.js.map +1 -0
  67. package/dist/services/MemoryVersioning.d.ts +108 -0
  68. package/dist/services/MemoryVersioning.d.ts.map +1 -0
  69. package/dist/services/MemoryVersioning.js +281 -0
  70. package/dist/services/MemoryVersioning.js.map +1 -0
  71. package/dist/services/context-injector.d.ts +8 -0
  72. package/dist/services/context-injector.d.ts.map +1 -1
  73. package/dist/services/context-injector.js +19 -2
  74. package/dist/services/context-injector.js.map +1 -1
  75. package/dist/services/index.d.ts +4 -0
  76. package/dist/services/index.d.ts.map +1 -1
  77. package/dist/services/index.js +5 -0
  78. package/dist/services/index.js.map +1 -1
  79. package/dist/services/memory-router.d.ts +8 -0
  80. package/dist/services/memory-router.d.ts.map +1 -1
  81. package/dist/services/memory-router.js +19 -2
  82. package/dist/services/memory-router.js.map +1 -1
  83. package/dist/services/pattern-tracker.d.ts +13 -0
  84. package/dist/services/pattern-tracker.d.ts.map +1 -1
  85. package/dist/services/pattern-tracker.js +33 -3
  86. package/dist/services/pattern-tracker.js.map +1 -1
  87. package/dist/services/semantic-search.d.ts +4 -0
  88. package/dist/services/semantic-search.d.ts.map +1 -1
  89. package/dist/services/semantic-search.js +53 -13
  90. package/dist/services/semantic-search.js.map +1 -1
  91. package/dist/types/index.d.ts +1 -0
  92. package/dist/types/index.d.ts.map +1 -1
  93. package/dist/types/index.js +1 -0
  94. package/dist/types/index.js.map +1 -1
  95. package/package.json +4 -1
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Cross-Project Analytics Service
3
+ *
4
+ * Aggregates metrics and insights across all projects/systems:
5
+ * - Memory sharing patterns between projects
6
+ * - Common patterns across codebases
7
+ * - Expert panel trends
8
+ * - Learning transfer opportunities
9
+ * - System health comparison
10
+ *
11
+ * @version 2.9.0
12
+ */
13
+ import type { DevSystem } from '../types/index.js';
14
+ export interface ProjectMetrics {
15
+ system: DevSystem;
16
+ totalItems: number;
17
+ memories: number;
18
+ tasks: number;
19
+ patterns: number;
20
+ sessions: number;
21
+ lastActivity: string;
22
+ healthScore: number;
23
+ }
24
+ export interface CrossProjectInsight {
25
+ id: string;
26
+ type: 'shared_pattern' | 'learning_opportunity' | 'best_practice' | 'warning';
27
+ title: string;
28
+ description: string;
29
+ affectedSystems: DevSystem[];
30
+ priority: 'high' | 'medium' | 'low';
31
+ actionable: boolean;
32
+ suggestedAction?: string;
33
+ createdAt: string;
34
+ }
35
+ export interface PatternComparison {
36
+ patternId: string;
37
+ description: string;
38
+ occurrences: Record<DevSystem, number>;
39
+ totalOccurrences: number;
40
+ trend: 'increasing' | 'stable' | 'decreasing';
41
+ }
42
+ export interface LearningTransfer {
43
+ fromSystem: DevSystem;
44
+ toSystem: DevSystem;
45
+ memoryId: string;
46
+ memoryTitle: string;
47
+ relevanceScore: number;
48
+ transferReason: string;
49
+ }
50
+ export interface CrossProjectReport {
51
+ generatedAt: string;
52
+ period: {
53
+ start: string;
54
+ end: string;
55
+ };
56
+ projectMetrics: ProjectMetrics[];
57
+ totalMetrics: {
58
+ totalProjects: number;
59
+ totalMemories: number;
60
+ totalTasks: number;
61
+ totalSessions: number;
62
+ avgHealthScore: number;
63
+ };
64
+ insights: CrossProjectInsight[];
65
+ patternComparisons: PatternComparison[];
66
+ learningOpportunities: LearningTransfer[];
67
+ recommendations: string[];
68
+ }
69
+ export interface AnalyticsQueryOptions {
70
+ systems?: DevSystem[];
71
+ startDate?: Date;
72
+ endDate?: Date;
73
+ includeInactive?: boolean;
74
+ }
75
+ export declare class CrossProjectAnalyticsService {
76
+ private cache;
77
+ private cacheTTL;
78
+ /**
79
+ * Get metrics for all projects
80
+ */
81
+ getProjectMetrics(options?: AnalyticsQueryOptions): Promise<ProjectMetrics[]>;
82
+ /**
83
+ * Generate comprehensive cross-project report
84
+ */
85
+ generateReport(options?: AnalyticsQueryOptions): Promise<CrossProjectReport>;
86
+ /**
87
+ * Generate insights from cross-project data
88
+ */
89
+ generateInsights(options?: AnalyticsQueryOptions): Promise<CrossProjectInsight[]>;
90
+ /**
91
+ * Compare patterns across projects
92
+ */
93
+ comparePatterns(options?: AnalyticsQueryOptions): Promise<PatternComparison[]>;
94
+ /**
95
+ * Find learning transfer opportunities
96
+ */
97
+ findLearningOpportunities(options?: AnalyticsQueryOptions): Promise<LearningTransfer[]>;
98
+ /**
99
+ * Get activity timeline across all projects
100
+ */
101
+ getActivityTimeline(days?: number): Promise<Array<{
102
+ date: string;
103
+ system: DevSystem;
104
+ itemsCreated: number;
105
+ sessionsStarted: number;
106
+ }>>;
107
+ /**
108
+ * Get top contributors (systems with most activity)
109
+ */
110
+ getTopContributors(limit?: number): Promise<Array<{
111
+ system: DevSystem;
112
+ memoriesCreated: number;
113
+ tasksCompleted: number;
114
+ patternsDetected: number;
115
+ score: number;
116
+ }>>;
117
+ private calculateHealthScore;
118
+ private generateRecommendations;
119
+ private getFromCache;
120
+ private setCache;
121
+ /**
122
+ * Clear the cache
123
+ */
124
+ clearCache(): void;
125
+ }
126
+ export declare function getCrossProjectAnalytics(): CrossProjectAnalyticsService;
127
+ export declare function resetCrossProjectAnalytics(): void;
128
+ //# sourceMappingURL=CrossProjectAnalytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CrossProjectAnalytics.d.ts","sourceRoot":"","sources":["../../src/analytics/CrossProjectAnalytics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,431 @@
1
+ /**
2
+ * Cross-Project Analytics Service
3
+ *
4
+ * Aggregates metrics and insights across all projects/systems:
5
+ * - Memory sharing patterns between projects
6
+ * - Common patterns across codebases
7
+ * - Expert panel trends
8
+ * - Learning transfer opportunities
9
+ * - System health comparison
10
+ *
11
+ * @version 2.9.0
12
+ */
13
+ import { turso } from '../db/turso-client.js';
14
+ // =============================================================================
15
+ // Cross-Project Analytics Service
16
+ // =============================================================================
17
+ export class CrossProjectAnalyticsService {
18
+ cache = new Map();
19
+ cacheTTL = 5 * 60 * 1000; // 5 minutes
20
+ /**
21
+ * Get metrics for all projects
22
+ */
23
+ async getProjectMetrics(options) {
24
+ const cacheKey = `metrics:${JSON.stringify(options ?? {})}`;
25
+ const cached = this.getFromCache(cacheKey);
26
+ if (cached)
27
+ return cached;
28
+ const db = turso.getClient();
29
+ const metrics = [];
30
+ // Get all systems
31
+ const systemsResult = await db.execute(`
32
+ SELECT DISTINCT system FROM items WHERE status = 'active'
33
+ `);
34
+ const systems = systemsResult.rows
35
+ .map(r => r.system)
36
+ .filter(s => !options?.systems || options.systems.includes(s));
37
+ for (const system of systems) {
38
+ const [itemsResult, sessionsResult, lastActivityResult] = await Promise.all([
39
+ db.execute({
40
+ sql: `SELECT type, COUNT(*) as count FROM items
41
+ WHERE system = ? AND status = 'active'
42
+ GROUP BY type`,
43
+ args: [system],
44
+ }),
45
+ db.execute({
46
+ sql: `SELECT COUNT(*) as count FROM items
47
+ WHERE system = ? AND type = 'agent_session'
48
+ AND created_at > datetime('now', '-7 days')`,
49
+ args: [system],
50
+ }),
51
+ db.execute({
52
+ sql: `SELECT MAX(updated_at) as last FROM items WHERE system = ?`,
53
+ args: [system],
54
+ }),
55
+ ]);
56
+ const typeCounts = {};
57
+ for (const row of itemsResult.rows) {
58
+ typeCounts[row.type] = Number(row.count);
59
+ }
60
+ const totalItems = Object.values(typeCounts).reduce((a, b) => a + b, 0);
61
+ const healthScore = this.calculateHealthScore(typeCounts, Number(sessionsResult.rows[0]?.count ?? 0));
62
+ metrics.push({
63
+ system,
64
+ totalItems,
65
+ memories: typeCounts['memory'] ?? 0,
66
+ tasks: typeCounts['task'] ?? 0,
67
+ patterns: typeCounts['pattern'] ?? 0,
68
+ sessions: Number(sessionsResult.rows[0]?.count ?? 0),
69
+ lastActivity: lastActivityResult.rows[0]?.last ?? '',
70
+ healthScore,
71
+ });
72
+ }
73
+ this.setCache(cacheKey, metrics);
74
+ return metrics;
75
+ }
76
+ /**
77
+ * Generate comprehensive cross-project report
78
+ */
79
+ async generateReport(options) {
80
+ const now = new Date();
81
+ const startDate = options?.startDate ?? new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000);
82
+ const endDate = options?.endDate ?? now;
83
+ const [projectMetrics, insights, patternComparisons, learningOpportunities] = await Promise.all([
84
+ this.getProjectMetrics(options),
85
+ this.generateInsights(options),
86
+ this.comparePatterns(options),
87
+ this.findLearningOpportunities(options),
88
+ ]);
89
+ const totalMetrics = {
90
+ totalProjects: projectMetrics.length,
91
+ totalMemories: projectMetrics.reduce((sum, p) => sum + p.memories, 0),
92
+ totalTasks: projectMetrics.reduce((sum, p) => sum + p.tasks, 0),
93
+ totalSessions: projectMetrics.reduce((sum, p) => sum + p.sessions, 0),
94
+ avgHealthScore: projectMetrics.length > 0
95
+ ? projectMetrics.reduce((sum, p) => sum + p.healthScore, 0) / projectMetrics.length
96
+ : 0,
97
+ };
98
+ const recommendations = this.generateRecommendations(projectMetrics, insights, patternComparisons);
99
+ return {
100
+ generatedAt: now.toISOString(),
101
+ period: {
102
+ start: startDate.toISOString(),
103
+ end: endDate.toISOString(),
104
+ },
105
+ projectMetrics,
106
+ totalMetrics,
107
+ insights,
108
+ patternComparisons,
109
+ learningOpportunities,
110
+ recommendations,
111
+ };
112
+ }
113
+ /**
114
+ * Generate insights from cross-project data
115
+ */
116
+ async generateInsights(options) {
117
+ const insights = [];
118
+ const db = turso.getClient();
119
+ // Find shared patterns across projects
120
+ const sharedPatternsResult = await db.execute(`
121
+ SELECT
122
+ json_extract(content, '$.patternId') as patternId,
123
+ COUNT(DISTINCT system) as systemCount,
124
+ GROUP_CONCAT(DISTINCT system) as systems,
125
+ SUM(json_extract(content, '$.count')) as totalCount
126
+ FROM items
127
+ WHERE type = 'pattern' AND status = 'active'
128
+ GROUP BY patternId
129
+ HAVING systemCount > 1
130
+ ORDER BY totalCount DESC
131
+ LIMIT 10
132
+ `);
133
+ for (const row of sharedPatternsResult.rows) {
134
+ const systems = row.systems.split(',');
135
+ insights.push({
136
+ id: `shared-${row.patternId}`,
137
+ type: 'shared_pattern',
138
+ title: `Pattern "${row.patternId}" found in ${row.systemCount} projects`,
139
+ description: `This pattern appears ${row.totalCount} times across ${systems.join(', ')}`,
140
+ affectedSystems: systems,
141
+ priority: Number(row.totalCount) > 10 ? 'high' : 'medium',
142
+ actionable: true,
143
+ suggestedAction: 'Consider creating a shared ESLint rule or documentation',
144
+ createdAt: new Date().toISOString(),
145
+ });
146
+ }
147
+ // Find projects with low health scores
148
+ const metrics = await this.getProjectMetrics(options);
149
+ for (const project of metrics) {
150
+ if (project.healthScore < 50) {
151
+ insights.push({
152
+ id: `health-${project.system}`,
153
+ type: 'warning',
154
+ title: `${project.system} has low health score (${project.healthScore}%)`,
155
+ description: `Project needs attention: low activity or missing components`,
156
+ affectedSystems: [project.system],
157
+ priority: project.healthScore < 30 ? 'high' : 'medium',
158
+ actionable: true,
159
+ suggestedAction: 'Review project configuration and recent activity',
160
+ createdAt: new Date().toISOString(),
161
+ });
162
+ }
163
+ }
164
+ // Find best practices from high-performing projects
165
+ const topProjects = metrics.filter(p => p.healthScore >= 80);
166
+ if (topProjects.length > 0) {
167
+ const bestProject = topProjects.sort((a, b) => b.memories - a.memories)[0];
168
+ insights.push({
169
+ id: `best-practice-${bestProject.system}`,
170
+ type: 'best_practice',
171
+ title: `${bestProject.system} is a model project`,
172
+ description: `High health score (${bestProject.healthScore}%) with ${bestProject.memories} memories`,
173
+ affectedSystems: [bestProject.system],
174
+ priority: 'low',
175
+ actionable: false,
176
+ createdAt: new Date().toISOString(),
177
+ });
178
+ }
179
+ return insights;
180
+ }
181
+ /**
182
+ * Compare patterns across projects
183
+ */
184
+ async comparePatterns(options) {
185
+ const db = turso.getClient();
186
+ const comparisons = [];
187
+ const result = await db.execute(`
188
+ SELECT
189
+ json_extract(content, '$.patternId') as patternId,
190
+ json_extract(content, '$.description') as description,
191
+ system,
192
+ json_extract(content, '$.count') as count
193
+ FROM items
194
+ WHERE type = 'pattern' AND status = 'active'
195
+ ORDER BY patternId
196
+ `);
197
+ // Group by pattern
198
+ const patternGroups = new Map();
199
+ for (const row of result.rows) {
200
+ const patternId = row.patternId;
201
+ const system = row.system;
202
+ const count = Number(row.count ?? 0);
203
+ if (!patternGroups.has(patternId)) {
204
+ patternGroups.set(patternId, {
205
+ description: row.description ?? '',
206
+ occurrences: new Map(),
207
+ });
208
+ }
209
+ const group = patternGroups.get(patternId);
210
+ group.occurrences.set(system, (group.occurrences.get(system) ?? 0) + count);
211
+ }
212
+ for (const [patternId, data] of patternGroups) {
213
+ const occurrences = {};
214
+ let totalOccurrences = 0;
215
+ for (const [system, count] of data.occurrences) {
216
+ occurrences[system] = count;
217
+ totalOccurrences += count;
218
+ }
219
+ comparisons.push({
220
+ patternId,
221
+ description: data.description,
222
+ occurrences,
223
+ totalOccurrences,
224
+ trend: 'stable', // Would need historical data for real trend
225
+ });
226
+ }
227
+ return comparisons.sort((a, b) => b.totalOccurrences - a.totalOccurrences).slice(0, 20);
228
+ }
229
+ /**
230
+ * Find learning transfer opportunities
231
+ */
232
+ async findLearningOpportunities(options) {
233
+ const db = turso.getClient();
234
+ const opportunities = [];
235
+ // Find high-value memories that could benefit other projects
236
+ const memoriesResult = await db.execute(`
237
+ SELECT
238
+ id,
239
+ system,
240
+ json_extract(content, '$.title') as title,
241
+ json_extract(content, '$.domain') as domain,
242
+ json_extract(content, '$.feedbackScore') as feedbackScore,
243
+ json_extract(content, '$.accessCount') as accessCount
244
+ FROM items
245
+ WHERE type = 'memory'
246
+ AND status = 'active'
247
+ AND COALESCE(json_extract(content, '$.feedbackScore'), 0.5) >= 0.7
248
+ AND COALESCE(json_extract(content, '$.accessCount'), 0) >= 3
249
+ ORDER BY feedbackScore DESC, accessCount DESC
250
+ LIMIT 50
251
+ `);
252
+ // Get all active systems
253
+ const systemsResult = await db.execute(`
254
+ SELECT DISTINCT system FROM items WHERE status = 'active'
255
+ `);
256
+ const allSystems = systemsResult.rows.map(r => r.system);
257
+ for (const row of memoriesResult.rows) {
258
+ const fromSystem = row.system;
259
+ const feedbackScore = Number(row.feedbackScore ?? 0.5);
260
+ const accessCount = Number(row.accessCount ?? 0);
261
+ // Suggest transfer to other systems
262
+ for (const toSystem of allSystems) {
263
+ if (toSystem === fromSystem)
264
+ continue;
265
+ const relevanceScore = (feedbackScore * 0.6) + (Math.min(accessCount / 10, 1) * 0.4);
266
+ if (relevanceScore >= 0.6) {
267
+ opportunities.push({
268
+ fromSystem,
269
+ toSystem,
270
+ memoryId: row.id,
271
+ memoryTitle: row.title ?? 'Untitled',
272
+ relevanceScore,
273
+ transferReason: `High feedback score (${(feedbackScore * 100).toFixed(0)}%) and frequently accessed`,
274
+ });
275
+ }
276
+ }
277
+ }
278
+ return opportunities
279
+ .sort((a, b) => b.relevanceScore - a.relevanceScore)
280
+ .slice(0, 20);
281
+ }
282
+ /**
283
+ * Get activity timeline across all projects
284
+ */
285
+ async getActivityTimeline(days = 30) {
286
+ const db = turso.getClient();
287
+ const result = await db.execute({
288
+ sql: `
289
+ SELECT
290
+ DATE(created_at) as date,
291
+ system,
292
+ COUNT(*) as itemsCreated,
293
+ SUM(CASE WHEN type = 'agent_session' THEN 1 ELSE 0 END) as sessionsStarted
294
+ FROM items
295
+ WHERE created_at > datetime('now', '-' || ? || ' days')
296
+ GROUP BY DATE(created_at), system
297
+ ORDER BY date DESC
298
+ `,
299
+ args: [days],
300
+ });
301
+ return result.rows.map(row => ({
302
+ date: row.date,
303
+ system: row.system,
304
+ itemsCreated: Number(row.itemsCreated),
305
+ sessionsStarted: Number(row.sessionsStarted),
306
+ }));
307
+ }
308
+ /**
309
+ * Get top contributors (systems with most activity)
310
+ */
311
+ async getTopContributors(limit = 5) {
312
+ const db = turso.getClient();
313
+ const result = await db.execute({
314
+ sql: `
315
+ SELECT
316
+ system,
317
+ SUM(CASE WHEN type = 'memory' THEN 1 ELSE 0 END) as memoriesCreated,
318
+ SUM(CASE WHEN type = 'task' AND json_extract(content, '$.status') = 'completed' THEN 1 ELSE 0 END) as tasksCompleted,
319
+ SUM(CASE WHEN type = 'pattern' THEN 1 ELSE 0 END) as patternsDetected
320
+ FROM items
321
+ WHERE status = 'active' AND created_at > datetime('now', '-30 days')
322
+ GROUP BY system
323
+ ORDER BY memoriesCreated DESC
324
+ LIMIT ?
325
+ `,
326
+ args: [limit],
327
+ });
328
+ return result.rows.map(row => {
329
+ const memoriesCreated = Number(row.memoriesCreated);
330
+ const tasksCompleted = Number(row.tasksCompleted);
331
+ const patternsDetected = Number(row.patternsDetected);
332
+ const score = memoriesCreated * 2 + tasksCompleted * 3 + patternsDetected;
333
+ return {
334
+ system: row.system,
335
+ memoriesCreated,
336
+ tasksCompleted,
337
+ patternsDetected,
338
+ score,
339
+ };
340
+ });
341
+ }
342
+ // ==========================================================================
343
+ // Private Methods
344
+ // ==========================================================================
345
+ calculateHealthScore(typeCounts, recentSessions) {
346
+ let score = 0;
347
+ // Has memories (30 points)
348
+ if ((typeCounts['memory'] ?? 0) > 0) {
349
+ score += Math.min(30, (typeCounts['memory'] ?? 0) * 3);
350
+ }
351
+ // Has recent activity (30 points)
352
+ score += Math.min(30, recentSessions * 5);
353
+ // Has tasks (20 points)
354
+ if ((typeCounts['task'] ?? 0) > 0) {
355
+ score += Math.min(20, (typeCounts['task'] ?? 0) * 2);
356
+ }
357
+ // Has patterns detected (10 points)
358
+ if ((typeCounts['pattern'] ?? 0) > 0) {
359
+ score += Math.min(10, (typeCounts['pattern'] ?? 0));
360
+ }
361
+ // Has knowledge (10 points)
362
+ if ((typeCounts['knowledge'] ?? 0) > 0) {
363
+ score += 10;
364
+ }
365
+ return Math.min(100, score);
366
+ }
367
+ generateRecommendations(metrics, insights, patterns) {
368
+ const recommendations = [];
369
+ // Low health projects
370
+ const lowHealthProjects = metrics.filter(p => p.healthScore < 50);
371
+ if (lowHealthProjects.length > 0) {
372
+ recommendations.push(`Review ${lowHealthProjects.length} projects with low health scores: ${lowHealthProjects.map(p => p.system).join(', ')}`);
373
+ }
374
+ // Shared patterns
375
+ const sharedPatterns = patterns.filter(p => Object.keys(p.occurrences).length > 1);
376
+ if (sharedPatterns.length > 0) {
377
+ recommendations.push(`${sharedPatterns.length} patterns appear across multiple projects - consider creating shared rules`);
378
+ }
379
+ // Inactive projects
380
+ const inactiveProjects = metrics.filter(p => {
381
+ if (!p.lastActivity)
382
+ return true;
383
+ const lastDate = new Date(p.lastActivity);
384
+ const daysSinceActivity = (Date.now() - lastDate.getTime()) / (1000 * 60 * 60 * 24);
385
+ return daysSinceActivity > 7;
386
+ });
387
+ if (inactiveProjects.length > 0) {
388
+ recommendations.push(`${inactiveProjects.length} projects have been inactive for over a week`);
389
+ }
390
+ // High-value insights
391
+ const highPriorityInsights = insights.filter(i => i.priority === 'high' && i.actionable);
392
+ if (highPriorityInsights.length > 0) {
393
+ recommendations.push(`Address ${highPriorityInsights.length} high-priority actionable insights`);
394
+ }
395
+ return recommendations;
396
+ }
397
+ getFromCache(key) {
398
+ const cached = this.cache.get(key);
399
+ if (cached && cached.expiry > Date.now()) {
400
+ return cached.data;
401
+ }
402
+ this.cache.delete(key);
403
+ return null;
404
+ }
405
+ setCache(key, data) {
406
+ this.cache.set(key, {
407
+ data,
408
+ expiry: Date.now() + this.cacheTTL,
409
+ });
410
+ }
411
+ /**
412
+ * Clear the cache
413
+ */
414
+ clearCache() {
415
+ this.cache.clear();
416
+ }
417
+ }
418
+ // =============================================================================
419
+ // Singleton Instance
420
+ // =============================================================================
421
+ let instance = null;
422
+ export function getCrossProjectAnalytics() {
423
+ if (!instance) {
424
+ instance = new CrossProjectAnalyticsService();
425
+ }
426
+ return instance;
427
+ }
428
+ export function resetCrossProjectAnalytics() {
429
+ instance = null;
430
+ }
431
+ //# sourceMappingURL=CrossProjectAnalytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CrossProjectAnalytics.js","sourceRoot":"","sources":["../../src/analytics/CrossProjectAnalytics.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,5 @@
2
2
  * Analytics module exports
3
3
  */
4
4
  export { AnalyticsTracker, createAnalyticsTracker, type AnalyticsEvent, type UsageStats, type MemoryInsights, type PatternInsights, type SystemHealth, } from './tracker.js';
5
+ export { CrossProjectAnalyticsService, getCrossProjectAnalytics, resetCrossProjectAnalytics, type ProjectMetrics, type CrossProjectInsight, type PatternComparison, type LearningTransfer, type CrossProjectReport, type AnalyticsQueryOptions, } from './CrossProjectAnalytics.js';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,YAAY,GAClB,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,YAAY,GAClB,MAAM,cAAc,CAAA;AAGrB,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,0BAA0B,EAC1B,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,GAC3B,MAAM,4BAA4B,CAAA"}
@@ -2,4 +2,6 @@
2
2
  * Analytics module exports
3
3
  */
4
4
  export { AnalyticsTracker, createAnalyticsTracker, } from './tracker.js';
5
+ // Cross-Project Analytics (v2.9)
6
+ export { CrossProjectAnalyticsService, getCrossProjectAnalytics, resetCrossProjectAnalytics, } from './CrossProjectAnalytics.js';
5
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,sBAAsB,GAMvB,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,sBAAsB,GAMvB,MAAM,cAAc,CAAA;AAErB,iCAAiC;AACjC,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,0BAA0B,GAO3B,MAAM,4BAA4B,CAAA"}
@@ -47,7 +47,7 @@ export interface CacheStats {
47
47
  }
48
48
  export declare class EmbeddingCache {
49
49
  private cache;
50
- private accessOrder;
50
+ private accessTime;
51
51
  private config;
52
52
  private stats;
53
53
  constructor(config?: Partial<EmbeddingCacheConfig>);
@@ -68,13 +68,15 @@ export declare class EmbeddingCache {
68
68
  */
69
69
  has(text: string): boolean;
70
70
  /**
71
- * Evict the least recently used entry - O(1) operation
71
+ * Evict the least recently used entry - O(n) but only on eviction
72
+ * Uses timestamp-based approach for O(1) access updates
72
73
  */
73
74
  private evictLRU;
74
75
  /**
75
- * Remove expired entries
76
+ * Remove expired entries with optional batch limit
77
+ * @param maxToCheck Maximum entries to check per cleanup (0 = unlimited)
76
78
  */
77
- cleanup(): number;
79
+ cleanup(maxToCheck?: number): number;
78
80
  /**
79
81
  * Get cache statistics
80
82
  */
@@ -1 +1 @@
1
- {"version":3,"file":"EmbeddingCache.d.ts","sourceRoot":"","sources":["../../src/cache/EmbeddingCache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,MAAM,WAAW,UAAU;IACzB,2BAA2B;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAA;IACZ,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAA;IACjB,4BAA4B;IAC5B,cAAc,EAAE,MAAM,CAAA;IACtB,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAA;IACf,uDAAuD;IACvD,GAAG,EAAE,MAAM,CAAA;IACX,2BAA2B;IAC3B,KAAK,EAAE,OAAO,CAAA;IACd,2DAA2D;IAC3D,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,qCAAqC;IACrC,cAAc,EAAE,MAAM,CAAA;IACtB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAA;CACf;AAiBD,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,KAAK,CAAyB;gBAE1B,MAAM,GAAE,OAAO,CAAC,oBAAoB,CAAM;IAItD;;OAEG;IACH,OAAO,CAAC,IAAI;IAIZ;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IA6ClC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IA8BzC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAiB1B;;OAEG;IACH,OAAO,CAAC,QAAQ;IAYhB;;OAEG;IACH,OAAO,IAAI,MAAM;IAkBjB;;OAEG;IACH,QAAQ,IAAI,UAAU;IAuBtB;;OAEG;IACH,KAAK,IAAI,IAAI;IASb;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,IAAI,IAAI,MAAM,EAAE;CAGjB;AAQD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,cAAc,CAKxF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C;AAMD,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;AAEnE;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACrC,iBAAiB,CAkBnB"}
1
+ {"version":3,"file":"EmbeddingCache.d.ts","sourceRoot":"","sources":["../../src/cache/EmbeddingCache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,MAAM,WAAW,UAAU;IACzB,2BAA2B;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAA;IACZ,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAA;IACjB,4BAA4B;IAC5B,cAAc,EAAE,MAAM,CAAA;IACtB,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAA;IACf,uDAAuD;IACvD,GAAG,EAAE,MAAM,CAAA;IACX,2BAA2B;IAC3B,KAAK,EAAE,OAAO,CAAA;IACd,2DAA2D;IAC3D,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,qCAAqC;IACrC,cAAc,EAAE,MAAM,CAAA;IACtB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAA;CACf;AAiBD,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,KAAK,CAAyB;gBAE1B,MAAM,GAAE,OAAO,CAAC,oBAAoB,CAAM;IAItD;;OAEG;IACH,OAAO,CAAC,IAAI;IAIZ;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAwClC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IA8BzC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAiB1B;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAqBhB;;;OAGG;IACH,OAAO,CAAC,UAAU,SAAI,GAAG,MAAM;IAuB/B;;OAEG;IACH,QAAQ,IAAI,UAAU;IAuBtB;;OAEG;IACH,KAAK,IAAI,IAAI;IASb;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,IAAI,IAAI,MAAM,EAAE;CAGjB;AAQD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,cAAc,CAKxF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C;AAMD,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;AAEnE;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACrC,iBAAiB,CAkBnB"}