agentic-qe 1.0.4 → 1.0.5

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 (74) hide show
  1. package/README.md +58 -9
  2. package/dist/cli/commands/init.d.ts +1 -0
  3. package/dist/cli/commands/init.d.ts.map +1 -1
  4. package/dist/cli/commands/init.js +219 -3
  5. package/dist/cli/commands/init.js.map +1 -1
  6. package/dist/cli/commands/routing/index.d.ts +95 -0
  7. package/dist/cli/commands/routing/index.d.ts.map +1 -0
  8. package/dist/cli/commands/routing/index.js +399 -0
  9. package/dist/cli/commands/routing/index.js.map +1 -0
  10. package/dist/cli/index.js +88 -0
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/core/routing/AdaptiveModelRouter.d.ts +86 -0
  13. package/dist/core/routing/AdaptiveModelRouter.d.ts.map +1 -0
  14. package/dist/core/routing/AdaptiveModelRouter.js +264 -0
  15. package/dist/core/routing/AdaptiveModelRouter.js.map +1 -0
  16. package/dist/core/routing/ComplexityAnalyzer.d.ts +49 -0
  17. package/dist/core/routing/ComplexityAnalyzer.d.ts.map +1 -0
  18. package/dist/core/routing/ComplexityAnalyzer.js +182 -0
  19. package/dist/core/routing/ComplexityAnalyzer.js.map +1 -0
  20. package/dist/core/routing/CostTracker.d.ts +55 -0
  21. package/dist/core/routing/CostTracker.d.ts.map +1 -0
  22. package/dist/core/routing/CostTracker.js +210 -0
  23. package/dist/core/routing/CostTracker.js.map +1 -0
  24. package/dist/core/routing/FleetManagerIntegration.d.ts +68 -0
  25. package/dist/core/routing/FleetManagerIntegration.d.ts.map +1 -0
  26. package/dist/core/routing/FleetManagerIntegration.js +170 -0
  27. package/dist/core/routing/FleetManagerIntegration.js.map +1 -0
  28. package/dist/core/routing/ModelRules.d.ts +38 -0
  29. package/dist/core/routing/ModelRules.d.ts.map +1 -0
  30. package/dist/core/routing/ModelRules.js +170 -0
  31. package/dist/core/routing/ModelRules.js.map +1 -0
  32. package/dist/core/routing/QETask.d.ts +12 -0
  33. package/dist/core/routing/QETask.d.ts.map +1 -0
  34. package/dist/core/routing/QETask.js +21 -0
  35. package/dist/core/routing/QETask.js.map +1 -0
  36. package/dist/core/routing/index.d.ts +19 -0
  37. package/dist/core/routing/index.d.ts.map +1 -0
  38. package/dist/core/routing/index.js +50 -0
  39. package/dist/core/routing/index.js.map +1 -0
  40. package/dist/core/routing/types.d.ts +136 -0
  41. package/dist/core/routing/types.d.ts.map +1 -0
  42. package/dist/core/routing/types.js +28 -0
  43. package/dist/core/routing/types.js.map +1 -0
  44. package/dist/mcp/server.d.ts.map +1 -1
  45. package/dist/mcp/server.js +77 -9
  46. package/dist/mcp/server.js.map +1 -1
  47. package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.d.ts +112 -0
  48. package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.d.ts.map +1 -0
  49. package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.js +341 -0
  50. package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.js.map +1 -0
  51. package/dist/mcp/streaming/StreamingMCPTool.d.ts +80 -0
  52. package/dist/mcp/streaming/StreamingMCPTool.d.ts.map +1 -0
  53. package/dist/mcp/streaming/StreamingMCPTool.js +276 -0
  54. package/dist/mcp/streaming/StreamingMCPTool.js.map +1 -0
  55. package/dist/mcp/streaming/TestExecuteStreamHandler.d.ts +73 -0
  56. package/dist/mcp/streaming/TestExecuteStreamHandler.d.ts.map +1 -0
  57. package/dist/mcp/streaming/TestExecuteStreamHandler.js +436 -0
  58. package/dist/mcp/streaming/TestExecuteStreamHandler.js.map +1 -0
  59. package/dist/mcp/streaming/index.d.ts +14 -0
  60. package/dist/mcp/streaming/index.d.ts.map +1 -0
  61. package/dist/mcp/streaming/index.js +30 -0
  62. package/dist/mcp/streaming/index.js.map +1 -0
  63. package/dist/mcp/streaming/types.d.ts +117 -0
  64. package/dist/mcp/streaming/types.d.ts.map +1 -0
  65. package/dist/mcp/streaming/types.js +88 -0
  66. package/dist/mcp/streaming/types.js.map +1 -0
  67. package/dist/mcp/tools.d.ts +3 -1
  68. package/dist/mcp/tools.d.ts.map +1 -1
  69. package/dist/mcp/tools.js +107 -1
  70. package/dist/mcp/tools.js.map +1 -1
  71. package/dist/types/index.d.ts +16 -1
  72. package/dist/types/index.d.ts.map +1 -1
  73. package/dist/types/index.js.map +1 -1
  74. package/package.json +2 -2
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Adaptive Model Router
3
+ * Implements intelligent model selection with cost optimization
4
+ */
5
+ import { QETask } from './types';
6
+ import { ModelRouter, ModelSelection, AIModel, TaskComplexity, RouterStats, RouterConfig } from './types';
7
+ import { SwarmMemoryManager } from '../memory/SwarmMemoryManager';
8
+ import { EventBus } from '../EventBus';
9
+ export declare class AdaptiveModelRouter implements ModelRouter {
10
+ private config;
11
+ private complexityAnalyzer;
12
+ private costTracker;
13
+ private memoryStore;
14
+ private eventBus;
15
+ private failureCount;
16
+ constructor(memoryStore: SwarmMemoryManager, eventBus: EventBus, config?: Partial<RouterConfig>);
17
+ /**
18
+ * Initialize router
19
+ */
20
+ private initialize;
21
+ /**
22
+ * Select the optimal model for a given task
23
+ */
24
+ selectModel(task: QETask): Promise<ModelSelection>;
25
+ /**
26
+ * Track cost for a model usage
27
+ */
28
+ trackCost(modelId: AIModel, tokens: number): Promise<void>;
29
+ /**
30
+ * Get fallback model when primary fails
31
+ */
32
+ getFallbackModel(failedModel: AIModel, task: QETask): AIModel;
33
+ /**
34
+ * Get router statistics
35
+ */
36
+ getStats(): Promise<RouterStats>;
37
+ /**
38
+ * Export cost dashboard data
39
+ */
40
+ exportCostDashboard(): Promise<any>;
41
+ /**
42
+ * Analyze task complexity
43
+ */
44
+ analyzeComplexity(task: QETask): Promise<TaskComplexity>;
45
+ /**
46
+ * Create default selection when routing is disabled
47
+ */
48
+ private createDefaultSelection;
49
+ /**
50
+ * Extract agent type from task
51
+ */
52
+ private extractAgentType;
53
+ /**
54
+ * Select model based on task type and complexity
55
+ */
56
+ private selectModelForTask;
57
+ /**
58
+ * Estimate cost for a model and token count
59
+ */
60
+ private estimateCost;
61
+ /**
62
+ * Select cost-optimized model when primary exceeds threshold
63
+ */
64
+ private selectCostOptimizedModel;
65
+ /**
66
+ * Build reasoning string for selection
67
+ */
68
+ private buildReasoning;
69
+ /**
70
+ * Store selection in memory for analytics
71
+ */
72
+ private storeSelection;
73
+ /**
74
+ * Enable or disable routing
75
+ */
76
+ setEnabled(enabled: boolean): void;
77
+ /**
78
+ * Update router configuration
79
+ */
80
+ updateConfig(config: Partial<RouterConfig>): void;
81
+ /**
82
+ * Reset failure counts (for testing)
83
+ */
84
+ resetFailures(): void;
85
+ }
86
+ //# sourceMappingURL=AdaptiveModelRouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdaptiveModelRouter.d.ts","sourceRoot":"","sources":["../../../src/core/routing/AdaptiveModelRouter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EACL,WAAW,EACX,cAAc,EACd,OAAO,EACP,cAAc,EACd,WAAW,EACX,YAAY,EACb,MAAM,SAAS,CAAC;AAIjB,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,qBAAa,mBAAoB,YAAW,WAAW;IACrD,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,YAAY,CAAuB;gBAGzC,WAAW,EAAE,kBAAkB,EAC/B,QAAQ,EAAE,QAAQ,EAClB,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC;IAYhC;;OAEG;YACW,UAAU;IAWxB;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAqDxD;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhE;;OAEG;IACH,gBAAgB,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IA6B7D;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC;IAItC;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,GAAG,CAAC;IAIzC;;OAEG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAK9D;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAW9B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAcxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAK1B;;OAEG;YACW,YAAY;IAK1B;;OAEG;YACW,wBAAwB;IAoCtC;;OAEG;IACH,OAAO,CAAC,cAAc;IAmBtB;;OAEG;YACW,cAAc;IAQ5B;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAQlC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;IAQjD;;OAEG;IACH,aAAa,IAAI,IAAI;CAGtB"}
@@ -0,0 +1,264 @@
1
+ "use strict";
2
+ /**
3
+ * Adaptive Model Router
4
+ * Implements intelligent model selection with cost optimization
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.AdaptiveModelRouter = void 0;
8
+ const types_1 = require("./types");
9
+ const ModelRules_1 = require("./ModelRules");
10
+ const ComplexityAnalyzer_1 = require("./ComplexityAnalyzer");
11
+ const CostTracker_1 = require("./CostTracker");
12
+ class AdaptiveModelRouter {
13
+ constructor(memoryStore, eventBus, config) {
14
+ this.memoryStore = memoryStore;
15
+ this.eventBus = eventBus;
16
+ this.config = { ...ModelRules_1.DEFAULT_ROUTER_CONFIG, ...config };
17
+ this.complexityAnalyzer = new ComplexityAnalyzer_1.ComplexityAnalyzer();
18
+ this.costTracker = new CostTracker_1.CostTracker(memoryStore, eventBus);
19
+ this.failureCount = new Map();
20
+ this.initialize();
21
+ }
22
+ /**
23
+ * Initialize router
24
+ */
25
+ async initialize() {
26
+ // Load costs from memory
27
+ await this.costTracker.loadCosts();
28
+ // Emit initialization event
29
+ this.eventBus.emit('router:initialized', {
30
+ config: this.config,
31
+ timestamp: Date.now(),
32
+ });
33
+ }
34
+ /**
35
+ * Select the optimal model for a given task
36
+ */
37
+ async selectModel(task) {
38
+ // If routing is disabled, use default model
39
+ if (!this.config.enabled) {
40
+ return this.createDefaultSelection(task);
41
+ }
42
+ try {
43
+ // Analyze task complexity
44
+ const analysis = this.complexityAnalyzer.analyzeComplexity(task);
45
+ // Select model based on task type and complexity
46
+ const agentType = this.extractAgentType(task);
47
+ const model = this.selectModelForTask(agentType, analysis.complexity);
48
+ // Calculate estimated cost
49
+ const estimatedCost = await this.estimateCost(model, analysis.estimatedTokens);
50
+ // Check if cost exceeds threshold
51
+ if (estimatedCost > this.config.costThreshold) {
52
+ return await this.selectCostOptimizedModel(task, analysis.complexity, estimatedCost);
53
+ }
54
+ // Get fallback models
55
+ const fallbackModels = ModelRules_1.FALLBACK_CHAINS[model] || [];
56
+ // Create selection
57
+ const selection = {
58
+ model,
59
+ complexity: analysis.complexity,
60
+ reasoning: this.buildReasoning(agentType, analysis),
61
+ estimatedCost,
62
+ fallbackModels,
63
+ confidence: analysis.confidence,
64
+ };
65
+ // Store selection in memory
66
+ await this.storeSelection(task, selection);
67
+ // Emit selection event
68
+ this.eventBus.emit('router:model-selected', {
69
+ task: task.id,
70
+ model,
71
+ complexity: analysis.complexity,
72
+ estimatedCost,
73
+ });
74
+ return selection;
75
+ }
76
+ catch (error) {
77
+ console.error('Model selection failed:', error);
78
+ return this.createDefaultSelection(task);
79
+ }
80
+ }
81
+ /**
82
+ * Track cost for a model usage
83
+ */
84
+ async trackCost(modelId, tokens) {
85
+ if (!this.config.enableCostTracking) {
86
+ return;
87
+ }
88
+ await this.costTracker.trackCost(modelId, tokens);
89
+ }
90
+ /**
91
+ * Get fallback model when primary fails
92
+ */
93
+ getFallbackModel(failedModel, task) {
94
+ if (!this.config.enableFallback) {
95
+ return this.config.defaultModel;
96
+ }
97
+ // Track failure
98
+ const failures = this.failureCount.get(failedModel) || 0;
99
+ this.failureCount.set(failedModel, failures + 1);
100
+ // Get fallback chain
101
+ const fallbacks = ModelRules_1.FALLBACK_CHAINS[failedModel] || [];
102
+ // Find first fallback that hasn't failed too many times
103
+ for (const fallback of fallbacks) {
104
+ const fallbackFailures = this.failureCount.get(fallback) || 0;
105
+ if (fallbackFailures < this.config.maxRetries) {
106
+ this.eventBus.emit('router:fallback-selected', {
107
+ failedModel,
108
+ fallbackModel: fallback,
109
+ task: task.id,
110
+ });
111
+ return fallback;
112
+ }
113
+ }
114
+ // All fallbacks exhausted, use default
115
+ return this.config.defaultModel;
116
+ }
117
+ /**
118
+ * Get router statistics
119
+ */
120
+ async getStats() {
121
+ return await this.costTracker.getStats();
122
+ }
123
+ /**
124
+ * Export cost dashboard data
125
+ */
126
+ async exportCostDashboard() {
127
+ return await this.costTracker.exportCostDashboard();
128
+ }
129
+ /**
130
+ * Analyze task complexity
131
+ */
132
+ async analyzeComplexity(task) {
133
+ const analysis = this.complexityAnalyzer.analyzeComplexity(task);
134
+ return analysis.complexity;
135
+ }
136
+ /**
137
+ * Create default selection when routing is disabled
138
+ */
139
+ createDefaultSelection(task) {
140
+ return {
141
+ model: this.config.defaultModel,
142
+ complexity: types_1.TaskComplexity.MODERATE,
143
+ reasoning: 'Using default model (routing disabled)',
144
+ estimatedCost: 0,
145
+ fallbackModels: [],
146
+ confidence: 1.0,
147
+ };
148
+ }
149
+ /**
150
+ * Extract agent type from task
151
+ */
152
+ extractAgentType(task) {
153
+ // Try to extract from task type or context
154
+ if (task.type && task.type.startsWith('qe-')) {
155
+ return task.type;
156
+ }
157
+ // Try to extract from context
158
+ if (task.data && typeof task.data === 'object' && 'agentType' in task.data) {
159
+ return task.data.agentType;
160
+ }
161
+ return 'default';
162
+ }
163
+ /**
164
+ * Select model based on task type and complexity
165
+ */
166
+ selectModelForTask(agentType, complexity) {
167
+ const rules = ModelRules_1.MODEL_RULES[agentType] || ModelRules_1.MODEL_RULES['default'];
168
+ return rules[complexity];
169
+ }
170
+ /**
171
+ * Estimate cost for a model and token count
172
+ */
173
+ async estimateCost(model, tokens) {
174
+ const capability = require('./ModelRules').MODEL_CAPABILITIES[model];
175
+ return tokens * capability.costPerToken;
176
+ }
177
+ /**
178
+ * Select cost-optimized model when primary exceeds threshold
179
+ */
180
+ async selectCostOptimizedModel(task, complexity, originalCost) {
181
+ // Downgrade complexity to reduce cost
182
+ let optimizedComplexity = complexity;
183
+ if (complexity === types_1.TaskComplexity.CRITICAL) {
184
+ optimizedComplexity = types_1.TaskComplexity.COMPLEX;
185
+ }
186
+ else if (complexity === types_1.TaskComplexity.COMPLEX) {
187
+ optimizedComplexity = types_1.TaskComplexity.MODERATE;
188
+ }
189
+ const agentType = this.extractAgentType(task);
190
+ const model = this.selectModelForTask(agentType, optimizedComplexity);
191
+ const estimatedCost = await this.estimateCost(model, 1000); // Rough estimate
192
+ this.eventBus.emit('router:cost-optimized', {
193
+ task: task.id,
194
+ originalComplexity: complexity,
195
+ optimizedComplexity,
196
+ originalCost,
197
+ optimizedCost: estimatedCost,
198
+ });
199
+ return {
200
+ model,
201
+ complexity: optimizedComplexity,
202
+ reasoning: `Cost-optimized: Reduced from ${complexity} to ${optimizedComplexity} (original cost: $${originalCost.toFixed(4)})`,
203
+ estimatedCost,
204
+ fallbackModels: ModelRules_1.FALLBACK_CHAINS[model] || [],
205
+ confidence: 0.8, // Lower confidence for cost-optimized selection
206
+ };
207
+ }
208
+ /**
209
+ * Build reasoning string for selection
210
+ */
211
+ buildReasoning(agentType, analysis) {
212
+ const reasons = [];
213
+ reasons.push(`Complexity: ${analysis.complexity}`);
214
+ reasons.push(`Confidence: ${(analysis.confidence * 100).toFixed(0)}%`);
215
+ if (analysis.requiresSecurity) {
216
+ reasons.push('Security analysis required');
217
+ }
218
+ if (analysis.requiresPerformance) {
219
+ reasons.push('Performance analysis required');
220
+ }
221
+ if (analysis.requiresReasoning) {
222
+ reasons.push('Advanced reasoning required');
223
+ }
224
+ return reasons.join(', ');
225
+ }
226
+ /**
227
+ * Store selection in memory for analytics
228
+ */
229
+ async storeSelection(task, selection) {
230
+ const key = `routing/selection/${task.id}`;
231
+ await this.memoryStore.store(key, selection, {
232
+ partition: 'coordination',
233
+ ttl: 3600, // 1 hour
234
+ });
235
+ }
236
+ /**
237
+ * Enable or disable routing
238
+ */
239
+ setEnabled(enabled) {
240
+ this.config.enabled = enabled;
241
+ this.eventBus.emit('router:config-changed', {
242
+ enabled,
243
+ timestamp: Date.now(),
244
+ });
245
+ }
246
+ /**
247
+ * Update router configuration
248
+ */
249
+ updateConfig(config) {
250
+ this.config = { ...this.config, ...config };
251
+ this.eventBus.emit('router:config-changed', {
252
+ config: this.config,
253
+ timestamp: Date.now(),
254
+ });
255
+ }
256
+ /**
257
+ * Reset failure counts (for testing)
258
+ */
259
+ resetFailures() {
260
+ this.failureCount.clear();
261
+ }
262
+ }
263
+ exports.AdaptiveModelRouter = AdaptiveModelRouter;
264
+ //# sourceMappingURL=AdaptiveModelRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdaptiveModelRouter.js","sourceRoot":"","sources":["../../../src/core/routing/AdaptiveModelRouter.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,mCAOiB;AACjB,6CAAmF;AACnF,6DAA0D;AAC1D,+CAA4C;AAI5C,MAAa,mBAAmB;IAQ9B,YACE,WAA+B,EAC/B,QAAkB,EAClB,MAA8B;QAE9B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,kCAAqB,EAAE,GAAG,MAAM,EAAE,CAAC;QACtD,IAAI,CAAC,kBAAkB,GAAG,IAAI,uCAAkB,EAAE,CAAC;QACnD,IAAI,CAAC,WAAW,GAAG,IAAI,yBAAW,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC1D,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;QAE9B,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU;QACtB,yBAAyB;QACzB,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;QAEnC,4BAA4B;QAC5B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE;YACvC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,IAAY;QAC5B,4CAA4C;QAC5C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC;YACH,0BAA0B;YAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAEjE,iDAAiD;YACjD,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;YAEtE,2BAA2B;YAC3B,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;YAE/E,kCAAkC;YAClC,IAAI,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;gBAC9C,OAAO,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;YACvF,CAAC;YAED,sBAAsB;YACtB,MAAM,cAAc,GAAG,4BAAe,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAEpD,mBAAmB;YACnB,MAAM,SAAS,GAAmB;gBAChC,KAAK;gBACL,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC;gBACnD,aAAa;gBACb,cAAc;gBACd,UAAU,EAAE,QAAQ,CAAC,UAAU;aAChC,CAAC;YAEF,4BAA4B;YAC5B,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAE3C,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,EAAE;gBAC1C,IAAI,EAAE,IAAI,CAAC,EAAE;gBACb,KAAK;gBACL,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,aAAa;aACd,CAAC,CAAC;YAEH,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,OAAgB,EAAE,MAAc;QAC9C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;YACpC,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,WAAoB,EAAE,IAAY;QACjD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;QAClC,CAAC;QAED,gBAAgB;QAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;QAEjD,qBAAqB;QACrB,MAAM,SAAS,GAAG,4BAAe,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QAErD,wDAAwD;QACxD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC9D,IAAI,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC9C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,0BAA0B,EAAE;oBAC7C,WAAW;oBACX,aAAa,EAAE,QAAQ;oBACvB,IAAI,EAAE,IAAI,CAAC,EAAE;iBACd,CAAC,CAAC;gBACH,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;QAED,uCAAuC;QACvC,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB;QACvB,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,IAAY;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACjE,OAAO,QAAQ,CAAC,UAAU,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,IAAY;QACzC,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;YAC/B,UAAU,EAAE,sBAAc,CAAC,QAAQ;YACnC,SAAS,EAAE,wCAAwC;YACnD,aAAa,EAAE,CAAC;YAChB,cAAc,EAAE,EAAE;YAClB,UAAU,EAAE,GAAG;SAChB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,IAAY;QACnC,2CAA2C;QAC3C,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC,IAAI,CAAC;QACnB,CAAC;QAED,8BAA8B;QAC9B,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,WAAW,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC3E,OAAQ,IAAI,CAAC,IAAY,CAAC,SAAS,CAAC;QACtC,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,SAAiB,EAAE,UAA0B;QACtE,MAAM,KAAK,GAAG,wBAAW,CAAC,SAAS,CAAC,IAAI,wBAAW,CAAC,SAAS,CAAC,CAAC;QAC/D,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CAAC,KAAc,EAAE,MAAc;QACvD,MAAM,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACrE,OAAO,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC;IAC1C,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,wBAAwB,CACpC,IAAY,EACZ,UAA0B,EAC1B,YAAoB;QAEpB,sCAAsC;QACtC,IAAI,mBAAmB,GAAG,UAAU,CAAC;QAErC,IAAI,UAAU,KAAK,sBAAc,CAAC,QAAQ,EAAE,CAAC;YAC3C,mBAAmB,GAAG,sBAAc,CAAC,OAAO,CAAC;QAC/C,CAAC;aAAM,IAAI,UAAU,KAAK,sBAAc,CAAC,OAAO,EAAE,CAAC;YACjD,mBAAmB,GAAG,sBAAc,CAAC,QAAQ,CAAC;QAChD,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;QACtE,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,iBAAiB;QAE7E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,EAAE;YAC1C,IAAI,EAAE,IAAI,CAAC,EAAE;YACb,kBAAkB,EAAE,UAAU;YAC9B,mBAAmB;YACnB,YAAY;YACZ,aAAa,EAAE,aAAa;SAC7B,CAAC,CAAC;QAEH,OAAO;YACL,KAAK;YACL,UAAU,EAAE,mBAAmB;YAC/B,SAAS,EAAE,gCAAgC,UAAU,OAAO,mBAAmB,qBAAqB,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;YAC9H,aAAa;YACb,cAAc,EAAE,4BAAe,CAAC,KAAK,CAAC,IAAI,EAAE;YAC5C,UAAU,EAAE,GAAG,EAAE,gDAAgD;SAClE,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,SAAiB,EAAE,QAAa;QACrD,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,OAAO,CAAC,IAAI,CAAC,eAAe,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAEvE,IAAI,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,QAAQ,CAAC,mBAAmB,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,QAAQ,CAAC,iBAAiB,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,IAAY,EAAE,SAAyB;QAClE,MAAM,GAAG,GAAG,qBAAqB,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE;YAC3C,SAAS,EAAE,cAAc;YACzB,GAAG,EAAE,IAAI,EAAE,SAAS;SACrB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,OAAgB;QACzB,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,EAAE;YAC1C,OAAO;YACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,MAA6B;QACxC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QAC5C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,EAAE;YAC1C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,aAAa;QACX,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;CACF;AAjTD,kDAiTC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Complexity Analyzer
3
+ * Analyzes task complexity for model selection
4
+ */
5
+ import { QETask } from './types';
6
+ import { TaskAnalysis } from './types';
7
+ export declare class ComplexityAnalyzer {
8
+ /**
9
+ * Analyze task complexity based on content and context
10
+ */
11
+ analyzeComplexity(task: QETask): TaskAnalysis;
12
+ /**
13
+ * Extract task content for analysis
14
+ */
15
+ private extractTaskContent;
16
+ /**
17
+ * Extract keywords from content
18
+ */
19
+ private extractKeywords;
20
+ /**
21
+ * Score complexity level based on keyword matches
22
+ */
23
+ private scoreComplexity;
24
+ /**
25
+ * Determine final complexity from scores
26
+ */
27
+ private determineComplexity;
28
+ /**
29
+ * Calculate confidence in complexity determination
30
+ */
31
+ private calculateConfidence;
32
+ /**
33
+ * Estimate token count based on complexity
34
+ */
35
+ private estimateTokens;
36
+ /**
37
+ * Check if task requires advanced reasoning
38
+ */
39
+ private requiresReasoning;
40
+ /**
41
+ * Check if task requires security analysis
42
+ */
43
+ private requiresSecurity;
44
+ /**
45
+ * Check if task requires performance analysis
46
+ */
47
+ private requiresPerformance;
48
+ }
49
+ //# sourceMappingURL=ComplexityAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComplexityAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/core/routing/ComplexityAnalyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAkB,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvD,qBAAa,kBAAkB;IAC7B;;OAEG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY;IAkC7C;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAqBvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmB3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAc3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAczB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAexB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAc5B"}
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ /**
3
+ * Complexity Analyzer
4
+ * Analyzes task complexity for model selection
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.ComplexityAnalyzer = void 0;
8
+ const types_1 = require("./types");
9
+ const ModelRules_1 = require("./ModelRules");
10
+ class ComplexityAnalyzer {
11
+ /**
12
+ * Analyze task complexity based on content and context
13
+ */
14
+ analyzeComplexity(task) {
15
+ const taskContent = this.extractTaskContent(task);
16
+ const keywords = this.extractKeywords(taskContent);
17
+ // Score each complexity level
18
+ const scores = {
19
+ [types_1.TaskComplexity.SIMPLE]: this.scoreComplexity(keywords, types_1.TaskComplexity.SIMPLE),
20
+ [types_1.TaskComplexity.MODERATE]: this.scoreComplexity(keywords, types_1.TaskComplexity.MODERATE),
21
+ [types_1.TaskComplexity.COMPLEX]: this.scoreComplexity(keywords, types_1.TaskComplexity.COMPLEX),
22
+ [types_1.TaskComplexity.CRITICAL]: this.scoreComplexity(keywords, types_1.TaskComplexity.CRITICAL),
23
+ };
24
+ // Determine complexity (highest score wins)
25
+ const complexity = this.determineComplexity(scores);
26
+ const confidence = this.calculateConfidence(scores, complexity);
27
+ // Estimate tokens based on complexity
28
+ const estimatedTokens = this.estimateTokens(complexity, taskContent);
29
+ // Analyze special requirements
30
+ const requiresReasoning = this.requiresReasoning(keywords);
31
+ const requiresSecurity = this.requiresSecurity(keywords);
32
+ const requiresPerformance = this.requiresPerformance(keywords);
33
+ return {
34
+ complexity,
35
+ estimatedTokens,
36
+ requiresReasoning,
37
+ requiresSecurity,
38
+ requiresPerformance,
39
+ confidence,
40
+ };
41
+ }
42
+ /**
43
+ * Extract task content for analysis
44
+ */
45
+ extractTaskContent(task) {
46
+ const parts = [];
47
+ if (task.type)
48
+ parts.push(task.type);
49
+ if (task.description)
50
+ parts.push(task.description);
51
+ if (task.data) {
52
+ if (typeof task.data === 'string') {
53
+ parts.push(task.data);
54
+ }
55
+ else if (typeof task.data === 'object') {
56
+ parts.push(JSON.stringify(task.data));
57
+ }
58
+ }
59
+ return parts.join(' ').toLowerCase();
60
+ }
61
+ /**
62
+ * Extract keywords from content
63
+ */
64
+ extractKeywords(content) {
65
+ const words = content
66
+ .split(/\s+/)
67
+ .map((w) => w.replace(/[^a-z0-9-]/g, ''))
68
+ .filter((w) => w.length > 2);
69
+ return new Set(words);
70
+ }
71
+ /**
72
+ * Score complexity level based on keyword matches
73
+ */
74
+ scoreComplexity(keywords, level) {
75
+ const levelKeywords = ModelRules_1.COMPLEXITY_KEYWORDS[level];
76
+ let score = 0;
77
+ levelKeywords.forEach((keyword) => {
78
+ if (keywords.has(keyword.toLowerCase())) {
79
+ score += 1;
80
+ }
81
+ });
82
+ // Apply weights based on level
83
+ const weights = {
84
+ [types_1.TaskComplexity.SIMPLE]: 1.0,
85
+ [types_1.TaskComplexity.MODERATE]: 1.2,
86
+ [types_1.TaskComplexity.COMPLEX]: 1.5,
87
+ [types_1.TaskComplexity.CRITICAL]: 2.0,
88
+ };
89
+ return score * weights[level];
90
+ }
91
+ /**
92
+ * Determine final complexity from scores
93
+ */
94
+ determineComplexity(scores) {
95
+ let maxScore = 0;
96
+ let complexity = types_1.TaskComplexity.SIMPLE;
97
+ Object.entries(scores).forEach(([level, score]) => {
98
+ if (score > maxScore) {
99
+ maxScore = score;
100
+ complexity = level;
101
+ }
102
+ });
103
+ // If all scores are zero, default to MODERATE
104
+ if (maxScore === 0) {
105
+ return types_1.TaskComplexity.MODERATE;
106
+ }
107
+ return complexity;
108
+ }
109
+ /**
110
+ * Calculate confidence in complexity determination
111
+ */
112
+ calculateConfidence(scores, selectedComplexity) {
113
+ const selectedScore = scores[selectedComplexity];
114
+ const totalScore = Object.values(scores).reduce((sum, s) => sum + s, 0);
115
+ if (totalScore === 0) {
116
+ return 0.5; // Low confidence with no keyword matches
117
+ }
118
+ return Math.min(selectedScore / totalScore, 1.0);
119
+ }
120
+ /**
121
+ * Estimate token count based on complexity
122
+ */
123
+ estimateTokens(complexity, content) {
124
+ const baseTokens = content.length / 4; // Rough estimate: 1 token per 4 chars
125
+ const multipliers = {
126
+ [types_1.TaskComplexity.SIMPLE]: 1.0,
127
+ [types_1.TaskComplexity.MODERATE]: 1.5,
128
+ [types_1.TaskComplexity.COMPLEX]: 2.5,
129
+ [types_1.TaskComplexity.CRITICAL]: 3.5,
130
+ };
131
+ return Math.round(baseTokens * multipliers[complexity]);
132
+ }
133
+ /**
134
+ * Check if task requires advanced reasoning
135
+ */
136
+ requiresReasoning(keywords) {
137
+ const reasoningKeywords = [
138
+ 'algorithm',
139
+ 'optimize',
140
+ 'design',
141
+ 'architecture',
142
+ 'pattern',
143
+ 'edge case',
144
+ 'property-based',
145
+ ];
146
+ return reasoningKeywords.some((kw) => keywords.has(kw));
147
+ }
148
+ /**
149
+ * Check if task requires security analysis
150
+ */
151
+ requiresSecurity(keywords) {
152
+ const securityKeywords = [
153
+ 'security',
154
+ 'authentication',
155
+ 'authorization',
156
+ 'encryption',
157
+ 'vulnerability',
158
+ 'injection',
159
+ 'xss',
160
+ 'csrf',
161
+ ];
162
+ return securityKeywords.some((kw) => keywords.has(kw));
163
+ }
164
+ /**
165
+ * Check if task requires performance analysis
166
+ */
167
+ requiresPerformance(keywords) {
168
+ const performanceKeywords = [
169
+ 'performance',
170
+ 'optimization',
171
+ 'memory',
172
+ 'leak',
173
+ 'bottleneck',
174
+ 'concurrent',
175
+ 'parallel',
176
+ 'scale',
177
+ ];
178
+ return performanceKeywords.some((kw) => keywords.has(kw));
179
+ }
180
+ }
181
+ exports.ComplexityAnalyzer = ComplexityAnalyzer;
182
+ //# sourceMappingURL=ComplexityAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComplexityAnalyzer.js","sourceRoot":"","sources":["../../../src/core/routing/ComplexityAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Cost Tracker
3
+ * Tracks model usage costs and provides analytics
4
+ */
5
+ import { AIModel, ModelCost, RouterStats } from './types';
6
+ import { SwarmMemoryManager } from '../memory/SwarmMemoryManager';
7
+ import { EventBus } from '../EventBus';
8
+ export declare class CostTracker {
9
+ private memoryStore;
10
+ private eventBus;
11
+ private costs;
12
+ private sessionStartTime;
13
+ constructor(memoryStore: SwarmMemoryManager, eventBus: EventBus);
14
+ /**
15
+ * Initialize cost tracking for all models
16
+ */
17
+ private initializeCosts;
18
+ /**
19
+ * Track cost for a model usage
20
+ */
21
+ trackCost(modelId: AIModel, tokens: number): Promise<void>;
22
+ /**
23
+ * Persist costs to SwarmMemoryManager
24
+ */
25
+ private persistCosts;
26
+ /**
27
+ * Load costs from SwarmMemoryManager
28
+ */
29
+ loadCosts(): Promise<void>;
30
+ /**
31
+ * Get router statistics
32
+ */
33
+ getStats(): Promise<RouterStats>;
34
+ /**
35
+ * Calculate average cost per test generated
36
+ */
37
+ private calculateAvgCostPerTest;
38
+ /**
39
+ * Export cost dashboard data
40
+ */
41
+ exportCostDashboard(): Promise<any>;
42
+ /**
43
+ * Format duration in human-readable format
44
+ */
45
+ private formatDuration;
46
+ /**
47
+ * Reset cost tracking (for testing)
48
+ */
49
+ reset(): Promise<void>;
50
+ /**
51
+ * Get cost for specific model
52
+ */
53
+ getModelCost(modelId: AIModel): ModelCost | undefined;
54
+ }
55
+ //# sourceMappingURL=CostTracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CostTracker.d.ts","sourceRoot":"","sources":["../../../src/core/routing/CostTracker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,gBAAgB,CAAS;gBAErB,WAAW,EAAE,kBAAkB,EAAE,QAAQ,EAAE,QAAQ;IAQ/D;;OAEG;IACH,OAAO,CAAC,eAAe;IAavB;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BhE;;OAEG;YACW,YAAY;IAQ1B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBhC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC;IAgCtC;;OAEG;YACW,uBAAuB;IAqBrC;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,GAAG,CAAC;IAmCzC;;OAEG;IACH,OAAO,CAAC,cAAc;IActB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS;CAGtD"}