strray-ai 1.7.2 ā 1.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.opencode/hooks/post-commit +152 -55
- package/.opencode/hooks/post-commit.backup +110 -174
- package/.opencode/hooks/post-push +47 -64
- package/.opencode/hooks/post-push.backup +34 -38
- package/.opencode/strray/features.json +3 -3
- package/.opencode/strray/routing-mappings.json +90 -34
- package/AGENTS.md +7 -2
- package/dist/analytics/anonymization-engine.d.ts +108 -0
- package/dist/analytics/anonymization-engine.d.ts.map +1 -0
- package/dist/analytics/anonymization-engine.js +352 -0
- package/dist/analytics/anonymization-engine.js.map +1 -0
- package/dist/analytics/consent-manager.d.ts +94 -0
- package/dist/analytics/consent-manager.d.ts.map +1 -0
- package/dist/analytics/consent-manager.js +257 -0
- package/dist/analytics/consent-manager.js.map +1 -0
- package/dist/analytics/emerging-pattern-detector.d.ts +68 -0
- package/dist/analytics/emerging-pattern-detector.d.ts.map +1 -0
- package/dist/analytics/emerging-pattern-detector.js +250 -0
- package/dist/analytics/emerging-pattern-detector.js.map +1 -0
- package/dist/analytics/pattern-learning-engine.d.ts +81 -0
- package/dist/analytics/pattern-learning-engine.d.ts.map +1 -0
- package/dist/analytics/pattern-learning-engine.js +262 -0
- package/dist/analytics/pattern-learning-engine.js.map +1 -0
- package/dist/analytics/pattern-performance-tracker.d.ts +89 -0
- package/dist/analytics/pattern-performance-tracker.d.ts.map +1 -0
- package/dist/analytics/pattern-performance-tracker.js +289 -0
- package/dist/analytics/pattern-performance-tracker.js.map +1 -0
- package/dist/analytics/prompt-pattern-analyzer.d.ts +100 -0
- package/dist/analytics/prompt-pattern-analyzer.d.ts.map +1 -0
- package/dist/analytics/prompt-pattern-analyzer.js +372 -0
- package/dist/analytics/prompt-pattern-analyzer.js.map +1 -0
- package/dist/analytics/routing-performance-analyzer.d.ts +102 -0
- package/dist/analytics/routing-performance-analyzer.d.ts.map +1 -0
- package/dist/analytics/routing-performance-analyzer.js +342 -0
- package/dist/analytics/routing-performance-analyzer.js.map +1 -0
- package/dist/analytics/routing-refiner.d.ts +105 -0
- package/dist/analytics/routing-refiner.d.ts.map +1 -0
- package/dist/analytics/routing-refiner.js +381 -0
- package/dist/analytics/routing-refiner.js.map +1 -0
- package/dist/cli/commands/analytics-disable.d.ts +10 -0
- package/dist/cli/commands/analytics-disable.d.ts.map +1 -0
- package/dist/cli/commands/analytics-disable.js +73 -0
- package/dist/cli/commands/analytics-disable.js.map +1 -0
- package/dist/cli/commands/analytics-enable-action.d.ts +9 -0
- package/dist/cli/commands/analytics-enable-action.d.ts.map +1 -0
- package/dist/cli/commands/analytics-enable-action.js +83 -0
- package/dist/cli/commands/analytics-enable-action.js.map +1 -0
- package/dist/cli/commands/analytics-preview.d.ts +10 -0
- package/dist/cli/commands/analytics-preview.d.ts.map +1 -0
- package/dist/cli/commands/analytics-preview.js +107 -0
- package/dist/cli/commands/analytics-preview.js.map +1 -0
- package/dist/cli/commands/analytics-status.d.ts +10 -0
- package/dist/cli/commands/analytics-status.d.ts.map +1 -0
- package/dist/cli/commands/analytics-status.js +68 -0
- package/dist/cli/commands/analytics-status.js.map +1 -0
- package/dist/cli/index.js +6 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/core/adaptive-kernel.d.ts +110 -0
- package/dist/core/adaptive-kernel.d.ts.map +1 -0
- package/dist/core/adaptive-kernel.js +193 -0
- package/dist/core/adaptive-kernel.js.map +1 -0
- package/dist/core/kernel-patterns.d.ts +105 -0
- package/dist/core/kernel-patterns.d.ts.map +1 -0
- package/dist/core/kernel-patterns.js +328 -0
- package/dist/core/kernel-patterns.js.map +1 -0
- package/dist/core/orchestrator.d.ts +1 -0
- package/dist/core/orchestrator.d.ts.map +1 -1
- package/dist/core/orchestrator.js +40 -11
- package/dist/core/orchestrator.js.map +1 -1
- package/dist/delegation/agent-delegator.d.ts +1 -0
- package/dist/delegation/agent-delegator.d.ts.map +1 -1
- package/dist/delegation/agent-delegator.js +24 -2
- package/dist/delegation/agent-delegator.js.map +1 -1
- package/dist/delegation/task-skill-router.d.ts +269 -5
- package/dist/delegation/task-skill-router.d.ts.map +1 -1
- package/dist/delegation/task-skill-router.js +810 -23
- package/dist/delegation/task-skill-router.js.map +1 -1
- package/dist/postprocessor/PostProcessor.d.ts +10 -0
- package/dist/postprocessor/PostProcessor.d.ts.map +1 -1
- package/dist/postprocessor/PostProcessor.js +87 -17
- package/dist/postprocessor/PostProcessor.js.map +1 -1
- package/dist/processors/agents-md-validation-processor.d.ts +1 -0
- package/dist/processors/agents-md-validation-processor.d.ts.map +1 -1
- package/dist/processors/agents-md-validation-processor.js +34 -12
- package/dist/processors/agents-md-validation-processor.js.map +1 -1
- package/dist/processors/processor-manager.d.ts +7 -0
- package/dist/processors/processor-manager.d.ts.map +1 -1
- package/dist/processors/processor-manager.js +93 -0
- package/dist/processors/processor-manager.js.map +1 -1
- package/dist/processors/test-auto-creation-processor.d.ts.map +1 -1
- package/dist/processors/test-auto-creation-processor.js +52 -38
- package/dist/processors/test-auto-creation-processor.js.map +1 -1
- package/dist/scripts/analytics/daily-routing-analysis.d.ts +18 -0
- package/dist/scripts/analytics/daily-routing-analysis.d.ts.map +1 -0
- package/dist/scripts/analytics/daily-routing-analysis.js +268 -0
- package/dist/scripts/analytics/daily-routing-analysis.js.map +1 -0
- package/dist/scripts/analytics/index.d.ts +15 -0
- package/dist/scripts/analytics/index.d.ts.map +1 -0
- package/dist/scripts/analytics/index.js +17 -0
- package/dist/scripts/analytics/index.js.map +1 -0
- package/dist/scripts/test-p9.d.ts +15 -0
- package/dist/scripts/test-p9.d.ts.map +1 -0
- package/dist/scripts/test-p9.js +220 -0
- package/dist/scripts/test-p9.js.map +1 -0
- package/package.json +6 -2
- package/scripts/node/kernel-e2e-test.mjs +168 -0
- package/scripts/node/kernel-framework-test.mjs +127 -0
- package/scripts/node/kernel-live-test.mjs +147 -0
- package/scripts/node/kernel-real-framework-test.mjs +103 -0
- package/scripts/node/kernel-update.cjs +379 -0
- package/scripts/node/reflection-check.sh +245 -27
- package/scripts/node/test-simple-names-comprehensive.mjs +221 -0
- package/scripts/node/test-simple-names.mjs +39 -0
- package/dist/agents/documentation-writer.d.ts +0 -9
- package/dist/agents/documentation-writer.d.ts.map +0 -1
- package/dist/agents/documentation-writer.js +0 -85
- package/dist/agents/documentation-writer.js.map +0 -1
- package/dist/agents/explore.d.ts +0 -8
- package/dist/agents/explore.d.ts.map +0 -1
- package/dist/agents/explore.js +0 -55
- package/dist/agents/explore.js.map +0 -1
- package/dist/agents/librarian.d.ts +0 -3
- package/dist/agents/librarian.d.ts.map +0 -1
- package/dist/agents/librarian.js +0 -84
- package/dist/agents/librarian.js.map +0 -1
- package/dist/agents/marketing-expert.d.ts +0 -9
- package/dist/agents/marketing-expert.d.ts.map +0 -1
- package/dist/agents/marketing-expert.js +0 -112
- package/dist/agents/marketing-expert.js.map +0 -1
- package/dist/agents/oracle.d.ts +0 -8
- package/dist/agents/oracle.d.ts.map +0 -1
- package/dist/agents/oracle.js +0 -51
- package/dist/agents/oracle.js.map +0 -1
- package/dist/agents/seo-copywriter.d.ts +0 -10
- package/dist/agents/seo-copywriter.d.ts.map +0 -1
- package/dist/agents/seo-copywriter.js +0 -73
- package/dist/agents/seo-copywriter.js.map +0 -1
- package/dist/agents/seo-specialist.d.ts +0 -9
- package/dist/agents/seo-specialist.d.ts.map +0 -1
- package/dist/agents/seo-specialist.js +0 -54
- package/dist/agents/seo-specialist.js.map +0 -1
- package/dist/agents/test-architect.d.ts +0 -3
- package/dist/agents/test-architect.d.ts.map +0 -1
- package/dist/agents/test-architect.js +0 -96
- package/dist/agents/test-architect.js.map +0 -1
- package/dist/mcps/enhanced-orchestrator.server.d.ts +0 -14
- package/dist/mcps/enhanced-orchestrator.server.d.ts.map +0 -1
- package/dist/mcps/enhanced-orchestrator.server.js +0 -266
- package/dist/mcps/enhanced-orchestrator.server.js.map +0 -1
- package/dist/mcps/knowledge-skills/analyzer.server.d.ts +0 -7
- package/dist/mcps/knowledge-skills/analyzer.server.d.ts.map +0 -1
- package/dist/mcps/knowledge-skills/analyzer.server.js +0 -282
- package/dist/mcps/knowledge-skills/analyzer.server.js.map +0 -1
- package/dist/mcps/knowledge-skills/documentation-generation.server.d.ts +0 -48
- package/dist/mcps/knowledge-skills/documentation-generation.server.d.ts.map +0 -1
- package/dist/mcps/knowledge-skills/documentation-generation.server.js +0 -1238
- package/dist/mcps/knowledge-skills/documentation-generation.server.js.map +0 -1
- package/dist/mcps/knowledge-skills/explore.server.d.ts +0 -21
- package/dist/mcps/knowledge-skills/explore.server.d.ts.map +0 -1
- package/dist/mcps/knowledge-skills/explore.server.js +0 -582
- package/dist/mcps/knowledge-skills/explore.server.js.map +0 -1
- package/dist/mcps/knowledge-skills/marketing-expert.server.d.ts +0 -8
- package/dist/mcps/knowledge-skills/marketing-expert.server.d.ts.map +0 -1
- package/dist/mcps/knowledge-skills/marketing-expert.server.js +0 -356
- package/dist/mcps/knowledge-skills/marketing-expert.server.js.map +0 -1
- package/dist/mcps/knowledge-skills/oracle.server.d.ts +0 -25
- package/dist/mcps/knowledge-skills/oracle.server.d.ts.map +0 -1
- package/dist/mcps/knowledge-skills/oracle.server.js +0 -569
- package/dist/mcps/knowledge-skills/oracle.server.js.map +0 -1
- package/dist/mcps/knowledge-skills/seo-copywriter.server.d.ts +0 -8
- package/dist/mcps/knowledge-skills/seo-copywriter.server.d.ts.map +0 -1
- package/dist/mcps/knowledge-skills/seo-copywriter.server.js +0 -251
- package/dist/mcps/knowledge-skills/seo-copywriter.server.js.map +0 -1
- package/dist/mcps/knowledge-skills/seo-specialist.server.d.ts +0 -8
- package/dist/mcps/knowledge-skills/seo-specialist.server.d.ts.map +0 -1
- package/dist/mcps/knowledge-skills/seo-specialist.server.js +0 -211
- package/dist/mcps/knowledge-skills/seo-specialist.server.js.map +0 -1
- package/dist/mcps/librarian.server.d.ts +0 -17
- package/dist/mcps/librarian.server.d.ts.map +0 -1
- package/dist/mcps/librarian.server.js +0 -382
- package/dist/mcps/librarian.server.js.map +0 -1
- package/dist/optimization/performance-optimizer.d.ts +0 -179
- package/dist/optimization/performance-optimizer.d.ts.map +0 -1
- package/dist/optimization/performance-optimizer.js +0 -556
- package/dist/optimization/performance-optimizer.js.map +0 -1
- package/dist/utils/memory-pool.d.ts +0 -90
- package/dist/utils/memory-pool.d.ts.map +0 -1
- package/dist/utils/memory-pool.js +0 -245
- package/dist/utils/memory-pool.js.map +0 -1
|
@@ -0,0 +1,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":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAAY;IACpD,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAE5D,IAAI,CAAC;QACD,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;QAC5C,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC;QAExD,2BAA2B;QAC3B,IAAI,aAAa,CAAC,gBAAgB,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,iBAAiB,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC;iBAChE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC;iBACjC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;iBACnB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnB,OAAO;QACX,CAAC;QAED,mBAAmB;QACnB,IAAI,UAAgC,CAAC;QACrC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,UAAU,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAChE,CAAC;aAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YAC5B,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5E,CAAC;QAED,4BAA4B;QAC5B,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,2BAA2B,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,yBAAyB,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QAEtC,eAAe;QACf,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;YAChG,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;YAClF,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;YACrF,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;YAE/E,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YAC1C,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;gBAChC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;aACzB,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;gBACjD,EAAE,CAAC,QAAQ,CAAC,oCAAoC,EAAE,OAAO,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,KAAK,EAAE,CAAC;YAEX,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;gBACjE,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;gBAC/C,OAAO;YACX,CAAC;QACL,CAAC;QAED,iBAAiB;QACjB,MAAM,cAAc,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAE/C,eAAe;QACf,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAChD,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,iBAAiB,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,mBAAmB,aAAa,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,yBAAyB,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC;aACxE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC;aACjC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;aACnB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEnB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;QAClF,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IAEzE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACvG,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC"}
|
|
@@ -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"}
|