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,381 @@
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 { promptPatternAnalyzer, } from "./prompt-pattern-analyzer.js";
11
+ import { routingPerformanceAnalyzer } from "./routing-performance-analyzer.js";
12
+ class RoutingRefiner {
13
+ minSamplesForSuggestion = 5;
14
+ minSuccessRateForSuggestion = 0.7;
15
+ minConfidenceForSuggestion = 0.7;
16
+ /**
17
+ * Generate comprehensive routing refinement recommendations
18
+ */
19
+ generateRefinementReport() {
20
+ const promptAnalysis = promptPatternAnalyzer.analyzePromptPatterns();
21
+ const performanceReport = routingPerformanceAnalyzer.generatePerformanceReport();
22
+ const configurationUpdate = this.generateConfigurationUpdate(promptAnalysis, performanceReport);
23
+ const implementationSteps = this.generateImplementationSteps(configurationUpdate);
24
+ return {
25
+ promptAnalysis,
26
+ performanceReport,
27
+ configurationUpdate,
28
+ implementationSteps,
29
+ };
30
+ }
31
+ /**
32
+ * Generate configuration update suggestions
33
+ */
34
+ generateConfigurationUpdate(promptAnalysis, performanceReport) {
35
+ const newMappings = this.suggestNewKeywordMappings(promptAnalysis, performanceReport);
36
+ const optimizations = this.suggestMappingOptimizations(promptAnalysis, performanceReport);
37
+ const warnings = this.generateWarnings(newMappings, optimizations);
38
+ return {
39
+ version: "1.0.0",
40
+ generatedAt: new Date(),
41
+ summary: {
42
+ newMappings: newMappings.length,
43
+ optimizedMappings: optimizations.length,
44
+ removedMappings: this.calculateRemovals(optimizations),
45
+ estimatedImprovement: this.estimateImprovement(newMappings, optimizations),
46
+ },
47
+ newMappings,
48
+ optimizations,
49
+ warnings,
50
+ };
51
+ }
52
+ /**
53
+ * Suggest new keyword mappings based on analysis
54
+ */
55
+ suggestNewKeywordMappings(promptAnalysis, performanceReport) {
56
+ const suggestions = [];
57
+ for (const pattern of promptAnalysis.emergingPatterns) {
58
+ if (pattern.frequency >= this.minSamplesForSuggestion &&
59
+ pattern.successRate >= this.minSuccessRateForSuggestion &&
60
+ pattern.avgConfidence >= this.minConfidenceForSuggestion) {
61
+ const topKeywords = pattern.keywords.slice(0, 3);
62
+ for (const keyword of topKeywords) {
63
+ suggestions.push({
64
+ keyword,
65
+ targetAgent: pattern.suggestedAgent,
66
+ targetSkill: pattern.suggestedSkill,
67
+ suggestedConfidence: Math.min(pattern.avgConfidence + 0.05, 0.95),
68
+ reason: `Emerging pattern detected in ${pattern.frequency} requests with ${(pattern.successRate * 100).toFixed(1)}% success rate`,
69
+ evidence: {
70
+ frequency: pattern.frequency,
71
+ successRate: pattern.successRate,
72
+ avgConfidence: pattern.avgConfidence,
73
+ sampleRequests: pattern.sampleRequests,
74
+ },
75
+ priority: this.calculatePriority(pattern.avgConfidence, pattern.successRate, pattern.frequency),
76
+ });
77
+ }
78
+ }
79
+ }
80
+ for (const gap of promptAnalysis.gaps) {
81
+ if (gap.frequency >= this.minSamplesForSuggestion &&
82
+ gap.confidence >= this.minConfidenceForSuggestion) {
83
+ const keywords = this.extractKeywords(gap.userRequest);
84
+ for (const keyword of keywords) {
85
+ if (keyword.length > 3) {
86
+ suggestions.push({
87
+ keyword,
88
+ targetAgent: gap.suggestedAgent,
89
+ targetSkill: gap.suggestedSkill,
90
+ suggestedConfidence: Math.min(gap.confidence + 0.05, 0.95),
91
+ reason: `Template gap detected - ${gap.frequency} recurring requests without template match`,
92
+ evidence: {
93
+ frequency: gap.frequency,
94
+ successRate: 0.8,
95
+ avgConfidence: gap.confidence,
96
+ sampleRequests: [gap.userRequest],
97
+ },
98
+ priority: this.calculatePriority(gap.confidence, 0.8, gap.frequency),
99
+ });
100
+ }
101
+ }
102
+ }
103
+ }
104
+ for (const missedKeyword of promptAnalysis.topMissedKeywords.slice(0, 15)) {
105
+ if (missedKeyword.count >= this.minSamplesForSuggestion &&
106
+ missedKeyword.suggestedMappings.length > 0) {
107
+ const targetAgent = this.selectBestAgentForMapping(missedKeyword.suggestedMappings, performanceReport.agentMetrics);
108
+ suggestions.push({
109
+ keyword: missedKeyword.keyword,
110
+ targetAgent,
111
+ targetSkill: "code-review",
112
+ suggestedConfidence: 0.8,
113
+ reason: `Keyword appears in ${missedKeyword.count} requests without template match`,
114
+ evidence: {
115
+ frequency: missedKeyword.count,
116
+ successRate: 0.75,
117
+ avgConfidence: 0.75,
118
+ sampleRequests: [],
119
+ },
120
+ priority: this.calculatePriority(0.75, 0.75, missedKeyword.count),
121
+ });
122
+ }
123
+ }
124
+ return this.deduplicateSuggestions(suggestions);
125
+ }
126
+ /**
127
+ * Suggest optimizations for existing mappings
128
+ */
129
+ suggestMappingOptimizations(promptAnalysis, performanceReport) {
130
+ const optimizations = [];
131
+ for (const keyword of performanceReport.keywordEffectiveness) {
132
+ if (keyword.successRate < 0.6 && keyword.totalMatches >= 10) {
133
+ optimizations.push({
134
+ mappingId: `keyword-${keyword.keyword}`,
135
+ currentKeywords: [keyword.keyword],
136
+ currentAgent: keyword.routedAgent,
137
+ currentSkill: keyword.routedSkill,
138
+ optimizationType: "remove_keywords",
139
+ suggestedChanges: {
140
+ keywordsToRemove: [keyword.keyword],
141
+ },
142
+ reason: `Low success rate (${(keyword.successRate * 100).toFixed(1)}%) for keyword "${keyword.keyword}"`,
143
+ expectedImpact: `Reduce misroutings by approximately ${keyword.failedMatches} instances`,
144
+ });
145
+ }
146
+ }
147
+ for (const agent of performanceReport.agentMetrics) {
148
+ if (agent.successRate < 0.7 &&
149
+ agent.totalRoutings >= 20 &&
150
+ agent.escalatedRoutings > agent.totalRoutings * 0.3) {
151
+ optimizations.push({
152
+ mappingId: `agent-${agent.agent}`,
153
+ currentKeywords: [],
154
+ currentAgent: agent.agent,
155
+ currentSkill: agent.skill,
156
+ optimizationType: "adjust_confidence",
157
+ suggestedChanges: {
158
+ newConfidence: agent.avgConfidence - 0.1,
159
+ },
160
+ reason: `Agent ${agent.agent} showing poor performance with high escalation rate`,
161
+ expectedImpact: `Improve routing accuracy by redirecting tasks to more suitable agents`,
162
+ });
163
+ }
164
+ }
165
+ for (const pattern of promptAnalysis.emergingPatterns) {
166
+ if (pattern.successRate >= 0.9 &&
167
+ pattern.frequency >= 10 &&
168
+ pattern.avgConfidence < 0.85) {
169
+ optimizations.push({
170
+ mappingId: `pattern-${pattern.patternId}`,
171
+ currentKeywords: pattern.keywords,
172
+ currentAgent: pattern.suggestedAgent,
173
+ currentSkill: pattern.suggestedSkill,
174
+ optimizationType: "adjust_confidence",
175
+ suggestedChanges: {
176
+ newConfidence: Math.min(pattern.avgConfidence + 0.1, 0.95),
177
+ },
178
+ reason: `Pattern "${pattern.patternId}" shows excellent performance but low confidence score`,
179
+ expectedImpact: `Increase routing confidence for ${pattern.frequency} similar requests`,
180
+ });
181
+ }
182
+ }
183
+ return optimizations;
184
+ }
185
+ /**
186
+ * Generate warnings for configuration updates
187
+ */
188
+ generateWarnings(newMappings, optimizations) {
189
+ const warnings = [];
190
+ const lowPrioritySuggestions = newMappings.filter((m) => m.priority === "low");
191
+ if (lowPrioritySuggestions.length > newMappings.length * 0.5) {
192
+ warnings.push(`High proportion (${((lowPrioritySuggestions.length / newMappings.length) * 100).toFixed(1)}%) of suggestions are low priority - review carefully before applying`);
193
+ }
194
+ const agentConflictMap = new Map();
195
+ for (const mapping of newMappings) {
196
+ if (!agentConflictMap.has(mapping.keyword)) {
197
+ agentConflictMap.set(mapping.keyword, []);
198
+ }
199
+ agentConflictMap.get(mapping.keyword).push(mapping);
200
+ }
201
+ for (const [keyword, mappings] of agentConflictMap.entries()) {
202
+ const uniqueAgents = new Set(mappings.map((m) => m.targetAgent));
203
+ if (uniqueAgents.size > 1) {
204
+ warnings.push(`Keyword "${keyword}" suggested for multiple agents: ${Array.from(uniqueAgents).join(", ")}. Manual review required.`);
205
+ }
206
+ }
207
+ if (optimizations.length > 20) {
208
+ warnings.push("Large number of optimization suggestions - consider applying in batches");
209
+ }
210
+ return warnings;
211
+ }
212
+ /**
213
+ * Generate implementation steps
214
+ */
215
+ generateImplementationSteps(configurationUpdate) {
216
+ const steps = [];
217
+ if (configurationUpdate.newMappings.length > 0) {
218
+ steps.push(`1. Add ${configurationUpdate.newMappings.length} new keyword mappings`);
219
+ steps.push(" - Review high-priority suggestions first");
220
+ steps.push(" - Test new mappings in staging environment");
221
+ steps.push(" - Monitor impact on routing accuracy");
222
+ }
223
+ if (configurationUpdate.optimizations.length > 0) {
224
+ const stepNumber = configurationUpdate.newMappings.length > 0 ? 2 : 1;
225
+ steps.push(`${stepNumber}. Apply ${configurationUpdate.optimizations.length} mapping optimizations`);
226
+ steps.push(" - Backup current configuration before changes");
227
+ steps.push(" - Group optimizations by type (confidence adjustment, keyword removal, etc.)");
228
+ steps.push(" - Apply changes incrementally with testing between batches");
229
+ }
230
+ steps.push(`${(configurationUpdate.newMappings.length > 0 ? 3 : 2)}. Validate and deploy`);
231
+ steps.push(" - Run comprehensive routing tests");
232
+ steps.push(" - Monitor performance metrics for 24-48 hours");
233
+ steps.push(" - Roll back any changes that show negative impact");
234
+ steps.push(`${(configurationUpdate.newMappings.length > 0 ? 4 : 3)}. Continuous monitoring`);
235
+ steps.push(" - Review analytics dashboard weekly");
236
+ steps.push(" - Track success rate improvements");
237
+ steps.push(" - Iterate based on real-world usage data");
238
+ return steps;
239
+ }
240
+ /**
241
+ * Get formatted refinement report
242
+ */
243
+ generateFormattedReport() {
244
+ const report = this.generateRefinementReport();
245
+ const lines = [];
246
+ lines.push("╔════════════════════════════════════════════════════════════╗");
247
+ lines.push("ā•‘ StringRay Routing Refinement Report ā•‘");
248
+ lines.push("ā•šā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•");
249
+ lines.push("");
250
+ lines.push(`Generated: ${report.configurationUpdate.generatedAt.toISOString()}`);
251
+ lines.push(`Version: ${report.configurationUpdate.version}`);
252
+ lines.push("");
253
+ lines.push("=== Summary ===");
254
+ lines.push(`New Mappings: ${report.configurationUpdate.summary.newMappings}`);
255
+ lines.push(`Optimized Mappings: ${report.configurationUpdate.summary.optimizedMappings}`);
256
+ lines.push(`Removed Mappings: ${report.configurationUpdate.summary.removedMappings}`);
257
+ lines.push(`Estimated Improvement: ${report.configurationUpdate.summary.estimatedImprovement}`);
258
+ lines.push("");
259
+ if (report.configurationUpdate.newMappings.length > 0) {
260
+ lines.push("=== New Keyword Mappings ===");
261
+ for (const mapping of report.configurationUpdate.newMappings.slice(0, 20)) {
262
+ lines.push(`\n Keyword: "${mapping.keyword}"`);
263
+ lines.push(` Target: ${mapping.targetAgent}/${mapping.targetSkill}`);
264
+ lines.push(` Confidence: ${mapping.suggestedConfidence.toFixed(2)}`);
265
+ lines.push(` Priority: ${mapping.priority.toUpperCase()}`);
266
+ lines.push(` Reason: ${mapping.reason}`);
267
+ lines.push(` Evidence: ${mapping.evidence.frequency} occurrences, ${(mapping.evidence.successRate * 100).toFixed(1)}% success rate`);
268
+ }
269
+ }
270
+ if (report.configurationUpdate.optimizations.length > 0) {
271
+ lines.push("");
272
+ lines.push("=== Mapping Optimizations ===");
273
+ for (const optimization of report.configurationUpdate.optimizations.slice(0, 10)) {
274
+ lines.push(`\n ${optimization.optimizationType.toUpperCase()}: ${optimization.mappingId}`);
275
+ lines.push(` Current: ${optimization.currentAgent}/${optimization.currentSkill}`);
276
+ lines.push(` Reason: ${optimization.reason}`);
277
+ lines.push(` Expected Impact: ${optimization.expectedImpact}`);
278
+ }
279
+ }
280
+ if (report.configurationUpdate.warnings.length > 0) {
281
+ lines.push("");
282
+ lines.push("=== Warnings ===");
283
+ for (const warning of report.configurationUpdate.warnings) {
284
+ lines.push(` āš ļø ${warning}`);
285
+ }
286
+ }
287
+ lines.push("");
288
+ lines.push("=== Implementation Steps ===");
289
+ for (const step of report.implementationSteps) {
290
+ lines.push(` ${step}`);
291
+ }
292
+ lines.push("");
293
+ lines.push("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
294
+ lines.push("Generated by StringRay Routing Refiner");
295
+ return lines.join("\n");
296
+ }
297
+ /**
298
+ * Export configuration update as JSON
299
+ */
300
+ exportConfigurationUpdate() {
301
+ const report = this.generateRefinementReport();
302
+ return JSON.stringify(report.configurationUpdate, null, 2);
303
+ }
304
+ calculatePriority(confidence, successRate, frequency) {
305
+ const score = confidence * 0.4 + successRate * 0.4 + (Math.min(frequency, 20) / 20) * 0.2;
306
+ if (score >= 0.85)
307
+ return "high";
308
+ if (score >= 0.7)
309
+ return "medium";
310
+ return "low";
311
+ }
312
+ extractKeywords(text) {
313
+ const words = text
314
+ .toLowerCase()
315
+ .replace(/[^\w\s]/g, " ")
316
+ .split(/\s+/)
317
+ .filter((word) => word.length > 3);
318
+ const stopWords = new Set([
319
+ "this",
320
+ "that",
321
+ "with",
322
+ "from",
323
+ "have",
324
+ "will",
325
+ "just",
326
+ "like",
327
+ "they",
328
+ "them",
329
+ "than",
330
+ "then",
331
+ "some",
332
+ "such",
333
+ ]);
334
+ return words.filter((word) => !stopWords.has(word));
335
+ }
336
+ selectBestAgentForMapping(agents, agentMetrics) {
337
+ const agentPerformance = new Map(agentMetrics.map((m) => [m.agent, m.successRate]));
338
+ const sortedAgents = [...agents].sort((a, b) => {
339
+ const scoreA = agentPerformance.get(a) ?? 0;
340
+ const scoreB = agentPerformance.get(b) ?? 0;
341
+ return scoreB - scoreA;
342
+ });
343
+ return sortedAgents[0] ?? "enforcer";
344
+ }
345
+ deduplicateSuggestions(suggestions) {
346
+ const seen = new Map();
347
+ for (const suggestion of suggestions) {
348
+ const key = `${suggestion.keyword}-${suggestion.targetAgent}-${suggestion.targetSkill}`;
349
+ if (!seen.has(key)) {
350
+ seen.set(key, suggestion);
351
+ }
352
+ else {
353
+ const existing = seen.get(key);
354
+ if (suggestion.evidence.frequency > existing.evidence.frequency ||
355
+ suggestion.evidence.successRate > existing.evidence.successRate) {
356
+ seen.set(key, suggestion);
357
+ }
358
+ }
359
+ }
360
+ return Array.from(seen.values());
361
+ }
362
+ calculateRemovals(optimizations) {
363
+ return optimizations.filter((o) => o.optimizationType === "remove_keywords").length;
364
+ }
365
+ estimateImprovement(newMappings, optimizations) {
366
+ const highPriorityMappings = newMappings.filter((m) => m.priority === "high");
367
+ const confidenceAdjustments = optimizations.filter((o) => o.optimizationType === "adjust_confidence").length;
368
+ const estimatedAccuracyImprovement = (highPriorityMappings.length * 2) + (confidenceAdjustments * 1);
369
+ if (estimatedAccuracyImprovement > 15) {
370
+ return `${estimatedAccuracyImprovement}%+ (significant)`;
371
+ }
372
+ else if (estimatedAccuracyImprovement > 5) {
373
+ return `${estimatedAccuracyImprovement}%+ (moderate)`;
374
+ }
375
+ else {
376
+ return `${estimatedAccuracyImprovement}%+ (minor)`;
377
+ }
378
+ }
379
+ }
380
+ export const routingRefiner = new RoutingRefiner();
381
+ //# sourceMappingURL=routing-refiner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing-refiner.js","sourceRoot":"","sources":["../../src/analytics/routing-refiner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Analytics Disable CLI Command
3
+ *
4
+ * Disables StringRay Central Analytics with immediate opt-out
5
+ *
6
+ * Usage: npx strray-ai analytics disable
7
+ */
8
+ export declare const analyticsDisableCommand: import("commander").Command;
9
+ export default analyticsDisableCommand;
10
+ //# sourceMappingURL=analytics-disable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics-disable.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/analytics-disable.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,eAAO,MAAM,uBAAuB,6BAuEhC,CAAC;AAEL,eAAe,uBAAuB,CAAC"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Analytics Disable CLI Command
3
+ *
4
+ * Disables StringRay Central Analytics with immediate opt-out
5
+ *
6
+ * Usage: npx strray-ai analytics disable
7
+ */
8
+ import { program } from "commander";
9
+ import { ConsentManager } from "../../analytics/consent-manager.js";
10
+ export const analyticsDisableCommand = program
11
+ .command("analytics disable")
12
+ .description("Disable StringRay Central Analytics (opt-out)")
13
+ .option("-y, --yes", "Skip confirmation prompts", false)
14
+ .action(async (options) => {
15
+ console.log("šŸ”’ Disabling StringRay Central Analytics...\n");
16
+ try {
17
+ const consentManager = new ConsentManager();
18
+ const currentStatus = await consentManager.initialize();
19
+ // Check if already disabled
20
+ if (!currentStatus.analyticsEnabled) {
21
+ console.log("āœ… Analytics is already disabled!");
22
+ return;
23
+ }
24
+ // Show what will be disabled
25
+ console.log("šŸ“‹ Current Status:");
26
+ console.log(` Project ID: ${currentStatus.projectId}`);
27
+ console.log(` Enabled Categories: ${Object.entries(currentStatus.categories)
28
+ .filter(([_, enabled]) => enabled)
29
+ .map(([cat]) => cat)
30
+ .join(', ')}`);
31
+ console.log(` Submissions will: STOP IMMEDIATELY`);
32
+ // Confirmation
33
+ if (!options.yes) {
34
+ console.log(`\nāš ļø This will immediately stop all data submission.`);
35
+ console.log(` • Existing submission queue will be cleared`);
36
+ console.log(` • Your project ID will be preserved in config`);
37
+ console.log(` • You can re-enable anytime: npx strray-ai analytics enable\n`);
38
+ const readline = await import('readline');
39
+ const rl = readline.createInterface({
40
+ input: process.stdin,
41
+ output: process.stdout
42
+ });
43
+ const answer = await new Promise((resolve) => {
44
+ rl.question("Do you want to proceed? (yes/no): ", resolve);
45
+ });
46
+ rl.close();
47
+ if (answer.toLowerCase() !== 'yes' && answer.toLowerCase() !== 'y') {
48
+ console.log("āŒ Consent not disabled. Aborted.");
49
+ return;
50
+ }
51
+ }
52
+ // Disable consent
53
+ await consentManager.disableConsent();
54
+ // Show success
55
+ console.log("\nāœ… Analytics successfully disabled!");
56
+ console.log(`\nšŸ”’ All data submission has stopped.`);
57
+ console.log(`\nšŸ“‹ Your consent configuration:`);
58
+ const updatedStatus = await consentManager.getStatus();
59
+ console.log(` Project ID: ${updatedStatus.projectId}`);
60
+ console.log(` Opt-Out Date: ${updatedStatus.lastOptOut?.toISOString()}`);
61
+ console.log(` Analytics Enabled: ${updatedStatus.analyticsEnabled}`);
62
+ console.log(`\nšŸ’” Re-enable anytime:`);
63
+ console.log(` npx strray-ai analytics enable`);
64
+ console.log(`\nšŸ“– Learn more: docs/architecture/central-analytics-store.md`);
65
+ }
66
+ catch (error) {
67
+ console.error("āŒ Failed to disable analytics:", error instanceof Error ? error.message : String(error));
68
+ console.error("\nšŸ’” Try: npx strray-ai analytics disable --help");
69
+ process.exit(1);
70
+ }
71
+ });
72
+ export default analyticsDisableCommand;
73
+ //# sourceMappingURL=analytics-disable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics-disable.js","sourceRoot":"","sources":["../../../src/cli/commands/analytics-disable.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Analytics Enable Action
3
+ *
4
+ * Enables StringRay Central Analytics with opt-in consent
5
+ *
6
+ * Usage: npx strray-ai analytics enable [--categories reflections,logs,metrics,patterns]
7
+ */
8
+ export declare function analyticsEnableAction(options: any): Promise<void>;
9
+ //# sourceMappingURL=analytics-enable-action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics-enable-action.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/analytics-enable-action.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,GAAG,iBAmFvD"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Analytics Enable Action
3
+ *
4
+ * Enables StringRay Central Analytics with opt-in consent
5
+ *
6
+ * Usage: npx strray-ai analytics enable [--categories reflections,logs,metrics,patterns]
7
+ */
8
+ import { ConsentManager } from "../../analytics/consent-manager.js";
9
+ export async function analyticsEnableAction(options) {
10
+ console.log("šŸ”“ Enabling StringRay Central Analytics...\n");
11
+ try {
12
+ const consentManager = new ConsentManager();
13
+ const currentStatus = await consentManager.initialize();
14
+ // Check if already enabled
15
+ if (currentStatus.analyticsEnabled) {
16
+ console.log("āœ… Analytics is already enabled!");
17
+ console.log(`\nCurrent Status:`);
18
+ console.log(` Project ID: ${currentStatus.projectId}`);
19
+ console.log(` Categories: ${Object.entries(currentStatus.categories)
20
+ .filter(([_, enabled]) => enabled)
21
+ .map(([cat]) => cat)
22
+ .join(', ')}`);
23
+ return;
24
+ }
25
+ // Parse categories
26
+ let categories;
27
+ if (options.all) {
28
+ categories = ["reflections", "logs", "metrics", "patterns"];
29
+ }
30
+ else if (options.categories) {
31
+ categories = options.categories.split(',').map((c) => c.trim());
32
+ }
33
+ // Show what will be enabled
34
+ console.log("šŸ“‹ Configuration:");
35
+ console.log(` Categories to enable: ${categories ? categories.join(', ') : 'all'}`);
36
+ console.log(` Project ID will be: ${currentStatus.projectId}`);
37
+ console.log(` Consent version: 1.0`);
38
+ // Confirmation
39
+ if (!options.yes) {
40
+ console.log(`\nāš ļø This will enable anonymous data submission to StringRay Central Analytics.`);
41
+ console.log(` • Data is anonymized before submission`);
42
+ console.log(` • You can disable anytime with: npx strray-ai analytics disable`);
43
+ console.log(` • Preview what would be submitted: npx strray-ai analytics preview`);
44
+ console.log(` • Learn more: docs/architecture/central-analytics-store.md\n`);
45
+ const readline = await import('readline');
46
+ const rl = readline.createInterface({
47
+ input: process.stdin,
48
+ output: process.stdout
49
+ });
50
+ const answer = await new Promise((resolve) => {
51
+ rl.question("Do you want to proceed? (yes/no): ", resolve);
52
+ });
53
+ rl.close();
54
+ if (answer.toLowerCase() !== 'yes' && answer.toLowerCase() !== 'y') {
55
+ console.log("āŒ Consent not enabled. Aborted.");
56
+ return;
57
+ }
58
+ }
59
+ // Enable consent
60
+ await consentManager.enableConsent(categories);
61
+ // Show success
62
+ console.log("\nāœ… Analytics successfully enabled!");
63
+ console.log(`\nšŸŽ‰ Your project can now contribute to community learning!`);
64
+ console.log(`\nšŸ“‹ Your consent configuration:`);
65
+ const updatedStatus = await consentManager.getStatus();
66
+ console.log(` Project ID: ${updatedStatus.projectId}`);
67
+ console.log(` Consent Date: ${updatedStatus.consentDate.toISOString()}`);
68
+ console.log(` Categories Enabled: ${Object.entries(updatedStatus.categories)
69
+ .filter(([_, enabled]) => enabled)
70
+ .map(([cat]) => cat)
71
+ .join(', ')}`);
72
+ console.log(`\nšŸ’” Next steps:`);
73
+ console.log(` 1. Check what will be submitted: npx strray-ai analytics preview`);
74
+ console.log(` 2. View current status: npx strray-ai analytics status`);
75
+ console.log(` 3. Disable anytime: npx strray-ai analytics disable`);
76
+ }
77
+ catch (error) {
78
+ console.error("āŒ Failed to enable analytics:", error instanceof Error ? error.message : String(error));
79
+ console.error("\nšŸ’” Try: npx strray-ai analytics enable --help");
80
+ process.exit(1);
81
+ }
82
+ }
83
+ //# sourceMappingURL=analytics-enable-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics-enable-action.js","sourceRoot":"","sources":["../../../src/cli/commands/analytics-enable-action.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Analytics Preview CLI Command
3
+ *
4
+ * Shows what data would be submitted without actually submitting it
5
+ *
6
+ * Usage: npx strray-ai analytics preview [--type reflections|logs|metrics|patterns] [--all]
7
+ */
8
+ export declare const analyticsPreviewCommand: import("commander").Command;
9
+ export default analyticsPreviewCommand;
10
+ //# sourceMappingURL=analytics-preview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics-preview.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/analytics-preview.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,eAAO,MAAM,uBAAuB,6BA8GhC,CAAC;AAEL,eAAe,uBAAuB,CAAC"}