strray-ai 1.7.2 → 1.7.3
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/.opencode/hooks/post-commit +152 -55
- package/.opencode/hooks/post-commit.backup +110 -174
- package/.opencode/hooks/post-push +47 -64
- package/.opencode/hooks/post-push.backup +34 -38
- package/.opencode/strray/features.json +3 -3
- package/.opencode/strray/routing-mappings.json +90 -34
- package/AGENTS.md +7 -2
- package/dist/analytics/anonymization-engine.d.ts +108 -0
- package/dist/analytics/anonymization-engine.d.ts.map +1 -0
- package/dist/analytics/anonymization-engine.js +352 -0
- package/dist/analytics/anonymization-engine.js.map +1 -0
- package/dist/analytics/consent-manager.d.ts +94 -0
- package/dist/analytics/consent-manager.d.ts.map +1 -0
- package/dist/analytics/consent-manager.js +257 -0
- package/dist/analytics/consent-manager.js.map +1 -0
- package/dist/analytics/emerging-pattern-detector.d.ts +68 -0
- package/dist/analytics/emerging-pattern-detector.d.ts.map +1 -0
- package/dist/analytics/emerging-pattern-detector.js +250 -0
- package/dist/analytics/emerging-pattern-detector.js.map +1 -0
- package/dist/analytics/pattern-learning-engine.d.ts +81 -0
- package/dist/analytics/pattern-learning-engine.d.ts.map +1 -0
- package/dist/analytics/pattern-learning-engine.js +262 -0
- package/dist/analytics/pattern-learning-engine.js.map +1 -0
- package/dist/analytics/pattern-performance-tracker.d.ts +89 -0
- package/dist/analytics/pattern-performance-tracker.d.ts.map +1 -0
- package/dist/analytics/pattern-performance-tracker.js +289 -0
- package/dist/analytics/pattern-performance-tracker.js.map +1 -0
- package/dist/analytics/prompt-pattern-analyzer.d.ts +100 -0
- package/dist/analytics/prompt-pattern-analyzer.d.ts.map +1 -0
- package/dist/analytics/prompt-pattern-analyzer.js +372 -0
- package/dist/analytics/prompt-pattern-analyzer.js.map +1 -0
- package/dist/analytics/routing-performance-analyzer.d.ts +102 -0
- package/dist/analytics/routing-performance-analyzer.d.ts.map +1 -0
- package/dist/analytics/routing-performance-analyzer.js +342 -0
- package/dist/analytics/routing-performance-analyzer.js.map +1 -0
- package/dist/analytics/routing-refiner.d.ts +105 -0
- package/dist/analytics/routing-refiner.d.ts.map +1 -0
- package/dist/analytics/routing-refiner.js +381 -0
- package/dist/analytics/routing-refiner.js.map +1 -0
- package/dist/cli/commands/analytics-disable.d.ts +10 -0
- package/dist/cli/commands/analytics-disable.d.ts.map +1 -0
- package/dist/cli/commands/analytics-disable.js +73 -0
- package/dist/cli/commands/analytics-disable.js.map +1 -0
- package/dist/cli/commands/analytics-enable-action.d.ts +9 -0
- package/dist/cli/commands/analytics-enable-action.d.ts.map +1 -0
- package/dist/cli/commands/analytics-enable-action.js +83 -0
- package/dist/cli/commands/analytics-enable-action.js.map +1 -0
- package/dist/cli/commands/analytics-preview.d.ts +10 -0
- package/dist/cli/commands/analytics-preview.d.ts.map +1 -0
- package/dist/cli/commands/analytics-preview.js +107 -0
- package/dist/cli/commands/analytics-preview.js.map +1 -0
- package/dist/cli/commands/analytics-status.d.ts +10 -0
- package/dist/cli/commands/analytics-status.d.ts.map +1 -0
- package/dist/cli/commands/analytics-status.js +68 -0
- package/dist/cli/commands/analytics-status.js.map +1 -0
- package/dist/cli/index.js +6 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/core/adaptive-kernel.d.ts +110 -0
- package/dist/core/adaptive-kernel.d.ts.map +1 -0
- package/dist/core/adaptive-kernel.js +193 -0
- package/dist/core/adaptive-kernel.js.map +1 -0
- package/dist/core/kernel-patterns.d.ts +105 -0
- package/dist/core/kernel-patterns.d.ts.map +1 -0
- package/dist/core/kernel-patterns.js +328 -0
- package/dist/core/kernel-patterns.js.map +1 -0
- package/dist/core/orchestrator.d.ts +1 -0
- package/dist/core/orchestrator.d.ts.map +1 -1
- package/dist/core/orchestrator.js +40 -11
- package/dist/core/orchestrator.js.map +1 -1
- package/dist/delegation/agent-delegator.d.ts +1 -0
- package/dist/delegation/agent-delegator.d.ts.map +1 -1
- package/dist/delegation/agent-delegator.js +24 -2
- package/dist/delegation/agent-delegator.js.map +1 -1
- package/dist/delegation/task-skill-router.d.ts +269 -5
- package/dist/delegation/task-skill-router.d.ts.map +1 -1
- package/dist/delegation/task-skill-router.js +810 -23
- package/dist/delegation/task-skill-router.js.map +1 -1
- package/dist/postprocessor/PostProcessor.d.ts +10 -0
- package/dist/postprocessor/PostProcessor.d.ts.map +1 -1
- package/dist/postprocessor/PostProcessor.js +87 -17
- package/dist/postprocessor/PostProcessor.js.map +1 -1
- package/dist/processors/agents-md-validation-processor.d.ts +1 -0
- package/dist/processors/agents-md-validation-processor.d.ts.map +1 -1
- package/dist/processors/agents-md-validation-processor.js +34 -12
- package/dist/processors/agents-md-validation-processor.js.map +1 -1
- package/dist/processors/processor-manager.d.ts +7 -0
- package/dist/processors/processor-manager.d.ts.map +1 -1
- package/dist/processors/processor-manager.js +93 -0
- package/dist/processors/processor-manager.js.map +1 -1
- package/dist/processors/test-auto-creation-processor.d.ts.map +1 -1
- package/dist/processors/test-auto-creation-processor.js +52 -38
- package/dist/processors/test-auto-creation-processor.js.map +1 -1
- package/dist/scripts/analytics/daily-routing-analysis.d.ts +18 -0
- package/dist/scripts/analytics/daily-routing-analysis.d.ts.map +1 -0
- package/dist/scripts/analytics/daily-routing-analysis.js +268 -0
- package/dist/scripts/analytics/daily-routing-analysis.js.map +1 -0
- package/dist/scripts/analytics/index.d.ts +15 -0
- package/dist/scripts/analytics/index.d.ts.map +1 -0
- package/dist/scripts/analytics/index.js +17 -0
- package/dist/scripts/analytics/index.js.map +1 -0
- package/dist/scripts/test-p9.d.ts +15 -0
- package/dist/scripts/test-p9.d.ts.map +1 -0
- package/dist/scripts/test-p9.js +220 -0
- package/dist/scripts/test-p9.js.map +1 -0
- package/package.json +6 -2
- package/scripts/node/kernel-e2e-test.mjs +168 -0
- package/scripts/node/kernel-framework-test.mjs +127 -0
- package/scripts/node/kernel-live-test.mjs +147 -0
- package/scripts/node/kernel-real-framework-test.mjs +103 -0
- package/scripts/node/kernel-update.cjs +379 -0
- package/scripts/node/reflection-check.sh +245 -27
- package/scripts/node/test-simple-names-comprehensive.mjs +221 -0
- package/scripts/node/test-simple-names.mjs +39 -0
- package/dist/agents/documentation-writer.d.ts +0 -9
- package/dist/agents/documentation-writer.d.ts.map +0 -1
- package/dist/agents/documentation-writer.js +0 -85
- package/dist/agents/documentation-writer.js.map +0 -1
- package/dist/agents/explore.d.ts +0 -8
- package/dist/agents/explore.d.ts.map +0 -1
- package/dist/agents/explore.js +0 -55
- package/dist/agents/explore.js.map +0 -1
- package/dist/agents/librarian.d.ts +0 -3
- package/dist/agents/librarian.d.ts.map +0 -1
- package/dist/agents/librarian.js +0 -84
- package/dist/agents/librarian.js.map +0 -1
- package/dist/agents/marketing-expert.d.ts +0 -9
- package/dist/agents/marketing-expert.d.ts.map +0 -1
- package/dist/agents/marketing-expert.js +0 -112
- package/dist/agents/marketing-expert.js.map +0 -1
- package/dist/agents/oracle.d.ts +0 -8
- package/dist/agents/oracle.d.ts.map +0 -1
- package/dist/agents/oracle.js +0 -51
- package/dist/agents/oracle.js.map +0 -1
- package/dist/agents/seo-copywriter.d.ts +0 -10
- package/dist/agents/seo-copywriter.d.ts.map +0 -1
- package/dist/agents/seo-copywriter.js +0 -73
- package/dist/agents/seo-copywriter.js.map +0 -1
- package/dist/agents/seo-specialist.d.ts +0 -9
- package/dist/agents/seo-specialist.d.ts.map +0 -1
- package/dist/agents/seo-specialist.js +0 -54
- package/dist/agents/seo-specialist.js.map +0 -1
- package/dist/agents/test-architect.d.ts +0 -3
- package/dist/agents/test-architect.d.ts.map +0 -1
- package/dist/agents/test-architect.js +0 -96
- package/dist/agents/test-architect.js.map +0 -1
- package/dist/mcps/enhanced-orchestrator.server.d.ts +0 -14
- package/dist/mcps/enhanced-orchestrator.server.d.ts.map +0 -1
- package/dist/mcps/enhanced-orchestrator.server.js +0 -266
- package/dist/mcps/enhanced-orchestrator.server.js.map +0 -1
- package/dist/mcps/knowledge-skills/analyzer.server.d.ts +0 -7
- package/dist/mcps/knowledge-skills/analyzer.server.d.ts.map +0 -1
- package/dist/mcps/knowledge-skills/analyzer.server.js +0 -282
- package/dist/mcps/knowledge-skills/analyzer.server.js.map +0 -1
- package/dist/mcps/knowledge-skills/documentation-generation.server.d.ts +0 -48
- package/dist/mcps/knowledge-skills/documentation-generation.server.d.ts.map +0 -1
- package/dist/mcps/knowledge-skills/documentation-generation.server.js +0 -1238
- package/dist/mcps/knowledge-skills/documentation-generation.server.js.map +0 -1
- package/dist/mcps/knowledge-skills/explore.server.d.ts +0 -21
- package/dist/mcps/knowledge-skills/explore.server.d.ts.map +0 -1
- package/dist/mcps/knowledge-skills/explore.server.js +0 -582
- package/dist/mcps/knowledge-skills/explore.server.js.map +0 -1
- package/dist/mcps/knowledge-skills/marketing-expert.server.d.ts +0 -8
- package/dist/mcps/knowledge-skills/marketing-expert.server.d.ts.map +0 -1
- package/dist/mcps/knowledge-skills/marketing-expert.server.js +0 -356
- package/dist/mcps/knowledge-skills/marketing-expert.server.js.map +0 -1
- package/dist/mcps/knowledge-skills/oracle.server.d.ts +0 -25
- package/dist/mcps/knowledge-skills/oracle.server.d.ts.map +0 -1
- package/dist/mcps/knowledge-skills/oracle.server.js +0 -569
- package/dist/mcps/knowledge-skills/oracle.server.js.map +0 -1
- package/dist/mcps/knowledge-skills/seo-copywriter.server.d.ts +0 -8
- package/dist/mcps/knowledge-skills/seo-copywriter.server.d.ts.map +0 -1
- package/dist/mcps/knowledge-skills/seo-copywriter.server.js +0 -251
- package/dist/mcps/knowledge-skills/seo-copywriter.server.js.map +0 -1
- package/dist/mcps/knowledge-skills/seo-specialist.server.d.ts +0 -8
- package/dist/mcps/knowledge-skills/seo-specialist.server.d.ts.map +0 -1
- package/dist/mcps/knowledge-skills/seo-specialist.server.js +0 -211
- package/dist/mcps/knowledge-skills/seo-specialist.server.js.map +0 -1
- package/dist/mcps/librarian.server.d.ts +0 -17
- package/dist/mcps/librarian.server.d.ts.map +0 -1
- package/dist/mcps/librarian.server.js +0 -382
- package/dist/mcps/librarian.server.js.map +0 -1
- package/dist/optimization/performance-optimizer.d.ts +0 -179
- package/dist/optimization/performance-optimizer.d.ts.map +0 -1
- package/dist/optimization/performance-optimizer.js +0 -556
- package/dist/optimization/performance-optimizer.js.map +0 -1
- package/dist/utils/memory-pool.d.ts +0 -90
- package/dist/utils/memory-pool.d.ts.map +0 -1
- package/dist/utils/memory-pool.js +0 -245
- package/dist/utils/memory-pool.js.map +0 -1
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pattern Performance Tracker for P9 - ADAPTIVE_PATTERN_LEARNING
|
|
3
|
+
*
|
|
4
|
+
* Monitors pattern effectiveness over time, detects pattern drift,
|
|
5
|
+
* and provides metrics for adaptive kernel modifications.
|
|
6
|
+
*
|
|
7
|
+
* @version 1.0.0
|
|
8
|
+
* @since 2026-03-05
|
|
9
|
+
*/
|
|
10
|
+
import { frameworkLogger } from "../core/framework-logger.js";
|
|
11
|
+
export class PatternPerformanceTracker {
|
|
12
|
+
patternMetrics = new Map();
|
|
13
|
+
maxTimeSeriesPoints = 1000;
|
|
14
|
+
driftThreshold = 0.15; // 15% change triggers drift detection
|
|
15
|
+
minSamplesForDrift = 10;
|
|
16
|
+
baselineWindowSize = 100;
|
|
17
|
+
/**
|
|
18
|
+
* Track performance metrics for a pattern
|
|
19
|
+
*/
|
|
20
|
+
trackPatternPerformance(patternId, outcome) {
|
|
21
|
+
const existing = this.patternMetrics.get(patternId);
|
|
22
|
+
if (!existing) {
|
|
23
|
+
// Initialize new pattern metrics
|
|
24
|
+
this.patternMetrics.set(patternId, {
|
|
25
|
+
patternId,
|
|
26
|
+
totalUsages: 1,
|
|
27
|
+
successfulUsages: outcome.success ? 1 : 0,
|
|
28
|
+
failedUsages: outcome.success ? 0 : 1,
|
|
29
|
+
successRate: outcome.success ? 1 : 0,
|
|
30
|
+
avgConfidence: outcome.confidence,
|
|
31
|
+
avgResponseTime: outcome.responseTime || 0,
|
|
32
|
+
lastUpdated: new Date(),
|
|
33
|
+
timeSeries: [{
|
|
34
|
+
timestamp: new Date(),
|
|
35
|
+
successRate: outcome.success ? 1 : 0,
|
|
36
|
+
avgConfidence: outcome.confidence,
|
|
37
|
+
usageCount: 1
|
|
38
|
+
}]
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
// Update existing metrics
|
|
43
|
+
existing.totalUsages++;
|
|
44
|
+
if (outcome.success) {
|
|
45
|
+
existing.successfulUsages++;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
existing.failedUsages++;
|
|
49
|
+
}
|
|
50
|
+
// Update success rate
|
|
51
|
+
existing.successRate = existing.successfulUsages / existing.totalUsages;
|
|
52
|
+
// Update average confidence (exponential moving average)
|
|
53
|
+
existing.avgConfidence = (existing.avgConfidence * 0.7) + (outcome.confidence * 0.3);
|
|
54
|
+
// Update average response time
|
|
55
|
+
if (outcome.responseTime !== undefined) {
|
|
56
|
+
existing.avgResponseTime = (existing.avgResponseTime * 0.8) + (outcome.responseTime * 0.2);
|
|
57
|
+
}
|
|
58
|
+
existing.lastUpdated = new Date();
|
|
59
|
+
// Add to time series
|
|
60
|
+
existing.timeSeries.push({
|
|
61
|
+
timestamp: new Date(),
|
|
62
|
+
successRate: existing.successRate,
|
|
63
|
+
avgConfidence: existing.avgConfidence,
|
|
64
|
+
usageCount: existing.totalUsages
|
|
65
|
+
});
|
|
66
|
+
// Trim time series if too large
|
|
67
|
+
if (existing.timeSeries.length > this.maxTimeSeriesPoints) {
|
|
68
|
+
existing.timeSeries = existing.timeSeries.slice(-this.maxTimeSeriesPoints);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
frameworkLogger.log("pattern-performance-tracker", "metrics-updated", "debug", {
|
|
72
|
+
patternId,
|
|
73
|
+
successRate: this.patternMetrics.get(patternId)?.successRate,
|
|
74
|
+
avgConfidence: this.patternMetrics.get(patternId)?.avgConfidence
|
|
75
|
+
}, undefined);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Detect if a pattern has drifted from its historical baseline
|
|
79
|
+
*/
|
|
80
|
+
detectPatternDrift(patternId) {
|
|
81
|
+
const metrics = this.patternMetrics.get(patternId);
|
|
82
|
+
if (!metrics || metrics.totalUsages < this.minSamplesForDrift) {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
// Calculate historical baseline (first half of time series)
|
|
86
|
+
const timeSeries = metrics.timeSeries;
|
|
87
|
+
const midpoint = Math.floor(timeSeries.length / 2);
|
|
88
|
+
const historicalData = timeSeries.slice(0, midpoint);
|
|
89
|
+
const recentData = timeSeries.slice(midpoint);
|
|
90
|
+
if (historicalData.length < 5 || recentData.length < 5) {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
// Calculate historical baseline
|
|
94
|
+
const historicalSuccessRate = historicalData.reduce((sum, d) => sum + d.successRate, 0) / historicalData.length;
|
|
95
|
+
const historicalAvgConfidence = historicalData.reduce((sum, d) => sum + d.avgConfidence, 0) / historicalData.length;
|
|
96
|
+
// Calculate recent performance
|
|
97
|
+
const recentSuccessRate = recentData.reduce((sum, d) => sum + d.successRate, 0) / recentData.length;
|
|
98
|
+
const recentAvgConfidence = recentData.reduce((sum, d) => sum + d.avgConfidence, 0) / recentData.length;
|
|
99
|
+
// Calculate drift magnitude
|
|
100
|
+
const successRateDrift = Math.abs(recentSuccessRate - historicalSuccessRate);
|
|
101
|
+
const confidenceDrift = Math.abs(recentAvgConfidence - historicalAvgConfidence);
|
|
102
|
+
const driftMagnitude = Math.max(successRateDrift, confidenceDrift);
|
|
103
|
+
// Determine drift direction
|
|
104
|
+
let driftDirection;
|
|
105
|
+
if (recentSuccessRate > historicalSuccessRate + 0.05) {
|
|
106
|
+
driftDirection = 'increasing';
|
|
107
|
+
}
|
|
108
|
+
else if (recentSuccessRate < historicalSuccessRate - 0.05) {
|
|
109
|
+
driftDirection = 'decreasing';
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
driftDirection = 'unstable';
|
|
113
|
+
}
|
|
114
|
+
const drifted = driftMagnitude > this.driftThreshold;
|
|
115
|
+
// Determine recommended action
|
|
116
|
+
let recommendedAction = 'continue';
|
|
117
|
+
if (drifted && driftDirection === 'decreasing') {
|
|
118
|
+
recommendedAction = 'recalibrate';
|
|
119
|
+
}
|
|
120
|
+
else if (drifted && driftMagnitude > 0.25) {
|
|
121
|
+
recommendedAction = 'investigate';
|
|
122
|
+
}
|
|
123
|
+
else if (driftDirection === 'unstable' && driftMagnitude > 0.1) {
|
|
124
|
+
recommendedAction = 'monitor';
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
drifted,
|
|
128
|
+
patternId,
|
|
129
|
+
currentMetrics: metrics,
|
|
130
|
+
historicalBaseline: {
|
|
131
|
+
patternId,
|
|
132
|
+
totalUsages: historicalData.length,
|
|
133
|
+
successfulUsages: Math.round(historicalData.length * historicalSuccessRate),
|
|
134
|
+
failedUsages: Math.round(historicalData.length * (1 - historicalSuccessRate)),
|
|
135
|
+
successRate: historicalSuccessRate,
|
|
136
|
+
avgConfidence: historicalAvgConfidence,
|
|
137
|
+
avgResponseTime: 0,
|
|
138
|
+
lastUpdated: historicalData[0]?.timestamp || new Date(),
|
|
139
|
+
timeSeries: historicalData
|
|
140
|
+
},
|
|
141
|
+
driftMagnitude,
|
|
142
|
+
driftDirection,
|
|
143
|
+
confidence: Math.min(1, driftMagnitude * 2),
|
|
144
|
+
recommendedAction
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Get all pattern drift analyses
|
|
149
|
+
*/
|
|
150
|
+
getAllDriftAnalyses() {
|
|
151
|
+
const analyses = [];
|
|
152
|
+
for (const patternId of this.patternMetrics.keys()) {
|
|
153
|
+
const analysis = this.detectPatternDrift(patternId);
|
|
154
|
+
if (analysis) {
|
|
155
|
+
analyses.push(analysis);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return analyses;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Calculate adaptive confidence thresholds based on performance
|
|
162
|
+
*/
|
|
163
|
+
calculateAdaptiveThresholds() {
|
|
164
|
+
const perAgent = new Map();
|
|
165
|
+
const perSkill = new Map();
|
|
166
|
+
// Group metrics by agent/skill and calculate thresholds
|
|
167
|
+
const agentMetrics = new Map();
|
|
168
|
+
const skillMetrics = new Map();
|
|
169
|
+
for (const [patternId, metrics] of this.patternMetrics.entries()) {
|
|
170
|
+
// Extract agent/skill from patternId (format: "agent:skill")
|
|
171
|
+
const parts = patternId.includes(':') ? patternId.split(':') : [patternId, 'default'];
|
|
172
|
+
const agent = parts[0] || patternId;
|
|
173
|
+
const skill = parts[1] || 'default';
|
|
174
|
+
if (!agentMetrics.has(agent)) {
|
|
175
|
+
agentMetrics.set(agent, { successRates: [], confidences: [] });
|
|
176
|
+
}
|
|
177
|
+
agentMetrics.get(agent).successRates.push(metrics.successRate);
|
|
178
|
+
agentMetrics.get(agent).confidences.push(metrics.avgConfidence);
|
|
179
|
+
if (!skillMetrics.has(skill)) {
|
|
180
|
+
skillMetrics.set(skill, { successRates: [], confidences: [] });
|
|
181
|
+
}
|
|
182
|
+
skillMetrics.get(skill).successRates.push(metrics.successRate);
|
|
183
|
+
skillMetrics.get(skill).confidences.push(metrics.avgConfidence);
|
|
184
|
+
}
|
|
185
|
+
// Calculate thresholds for each agent
|
|
186
|
+
for (const [agent, data] of agentMetrics.entries()) {
|
|
187
|
+
if (data.successRates.length > 0) {
|
|
188
|
+
const avgSuccessRate = data.successRates.reduce((a, b) => a + b, 0) / data.successRates.length;
|
|
189
|
+
const avgConfidence = data.confidences.reduce((a, b) => a + b, 0) / data.confidences.length;
|
|
190
|
+
// Threshold is based on performance: higher performance = lower threshold needed
|
|
191
|
+
const threshold = Math.max(0.5, Math.min(0.9, avgSuccessRate * 0.8 + avgConfidence * 0.2));
|
|
192
|
+
perAgent.set(agent, threshold);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// Calculate thresholds for each skill
|
|
196
|
+
for (const [skill, data] of skillMetrics.entries()) {
|
|
197
|
+
if (data.successRates.length > 0) {
|
|
198
|
+
const avgSuccessRate = data.successRates.reduce((a, b) => a + b, 0) / data.successRates.length;
|
|
199
|
+
const avgConfidence = data.confidences.reduce((a, b) => a + b, 0) / data.confidences.length;
|
|
200
|
+
const threshold = Math.max(0.5, Math.min(0.9, avgSuccessRate * 0.8 + avgConfidence * 0.2));
|
|
201
|
+
perSkill.set(skill, threshold);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
// Calculate overall threshold
|
|
205
|
+
const allSuccessRates = Array.from(this.patternMetrics.values()).map(m => m.successRate);
|
|
206
|
+
const overallSuccessRate = allSuccessRates.length > 0
|
|
207
|
+
? allSuccessRates.reduce((a, b) => a + b, 0) / allSuccessRates.length
|
|
208
|
+
: 0.75;
|
|
209
|
+
const overall = Math.max(0.5, Math.min(0.9, overallSuccessRate));
|
|
210
|
+
return {
|
|
211
|
+
perAgent,
|
|
212
|
+
perSkill,
|
|
213
|
+
overall,
|
|
214
|
+
calibrationDate: new Date()
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Get system performance summary
|
|
219
|
+
*/
|
|
220
|
+
getSystemPerformanceSummary() {
|
|
221
|
+
const allMetrics = Array.from(this.patternMetrics.values());
|
|
222
|
+
if (allMetrics.length === 0) {
|
|
223
|
+
return {
|
|
224
|
+
overallSuccessRate: 0,
|
|
225
|
+
overallAvgConfidence: 0,
|
|
226
|
+
totalPatternsTracked: 0,
|
|
227
|
+
patternsWithDrift: [],
|
|
228
|
+
patternsNeedingAttention: [],
|
|
229
|
+
recommendations: ['No patterns tracked yet']
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
// Calculate overall metrics
|
|
233
|
+
const overallSuccessRate = allMetrics.reduce((sum, m) => sum + m.successRate, 0) / allMetrics.length;
|
|
234
|
+
const overallAvgConfidence = allMetrics.reduce((sum, m) => sum + m.avgConfidence, 0) / allMetrics.length;
|
|
235
|
+
// Get patterns with drift
|
|
236
|
+
const driftAnalyses = this.getAllDriftAnalyses();
|
|
237
|
+
const patternsWithDrift = driftAnalyses
|
|
238
|
+
.filter(a => a.drifted)
|
|
239
|
+
.map(a => a.patternId);
|
|
240
|
+
// Get patterns needing attention (low success rate or high drift)
|
|
241
|
+
const patternsNeedingAttention = allMetrics
|
|
242
|
+
.filter(m => m.successRate < 0.6 || m.totalUsages < 5)
|
|
243
|
+
.map(m => m.patternId);
|
|
244
|
+
// Generate recommendations
|
|
245
|
+
const recommendations = [];
|
|
246
|
+
if (patternsWithDrift.length > 0) {
|
|
247
|
+
recommendations.push(`${patternsWithDrift.length} patterns showing drift - consider recalibration`);
|
|
248
|
+
}
|
|
249
|
+
if (patternsNeedingAttention.length > 0) {
|
|
250
|
+
recommendations.push(`${patternsNeedingAttention.length} patterns need attention due to low performance`);
|
|
251
|
+
}
|
|
252
|
+
if (overallSuccessRate < 0.7) {
|
|
253
|
+
recommendations.push('Overall system performance below target - review routing logic');
|
|
254
|
+
}
|
|
255
|
+
if (recommendations.length === 0) {
|
|
256
|
+
recommendations.push('All patterns performing within normal parameters');
|
|
257
|
+
}
|
|
258
|
+
return {
|
|
259
|
+
overallSuccessRate,
|
|
260
|
+
overallAvgConfidence,
|
|
261
|
+
totalPatternsTracked: allMetrics.length,
|
|
262
|
+
patternsWithDrift,
|
|
263
|
+
patternsNeedingAttention,
|
|
264
|
+
recommendations
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Get metrics for a specific pattern
|
|
269
|
+
*/
|
|
270
|
+
getPatternMetrics(patternId) {
|
|
271
|
+
return this.patternMetrics.get(patternId) || null;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Get all tracked patterns
|
|
275
|
+
*/
|
|
276
|
+
getAllPatternMetrics() {
|
|
277
|
+
return Array.from(this.patternMetrics.values());
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Clear all metrics (for testing or reset)
|
|
281
|
+
*/
|
|
282
|
+
clear() {
|
|
283
|
+
this.patternMetrics.clear();
|
|
284
|
+
frameworkLogger.log("pattern-performance-tracker", "cleared", "info", {}, undefined);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
// Singleton instance
|
|
288
|
+
export const patternPerformanceTracker = new PatternPerformanceTracker();
|
|
289
|
+
//# sourceMappingURL=pattern-performance-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-performance-tracker.js","sourceRoot":"","sources":["../../src/analytics/pattern-performance-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt Pattern Analyzer for StringRay
|
|
3
|
+
*
|
|
4
|
+
* Analyzes actual vs. template prompts to detect gaps and emerging patterns.
|
|
5
|
+
* Integrates with RoutingOutcomeTracker to provide insights for template optimization.
|
|
6
|
+
*
|
|
7
|
+
* @version 1.0.0
|
|
8
|
+
* @since 2026-03-05
|
|
9
|
+
*/
|
|
10
|
+
export interface TemplateGap {
|
|
11
|
+
gapType: "missing_template" | "pattern_mismatch" | "emerging_pattern";
|
|
12
|
+
userRequest: string;
|
|
13
|
+
generatedPrompt: string;
|
|
14
|
+
suggestedAgent: string;
|
|
15
|
+
suggestedSkill: string;
|
|
16
|
+
frequency: number;
|
|
17
|
+
lastSeen: Date;
|
|
18
|
+
confidence: number;
|
|
19
|
+
}
|
|
20
|
+
export interface EmergingPattern {
|
|
21
|
+
patternId: string;
|
|
22
|
+
keywords: string[];
|
|
23
|
+
sampleRequests: string[];
|
|
24
|
+
suggestedAgent: string;
|
|
25
|
+
suggestedSkill: string;
|
|
26
|
+
confidence: number;
|
|
27
|
+
frequency: number;
|
|
28
|
+
avgConfidence: number;
|
|
29
|
+
successRate: number;
|
|
30
|
+
}
|
|
31
|
+
export interface PromptComparisonResult {
|
|
32
|
+
totalPrompts: number;
|
|
33
|
+
templateMatches: number;
|
|
34
|
+
nonTemplatePrompts: number;
|
|
35
|
+
templateMatchRate: number;
|
|
36
|
+
gaps: TemplateGap[];
|
|
37
|
+
emergingPatterns: EmergingPattern[];
|
|
38
|
+
topMissedKeywords: Array<{
|
|
39
|
+
keyword: string;
|
|
40
|
+
count: number;
|
|
41
|
+
suggestedMappings: string[];
|
|
42
|
+
}>;
|
|
43
|
+
agentCoverage: Map<string, {
|
|
44
|
+
total: number;
|
|
45
|
+
withTemplate: number;
|
|
46
|
+
withoutTemplate: number;
|
|
47
|
+
}>;
|
|
48
|
+
}
|
|
49
|
+
export interface TemplateOptimizationSuggestion {
|
|
50
|
+
suggestionType: "add_template" | "update_keywords" | "merge_patterns" | "remove_template";
|
|
51
|
+
templateName?: string;
|
|
52
|
+
keywords: string[];
|
|
53
|
+
targetAgent: string;
|
|
54
|
+
targetSkill: string;
|
|
55
|
+
confidence: number;
|
|
56
|
+
expectedImpact: string;
|
|
57
|
+
reasoning: string;
|
|
58
|
+
}
|
|
59
|
+
declare class PromptPatternAnalyzer {
|
|
60
|
+
private readonly minFrequencyThreshold;
|
|
61
|
+
private readonly confidenceThreshold;
|
|
62
|
+
private readonly emergingPatternMinSamples;
|
|
63
|
+
/**
|
|
64
|
+
* Analyze prompt patterns and compare against templates
|
|
65
|
+
*/
|
|
66
|
+
analyzePromptPatterns(): PromptComparisonResult;
|
|
67
|
+
/**
|
|
68
|
+
* Detect gaps where templates don't match user requests
|
|
69
|
+
*/
|
|
70
|
+
private detectTemplateGaps;
|
|
71
|
+
/**
|
|
72
|
+
* Identify emerging patterns from real usage
|
|
73
|
+
*/
|
|
74
|
+
private identifyEmergingPatterns;
|
|
75
|
+
/**
|
|
76
|
+
* Analyze frequently missed keywords
|
|
77
|
+
*/
|
|
78
|
+
private analyzeMissedKeywords;
|
|
79
|
+
/**
|
|
80
|
+
* Calculate agent coverage metrics
|
|
81
|
+
*/
|
|
82
|
+
private calculateAgentCoverage;
|
|
83
|
+
/**
|
|
84
|
+
* Generate template optimization suggestions
|
|
85
|
+
*/
|
|
86
|
+
generateOptimizationSuggestions(comparisonResult: PromptComparisonResult): TemplateOptimizationSuggestion[];
|
|
87
|
+
/**
|
|
88
|
+
* Get analytics summary as formatted report
|
|
89
|
+
*/
|
|
90
|
+
generateReport(comparisonResult: PromptComparisonResult): string;
|
|
91
|
+
private classifyGapType;
|
|
92
|
+
private normalizeRequest;
|
|
93
|
+
private extractKeywords;
|
|
94
|
+
private generatePatternId;
|
|
95
|
+
private selectBestAgent;
|
|
96
|
+
private emptyComparisonResult;
|
|
97
|
+
}
|
|
98
|
+
export declare const promptPatternAnalyzer: PromptPatternAnalyzer;
|
|
99
|
+
export {};
|
|
100
|
+
//# sourceMappingURL=prompt-pattern-analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-pattern-analyzer.d.ts","sourceRoot":"","sources":["../../src/analytics/prompt-pattern-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,kBAAkB,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;IACtE,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,IAAI,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,iBAAiB,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAC1F,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9F;AAED,MAAM,WAAW,8BAA8B;IAC7C,cAAc,EAAE,cAAc,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;IAC1F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,cAAM,qBAAqB;IACzB,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAK;IAC3C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAO;IAC3C,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAK;IAE/C;;OAEG;IACH,qBAAqB,IAAI,sBAAsB;IAiC/C;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA0C1B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA2EhC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAkC7B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA4B9B;;OAEG;IACH,+BAA+B,CAC7B,gBAAgB,EAAE,sBAAsB,GACvC,8BAA8B,EAAE;IAsDnC;;OAEG;IACH,cAAc,CAAC,gBAAgB,EAAE,sBAAsB,GAAG,MAAM;IAgEhE,OAAO,CAAC,eAAe;IAoBvB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,eAAe;IA8BvB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,eAAe;IAqBvB,OAAO,CAAC,qBAAqB;CAY9B;AAED,eAAO,MAAM,qBAAqB,uBAA8B,CAAC"}
|