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,372 @@
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
+ import { routingOutcomeTracker } from "../delegation/task-skill-router.js";
11
+ class PromptPatternAnalyzer {
12
+ minFrequencyThreshold = 3;
13
+ confidenceThreshold = 0.7;
14
+ emergingPatternMinSamples = 5;
15
+ /**
16
+ * Analyze prompt patterns and compare against templates
17
+ */
18
+ analyzePromptPatterns() {
19
+ const promptData = routingOutcomeTracker.getPromptData();
20
+ const outcomes = routingOutcomeTracker.getOutcomes();
21
+ if (promptData.length === 0) {
22
+ return this.emptyComparisonResult();
23
+ }
24
+ const templateMatches = promptData.filter((p) => p.templatePrompt && p.templatePrompt.length > 0);
25
+ const nonTemplatePrompts = promptData.filter((p) => !p.templatePrompt || p.templatePrompt.length === 0);
26
+ const gaps = this.detectTemplateGaps(promptData, outcomes);
27
+ const emergingPatterns = this.identifyEmergingPatterns(promptData, outcomes);
28
+ const topMissedKeywords = this.analyzeMissedKeywords(promptData);
29
+ const agentCoverage = this.calculateAgentCoverage(promptData);
30
+ return {
31
+ totalPrompts: promptData.length,
32
+ templateMatches: templateMatches.length,
33
+ nonTemplatePrompts: nonTemplatePrompts.length,
34
+ templateMatchRate: promptData.length > 0 ? templateMatches.length / promptData.length : 0,
35
+ gaps,
36
+ emergingPatterns,
37
+ topMissedKeywords,
38
+ agentCoverage,
39
+ };
40
+ }
41
+ /**
42
+ * Detect gaps where templates don't match user requests
43
+ */
44
+ detectTemplateGaps(promptData, outcomes) {
45
+ const gaps = [];
46
+ const gapMap = new Map();
47
+ for (const prompt of promptData) {
48
+ if (!prompt.templatePrompt || prompt.templatePrompt.length === 0) {
49
+ const key = this.normalizeRequest(prompt.userRequest);
50
+ if (gapMap.has(key)) {
51
+ const existing = gapMap.get(key);
52
+ if (existing) {
53
+ existing.frequency++;
54
+ existing.lastSeen = prompt.timestamp;
55
+ }
56
+ }
57
+ else {
58
+ const outcome = outcomes.find((o) => o.taskId === prompt.taskId);
59
+ gaps.push({
60
+ gapType: this.classifyGapType(prompt, outcome),
61
+ userRequest: prompt.userRequest,
62
+ generatedPrompt: prompt.generatedPrompt,
63
+ suggestedAgent: outcome?.routedAgent ?? "enforcer",
64
+ suggestedSkill: outcome?.routedSkill ?? "code-review",
65
+ frequency: 1,
66
+ lastSeen: prompt.timestamp,
67
+ confidence: prompt.confidence,
68
+ });
69
+ const newGap = gaps[gaps.length - 1];
70
+ if (newGap) {
71
+ gapMap.set(key, newGap);
72
+ }
73
+ }
74
+ }
75
+ }
76
+ return gaps
77
+ .filter((gap) => gap.frequency >= this.minFrequencyThreshold)
78
+ .sort((a, b) => b.frequency - a.frequency);
79
+ }
80
+ /**
81
+ * Identify emerging patterns from real usage
82
+ */
83
+ identifyEmergingPatterns(promptData, outcomes) {
84
+ const patternMap = new Map();
85
+ const keywordFrequency = new Map();
86
+ for (const prompt of promptData) {
87
+ const keywords = this.extractKeywords(prompt.userRequest);
88
+ for (const keyword of keywords) {
89
+ keywordFrequency.set(keyword, (keywordFrequency.get(keyword) || 0) + 1);
90
+ }
91
+ }
92
+ const significantKeywords = Array.from(keywordFrequency.entries())
93
+ .filter(([, count]) => count >= this.minFrequencyThreshold)
94
+ .sort((a, b) => b[1] - a[1])
95
+ .slice(0, 50);
96
+ for (const prompt of promptData) {
97
+ const keywords = this.extractKeywords(prompt.userRequest);
98
+ const significantKeywordsInPrompt = keywords.filter((kw) => significantKeywords.some(([sigKw]) => kw === sigKw));
99
+ if (significantKeywordsInPrompt.length === 0)
100
+ continue;
101
+ const patternKey = significantKeywordsInPrompt.sort().join("|");
102
+ const outcome = outcomes.find((o) => o.taskId === prompt.taskId);
103
+ if (!outcome)
104
+ continue;
105
+ if (patternMap.has(patternKey)) {
106
+ const existing = patternMap.get(patternKey);
107
+ existing.frequency++;
108
+ existing.avgConfidence =
109
+ (existing.avgConfidence * (existing.frequency - 1) + prompt.confidence) /
110
+ existing.frequency;
111
+ if (outcome.success !== undefined) {
112
+ const totalSuccesses = existing.successRate * (existing.frequency - 1) +
113
+ (outcome.success ? 1 : 0);
114
+ existing.successRate = totalSuccesses / existing.frequency;
115
+ }
116
+ if (existing.sampleRequests.length < 3) {
117
+ existing.sampleRequests.push(prompt.userRequest);
118
+ }
119
+ }
120
+ else {
121
+ patternMap.set(patternKey, {
122
+ patternId: this.generatePatternId(significantKeywordsInPrompt),
123
+ keywords: significantKeywordsInPrompt,
124
+ sampleRequests: [prompt.userRequest],
125
+ suggestedAgent: outcome.routedAgent,
126
+ suggestedSkill: outcome.routedSkill,
127
+ confidence: prompt.confidence,
128
+ frequency: 1,
129
+ avgConfidence: prompt.confidence,
130
+ successRate: outcome.success !== undefined ? (outcome.success ? 1 : 0) : 0,
131
+ });
132
+ }
133
+ }
134
+ return Array.from(patternMap.values())
135
+ .filter((pattern) => pattern.frequency >= this.emergingPatternMinSamples &&
136
+ pattern.avgConfidence >= this.confidenceThreshold &&
137
+ pattern.successRate >= 0.6)
138
+ .sort((a, b) => b.frequency - a.frequency);
139
+ }
140
+ /**
141
+ * Analyze frequently missed keywords
142
+ */
143
+ analyzeMissedKeywords(promptData) {
144
+ const missedKeywords = new Map();
145
+ const keywordToAgent = new Map();
146
+ for (const prompt of promptData) {
147
+ if (!prompt.templatePrompt || prompt.templatePrompt.length === 0) {
148
+ const keywords = this.extractKeywords(prompt.userRequest);
149
+ for (const keyword of keywords) {
150
+ if (keyword.length > 3) {
151
+ missedKeywords.set(keyword, (missedKeywords.get(keyword) || 0) + 1);
152
+ if (!keywordToAgent.has(keyword)) {
153
+ keywordToAgent.set(keyword, new Set());
154
+ }
155
+ keywordToAgent.get(keyword).add(prompt.routedAgent);
156
+ }
157
+ }
158
+ }
159
+ }
160
+ return Array.from(missedKeywords.entries())
161
+ .filter(([, count]) => count >= this.minFrequencyThreshold)
162
+ .sort((a, b) => b[1] - a[1])
163
+ .slice(0, 20)
164
+ .map(([keyword, count]) => ({
165
+ keyword,
166
+ count,
167
+ suggestedMappings: Array.from(keywordToAgent.get(keyword) || []),
168
+ }));
169
+ }
170
+ /**
171
+ * Calculate agent coverage metrics
172
+ */
173
+ calculateAgentCoverage(promptData) {
174
+ const coverage = new Map();
175
+ for (const prompt of promptData) {
176
+ const agent = prompt.routedAgent;
177
+ const hasTemplate = prompt.templatePrompt && prompt.templatePrompt.length > 0;
178
+ if (!coverage.has(agent)) {
179
+ coverage.set(agent, { total: 0, withTemplate: 0, withoutTemplate: 0 });
180
+ }
181
+ const stats = coverage.get(agent);
182
+ stats.total++;
183
+ if (hasTemplate) {
184
+ stats.withTemplate++;
185
+ }
186
+ else {
187
+ stats.withoutTemplate++;
188
+ }
189
+ }
190
+ return coverage;
191
+ }
192
+ /**
193
+ * Generate template optimization suggestions
194
+ */
195
+ generateOptimizationSuggestions(comparisonResult) {
196
+ const suggestions = [];
197
+ for (const pattern of comparisonResult.emergingPatterns) {
198
+ if (pattern.avgConfidence >= 0.85 &&
199
+ pattern.successRate >= 0.8 &&
200
+ pattern.frequency >= 5) {
201
+ suggestions.push({
202
+ suggestionType: "add_template",
203
+ templateName: pattern.patternId,
204
+ keywords: pattern.keywords,
205
+ targetAgent: pattern.suggestedAgent,
206
+ targetSkill: pattern.suggestedSkill,
207
+ confidence: pattern.avgConfidence,
208
+ expectedImpact: `Improve routing for ${pattern.frequency} similar requests`,
209
+ reasoning: `Pattern detected in ${pattern.frequency} requests with ${(pattern.successRate * 100).toFixed(1)}% success rate`,
210
+ });
211
+ }
212
+ }
213
+ for (const gap of comparisonResult.gaps) {
214
+ if (gap.frequency >= 5 && gap.confidence >= 0.8) {
215
+ suggestions.push({
216
+ suggestionType: "add_template",
217
+ keywords: this.extractKeywords(gap.userRequest),
218
+ targetAgent: gap.suggestedAgent || "enforcer",
219
+ targetSkill: gap.suggestedSkill || "code-review",
220
+ confidence: gap.confidence,
221
+ expectedImpact: `Fill template gap for ${gap.frequency} similar requests`,
222
+ reasoning: `Missing template detected for recurring request pattern`,
223
+ });
224
+ }
225
+ }
226
+ for (const missed of comparisonResult.topMissedKeywords.slice(0, 10)) {
227
+ if (missed.count >= 3 && missed.suggestedMappings.length > 0) {
228
+ const targetAgent = this.selectBestAgent(missed.suggestedMappings);
229
+ suggestions.push({
230
+ suggestionType: "update_keywords",
231
+ keywords: [missed.keyword],
232
+ targetAgent,
233
+ targetSkill: "code-review",
234
+ confidence: 0.7,
235
+ expectedImpact: `Improve routing for requests containing "${missed.keyword}"`,
236
+ reasoning: `Keyword appears in ${missed.count} requests without template match`,
237
+ });
238
+ }
239
+ }
240
+ return suggestions.sort((a, b) => b.confidence - a.confidence);
241
+ }
242
+ /**
243
+ * Get analytics summary as formatted report
244
+ */
245
+ generateReport(comparisonResult) {
246
+ const lines = [];
247
+ lines.push("╔════════════════════════════════════════════════════════════╗");
248
+ lines.push("║ StringRay Prompt Pattern Analytics Report ║");
249
+ lines.push("╚════════════════════════════════════════════════════════════╝");
250
+ lines.push("");
251
+ lines.push(`Total Prompts Analyzed: ${comparisonResult.totalPrompts}`);
252
+ lines.push(`Template Match Rate: ${(comparisonResult.templateMatchRate * 100).toFixed(1)}%`);
253
+ lines.push(`Non-Template Prompts: ${comparisonResult.nonTemplatePrompts}`);
254
+ lines.push("");
255
+ if (comparisonResult.gaps.length > 0) {
256
+ lines.push("=== Template Gaps ===");
257
+ lines.push(`Found ${comparisonResult.gaps.length} recurring gaps (frequency ≥ ${this.minFrequencyThreshold})`);
258
+ for (const gap of comparisonResult.gaps.slice(0, 5)) {
259
+ lines.push(`\n ${gap.gapType.toUpperCase()}:`);
260
+ lines.push(` Request: "${gap.userRequest.substring(0, 100)}..."`);
261
+ lines.push(` Frequency: ${gap.frequency}`);
262
+ lines.push(` Suggested: ${gap.suggestedAgent}/${gap.suggestedSkill}`);
263
+ }
264
+ }
265
+ if (comparisonResult.emergingPatterns.length > 0) {
266
+ lines.push("");
267
+ lines.push("=== Emerging Patterns ===");
268
+ lines.push(`Found ${comparisonResult.emergingPatterns.length} emerging patterns`);
269
+ for (const pattern of comparisonResult.emergingPatterns.slice(0, 5)) {
270
+ lines.push(`\n ${pattern.patternId}:`);
271
+ lines.push(` Keywords: ${pattern.keywords.join(", ")}`);
272
+ lines.push(` Frequency: ${pattern.frequency}`);
273
+ lines.push(` Avg Confidence: ${(pattern.avgConfidence * 100).toFixed(1)}%`);
274
+ lines.push(` Success Rate: ${(pattern.successRate * 100).toFixed(1)}%`);
275
+ }
276
+ }
277
+ if (comparisonResult.agentCoverage.size > 0) {
278
+ lines.push("");
279
+ lines.push("=== Agent Template Coverage ===");
280
+ for (const [agent, stats] of Array.from(comparisonResult.agentCoverage.entries()).sort((a, b) => b[1].total - a[1].total)) {
281
+ const coverage = ((stats.withTemplate / stats.total) * 100).toFixed(1);
282
+ lines.push(` ${agent}: ${coverage}% template coverage (${stats.withTemplate}/${stats.total})`);
283
+ }
284
+ }
285
+ lines.push("");
286
+ lines.push("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
287
+ lines.push("Generated by StringRay Prompt Pattern Analyzer");
288
+ return lines.join("\n");
289
+ }
290
+ classifyGapType(prompt, outcome) {
291
+ if (prompt.templatePrompt && prompt.templatePrompt.length > 0) {
292
+ if (prompt.generatedPrompt !== prompt.templatePrompt) {
293
+ return "pattern_mismatch";
294
+ }
295
+ }
296
+ const hasHighConfidence = prompt.confidence >= this.confidenceThreshold;
297
+ const hasSuccess = outcome?.success === true;
298
+ if (hasHighConfidence && hasSuccess) {
299
+ return "emerging_pattern";
300
+ }
301
+ return "missing_template";
302
+ }
303
+ normalizeRequest(request) {
304
+ return request
305
+ .toLowerCase()
306
+ .trim()
307
+ .replace(/\s+/g, " ")
308
+ .substring(0, 200);
309
+ }
310
+ extractKeywords(text) {
311
+ const words = text
312
+ .toLowerCase()
313
+ .replace(/[^\w\s]/g, " ")
314
+ .split(/\s+/)
315
+ .filter((word) => word.length > 3);
316
+ const stopWords = new Set([
317
+ "this",
318
+ "that",
319
+ "with",
320
+ "from",
321
+ "have",
322
+ "will",
323
+ "just",
324
+ "like",
325
+ "they",
326
+ "them",
327
+ "than",
328
+ "then",
329
+ "some",
330
+ "such",
331
+ "into",
332
+ "over",
333
+ "after",
334
+ ]);
335
+ return words.filter((word) => !stopWords.has(word));
336
+ }
337
+ generatePatternId(keywords) {
338
+ return keywords.map((kw) => kw.substring(0, 3)).join("-") + "-pattern";
339
+ }
340
+ selectBestAgent(agents) {
341
+ if (agents.length === 1)
342
+ return agents[0];
343
+ const priorityOrder = [
344
+ "enforcer",
345
+ "orchestrator",
346
+ "architect",
347
+ "code-reviewer",
348
+ "testing-lead",
349
+ "bug-triage-specialist",
350
+ ];
351
+ for (const priority of priorityOrder) {
352
+ if (agents.includes(priority)) {
353
+ return priority;
354
+ }
355
+ }
356
+ return agents[0] ?? "enforcer";
357
+ }
358
+ emptyComparisonResult() {
359
+ return {
360
+ totalPrompts: 0,
361
+ templateMatches: 0,
362
+ nonTemplatePrompts: 0,
363
+ templateMatchRate: 0,
364
+ gaps: [],
365
+ emergingPatterns: [],
366
+ topMissedKeywords: [],
367
+ agentCoverage: new Map(),
368
+ };
369
+ }
370
+ }
371
+ export const promptPatternAnalyzer = new PromptPatternAnalyzer();
372
+ //# sourceMappingURL=prompt-pattern-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-pattern-analyzer.js","sourceRoot":"","sources":["../../src/analytics/prompt-pattern-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
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
+ export interface AgentPerformanceMetrics {
11
+ agent: string;
12
+ skill: string;
13
+ totalRoutings: number;
14
+ successfulRoutings: number;
15
+ failedRoutings: number;
16
+ escalatedRoutings: number;
17
+ successRate: number;
18
+ avgConfidence: number;
19
+ avgExecutionTime: number;
20
+ confidenceDistribution: {
21
+ high: number;
22
+ medium: number;
23
+ low: number;
24
+ };
25
+ timeRange: {
26
+ earliest: Date;
27
+ latest: Date;
28
+ };
29
+ }
30
+ export interface KeywordEffectiveness {
31
+ keyword: string;
32
+ totalMatches: number;
33
+ successfulMatches: number;
34
+ failedMatches: number;
35
+ successRate: number;
36
+ avgConfidence: number;
37
+ routedAgent: string;
38
+ routedSkill: string;
39
+ lastUsed: Date;
40
+ }
41
+ export interface ConfidenceThresholdMetrics {
42
+ threshold: number;
43
+ totalRoutings: number;
44
+ successfulRoutings: number;
45
+ successRate: number;
46
+ escalatedCount: number;
47
+ recommendation: string;
48
+ }
49
+ export interface RoutingPerformanceReport {
50
+ totalRoutings: number;
51
+ overallSuccessRate: number;
52
+ avgConfidence: number;
53
+ agentMetrics: AgentPerformanceMetrics[];
54
+ keywordEffectiveness: KeywordEffectiveness[];
55
+ confidenceMetrics: ConfidenceThresholdMetrics[];
56
+ timeRange: {
57
+ start: Date;
58
+ end: Date;
59
+ };
60
+ recommendations: string[];
61
+ }
62
+ declare class RoutingPerformanceAnalyzer {
63
+ private readonly lowConfidenceThreshold;
64
+ private readonly mediumConfidenceThreshold;
65
+ private readonly minSamplesForMetrics;
66
+ /**
67
+ * Generate comprehensive routing performance report
68
+ */
69
+ generatePerformanceReport(): RoutingPerformanceReport;
70
+ /**
71
+ * Calculate performance metrics for each agent
72
+ */
73
+ private calculateAgentMetrics;
74
+ /**
75
+ * Analyze effectiveness of keywords
76
+ */
77
+ private analyzeKeywordEffectiveness;
78
+ /**
79
+ * Analyze confidence threshold performance
80
+ */
81
+ private analyzeConfidenceThresholds;
82
+ /**
83
+ * Calculate overall routing statistics
84
+ */
85
+ private calculateOverallStats;
86
+ /**
87
+ * Calculate time range for routing data
88
+ */
89
+ private calculateTimeRange;
90
+ /**
91
+ * Generate recommendations based on analysis
92
+ */
93
+ private generateRecommendations;
94
+ /**
95
+ * Get performance report as formatted string
96
+ */
97
+ generateFormattedReport(): string;
98
+ private emptyPerformanceReport;
99
+ }
100
+ export declare const routingPerformanceAnalyzer: RoutingPerformanceAnalyzer;
101
+ export {};
102
+ //# sourceMappingURL=routing-performance-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing-performance-analyzer.d.ts","sourceRoot":"","sources":["../../src/analytics/routing-performance-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,SAAS,EAAE;QAAE,QAAQ,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,IAAI,CAAA;KAAE,CAAC;CAC7C;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,uBAAuB,EAAE,CAAC;IACxC,oBAAoB,EAAE,oBAAoB,EAAE,CAAC;IAC7C,iBAAiB,EAAE,0BAA0B,EAAE,CAAC;IAChD,SAAS,EAAE;QAAE,KAAK,EAAE,IAAI,CAAC;QAAC,GAAG,EAAE,IAAI,CAAA;KAAE,CAAC;IACtC,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,cAAM,0BAA0B;IAC9B,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAO;IAC9C,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAO;IACjD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAK;IAE1C;;OAEG;IACH,yBAAyB,IAAI,wBAAwB;IAiCrD;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA0G7B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IA+DnC;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAuCnC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAgB7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAmB1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA6D/B;;OAEG;IACH,uBAAuB,IAAI,MAAM;IAqEjC,OAAO,CAAC,sBAAsB;CAa/B;AAED,eAAO,MAAM,0BAA0B,4BAAmC,CAAC"}