cmp-standards 2.8.1 → 3.1.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/dist/analytics/CrossProjectAnalytics.d.ts +128 -0
- package/dist/analytics/CrossProjectAnalytics.d.ts.map +1 -0
- package/dist/analytics/CrossProjectAnalytics.js +434 -0
- package/dist/analytics/CrossProjectAnalytics.js.map +1 -0
- package/dist/analytics/index.d.ts +1 -0
- package/dist/analytics/index.d.ts.map +1 -1
- package/dist/analytics/index.js +2 -0
- package/dist/analytics/index.js.map +1 -1
- package/dist/cache/EmbeddingCache.d.ts +6 -4
- package/dist/cache/EmbeddingCache.d.ts.map +1 -1
- package/dist/cache/EmbeddingCache.js +28 -17
- package/dist/cache/EmbeddingCache.js.map +1 -1
- package/dist/cli/index.js +658 -141
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/ui.d.ts +134 -0
- package/dist/cli/ui.d.ts.map +1 -0
- package/dist/cli/ui.js +311 -0
- package/dist/cli/ui.js.map +1 -0
- package/dist/dashboard/tokens.d.ts +228 -0
- package/dist/dashboard/tokens.d.ts.map +1 -0
- package/dist/dashboard/tokens.js +450 -0
- package/dist/dashboard/tokens.js.map +1 -0
- package/dist/dashboard/ui.d.ts +3 -0
- package/dist/dashboard/ui.d.ts.map +1 -1
- package/dist/dashboard/ui.js +95 -61
- package/dist/dashboard/ui.js.map +1 -1
- package/dist/db/cloud.d.ts +11 -0
- package/dist/db/cloud.d.ts.map +1 -1
- package/dist/db/cloud.js +49 -1
- package/dist/db/cloud.js.map +1 -1
- package/dist/db/migrations.d.ts +1 -0
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/migrations.js +109 -0
- package/dist/db/migrations.js.map +1 -1
- package/dist/db/turso-client.d.ts.map +1 -1
- package/dist/db/turso-client.js +3 -0
- package/dist/db/turso-client.js.map +1 -1
- package/dist/events/EventBus.d.ts +21 -0
- package/dist/events/EventBus.d.ts.map +1 -1
- package/dist/events/EventBus.js +81 -30
- package/dist/events/EventBus.js.map +1 -1
- package/dist/events/index.d.ts +1 -1
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +1 -1
- package/dist/events/index.js.map +1 -1
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/startup-verify.d.ts +31 -0
- package/dist/hooks/startup-verify.d.ts.map +1 -0
- package/dist/hooks/startup-verify.js +360 -0
- package/dist/hooks/startup-verify.js.map +1 -0
- package/dist/plugins/PluginManager.d.ts +160 -0
- package/dist/plugins/PluginManager.d.ts.map +1 -0
- package/dist/plugins/PluginManager.js +417 -0
- package/dist/plugins/PluginManager.js.map +1 -0
- package/dist/plugins/index.d.ts +7 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +7 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/schema/expert-types.d.ts +2 -2
- package/dist/services/AuditLog.d.ts +205 -0
- package/dist/services/AuditLog.d.ts.map +1 -0
- package/dist/services/AuditLog.js +352 -0
- package/dist/services/AuditLog.js.map +1 -0
- package/dist/services/FeedbackCollector.d.ts +8 -0
- package/dist/services/FeedbackCollector.d.ts.map +1 -1
- package/dist/services/FeedbackCollector.js +19 -2
- package/dist/services/FeedbackCollector.js.map +1 -1
- package/dist/services/GitIntegration.d.ts +140 -0
- package/dist/services/GitIntegration.d.ts.map +1 -0
- package/dist/services/GitIntegration.js +423 -0
- package/dist/services/GitIntegration.js.map +1 -0
- package/dist/services/HookVerifier.d.ts +95 -0
- package/dist/services/HookVerifier.d.ts.map +1 -0
- package/dist/services/HookVerifier.js +493 -0
- package/dist/services/HookVerifier.js.map +1 -0
- package/dist/services/MemoryRelationshipService.d.ts +187 -0
- package/dist/services/MemoryRelationshipService.d.ts.map +1 -0
- package/dist/services/MemoryRelationshipService.js +375 -0
- package/dist/services/MemoryRelationshipService.js.map +1 -0
- package/dist/services/MemoryVersioning.d.ts +108 -0
- package/dist/services/MemoryVersioning.d.ts.map +1 -0
- package/dist/services/MemoryVersioning.js +281 -0
- package/dist/services/MemoryVersioning.js.map +1 -0
- package/dist/services/context-injector.d.ts +8 -0
- package/dist/services/context-injector.d.ts.map +1 -1
- package/dist/services/context-injector.js +19 -2
- package/dist/services/context-injector.js.map +1 -1
- package/dist/services/index.d.ts +5 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +7 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/memory-router.d.ts +8 -0
- package/dist/services/memory-router.d.ts.map +1 -1
- package/dist/services/memory-router.js +19 -2
- package/dist/services/memory-router.js.map +1 -1
- package/dist/services/pattern-tracker.d.ts +13 -0
- package/dist/services/pattern-tracker.d.ts.map +1 -1
- package/dist/services/pattern-tracker.js +33 -3
- package/dist/services/pattern-tracker.js.map +1 -1
- package/dist/services/semantic-search.d.ts +12 -0
- package/dist/services/semantic-search.d.ts.map +1 -1
- package/dist/services/semantic-search.js +93 -17
- package/dist/services/semantic-search.js.map +1 -1
- package/dist/testing/index.d.ts +148 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +370 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/utils/resilience.d.ts +256 -0
- package/dist/utils/resilience.d.ts.map +1 -0
- package/dist/utils/resilience.js +499 -0
- package/dist/utils/resilience.js.map +1 -0
- package/package.json +12 -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,434 @@
|
|
|
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
|
+
// Skip rows with missing or invalid systems data
|
|
135
|
+
if (!row.systems || typeof row.systems !== 'string')
|
|
136
|
+
continue;
|
|
137
|
+
const systems = row.systems.split(',');
|
|
138
|
+
insights.push({
|
|
139
|
+
id: `shared-${row.patternId}`,
|
|
140
|
+
type: 'shared_pattern',
|
|
141
|
+
title: `Pattern "${row.patternId}" found in ${row.systemCount} projects`,
|
|
142
|
+
description: `This pattern appears ${row.totalCount} times across ${systems.join(', ')}`,
|
|
143
|
+
affectedSystems: systems,
|
|
144
|
+
priority: Number(row.totalCount) > 10 ? 'high' : 'medium',
|
|
145
|
+
actionable: true,
|
|
146
|
+
suggestedAction: 'Consider creating a shared ESLint rule or documentation',
|
|
147
|
+
createdAt: new Date().toISOString(),
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
// Find projects with low health scores
|
|
151
|
+
const metrics = await this.getProjectMetrics(options);
|
|
152
|
+
for (const project of metrics) {
|
|
153
|
+
if (project.healthScore < 50) {
|
|
154
|
+
insights.push({
|
|
155
|
+
id: `health-${project.system}`,
|
|
156
|
+
type: 'warning',
|
|
157
|
+
title: `${project.system} has low health score (${project.healthScore}%)`,
|
|
158
|
+
description: `Project needs attention: low activity or missing components`,
|
|
159
|
+
affectedSystems: [project.system],
|
|
160
|
+
priority: project.healthScore < 30 ? 'high' : 'medium',
|
|
161
|
+
actionable: true,
|
|
162
|
+
suggestedAction: 'Review project configuration and recent activity',
|
|
163
|
+
createdAt: new Date().toISOString(),
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// Find best practices from high-performing projects
|
|
168
|
+
const topProjects = metrics.filter(p => p.healthScore >= 80);
|
|
169
|
+
if (topProjects.length > 0) {
|
|
170
|
+
const bestProject = topProjects.sort((a, b) => b.memories - a.memories)[0];
|
|
171
|
+
insights.push({
|
|
172
|
+
id: `best-practice-${bestProject.system}`,
|
|
173
|
+
type: 'best_practice',
|
|
174
|
+
title: `${bestProject.system} is a model project`,
|
|
175
|
+
description: `High health score (${bestProject.healthScore}%) with ${bestProject.memories} memories`,
|
|
176
|
+
affectedSystems: [bestProject.system],
|
|
177
|
+
priority: 'low',
|
|
178
|
+
actionable: false,
|
|
179
|
+
createdAt: new Date().toISOString(),
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
return insights;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Compare patterns across projects
|
|
186
|
+
*/
|
|
187
|
+
async comparePatterns(options) {
|
|
188
|
+
const db = turso.getClient();
|
|
189
|
+
const comparisons = [];
|
|
190
|
+
const result = await db.execute(`
|
|
191
|
+
SELECT
|
|
192
|
+
json_extract(content, '$.patternId') as patternId,
|
|
193
|
+
json_extract(content, '$.description') as description,
|
|
194
|
+
system,
|
|
195
|
+
json_extract(content, '$.count') as count
|
|
196
|
+
FROM items
|
|
197
|
+
WHERE type = 'pattern' AND status = 'active'
|
|
198
|
+
ORDER BY patternId
|
|
199
|
+
`);
|
|
200
|
+
// Group by pattern
|
|
201
|
+
const patternGroups = new Map();
|
|
202
|
+
for (const row of result.rows) {
|
|
203
|
+
const patternId = row.patternId;
|
|
204
|
+
const system = row.system;
|
|
205
|
+
const count = Number(row.count ?? 0);
|
|
206
|
+
if (!patternGroups.has(patternId)) {
|
|
207
|
+
patternGroups.set(patternId, {
|
|
208
|
+
description: row.description ?? '',
|
|
209
|
+
occurrences: new Map(),
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
const group = patternGroups.get(patternId);
|
|
213
|
+
group.occurrences.set(system, (group.occurrences.get(system) ?? 0) + count);
|
|
214
|
+
}
|
|
215
|
+
for (const [patternId, data] of patternGroups) {
|
|
216
|
+
const occurrences = {};
|
|
217
|
+
let totalOccurrences = 0;
|
|
218
|
+
for (const [system, count] of data.occurrences) {
|
|
219
|
+
occurrences[system] = count;
|
|
220
|
+
totalOccurrences += count;
|
|
221
|
+
}
|
|
222
|
+
comparisons.push({
|
|
223
|
+
patternId,
|
|
224
|
+
description: data.description,
|
|
225
|
+
occurrences,
|
|
226
|
+
totalOccurrences,
|
|
227
|
+
trend: 'stable', // Would need historical data for real trend
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
return comparisons.sort((a, b) => b.totalOccurrences - a.totalOccurrences).slice(0, 20);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Find learning transfer opportunities
|
|
234
|
+
*/
|
|
235
|
+
async findLearningOpportunities(options) {
|
|
236
|
+
const db = turso.getClient();
|
|
237
|
+
const opportunities = [];
|
|
238
|
+
// Find high-value memories that could benefit other projects
|
|
239
|
+
const memoriesResult = await db.execute(`
|
|
240
|
+
SELECT
|
|
241
|
+
id,
|
|
242
|
+
system,
|
|
243
|
+
json_extract(content, '$.title') as title,
|
|
244
|
+
json_extract(content, '$.domain') as domain,
|
|
245
|
+
json_extract(content, '$.feedbackScore') as feedbackScore,
|
|
246
|
+
json_extract(content, '$.accessCount') as accessCount
|
|
247
|
+
FROM items
|
|
248
|
+
WHERE type = 'memory'
|
|
249
|
+
AND status = 'active'
|
|
250
|
+
AND COALESCE(json_extract(content, '$.feedbackScore'), 0.5) >= 0.7
|
|
251
|
+
AND COALESCE(json_extract(content, '$.accessCount'), 0) >= 3
|
|
252
|
+
ORDER BY feedbackScore DESC, accessCount DESC
|
|
253
|
+
LIMIT 50
|
|
254
|
+
`);
|
|
255
|
+
// Get all active systems
|
|
256
|
+
const systemsResult = await db.execute(`
|
|
257
|
+
SELECT DISTINCT system FROM items WHERE status = 'active'
|
|
258
|
+
`);
|
|
259
|
+
const allSystems = systemsResult.rows.map(r => r.system);
|
|
260
|
+
for (const row of memoriesResult.rows) {
|
|
261
|
+
const fromSystem = row.system;
|
|
262
|
+
const feedbackScore = Number(row.feedbackScore ?? 0.5);
|
|
263
|
+
const accessCount = Number(row.accessCount ?? 0);
|
|
264
|
+
// Suggest transfer to other systems
|
|
265
|
+
for (const toSystem of allSystems) {
|
|
266
|
+
if (toSystem === fromSystem)
|
|
267
|
+
continue;
|
|
268
|
+
const relevanceScore = (feedbackScore * 0.6) + (Math.min(accessCount / 10, 1) * 0.4);
|
|
269
|
+
if (relevanceScore >= 0.6) {
|
|
270
|
+
opportunities.push({
|
|
271
|
+
fromSystem,
|
|
272
|
+
toSystem,
|
|
273
|
+
memoryId: row.id,
|
|
274
|
+
memoryTitle: row.title ?? 'Untitled',
|
|
275
|
+
relevanceScore,
|
|
276
|
+
transferReason: `High feedback score (${(feedbackScore * 100).toFixed(0)}%) and frequently accessed`,
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return opportunities
|
|
282
|
+
.sort((a, b) => b.relevanceScore - a.relevanceScore)
|
|
283
|
+
.slice(0, 20);
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Get activity timeline across all projects
|
|
287
|
+
*/
|
|
288
|
+
async getActivityTimeline(days = 30) {
|
|
289
|
+
const db = turso.getClient();
|
|
290
|
+
const result = await db.execute({
|
|
291
|
+
sql: `
|
|
292
|
+
SELECT
|
|
293
|
+
DATE(created_at) as date,
|
|
294
|
+
system,
|
|
295
|
+
COUNT(*) as itemsCreated,
|
|
296
|
+
SUM(CASE WHEN type = 'agent_session' THEN 1 ELSE 0 END) as sessionsStarted
|
|
297
|
+
FROM items
|
|
298
|
+
WHERE created_at > datetime('now', '-' || ? || ' days')
|
|
299
|
+
GROUP BY DATE(created_at), system
|
|
300
|
+
ORDER BY date DESC
|
|
301
|
+
`,
|
|
302
|
+
args: [days],
|
|
303
|
+
});
|
|
304
|
+
return result.rows.map(row => ({
|
|
305
|
+
date: row.date,
|
|
306
|
+
system: row.system,
|
|
307
|
+
itemsCreated: Number(row.itemsCreated),
|
|
308
|
+
sessionsStarted: Number(row.sessionsStarted),
|
|
309
|
+
}));
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Get top contributors (systems with most activity)
|
|
313
|
+
*/
|
|
314
|
+
async getTopContributors(limit = 5) {
|
|
315
|
+
const db = turso.getClient();
|
|
316
|
+
const result = await db.execute({
|
|
317
|
+
sql: `
|
|
318
|
+
SELECT
|
|
319
|
+
system,
|
|
320
|
+
SUM(CASE WHEN type = 'memory' THEN 1 ELSE 0 END) as memoriesCreated,
|
|
321
|
+
SUM(CASE WHEN type = 'task' AND json_extract(content, '$.status') = 'completed' THEN 1 ELSE 0 END) as tasksCompleted,
|
|
322
|
+
SUM(CASE WHEN type = 'pattern' THEN 1 ELSE 0 END) as patternsDetected
|
|
323
|
+
FROM items
|
|
324
|
+
WHERE status = 'active' AND created_at > datetime('now', '-30 days')
|
|
325
|
+
GROUP BY system
|
|
326
|
+
ORDER BY memoriesCreated DESC
|
|
327
|
+
LIMIT ?
|
|
328
|
+
`,
|
|
329
|
+
args: [limit],
|
|
330
|
+
});
|
|
331
|
+
return result.rows.map(row => {
|
|
332
|
+
const memoriesCreated = Number(row.memoriesCreated);
|
|
333
|
+
const tasksCompleted = Number(row.tasksCompleted);
|
|
334
|
+
const patternsDetected = Number(row.patternsDetected);
|
|
335
|
+
const score = memoriesCreated * 2 + tasksCompleted * 3 + patternsDetected;
|
|
336
|
+
return {
|
|
337
|
+
system: row.system,
|
|
338
|
+
memoriesCreated,
|
|
339
|
+
tasksCompleted,
|
|
340
|
+
patternsDetected,
|
|
341
|
+
score,
|
|
342
|
+
};
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
// ==========================================================================
|
|
346
|
+
// Private Methods
|
|
347
|
+
// ==========================================================================
|
|
348
|
+
calculateHealthScore(typeCounts, recentSessions) {
|
|
349
|
+
let score = 0;
|
|
350
|
+
// Has memories (30 points)
|
|
351
|
+
if ((typeCounts['memory'] ?? 0) > 0) {
|
|
352
|
+
score += Math.min(30, (typeCounts['memory'] ?? 0) * 3);
|
|
353
|
+
}
|
|
354
|
+
// Has recent activity (30 points)
|
|
355
|
+
score += Math.min(30, recentSessions * 5);
|
|
356
|
+
// Has tasks (20 points)
|
|
357
|
+
if ((typeCounts['task'] ?? 0) > 0) {
|
|
358
|
+
score += Math.min(20, (typeCounts['task'] ?? 0) * 2);
|
|
359
|
+
}
|
|
360
|
+
// Has patterns detected (10 points)
|
|
361
|
+
if ((typeCounts['pattern'] ?? 0) > 0) {
|
|
362
|
+
score += Math.min(10, (typeCounts['pattern'] ?? 0));
|
|
363
|
+
}
|
|
364
|
+
// Has knowledge (10 points)
|
|
365
|
+
if ((typeCounts['knowledge'] ?? 0) > 0) {
|
|
366
|
+
score += 10;
|
|
367
|
+
}
|
|
368
|
+
return Math.min(100, score);
|
|
369
|
+
}
|
|
370
|
+
generateRecommendations(metrics, insights, patterns) {
|
|
371
|
+
const recommendations = [];
|
|
372
|
+
// Low health projects
|
|
373
|
+
const lowHealthProjects = metrics.filter(p => p.healthScore < 50);
|
|
374
|
+
if (lowHealthProjects.length > 0) {
|
|
375
|
+
recommendations.push(`Review ${lowHealthProjects.length} projects with low health scores: ${lowHealthProjects.map(p => p.system).join(', ')}`);
|
|
376
|
+
}
|
|
377
|
+
// Shared patterns
|
|
378
|
+
const sharedPatterns = patterns.filter(p => Object.keys(p.occurrences).length > 1);
|
|
379
|
+
if (sharedPatterns.length > 0) {
|
|
380
|
+
recommendations.push(`${sharedPatterns.length} patterns appear across multiple projects - consider creating shared rules`);
|
|
381
|
+
}
|
|
382
|
+
// Inactive projects
|
|
383
|
+
const inactiveProjects = metrics.filter(p => {
|
|
384
|
+
if (!p.lastActivity)
|
|
385
|
+
return true;
|
|
386
|
+
const lastDate = new Date(p.lastActivity);
|
|
387
|
+
const daysSinceActivity = (Date.now() - lastDate.getTime()) / (1000 * 60 * 60 * 24);
|
|
388
|
+
return daysSinceActivity > 7;
|
|
389
|
+
});
|
|
390
|
+
if (inactiveProjects.length > 0) {
|
|
391
|
+
recommendations.push(`${inactiveProjects.length} projects have been inactive for over a week`);
|
|
392
|
+
}
|
|
393
|
+
// High-value insights
|
|
394
|
+
const highPriorityInsights = insights.filter(i => i.priority === 'high' && i.actionable);
|
|
395
|
+
if (highPriorityInsights.length > 0) {
|
|
396
|
+
recommendations.push(`Address ${highPriorityInsights.length} high-priority actionable insights`);
|
|
397
|
+
}
|
|
398
|
+
return recommendations;
|
|
399
|
+
}
|
|
400
|
+
getFromCache(key) {
|
|
401
|
+
const cached = this.cache.get(key);
|
|
402
|
+
if (cached && cached.expiry > Date.now()) {
|
|
403
|
+
return cached.data;
|
|
404
|
+
}
|
|
405
|
+
this.cache.delete(key);
|
|
406
|
+
return null;
|
|
407
|
+
}
|
|
408
|
+
setCache(key, data) {
|
|
409
|
+
this.cache.set(key, {
|
|
410
|
+
data,
|
|
411
|
+
expiry: Date.now() + this.cacheTTL,
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Clear the cache
|
|
416
|
+
*/
|
|
417
|
+
clearCache() {
|
|
418
|
+
this.cache.clear();
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
// =============================================================================
|
|
422
|
+
// Singleton Instance
|
|
423
|
+
// =============================================================================
|
|
424
|
+
let instance = null;
|
|
425
|
+
export function getCrossProjectAnalytics() {
|
|
426
|
+
if (!instance) {
|
|
427
|
+
instance = new CrossProjectAnalyticsService();
|
|
428
|
+
}
|
|
429
|
+
return instance;
|
|
430
|
+
}
|
|
431
|
+
export function resetCrossProjectAnalytics() {
|
|
432
|
+
instance = null;
|
|
433
|
+
}
|
|
434
|
+
//# 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"}
|
package/dist/analytics/index.js
CHANGED
|
@@ -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
|
|
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(
|
|
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,
|
|
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"}
|