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.
Files changed (189) hide show
  1. package/.opencode/hooks/post-commit +152 -55
  2. package/.opencode/hooks/post-commit.backup +110 -174
  3. package/.opencode/hooks/post-push +47 -64
  4. package/.opencode/hooks/post-push.backup +34 -38
  5. package/.opencode/strray/features.json +3 -3
  6. package/.opencode/strray/routing-mappings.json +90 -34
  7. package/AGENTS.md +7 -2
  8. package/dist/analytics/anonymization-engine.d.ts +108 -0
  9. package/dist/analytics/anonymization-engine.d.ts.map +1 -0
  10. package/dist/analytics/anonymization-engine.js +352 -0
  11. package/dist/analytics/anonymization-engine.js.map +1 -0
  12. package/dist/analytics/consent-manager.d.ts +94 -0
  13. package/dist/analytics/consent-manager.d.ts.map +1 -0
  14. package/dist/analytics/consent-manager.js +257 -0
  15. package/dist/analytics/consent-manager.js.map +1 -0
  16. package/dist/analytics/emerging-pattern-detector.d.ts +68 -0
  17. package/dist/analytics/emerging-pattern-detector.d.ts.map +1 -0
  18. package/dist/analytics/emerging-pattern-detector.js +250 -0
  19. package/dist/analytics/emerging-pattern-detector.js.map +1 -0
  20. package/dist/analytics/pattern-learning-engine.d.ts +81 -0
  21. package/dist/analytics/pattern-learning-engine.d.ts.map +1 -0
  22. package/dist/analytics/pattern-learning-engine.js +262 -0
  23. package/dist/analytics/pattern-learning-engine.js.map +1 -0
  24. package/dist/analytics/pattern-performance-tracker.d.ts +89 -0
  25. package/dist/analytics/pattern-performance-tracker.d.ts.map +1 -0
  26. package/dist/analytics/pattern-performance-tracker.js +289 -0
  27. package/dist/analytics/pattern-performance-tracker.js.map +1 -0
  28. package/dist/analytics/prompt-pattern-analyzer.d.ts +100 -0
  29. package/dist/analytics/prompt-pattern-analyzer.d.ts.map +1 -0
  30. package/dist/analytics/prompt-pattern-analyzer.js +372 -0
  31. package/dist/analytics/prompt-pattern-analyzer.js.map +1 -0
  32. package/dist/analytics/routing-performance-analyzer.d.ts +102 -0
  33. package/dist/analytics/routing-performance-analyzer.d.ts.map +1 -0
  34. package/dist/analytics/routing-performance-analyzer.js +342 -0
  35. package/dist/analytics/routing-performance-analyzer.js.map +1 -0
  36. package/dist/analytics/routing-refiner.d.ts +105 -0
  37. package/dist/analytics/routing-refiner.d.ts.map +1 -0
  38. package/dist/analytics/routing-refiner.js +381 -0
  39. package/dist/analytics/routing-refiner.js.map +1 -0
  40. package/dist/cli/commands/analytics-disable.d.ts +10 -0
  41. package/dist/cli/commands/analytics-disable.d.ts.map +1 -0
  42. package/dist/cli/commands/analytics-disable.js +73 -0
  43. package/dist/cli/commands/analytics-disable.js.map +1 -0
  44. package/dist/cli/commands/analytics-enable-action.d.ts +9 -0
  45. package/dist/cli/commands/analytics-enable-action.d.ts.map +1 -0
  46. package/dist/cli/commands/analytics-enable-action.js +83 -0
  47. package/dist/cli/commands/analytics-enable-action.js.map +1 -0
  48. package/dist/cli/commands/analytics-preview.d.ts +10 -0
  49. package/dist/cli/commands/analytics-preview.d.ts.map +1 -0
  50. package/dist/cli/commands/analytics-preview.js +107 -0
  51. package/dist/cli/commands/analytics-preview.js.map +1 -0
  52. package/dist/cli/commands/analytics-status.d.ts +10 -0
  53. package/dist/cli/commands/analytics-status.d.ts.map +1 -0
  54. package/dist/cli/commands/analytics-status.js +68 -0
  55. package/dist/cli/commands/analytics-status.js.map +1 -0
  56. package/dist/cli/index.js +6 -3
  57. package/dist/cli/index.js.map +1 -1
  58. package/dist/core/adaptive-kernel.d.ts +110 -0
  59. package/dist/core/adaptive-kernel.d.ts.map +1 -0
  60. package/dist/core/adaptive-kernel.js +193 -0
  61. package/dist/core/adaptive-kernel.js.map +1 -0
  62. package/dist/core/kernel-patterns.d.ts +105 -0
  63. package/dist/core/kernel-patterns.d.ts.map +1 -0
  64. package/dist/core/kernel-patterns.js +328 -0
  65. package/dist/core/kernel-patterns.js.map +1 -0
  66. package/dist/core/orchestrator.d.ts +1 -0
  67. package/dist/core/orchestrator.d.ts.map +1 -1
  68. package/dist/core/orchestrator.js +40 -11
  69. package/dist/core/orchestrator.js.map +1 -1
  70. package/dist/delegation/agent-delegator.d.ts +1 -0
  71. package/dist/delegation/agent-delegator.d.ts.map +1 -1
  72. package/dist/delegation/agent-delegator.js +24 -2
  73. package/dist/delegation/agent-delegator.js.map +1 -1
  74. package/dist/delegation/task-skill-router.d.ts +269 -5
  75. package/dist/delegation/task-skill-router.d.ts.map +1 -1
  76. package/dist/delegation/task-skill-router.js +810 -23
  77. package/dist/delegation/task-skill-router.js.map +1 -1
  78. package/dist/postprocessor/PostProcessor.d.ts +10 -0
  79. package/dist/postprocessor/PostProcessor.d.ts.map +1 -1
  80. package/dist/postprocessor/PostProcessor.js +87 -17
  81. package/dist/postprocessor/PostProcessor.js.map +1 -1
  82. package/dist/processors/agents-md-validation-processor.d.ts +1 -0
  83. package/dist/processors/agents-md-validation-processor.d.ts.map +1 -1
  84. package/dist/processors/agents-md-validation-processor.js +34 -12
  85. package/dist/processors/agents-md-validation-processor.js.map +1 -1
  86. package/dist/processors/processor-manager.d.ts +7 -0
  87. package/dist/processors/processor-manager.d.ts.map +1 -1
  88. package/dist/processors/processor-manager.js +93 -0
  89. package/dist/processors/processor-manager.js.map +1 -1
  90. package/dist/processors/test-auto-creation-processor.d.ts.map +1 -1
  91. package/dist/processors/test-auto-creation-processor.js +52 -38
  92. package/dist/processors/test-auto-creation-processor.js.map +1 -1
  93. package/dist/scripts/analytics/daily-routing-analysis.d.ts +18 -0
  94. package/dist/scripts/analytics/daily-routing-analysis.d.ts.map +1 -0
  95. package/dist/scripts/analytics/daily-routing-analysis.js +268 -0
  96. package/dist/scripts/analytics/daily-routing-analysis.js.map +1 -0
  97. package/dist/scripts/analytics/index.d.ts +15 -0
  98. package/dist/scripts/analytics/index.d.ts.map +1 -0
  99. package/dist/scripts/analytics/index.js +17 -0
  100. package/dist/scripts/analytics/index.js.map +1 -0
  101. package/dist/scripts/test-p9.d.ts +15 -0
  102. package/dist/scripts/test-p9.d.ts.map +1 -0
  103. package/dist/scripts/test-p9.js +220 -0
  104. package/dist/scripts/test-p9.js.map +1 -0
  105. package/package.json +6 -2
  106. package/scripts/node/kernel-e2e-test.mjs +168 -0
  107. package/scripts/node/kernel-framework-test.mjs +127 -0
  108. package/scripts/node/kernel-live-test.mjs +147 -0
  109. package/scripts/node/kernel-real-framework-test.mjs +103 -0
  110. package/scripts/node/kernel-update.cjs +379 -0
  111. package/scripts/node/reflection-check.sh +245 -27
  112. package/scripts/node/test-simple-names-comprehensive.mjs +221 -0
  113. package/scripts/node/test-simple-names.mjs +39 -0
  114. package/dist/agents/documentation-writer.d.ts +0 -9
  115. package/dist/agents/documentation-writer.d.ts.map +0 -1
  116. package/dist/agents/documentation-writer.js +0 -85
  117. package/dist/agents/documentation-writer.js.map +0 -1
  118. package/dist/agents/explore.d.ts +0 -8
  119. package/dist/agents/explore.d.ts.map +0 -1
  120. package/dist/agents/explore.js +0 -55
  121. package/dist/agents/explore.js.map +0 -1
  122. package/dist/agents/librarian.d.ts +0 -3
  123. package/dist/agents/librarian.d.ts.map +0 -1
  124. package/dist/agents/librarian.js +0 -84
  125. package/dist/agents/librarian.js.map +0 -1
  126. package/dist/agents/marketing-expert.d.ts +0 -9
  127. package/dist/agents/marketing-expert.d.ts.map +0 -1
  128. package/dist/agents/marketing-expert.js +0 -112
  129. package/dist/agents/marketing-expert.js.map +0 -1
  130. package/dist/agents/oracle.d.ts +0 -8
  131. package/dist/agents/oracle.d.ts.map +0 -1
  132. package/dist/agents/oracle.js +0 -51
  133. package/dist/agents/oracle.js.map +0 -1
  134. package/dist/agents/seo-copywriter.d.ts +0 -10
  135. package/dist/agents/seo-copywriter.d.ts.map +0 -1
  136. package/dist/agents/seo-copywriter.js +0 -73
  137. package/dist/agents/seo-copywriter.js.map +0 -1
  138. package/dist/agents/seo-specialist.d.ts +0 -9
  139. package/dist/agents/seo-specialist.d.ts.map +0 -1
  140. package/dist/agents/seo-specialist.js +0 -54
  141. package/dist/agents/seo-specialist.js.map +0 -1
  142. package/dist/agents/test-architect.d.ts +0 -3
  143. package/dist/agents/test-architect.d.ts.map +0 -1
  144. package/dist/agents/test-architect.js +0 -96
  145. package/dist/agents/test-architect.js.map +0 -1
  146. package/dist/mcps/enhanced-orchestrator.server.d.ts +0 -14
  147. package/dist/mcps/enhanced-orchestrator.server.d.ts.map +0 -1
  148. package/dist/mcps/enhanced-orchestrator.server.js +0 -266
  149. package/dist/mcps/enhanced-orchestrator.server.js.map +0 -1
  150. package/dist/mcps/knowledge-skills/analyzer.server.d.ts +0 -7
  151. package/dist/mcps/knowledge-skills/analyzer.server.d.ts.map +0 -1
  152. package/dist/mcps/knowledge-skills/analyzer.server.js +0 -282
  153. package/dist/mcps/knowledge-skills/analyzer.server.js.map +0 -1
  154. package/dist/mcps/knowledge-skills/documentation-generation.server.d.ts +0 -48
  155. package/dist/mcps/knowledge-skills/documentation-generation.server.d.ts.map +0 -1
  156. package/dist/mcps/knowledge-skills/documentation-generation.server.js +0 -1238
  157. package/dist/mcps/knowledge-skills/documentation-generation.server.js.map +0 -1
  158. package/dist/mcps/knowledge-skills/explore.server.d.ts +0 -21
  159. package/dist/mcps/knowledge-skills/explore.server.d.ts.map +0 -1
  160. package/dist/mcps/knowledge-skills/explore.server.js +0 -582
  161. package/dist/mcps/knowledge-skills/explore.server.js.map +0 -1
  162. package/dist/mcps/knowledge-skills/marketing-expert.server.d.ts +0 -8
  163. package/dist/mcps/knowledge-skills/marketing-expert.server.d.ts.map +0 -1
  164. package/dist/mcps/knowledge-skills/marketing-expert.server.js +0 -356
  165. package/dist/mcps/knowledge-skills/marketing-expert.server.js.map +0 -1
  166. package/dist/mcps/knowledge-skills/oracle.server.d.ts +0 -25
  167. package/dist/mcps/knowledge-skills/oracle.server.d.ts.map +0 -1
  168. package/dist/mcps/knowledge-skills/oracle.server.js +0 -569
  169. package/dist/mcps/knowledge-skills/oracle.server.js.map +0 -1
  170. package/dist/mcps/knowledge-skills/seo-copywriter.server.d.ts +0 -8
  171. package/dist/mcps/knowledge-skills/seo-copywriter.server.d.ts.map +0 -1
  172. package/dist/mcps/knowledge-skills/seo-copywriter.server.js +0 -251
  173. package/dist/mcps/knowledge-skills/seo-copywriter.server.js.map +0 -1
  174. package/dist/mcps/knowledge-skills/seo-specialist.server.d.ts +0 -8
  175. package/dist/mcps/knowledge-skills/seo-specialist.server.d.ts.map +0 -1
  176. package/dist/mcps/knowledge-skills/seo-specialist.server.js +0 -211
  177. package/dist/mcps/knowledge-skills/seo-specialist.server.js.map +0 -1
  178. package/dist/mcps/librarian.server.d.ts +0 -17
  179. package/dist/mcps/librarian.server.d.ts.map +0 -1
  180. package/dist/mcps/librarian.server.js +0 -382
  181. package/dist/mcps/librarian.server.js.map +0 -1
  182. package/dist/optimization/performance-optimizer.d.ts +0 -179
  183. package/dist/optimization/performance-optimizer.d.ts.map +0 -1
  184. package/dist/optimization/performance-optimizer.js +0 -556
  185. package/dist/optimization/performance-optimizer.js.map +0 -1
  186. package/dist/utils/memory-pool.d.ts +0 -90
  187. package/dist/utils/memory-pool.d.ts.map +0 -1
  188. package/dist/utils/memory-pool.js +0 -245
  189. package/dist/utils/memory-pool.js.map +0 -1
@@ -0,0 +1,342 @@
1
+ /**
2
+ * Routing Performance Analyzer for StringRay
3
+ *
4
+ * Analyzes routing success rates, keyword effectiveness, and confidence thresholds.
5
+ * Integrates with RoutingOutcomeTracker to provide comprehensive routing metrics.
6
+ *
7
+ * @version 1.0.0
8
+ * @since 2026-03-05
9
+ */
10
+ import { routingOutcomeTracker } from "../delegation/task-skill-router.js";
11
+ class RoutingPerformanceAnalyzer {
12
+ lowConfidenceThreshold = 0.6;
13
+ mediumConfidenceThreshold = 0.8;
14
+ minSamplesForMetrics = 5;
15
+ /**
16
+ * Generate comprehensive routing performance report
17
+ */
18
+ generatePerformanceReport() {
19
+ const outcomes = routingOutcomeTracker.getOutcomes();
20
+ const decisions = routingOutcomeTracker.getRoutingDecisions();
21
+ const promptData = routingOutcomeTracker.getPromptData();
22
+ if (outcomes.length === 0) {
23
+ return this.emptyPerformanceReport();
24
+ }
25
+ const agentMetrics = this.calculateAgentMetrics(outcomes, promptData);
26
+ const keywordEffectiveness = this.analyzeKeywordEffectiveness(decisions, outcomes);
27
+ const confidenceMetrics = this.analyzeConfidenceThresholds(outcomes);
28
+ const timeRange = this.calculateTimeRange(outcomes);
29
+ const overallStats = this.calculateOverallStats(outcomes);
30
+ const recommendations = this.generateRecommendations(agentMetrics, keywordEffectiveness, confidenceMetrics);
31
+ return {
32
+ totalRoutings: outcomes.length,
33
+ overallSuccessRate: overallStats.successRate,
34
+ avgConfidence: overallStats.avgConfidence,
35
+ agentMetrics,
36
+ keywordEffectiveness,
37
+ confidenceMetrics,
38
+ timeRange,
39
+ recommendations,
40
+ };
41
+ }
42
+ /**
43
+ * Calculate performance metrics for each agent
44
+ */
45
+ calculateAgentMetrics(outcomes, promptData) {
46
+ const agentMap = new Map();
47
+ for (const outcome of outcomes) {
48
+ const agent = outcome.routedAgent;
49
+ const prompt = promptData.find((p) => p.taskId === outcome.taskId);
50
+ const confidence = prompt?.confidence ?? 0;
51
+ const executionTime = prompt?.usageMetadata?.retryCount ?? 0;
52
+ if (!agentMap.has(agent)) {
53
+ agentMap.set(agent, {
54
+ skill: outcome.routedSkill,
55
+ total: 0,
56
+ successes: 0,
57
+ failures: 0,
58
+ escalated: 0,
59
+ confidenceSum: 0,
60
+ executionTimes: [],
61
+ highConfidence: 0,
62
+ mediumConfidence: 0,
63
+ lowConfidence: 0,
64
+ timestamps: [],
65
+ });
66
+ }
67
+ const metrics = agentMap.get(agent);
68
+ metrics.total++;
69
+ metrics.confidenceSum += confidence;
70
+ metrics.timestamps.push(outcome.timestamp);
71
+ if (confidence >= this.mediumConfidenceThreshold) {
72
+ metrics.highConfidence++;
73
+ }
74
+ else if (confidence >= this.lowConfidenceThreshold) {
75
+ metrics.mediumConfidence++;
76
+ }
77
+ else {
78
+ metrics.lowConfidence++;
79
+ }
80
+ if (outcome.success === true) {
81
+ metrics.successes++;
82
+ }
83
+ else if (outcome.success === false) {
84
+ metrics.failures++;
85
+ }
86
+ if (confidence < 0.75) {
87
+ metrics.escalated++;
88
+ }
89
+ metrics.executionTimes.push(executionTime);
90
+ }
91
+ return Array.from(agentMap.entries())
92
+ .filter(([, metrics]) => metrics.total >= this.minSamplesForMetrics)
93
+ .map(([agent, metrics]) => {
94
+ const avgExecutionTime = metrics.executionTimes.length > 0
95
+ ? metrics.executionTimes.reduce((sum, time) => sum + time, 0) /
96
+ metrics.executionTimes.length
97
+ : 0;
98
+ const timestamps = metrics.timestamps.sort((a, b) => a.getTime() - b.getTime());
99
+ return {
100
+ agent,
101
+ skill: metrics.skill,
102
+ totalRoutings: metrics.total,
103
+ successfulRoutings: metrics.successes,
104
+ failedRoutings: metrics.failures,
105
+ escalatedRoutings: metrics.escalated,
106
+ successRate: metrics.total > 0 ? metrics.successes / metrics.total : 0,
107
+ avgConfidence: metrics.total > 0 ? metrics.confidenceSum / metrics.total : 0,
108
+ avgExecutionTime,
109
+ confidenceDistribution: {
110
+ high: metrics.highConfidence,
111
+ medium: metrics.mediumConfidence,
112
+ low: metrics.lowConfidence,
113
+ },
114
+ timeRange: {
115
+ earliest: timestamps[0] ?? new Date(),
116
+ latest: timestamps[timestamps.length - 1] ?? new Date(),
117
+ },
118
+ };
119
+ })
120
+ .sort((a, b) => b.totalRoutings - a.totalRoutings);
121
+ }
122
+ /**
123
+ * Analyze effectiveness of keywords
124
+ */
125
+ analyzeKeywordEffectiveness(decisions, outcomes) {
126
+ const keywordMap = new Map();
127
+ for (const decision of decisions) {
128
+ const keyword = decision.keywordMatched;
129
+ if (!keyword)
130
+ continue;
131
+ const outcome = outcomes.find((o) => o.taskId === decision.taskId);
132
+ if (!outcome)
133
+ continue;
134
+ if (!keywordMap.has(keyword)) {
135
+ keywordMap.set(keyword, {
136
+ total: 0,
137
+ successes: 0,
138
+ failures: 0,
139
+ confidenceSum: 0,
140
+ agent: decision.selectedAgent,
141
+ skill: decision.selectedSkill,
142
+ lastUsed: decision.executionTime ? new Date() : new Date(),
143
+ });
144
+ }
145
+ const metrics = keywordMap.get(keyword);
146
+ metrics.total++;
147
+ metrics.confidenceSum += decision.confidence;
148
+ if (outcome.success === true) {
149
+ metrics.successes++;
150
+ }
151
+ else if (outcome.success === false) {
152
+ metrics.failures++;
153
+ }
154
+ }
155
+ return Array.from(keywordMap.entries())
156
+ .filter(([, metrics]) => metrics.total >= this.minSamplesForMetrics)
157
+ .map(([keyword, metrics]) => ({
158
+ keyword,
159
+ totalMatches: metrics.total,
160
+ successfulMatches: metrics.successes,
161
+ failedMatches: metrics.failures,
162
+ successRate: metrics.total > 0 ? metrics.successes / metrics.total : 0,
163
+ avgConfidence: metrics.total > 0 ? metrics.confidenceSum / metrics.total : 0,
164
+ routedAgent: metrics.agent,
165
+ routedSkill: metrics.skill,
166
+ lastUsed: metrics.lastUsed,
167
+ }))
168
+ .sort((a, b) => b.totalMatches - a.totalMatches);
169
+ }
170
+ /**
171
+ * Analyze confidence threshold performance
172
+ */
173
+ analyzeConfidenceThresholds(outcomes) {
174
+ const promptData = routingOutcomeTracker.getPromptData();
175
+ const thresholds = [0.5, 0.6, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95];
176
+ return thresholds.map((threshold) => {
177
+ const belowThresholdOutcomes = outcomes.filter((outcome) => {
178
+ const prompt = promptData.find((p) => p.taskId === outcome.taskId);
179
+ const confidence = prompt?.confidence ?? 1;
180
+ return confidence < threshold;
181
+ });
182
+ const totalRoutings = belowThresholdOutcomes.length;
183
+ const successfulRoutings = belowThresholdOutcomes.filter((o) => o.success === true).length;
184
+ const successRate = totalRoutings > 0 ? successfulRoutings / totalRoutings : 0;
185
+ const escalatedCount = belowThresholdOutcomes.length;
186
+ let recommendation = "Threshold is optimal";
187
+ if (successRate < 0.6 && escalatedCount > totalRoutings * 0.5) {
188
+ recommendation = "Consider lowering threshold to reduce escalations";
189
+ }
190
+ else if (successRate > 0.9 && escalatedCount < totalRoutings * 0.2) {
191
+ recommendation = "Consider raising threshold to improve routing precision";
192
+ }
193
+ return {
194
+ threshold,
195
+ totalRoutings,
196
+ successfulRoutings,
197
+ successRate,
198
+ escalatedCount,
199
+ recommendation,
200
+ };
201
+ });
202
+ }
203
+ /**
204
+ * Calculate overall routing statistics
205
+ */
206
+ calculateOverallStats(outcomes) {
207
+ const successful = outcomes.filter((o) => o.success === true).length;
208
+ const successRate = outcomes.length > 0 ? successful / outcomes.length : 0;
209
+ const promptData = routingOutcomeTracker.getPromptData();
210
+ const totalConfidence = promptData.reduce((sum, p) => sum + p.confidence, 0);
211
+ const avgConfidence = promptData.length > 0 ? totalConfidence / promptData.length : 0;
212
+ return { successRate, avgConfidence };
213
+ }
214
+ /**
215
+ * Calculate time range for routing data
216
+ */
217
+ calculateTimeRange(outcomes) {
218
+ if (outcomes.length === 0) {
219
+ const now = new Date();
220
+ return { start: now, end: now };
221
+ }
222
+ const sorted = [...outcomes].sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
223
+ return {
224
+ start: sorted[0]?.timestamp ?? new Date(),
225
+ end: sorted[sorted.length - 1]?.timestamp ?? new Date(),
226
+ };
227
+ }
228
+ /**
229
+ * Generate recommendations based on analysis
230
+ */
231
+ generateRecommendations(agentMetrics, keywordEffectiveness, confidenceMetrics) {
232
+ const recommendations = [];
233
+ const lowPerformingAgents = agentMetrics.filter((a) => a.successRate < 0.7);
234
+ if (lowPerformingAgents.length > 0) {
235
+ recommendations.push(`Review performance of ${lowPerformingAgents.length} agents with low success rates: ${lowPerformingAgents.map((a) => a.agent).join(", ")}`);
236
+ }
237
+ const ineffectiveKeywords = keywordEffectiveness.filter((k) => k.successRate < 0.6 && k.totalMatches >= 5);
238
+ if (ineffectiveKeywords.length > 0) {
239
+ recommendations.push(`Consider removing or refining ${ineffectiveKeywords.length} keywords with low effectiveness: ${ineffectiveKeywords.map((k) => k.keyword).slice(0, 5).join(", ")}`);
240
+ }
241
+ const highEscalationThresholds = confidenceMetrics.filter((m) => m.escalatedCount > m.totalRoutings * 0.5 && m.totalRoutings > 5);
242
+ if (highEscalationThresholds.length > 0) {
243
+ const threshold = highEscalationThresholds[0]?.threshold ?? 0.75;
244
+ recommendations.push(`Threshold ${threshold} shows high escalation rate - consider adjusting keyword mappings or confidence scoring`);
245
+ }
246
+ const optimalAgents = agentMetrics
247
+ .filter((a) => a.successRate >= 0.9 && a.totalRoutings >= 10)
248
+ .sort((a, b) => b.successRate - a.successRate)
249
+ .slice(0, 3);
250
+ if (optimalAgents.length > 0) {
251
+ recommendations.push(`Top performing agents: ${optimalAgents.map((a) => `${a.agent} (${(a.successRate * 100).toFixed(1)}%)`).join(", ")}`);
252
+ }
253
+ const lowConfidenceKeywords = keywordEffectiveness
254
+ .filter((k) => k.avgConfidence < 0.6 && k.totalMatches >= 5)
255
+ .slice(0, 5);
256
+ if (lowConfidenceKeywords.length > 0) {
257
+ recommendations.push(`Keywords with consistently low confidence: ${lowConfidenceKeywords.map((k) => k.keyword).join(", ")} - consider reviewing routing logic`);
258
+ }
259
+ if (recommendations.length === 0) {
260
+ recommendations.push("Routing system is performing optimally");
261
+ }
262
+ return recommendations;
263
+ }
264
+ /**
265
+ * Get performance report as formatted string
266
+ */
267
+ generateFormattedReport() {
268
+ const report = this.generatePerformanceReport();
269
+ const lines = [];
270
+ lines.push("╔════════════════════════════════════════════════════════════╗");
271
+ lines.push("║ StringRay Routing Performance Analytics Report ║");
272
+ lines.push("╚════════════════════════════════════════════════════════════╝");
273
+ lines.push("");
274
+ lines.push(`Total Routings: ${report.totalRoutings}`);
275
+ lines.push(`Overall Success Rate: ${(report.overallSuccessRate * 100).toFixed(1)}%`);
276
+ lines.push(`Average Confidence: ${(report.avgConfidence * 100).toFixed(1)}%`);
277
+ lines.push(`Time Range: ${report.timeRange.start.toISOString()} to ${report.timeRange.end.toISOString()}`);
278
+ lines.push("");
279
+ if (report.agentMetrics.length > 0) {
280
+ lines.push("=== Agent Performance Metrics ===");
281
+ for (const agent of report.agentMetrics.slice(0, 10)) {
282
+ lines.push(`\n Agent: ${agent.agent} (${agent.skill})`);
283
+ lines.push(` Total Routings: ${agent.totalRoutings}`);
284
+ lines.push(` Success Rate: ${(agent.successRate * 100).toFixed(1)}%`);
285
+ lines.push(` Avg Confidence: ${(agent.avgConfidence * 100).toFixed(1)}%`);
286
+ lines.push(` Escalations: ${agent.escalatedRoutings}`);
287
+ lines.push(` Confidence Distribution:`);
288
+ lines.push(` High (≥${this.mediumConfidenceThreshold}): ${agent.confidenceDistribution.high}`);
289
+ lines.push(` Medium (≥${this.lowConfidenceThreshold}): ${agent.confidenceDistribution.medium}`);
290
+ lines.push(` Low (<${this.lowConfidenceThreshold}): ${agent.confidenceDistribution.low}`);
291
+ }
292
+ }
293
+ if (report.keywordEffectiveness.length > 0) {
294
+ lines.push("");
295
+ lines.push("=== Top Keywords by Effectiveness ===");
296
+ for (const keyword of report.keywordEffectiveness.slice(0, 15)) {
297
+ lines.push(`\n Keyword: "${keyword.keyword}"`);
298
+ lines.push(` Total Matches: ${keyword.totalMatches}`);
299
+ lines.push(` Success Rate: ${(keyword.successRate * 100).toFixed(1)}%`);
300
+ lines.push(` Avg Confidence: ${(keyword.avgConfidence * 100).toFixed(1)}%`);
301
+ lines.push(` Routes to: ${keyword.routedAgent}/${keyword.routedSkill}`);
302
+ }
303
+ }
304
+ if (report.confidenceMetrics.length > 0) {
305
+ lines.push("");
306
+ lines.push("=== Confidence Threshold Analysis ===");
307
+ for (const metrics of report.confidenceMetrics) {
308
+ lines.push(`\n Threshold: ${(metrics.threshold * 100).toFixed(0)}%`);
309
+ lines.push(` Below Threshold: ${metrics.totalRoutings} routings`);
310
+ lines.push(` Success Rate: ${(metrics.successRate * 100).toFixed(1)}%`);
311
+ lines.push(` Escalations: ${metrics.escalatedCount}`);
312
+ lines.push(` Recommendation: ${metrics.recommendation}`);
313
+ }
314
+ }
315
+ if (report.recommendations.length > 0) {
316
+ lines.push("");
317
+ lines.push("=== Recommendations ===");
318
+ for (const recommendation of report.recommendations) {
319
+ lines.push(` • ${recommendation}`);
320
+ }
321
+ }
322
+ lines.push("");
323
+ lines.push("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
324
+ lines.push("Generated by StringRay Routing Performance Analyzer");
325
+ return lines.join("\n");
326
+ }
327
+ emptyPerformanceReport() {
328
+ const now = new Date();
329
+ return {
330
+ totalRoutings: 0,
331
+ overallSuccessRate: 0,
332
+ avgConfidence: 0,
333
+ agentMetrics: [],
334
+ keywordEffectiveness: [],
335
+ confidenceMetrics: [],
336
+ timeRange: { start: now, end: now },
337
+ recommendations: ["Insufficient data for analysis"],
338
+ };
339
+ }
340
+ }
341
+ export const routingPerformanceAnalyzer = new RoutingPerformanceAnalyzer();
342
+ //# sourceMappingURL=routing-performance-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing-performance-analyzer.js","sourceRoot":"","sources":["../../src/analytics/routing-performance-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Routing Refiner for StringRay
3
+ *
4
+ * Suggests new keyword mappings, optimizes existing mappings, and generates
5
+ * configuration updates based on analytics data from the routing system.
6
+ *
7
+ * @version 1.0.0
8
+ * @since 2026-03-05
9
+ */
10
+ import { type PromptComparisonResult } from "./prompt-pattern-analyzer.js";
11
+ import { routingPerformanceAnalyzer } from "./routing-performance-analyzer.js";
12
+ export interface KeywordMappingSuggestion {
13
+ keyword: string;
14
+ targetAgent: string;
15
+ targetSkill: string;
16
+ suggestedConfidence: number;
17
+ reason: string;
18
+ evidence: {
19
+ frequency: number;
20
+ successRate: number;
21
+ avgConfidence: number;
22
+ sampleRequests: string[];
23
+ };
24
+ priority: "high" | "medium" | "low";
25
+ }
26
+ export interface MappingOptimization {
27
+ mappingId: string;
28
+ currentKeywords: string[];
29
+ currentAgent: string;
30
+ currentSkill: string;
31
+ optimizationType: "add_keywords" | "remove_keywords" | "adjust_confidence" | "reassign_agent";
32
+ suggestedChanges: {
33
+ keywordsToAdd?: string[];
34
+ keywordsToRemove?: string[];
35
+ newConfidence?: number;
36
+ newAgent?: string;
37
+ };
38
+ reason: string;
39
+ expectedImpact: string;
40
+ }
41
+ export interface ConfigurationUpdate {
42
+ version: string;
43
+ generatedAt: Date;
44
+ summary: {
45
+ newMappings: number;
46
+ optimizedMappings: number;
47
+ removedMappings: number;
48
+ estimatedImprovement: string;
49
+ };
50
+ newMappings: KeywordMappingSuggestion[];
51
+ optimizations: MappingOptimization[];
52
+ warnings: string[];
53
+ }
54
+ export interface RefinementReport {
55
+ promptAnalysis: PromptComparisonResult;
56
+ performanceReport: ReturnType<typeof routingPerformanceAnalyzer.generatePerformanceReport>;
57
+ configurationUpdate: ConfigurationUpdate;
58
+ implementationSteps: string[];
59
+ }
60
+ declare class RoutingRefiner {
61
+ private readonly minSamplesForSuggestion;
62
+ private readonly minSuccessRateForSuggestion;
63
+ private readonly minConfidenceForSuggestion;
64
+ /**
65
+ * Generate comprehensive routing refinement recommendations
66
+ */
67
+ generateRefinementReport(): RefinementReport;
68
+ /**
69
+ * Generate configuration update suggestions
70
+ */
71
+ private generateConfigurationUpdate;
72
+ /**
73
+ * Suggest new keyword mappings based on analysis
74
+ */
75
+ private suggestNewKeywordMappings;
76
+ /**
77
+ * Suggest optimizations for existing mappings
78
+ */
79
+ private suggestMappingOptimizations;
80
+ /**
81
+ * Generate warnings for configuration updates
82
+ */
83
+ private generateWarnings;
84
+ /**
85
+ * Generate implementation steps
86
+ */
87
+ private generateImplementationSteps;
88
+ /**
89
+ * Get formatted refinement report
90
+ */
91
+ generateFormattedReport(): string;
92
+ /**
93
+ * Export configuration update as JSON
94
+ */
95
+ exportConfigurationUpdate(): string;
96
+ private calculatePriority;
97
+ private extractKeywords;
98
+ private selectBestAgentForMapping;
99
+ private deduplicateSuggestions;
100
+ private calculateRemovals;
101
+ private estimateImprovement;
102
+ }
103
+ export declare const routingRefiner: RoutingRefiner;
104
+ export {};
105
+ //# sourceMappingURL=routing-refiner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing-refiner.d.ts","sourceRoot":"","sources":["../../src/analytics/routing-refiner.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,OAAO,EACL,KAAK,sBAAsB,EAG5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAE/E,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;IACF,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACrC;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,cAAc,GAAG,iBAAiB,GAAG,mBAAmB,GAAG,gBAAgB,CAAC;IAC9F,gBAAgB,EAAE;QAChB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QACzB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,IAAI,CAAC;IAClB,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,eAAe,EAAE,MAAM,CAAC;QACxB,oBAAoB,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,WAAW,EAAE,wBAAwB,EAAE,CAAC;IACxC,aAAa,EAAE,mBAAmB,EAAE,CAAC;IACrC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,sBAAsB,CAAC;IACvC,iBAAiB,EAAE,UAAU,CAAC,OAAO,0BAA0B,CAAC,yBAAyB,CAAC,CAAC;IAC3F,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,mBAAmB,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,cAAM,cAAc;IAClB,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAK;IAC7C,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAO;IACnD,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAO;IAElD;;OAEG;IACH,wBAAwB,IAAI,gBAAgB;IAmB5C;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAkCnC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA8FjC;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAoEnC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuCxB;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAiCnC;;OAEG;IACH,uBAAuB,IAAI,MAAM;IAwEjC;;OAEG;IACH,yBAAyB,IAAI,MAAM;IAKnC,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,eAAe;IA2BvB,OAAO,CAAC,yBAAyB;IAiBjC,OAAO,CAAC,sBAAsB;IAwB9B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,mBAAmB;CAoB5B;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"}