@darkiceinteractive/mcp-conductor 1.0.0
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/LICENSE +21 -0
- package/README.md +558 -0
- package/dist/bin/cli.d.ts +8 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +940 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/bridge/http-server.d.ts +161 -0
- package/dist/bridge/http-server.d.ts.map +1 -0
- package/dist/bridge/http-server.js +367 -0
- package/dist/bridge/http-server.js.map +1 -0
- package/dist/bridge/index.d.ts +5 -0
- package/dist/bridge/index.d.ts.map +1 -0
- package/dist/bridge/index.js +5 -0
- package/dist/bridge/index.js.map +1 -0
- package/dist/config/defaults.d.ts +29 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +60 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +7 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +49 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +272 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +93 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +5 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/hub/index.d.ts +5 -0
- package/dist/hub/index.d.ts.map +1 -0
- package/dist/hub/index.js +5 -0
- package/dist/hub/index.js.map +1 -0
- package/dist/hub/mcp-hub.d.ts +176 -0
- package/dist/hub/mcp-hub.d.ts.map +1 -0
- package/dist/hub/mcp-hub.js +550 -0
- package/dist/hub/mcp-hub.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/metrics/index.d.ts +5 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +5 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/metrics/metrics-collector.d.ts +211 -0
- package/dist/metrics/metrics-collector.d.ts.map +1 -0
- package/dist/metrics/metrics-collector.js +437 -0
- package/dist/metrics/metrics-collector.js.map +1 -0
- package/dist/modes/index.d.ts +5 -0
- package/dist/modes/index.d.ts.map +1 -0
- package/dist/modes/index.js +5 -0
- package/dist/modes/index.js.map +1 -0
- package/dist/modes/mode-handler.d.ts +132 -0
- package/dist/modes/mode-handler.d.ts.map +1 -0
- package/dist/modes/mode-handler.js +252 -0
- package/dist/modes/mode-handler.js.map +1 -0
- package/dist/runtime/executor.d.ts +57 -0
- package/dist/runtime/executor.d.ts.map +1 -0
- package/dist/runtime/executor.js +700 -0
- package/dist/runtime/executor.js.map +1 -0
- package/dist/runtime/index.d.ts +5 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +5 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/server/index.d.ts +5 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +5 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/mcp-server.d.ts +62 -0
- package/dist/server/mcp-server.d.ts.map +1 -0
- package/dist/server/mcp-server.js +1272 -0
- package/dist/server/mcp-server.js.map +1 -0
- package/dist/skills/index.d.ts +5 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +5 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/skills-engine.d.ts +157 -0
- package/dist/skills/skills-engine.d.ts.map +1 -0
- package/dist/skills/skills-engine.js +405 -0
- package/dist/skills/skills-engine.js.map +1 -0
- package/dist/streaming/execution-stream.d.ts +158 -0
- package/dist/streaming/execution-stream.d.ts.map +1 -0
- package/dist/streaming/execution-stream.js +320 -0
- package/dist/streaming/execution-stream.js.map +1 -0
- package/dist/streaming/index.d.ts +5 -0
- package/dist/streaming/index.d.ts.map +1 -0
- package/dist/streaming/index.js +5 -0
- package/dist/streaming/index.js.map +1 -0
- package/dist/utils/errors.d.ts +36 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +68 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/helpers.d.ts +44 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +95 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +48 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/permissions.d.ts +97 -0
- package/dist/utils/permissions.d.ts.map +1 -0
- package/dist/utils/permissions.js +165 -0
- package/dist/utils/permissions.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +87 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +187 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/watcher/config-watcher.d.ts +67 -0
- package/dist/watcher/config-watcher.d.ts.map +1 -0
- package/dist/watcher/config-watcher.js +150 -0
- package/dist/watcher/config-watcher.js.map +1 -0
- package/dist/watcher/index.d.ts +5 -0
- package/dist/watcher/index.d.ts.map +1 -0
- package/dist/watcher/index.js +5 -0
- package/dist/watcher/index.js.map +1 -0
- package/package.json +86 -0
- package/templates/CLAUDE.md +137 -0
- package/templates/skill-mcp-conductor.md +64 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metrics Collector
|
|
3
|
+
*
|
|
4
|
+
* Comprehensive metrics collection and analysis for MCP Executor.
|
|
5
|
+
* Provides detailed tracking of executions, token savings, and performance.
|
|
6
|
+
*/
|
|
7
|
+
import { EventEmitter } from 'node:events';
|
|
8
|
+
import type { MetricsConfig } from '../config/index.js';
|
|
9
|
+
/**
|
|
10
|
+
* Token estimation configuration for different content types
|
|
11
|
+
*/
|
|
12
|
+
export interface TokenEstimationConfig {
|
|
13
|
+
/** Chars per token for code content (typically higher density) */
|
|
14
|
+
codeCharsPerToken: number;
|
|
15
|
+
/** Chars per token for JSON content */
|
|
16
|
+
jsonCharsPerToken: number;
|
|
17
|
+
/** Chars per token for natural language */
|
|
18
|
+
textCharsPerToken: number;
|
|
19
|
+
/** Overhead tokens per tool call */
|
|
20
|
+
toolCallOverheadTokens: number;
|
|
21
|
+
/** Tokens per KB of raw data in context */
|
|
22
|
+
tokensPerKb: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Single execution metrics
|
|
26
|
+
*/
|
|
27
|
+
export interface ExecutionMetrics {
|
|
28
|
+
executionId: string;
|
|
29
|
+
timestamp: Date;
|
|
30
|
+
durationMs: number;
|
|
31
|
+
success: boolean;
|
|
32
|
+
codeTokens: number;
|
|
33
|
+
resultTokens: number;
|
|
34
|
+
toolCalls: number;
|
|
35
|
+
dataProcessedBytes: number;
|
|
36
|
+
resultSizeBytes: number;
|
|
37
|
+
estimatedTokensSaved: number;
|
|
38
|
+
savingsPercent: number;
|
|
39
|
+
mode: 'execution' | 'passthrough';
|
|
40
|
+
serversUsed: string[];
|
|
41
|
+
toolsUsed: string[];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Aggregated session metrics
|
|
45
|
+
*/
|
|
46
|
+
export interface SessionMetrics {
|
|
47
|
+
sessionId: string;
|
|
48
|
+
sessionStart: Date;
|
|
49
|
+
lastActivity: Date;
|
|
50
|
+
uptime: number;
|
|
51
|
+
totalExecutions: number;
|
|
52
|
+
successfulExecutions: number;
|
|
53
|
+
failedExecutions: number;
|
|
54
|
+
totalToolCalls: number;
|
|
55
|
+
toolCallsByServer: Record<string, number>;
|
|
56
|
+
toolCallsByTool: Record<string, number>;
|
|
57
|
+
totalDataProcessedBytes: number;
|
|
58
|
+
totalResultBytes: number;
|
|
59
|
+
averageDataPerExecution: number;
|
|
60
|
+
totalCodeTokens: number;
|
|
61
|
+
totalResultTokens: number;
|
|
62
|
+
totalEstimatedDirectTokens: number;
|
|
63
|
+
totalTokensSaved: number;
|
|
64
|
+
averageTokensSaved: number;
|
|
65
|
+
averageSavingsPercent: number;
|
|
66
|
+
totalDurationMs: number;
|
|
67
|
+
averageDurationMs: number;
|
|
68
|
+
minDurationMs: number;
|
|
69
|
+
maxDurationMs: number;
|
|
70
|
+
executionModeCount: number;
|
|
71
|
+
passthroughModeCount: number;
|
|
72
|
+
totalErrors: number;
|
|
73
|
+
errorsByType: Record<string, number>;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Time-windowed metrics for trend analysis
|
|
77
|
+
*/
|
|
78
|
+
export interface WindowedMetrics {
|
|
79
|
+
windowStart: Date;
|
|
80
|
+
windowEnd: Date;
|
|
81
|
+
windowDurationMs: number;
|
|
82
|
+
executions: number;
|
|
83
|
+
tokensSaved: number;
|
|
84
|
+
averageDurationMs: number;
|
|
85
|
+
successRate: number;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Metrics Collector class
|
|
89
|
+
*/
|
|
90
|
+
export declare class MetricsCollector extends EventEmitter {
|
|
91
|
+
private config;
|
|
92
|
+
private estimationConfig;
|
|
93
|
+
private sessionId;
|
|
94
|
+
private sessionStart;
|
|
95
|
+
private executions;
|
|
96
|
+
private maxStoredExecutions;
|
|
97
|
+
private logPath;
|
|
98
|
+
constructor(config: MetricsConfig, estimationConfig?: Partial<TokenEstimationConfig>);
|
|
99
|
+
/**
|
|
100
|
+
* Generate a unique session ID
|
|
101
|
+
*/
|
|
102
|
+
private generateSessionId;
|
|
103
|
+
/**
|
|
104
|
+
* Ensure log directory exists
|
|
105
|
+
*/
|
|
106
|
+
private ensureLogDirectory;
|
|
107
|
+
/**
|
|
108
|
+
* Estimate tokens for code content
|
|
109
|
+
*/
|
|
110
|
+
estimateCodeTokens(code: string): number;
|
|
111
|
+
/**
|
|
112
|
+
* Estimate tokens for JSON content
|
|
113
|
+
*/
|
|
114
|
+
estimateJsonTokens(json: string | unknown): number;
|
|
115
|
+
/**
|
|
116
|
+
* Estimate tokens for general text content
|
|
117
|
+
*/
|
|
118
|
+
estimateTextTokens(text: string): number;
|
|
119
|
+
/**
|
|
120
|
+
* Estimate tokens from byte size
|
|
121
|
+
*/
|
|
122
|
+
estimateTokensFromBytes(bytes: number): number;
|
|
123
|
+
/**
|
|
124
|
+
* Estimate tokens that would be used in passthrough mode
|
|
125
|
+
*/
|
|
126
|
+
estimatePassthroughTokens(toolCalls: number, dataBytes: number): number;
|
|
127
|
+
/**
|
|
128
|
+
* Calculate token savings from execution mode
|
|
129
|
+
*/
|
|
130
|
+
calculateTokenSavings(params: {
|
|
131
|
+
codeTokens: number;
|
|
132
|
+
resultTokens: number;
|
|
133
|
+
toolCalls: number;
|
|
134
|
+
dataProcessedBytes: number;
|
|
135
|
+
}): {
|
|
136
|
+
tokensSaved: number;
|
|
137
|
+
savingsPercent: number;
|
|
138
|
+
};
|
|
139
|
+
/**
|
|
140
|
+
* Record an execution
|
|
141
|
+
*/
|
|
142
|
+
recordExecution(params: {
|
|
143
|
+
executionId: string;
|
|
144
|
+
code: string;
|
|
145
|
+
result: unknown;
|
|
146
|
+
success: boolean;
|
|
147
|
+
durationMs: number;
|
|
148
|
+
toolCalls: number;
|
|
149
|
+
dataProcessedBytes: number;
|
|
150
|
+
resultSizeBytes: number;
|
|
151
|
+
mode: 'execution' | 'passthrough';
|
|
152
|
+
serversUsed?: string[];
|
|
153
|
+
toolsUsed?: string[];
|
|
154
|
+
errorType?: string;
|
|
155
|
+
}): ExecutionMetrics;
|
|
156
|
+
/**
|
|
157
|
+
* Log metrics to file
|
|
158
|
+
*/
|
|
159
|
+
private logToFile;
|
|
160
|
+
/**
|
|
161
|
+
* Get aggregated session metrics
|
|
162
|
+
*/
|
|
163
|
+
getSessionMetrics(): SessionMetrics;
|
|
164
|
+
/**
|
|
165
|
+
* Get windowed metrics for trend analysis
|
|
166
|
+
*/
|
|
167
|
+
getWindowedMetrics(windowMs?: number): WindowedMetrics[];
|
|
168
|
+
/**
|
|
169
|
+
* Get recent executions
|
|
170
|
+
*/
|
|
171
|
+
getRecentExecutions(limit?: number): ExecutionMetrics[];
|
|
172
|
+
/**
|
|
173
|
+
* Get top servers by usage
|
|
174
|
+
*/
|
|
175
|
+
getTopServers(limit?: number): Array<{
|
|
176
|
+
server: string;
|
|
177
|
+
calls: number;
|
|
178
|
+
}>;
|
|
179
|
+
/**
|
|
180
|
+
* Get top tools by usage
|
|
181
|
+
*/
|
|
182
|
+
getTopTools(limit?: number): Array<{
|
|
183
|
+
tool: string;
|
|
184
|
+
calls: number;
|
|
185
|
+
}>;
|
|
186
|
+
/**
|
|
187
|
+
* Export metrics to JSON
|
|
188
|
+
*/
|
|
189
|
+
exportToJson(): string;
|
|
190
|
+
/**
|
|
191
|
+
* Save metrics snapshot to file
|
|
192
|
+
*/
|
|
193
|
+
saveSnapshot(path: string): void;
|
|
194
|
+
/**
|
|
195
|
+
* Reset all metrics
|
|
196
|
+
*/
|
|
197
|
+
reset(): void;
|
|
198
|
+
/**
|
|
199
|
+
* Check if metrics collection is enabled
|
|
200
|
+
*/
|
|
201
|
+
isEnabled(): boolean;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Get or create the global metrics collector
|
|
205
|
+
*/
|
|
206
|
+
export declare function getMetricsCollector(config?: MetricsConfig): MetricsCollector;
|
|
207
|
+
/**
|
|
208
|
+
* Shutdown the global metrics collector
|
|
209
|
+
*/
|
|
210
|
+
export declare function shutdownMetricsCollector(): void;
|
|
211
|
+
//# sourceMappingURL=metrics-collector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics-collector.d.ts","sourceRoot":"","sources":["../../src/metrics/metrics-collector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metrics Collector
|
|
3
|
+
*
|
|
4
|
+
* Comprehensive metrics collection and analysis for MCP Executor.
|
|
5
|
+
* Provides detailed tracking of executions, token savings, and performance.
|
|
6
|
+
*/
|
|
7
|
+
import { EventEmitter } from 'node:events';
|
|
8
|
+
import { appendFileSync, existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
9
|
+
import { dirname } from 'node:path';
|
|
10
|
+
import { logger } from '../utils/index.js';
|
|
11
|
+
/**
|
|
12
|
+
* Metrics Collector class
|
|
13
|
+
*/
|
|
14
|
+
export class MetricsCollector extends EventEmitter {
|
|
15
|
+
config;
|
|
16
|
+
estimationConfig;
|
|
17
|
+
sessionId;
|
|
18
|
+
sessionStart;
|
|
19
|
+
executions = [];
|
|
20
|
+
maxStoredExecutions = 1000;
|
|
21
|
+
logPath = null;
|
|
22
|
+
constructor(config, estimationConfig) {
|
|
23
|
+
super();
|
|
24
|
+
this.config = config;
|
|
25
|
+
this.sessionId = this.generateSessionId();
|
|
26
|
+
this.sessionStart = new Date();
|
|
27
|
+
// Default token estimation config - tuned for Claude's tokenizer
|
|
28
|
+
this.estimationConfig = {
|
|
29
|
+
codeCharsPerToken: 3.5, // Code is denser
|
|
30
|
+
jsonCharsPerToken: 3.8, // JSON has structure overhead
|
|
31
|
+
textCharsPerToken: 4.0, // Natural language average
|
|
32
|
+
toolCallOverheadTokens: 150, // Request + response overhead per call
|
|
33
|
+
tokensPerKb: 256, // ~4 bytes per token
|
|
34
|
+
...estimationConfig,
|
|
35
|
+
};
|
|
36
|
+
// Set up file logging if enabled
|
|
37
|
+
if (config.logToFile && config.logPath) {
|
|
38
|
+
this.logPath = config.logPath;
|
|
39
|
+
this.ensureLogDirectory();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Generate a unique session ID
|
|
44
|
+
*/
|
|
45
|
+
generateSessionId() {
|
|
46
|
+
return `session_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Ensure log directory exists
|
|
50
|
+
*/
|
|
51
|
+
ensureLogDirectory() {
|
|
52
|
+
if (this.logPath) {
|
|
53
|
+
const dir = dirname(this.logPath);
|
|
54
|
+
if (!existsSync(dir)) {
|
|
55
|
+
mkdirSync(dir, { recursive: true });
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Estimate tokens for code content
|
|
61
|
+
*/
|
|
62
|
+
estimateCodeTokens(code) {
|
|
63
|
+
if (!code)
|
|
64
|
+
return 0;
|
|
65
|
+
// Account for common code patterns that affect tokenization
|
|
66
|
+
let adjustedLength = code.length;
|
|
67
|
+
// Count special constructs that typically become single tokens
|
|
68
|
+
const singleTokenPatterns = [
|
|
69
|
+
/\b(const|let|var|function|async|await|return|import|export|class|interface|type)\b/g,
|
|
70
|
+
/[{}[\]()]/g, // Brackets often become single tokens
|
|
71
|
+
/\s+/g, // Whitespace is often compressed
|
|
72
|
+
];
|
|
73
|
+
for (const pattern of singleTokenPatterns) {
|
|
74
|
+
const matches = code.match(pattern);
|
|
75
|
+
if (matches) {
|
|
76
|
+
// These are typically 1 token regardless of exact character count
|
|
77
|
+
adjustedLength -= matches.reduce((sum, m) => sum + m.length - 1, 0);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return Math.ceil(adjustedLength / this.estimationConfig.codeCharsPerToken);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Estimate tokens for JSON content
|
|
84
|
+
*/
|
|
85
|
+
estimateJsonTokens(json) {
|
|
86
|
+
const str = typeof json === 'string' ? json : JSON.stringify(json);
|
|
87
|
+
if (!str)
|
|
88
|
+
return 0;
|
|
89
|
+
// JSON has structural overhead - keys, quotes, brackets
|
|
90
|
+
let adjustedLength = str.length;
|
|
91
|
+
// Account for string keys being tokenized as units
|
|
92
|
+
const keyMatches = str.match(/"[^"]+"\s*:/g);
|
|
93
|
+
if (keyMatches) {
|
|
94
|
+
// Keys are often 1-2 tokens
|
|
95
|
+
adjustedLength -= keyMatches.reduce((sum, k) => sum + Math.max(0, k.length - 4), 0);
|
|
96
|
+
}
|
|
97
|
+
return Math.ceil(adjustedLength / this.estimationConfig.jsonCharsPerToken);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Estimate tokens for general text content
|
|
101
|
+
*/
|
|
102
|
+
estimateTextTokens(text) {
|
|
103
|
+
if (!text)
|
|
104
|
+
return 0;
|
|
105
|
+
// Count words as a cross-check (average ~1.3 tokens per word)
|
|
106
|
+
const words = text.split(/\s+/).filter(w => w.length > 0).length;
|
|
107
|
+
const charBasedEstimate = Math.ceil(text.length / this.estimationConfig.textCharsPerToken);
|
|
108
|
+
const wordBasedEstimate = Math.ceil(words * 1.3);
|
|
109
|
+
// Use the average of both methods
|
|
110
|
+
return Math.ceil((charBasedEstimate + wordBasedEstimate) / 2);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Estimate tokens from byte size
|
|
114
|
+
*/
|
|
115
|
+
estimateTokensFromBytes(bytes) {
|
|
116
|
+
return Math.ceil(bytes / 4);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Estimate tokens that would be used in passthrough mode
|
|
120
|
+
*/
|
|
121
|
+
estimatePassthroughTokens(toolCalls, dataBytes) {
|
|
122
|
+
const overhead = toolCalls * this.estimationConfig.toolCallOverheadTokens;
|
|
123
|
+
const dataTokens = dataBytes / 1024 * this.estimationConfig.tokensPerKb;
|
|
124
|
+
return Math.ceil(overhead + dataTokens);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Calculate token savings from execution mode
|
|
128
|
+
*/
|
|
129
|
+
calculateTokenSavings(params) {
|
|
130
|
+
const { codeTokens, resultTokens, toolCalls, dataProcessedBytes } = params;
|
|
131
|
+
// What execution mode actually used
|
|
132
|
+
const executionModeTokens = codeTokens + resultTokens;
|
|
133
|
+
// What passthrough mode would have used
|
|
134
|
+
const passthroughModeTokens = this.estimatePassthroughTokens(toolCalls, dataProcessedBytes);
|
|
135
|
+
// Calculate savings
|
|
136
|
+
const tokensSaved = Math.max(0, passthroughModeTokens - executionModeTokens);
|
|
137
|
+
const savingsPercent = passthroughModeTokens > 0
|
|
138
|
+
? Math.round((tokensSaved / passthroughModeTokens) * 100)
|
|
139
|
+
: 0;
|
|
140
|
+
return { tokensSaved, savingsPercent };
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Record an execution
|
|
144
|
+
*/
|
|
145
|
+
recordExecution(params) {
|
|
146
|
+
const { executionId, code, result, success, durationMs, toolCalls, dataProcessedBytes, resultSizeBytes, mode, serversUsed = [], toolsUsed = [], errorType, } = params;
|
|
147
|
+
// Calculate token usage
|
|
148
|
+
const codeTokens = this.estimateCodeTokens(code);
|
|
149
|
+
const resultTokens = result ? this.estimateJsonTokens(result) : 0;
|
|
150
|
+
// Calculate savings (only meaningful for execution mode)
|
|
151
|
+
const savings = mode === 'execution'
|
|
152
|
+
? this.calculateTokenSavings({ codeTokens, resultTokens, toolCalls, dataProcessedBytes })
|
|
153
|
+
: { tokensSaved: 0, savingsPercent: 0 };
|
|
154
|
+
const metrics = {
|
|
155
|
+
executionId,
|
|
156
|
+
timestamp: new Date(),
|
|
157
|
+
durationMs,
|
|
158
|
+
success,
|
|
159
|
+
codeTokens,
|
|
160
|
+
resultTokens,
|
|
161
|
+
toolCalls,
|
|
162
|
+
dataProcessedBytes,
|
|
163
|
+
resultSizeBytes,
|
|
164
|
+
estimatedTokensSaved: savings.tokensSaved,
|
|
165
|
+
savingsPercent: savings.savingsPercent,
|
|
166
|
+
mode,
|
|
167
|
+
serversUsed,
|
|
168
|
+
toolsUsed,
|
|
169
|
+
};
|
|
170
|
+
// Store execution
|
|
171
|
+
this.executions.push(metrics);
|
|
172
|
+
// Trim old executions if needed
|
|
173
|
+
if (this.executions.length > this.maxStoredExecutions) {
|
|
174
|
+
this.executions = this.executions.slice(-this.maxStoredExecutions);
|
|
175
|
+
}
|
|
176
|
+
// Emit event
|
|
177
|
+
this.emit('execution', metrics);
|
|
178
|
+
// Log to file if enabled
|
|
179
|
+
if (this.config.logToFile && this.logPath) {
|
|
180
|
+
this.logToFile(metrics, errorType);
|
|
181
|
+
}
|
|
182
|
+
logger.debug('Execution recorded', {
|
|
183
|
+
executionId,
|
|
184
|
+
tokensSaved: savings.tokensSaved,
|
|
185
|
+
savingsPercent: savings.savingsPercent,
|
|
186
|
+
mode,
|
|
187
|
+
});
|
|
188
|
+
return metrics;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Log metrics to file
|
|
192
|
+
*/
|
|
193
|
+
logToFile(metrics, errorType) {
|
|
194
|
+
if (!this.logPath)
|
|
195
|
+
return;
|
|
196
|
+
const logEntry = {
|
|
197
|
+
...metrics,
|
|
198
|
+
errorType,
|
|
199
|
+
timestamp: metrics.timestamp.toISOString(),
|
|
200
|
+
};
|
|
201
|
+
const line = JSON.stringify(logEntry) + '\n';
|
|
202
|
+
try {
|
|
203
|
+
appendFileSync(this.logPath, line);
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
logger.error('Failed to write metrics to file', { error, path: this.logPath });
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Get aggregated session metrics
|
|
211
|
+
*/
|
|
212
|
+
getSessionMetrics() {
|
|
213
|
+
const now = new Date();
|
|
214
|
+
const uptime = now.getTime() - this.sessionStart.getTime();
|
|
215
|
+
// Initialize aggregates
|
|
216
|
+
const toolCallsByServer = {};
|
|
217
|
+
const toolCallsByTool = {};
|
|
218
|
+
const errorsByType = {};
|
|
219
|
+
let totalDataProcessedBytes = 0;
|
|
220
|
+
let totalResultBytes = 0;
|
|
221
|
+
let totalCodeTokens = 0;
|
|
222
|
+
let totalResultTokens = 0;
|
|
223
|
+
let totalTokensSaved = 0;
|
|
224
|
+
let totalDurationMs = 0;
|
|
225
|
+
let minDurationMs = Number.MAX_SAFE_INTEGER;
|
|
226
|
+
let maxDurationMs = 0;
|
|
227
|
+
let successfulExecutions = 0;
|
|
228
|
+
let failedExecutions = 0;
|
|
229
|
+
let totalToolCalls = 0;
|
|
230
|
+
let executionModeCount = 0;
|
|
231
|
+
let passthroughModeCount = 0;
|
|
232
|
+
let totalErrors = 0;
|
|
233
|
+
let totalSavingsPercent = 0;
|
|
234
|
+
let lastActivity = this.sessionStart;
|
|
235
|
+
for (const exec of this.executions) {
|
|
236
|
+
// Update last activity
|
|
237
|
+
if (exec.timestamp > lastActivity) {
|
|
238
|
+
lastActivity = exec.timestamp;
|
|
239
|
+
}
|
|
240
|
+
// Count successes/failures
|
|
241
|
+
if (exec.success) {
|
|
242
|
+
successfulExecutions++;
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
failedExecutions++;
|
|
246
|
+
totalErrors++;
|
|
247
|
+
}
|
|
248
|
+
// Aggregate data
|
|
249
|
+
totalDataProcessedBytes += exec.dataProcessedBytes;
|
|
250
|
+
totalResultBytes += exec.resultSizeBytes;
|
|
251
|
+
totalCodeTokens += exec.codeTokens;
|
|
252
|
+
totalResultTokens += exec.resultTokens;
|
|
253
|
+
totalTokensSaved += exec.estimatedTokensSaved;
|
|
254
|
+
totalDurationMs += exec.durationMs;
|
|
255
|
+
totalSavingsPercent += exec.savingsPercent;
|
|
256
|
+
// Duration tracking
|
|
257
|
+
if (exec.durationMs < minDurationMs)
|
|
258
|
+
minDurationMs = exec.durationMs;
|
|
259
|
+
if (exec.durationMs > maxDurationMs)
|
|
260
|
+
maxDurationMs = exec.durationMs;
|
|
261
|
+
// Tool call tracking
|
|
262
|
+
totalToolCalls += exec.toolCalls;
|
|
263
|
+
// Count unique servers used per execution
|
|
264
|
+
const uniqueServers = new Set(exec.serversUsed);
|
|
265
|
+
for (const server of uniqueServers) {
|
|
266
|
+
toolCallsByServer[server] = (toolCallsByServer[server] || 0) + 1;
|
|
267
|
+
}
|
|
268
|
+
// Count unique tools used per execution
|
|
269
|
+
const uniqueTools = new Set(exec.toolsUsed);
|
|
270
|
+
for (const tool of uniqueTools) {
|
|
271
|
+
toolCallsByTool[tool] = (toolCallsByTool[tool] || 0) + 1;
|
|
272
|
+
}
|
|
273
|
+
// Mode tracking
|
|
274
|
+
if (exec.mode === 'execution') {
|
|
275
|
+
executionModeCount++;
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
passthroughModeCount++;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
const totalExecutions = this.executions.length;
|
|
282
|
+
const avgDuration = totalExecutions > 0 ? totalDurationMs / totalExecutions : 0;
|
|
283
|
+
const avgTokensSaved = totalExecutions > 0 ? totalTokensSaved / totalExecutions : 0;
|
|
284
|
+
const avgSavingsPercent = totalExecutions > 0 ? totalSavingsPercent / totalExecutions : 0;
|
|
285
|
+
const avgDataPerExecution = totalExecutions > 0 ? totalDataProcessedBytes / totalExecutions : 0;
|
|
286
|
+
// Estimate what direct mode would have used
|
|
287
|
+
const totalEstimatedDirectTokens = this.executions.reduce((sum, exec) => {
|
|
288
|
+
return sum + this.estimatePassthroughTokens(exec.toolCalls, exec.dataProcessedBytes);
|
|
289
|
+
}, 0);
|
|
290
|
+
return {
|
|
291
|
+
sessionId: this.sessionId,
|
|
292
|
+
sessionStart: this.sessionStart,
|
|
293
|
+
lastActivity,
|
|
294
|
+
uptime,
|
|
295
|
+
totalExecutions,
|
|
296
|
+
successfulExecutions,
|
|
297
|
+
failedExecutions,
|
|
298
|
+
totalToolCalls,
|
|
299
|
+
toolCallsByServer,
|
|
300
|
+
toolCallsByTool,
|
|
301
|
+
totalDataProcessedBytes,
|
|
302
|
+
totalResultBytes,
|
|
303
|
+
averageDataPerExecution: avgDataPerExecution,
|
|
304
|
+
totalCodeTokens,
|
|
305
|
+
totalResultTokens,
|
|
306
|
+
totalEstimatedDirectTokens,
|
|
307
|
+
totalTokensSaved,
|
|
308
|
+
averageTokensSaved: avgTokensSaved,
|
|
309
|
+
averageSavingsPercent: avgSavingsPercent,
|
|
310
|
+
totalDurationMs,
|
|
311
|
+
averageDurationMs: avgDuration,
|
|
312
|
+
minDurationMs: totalExecutions > 0 ? minDurationMs : 0,
|
|
313
|
+
maxDurationMs,
|
|
314
|
+
executionModeCount,
|
|
315
|
+
passthroughModeCount,
|
|
316
|
+
totalErrors,
|
|
317
|
+
errorsByType,
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Get windowed metrics for trend analysis
|
|
322
|
+
*/
|
|
323
|
+
getWindowedMetrics(windowMs = 60000) {
|
|
324
|
+
if (this.executions.length === 0)
|
|
325
|
+
return [];
|
|
326
|
+
const windows = [];
|
|
327
|
+
const now = new Date();
|
|
328
|
+
// Group executions by time window
|
|
329
|
+
const windowGroups = new Map();
|
|
330
|
+
for (const exec of this.executions) {
|
|
331
|
+
const windowKey = Math.floor(exec.timestamp.getTime() / windowMs) * windowMs;
|
|
332
|
+
if (!windowGroups.has(windowKey)) {
|
|
333
|
+
windowGroups.set(windowKey, []);
|
|
334
|
+
}
|
|
335
|
+
windowGroups.get(windowKey).push(exec);
|
|
336
|
+
}
|
|
337
|
+
// Calculate metrics for each window
|
|
338
|
+
for (const [windowStart, execs] of windowGroups.entries()) {
|
|
339
|
+
const tokensSaved = execs.reduce((sum, e) => sum + e.estimatedTokensSaved, 0);
|
|
340
|
+
const totalDuration = execs.reduce((sum, e) => sum + e.durationMs, 0);
|
|
341
|
+
const successCount = execs.filter(e => e.success).length;
|
|
342
|
+
windows.push({
|
|
343
|
+
windowStart: new Date(windowStart),
|
|
344
|
+
windowEnd: new Date(windowStart + windowMs),
|
|
345
|
+
windowDurationMs: windowMs,
|
|
346
|
+
executions: execs.length,
|
|
347
|
+
tokensSaved,
|
|
348
|
+
averageDurationMs: execs.length > 0 ? totalDuration / execs.length : 0,
|
|
349
|
+
successRate: execs.length > 0 ? (successCount / execs.length) * 100 : 0,
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
return windows.sort((a, b) => a.windowStart.getTime() - b.windowStart.getTime());
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Get recent executions
|
|
356
|
+
*/
|
|
357
|
+
getRecentExecutions(limit = 10) {
|
|
358
|
+
return this.executions.slice(-limit);
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Get top servers by usage
|
|
362
|
+
*/
|
|
363
|
+
getTopServers(limit = 5) {
|
|
364
|
+
const metrics = this.getSessionMetrics();
|
|
365
|
+
return Object.entries(metrics.toolCallsByServer)
|
|
366
|
+
.map(([server, calls]) => ({ server, calls }))
|
|
367
|
+
.sort((a, b) => b.calls - a.calls)
|
|
368
|
+
.slice(0, limit);
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Get top tools by usage
|
|
372
|
+
*/
|
|
373
|
+
getTopTools(limit = 5) {
|
|
374
|
+
const metrics = this.getSessionMetrics();
|
|
375
|
+
return Object.entries(metrics.toolCallsByTool)
|
|
376
|
+
.map(([tool, calls]) => ({ tool, calls }))
|
|
377
|
+
.sort((a, b) => b.calls - a.calls)
|
|
378
|
+
.slice(0, limit);
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Export metrics to JSON
|
|
382
|
+
*/
|
|
383
|
+
exportToJson() {
|
|
384
|
+
return JSON.stringify({
|
|
385
|
+
session: this.getSessionMetrics(),
|
|
386
|
+
executions: this.executions,
|
|
387
|
+
windowedMetrics: this.getWindowedMetrics(),
|
|
388
|
+
}, null, 2);
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Save metrics snapshot to file
|
|
392
|
+
*/
|
|
393
|
+
saveSnapshot(path) {
|
|
394
|
+
const data = this.exportToJson();
|
|
395
|
+
writeFileSync(path, data);
|
|
396
|
+
logger.info('Metrics snapshot saved', { path });
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Reset all metrics
|
|
400
|
+
*/
|
|
401
|
+
reset() {
|
|
402
|
+
this.sessionId = this.generateSessionId();
|
|
403
|
+
this.sessionStart = new Date();
|
|
404
|
+
this.executions = [];
|
|
405
|
+
this.emit('reset');
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Check if metrics collection is enabled
|
|
409
|
+
*/
|
|
410
|
+
isEnabled() {
|
|
411
|
+
return this.config.enabled;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
// Global metrics collector instance
|
|
415
|
+
let globalMetricsCollector = null;
|
|
416
|
+
/**
|
|
417
|
+
* Get or create the global metrics collector
|
|
418
|
+
*/
|
|
419
|
+
export function getMetricsCollector(config) {
|
|
420
|
+
if (!globalMetricsCollector && !config) {
|
|
421
|
+
throw new Error('Metrics collector not initialised. Provide config on first call.');
|
|
422
|
+
}
|
|
423
|
+
if (!globalMetricsCollector && config) {
|
|
424
|
+
globalMetricsCollector = new MetricsCollector(config);
|
|
425
|
+
}
|
|
426
|
+
return globalMetricsCollector;
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Shutdown the global metrics collector
|
|
430
|
+
*/
|
|
431
|
+
export function shutdownMetricsCollector() {
|
|
432
|
+
if (globalMetricsCollector) {
|
|
433
|
+
globalMetricsCollector.removeAllListeners();
|
|
434
|
+
globalMetricsCollector = null;
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
//# sourceMappingURL=metrics-collector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics-collector.js","sourceRoot":"","sources":["../../src/metrics/metrics-collector.ts"],"names":[],"mappings":"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"}
|