@codemieai/code 0.0.11 → 0.0.12
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/README.md +20 -98
- package/dist/agents/codemie-code/agent.d.ts.map +1 -1
- package/dist/agents/codemie-code/agent.js +35 -4
- package/dist/agents/codemie-code/agent.js.map +1 -1
- package/dist/agents/codemie-code/tools/index.d.ts.map +1 -1
- package/dist/agents/codemie-code/tools/index.js +5 -3
- package/dist/agents/codemie-code/tools/index.js.map +1 -1
- package/dist/agents/core/AgentCLI.d.ts.map +1 -1
- package/dist/agents/core/AgentCLI.js +57 -11
- package/dist/agents/core/AgentCLI.js.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.d.ts +4 -4
- package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.js +31 -23
- package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
- package/dist/agents/plugins/codemie-code.plugin.js +1 -1
- package/dist/agents/plugins/codemie-code.plugin.js.map +1 -1
- package/dist/agents/plugins/gemini.plugin.js +1 -1
- package/dist/agents/plugins/gemini.plugin.js.map +1 -1
- package/dist/analytics/collector.d.ts +46 -0
- package/dist/analytics/collector.d.ts.map +1 -0
- package/dist/analytics/collector.js +83 -0
- package/dist/analytics/collector.js.map +1 -0
- package/dist/analytics/config.d.ts +14 -0
- package/dist/analytics/config.d.ts.map +1 -0
- package/dist/analytics/config.js +46 -0
- package/dist/analytics/config.js.map +1 -0
- package/dist/analytics/index.d.ts +108 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/index.js +322 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/plugins/api-metrics.plugin.d.ts +23 -0
- package/dist/analytics/plugins/api-metrics.plugin.d.ts.map +1 -0
- package/dist/analytics/plugins/api-metrics.plugin.js +113 -0
- package/dist/analytics/plugins/api-metrics.plugin.js.map +1 -0
- package/dist/analytics/plugins/index.d.ts +15 -0
- package/dist/analytics/plugins/index.d.ts.map +1 -0
- package/dist/analytics/plugins/index.js +15 -0
- package/dist/analytics/plugins/index.js.map +1 -0
- package/dist/analytics/plugins/model-metrics.plugin.d.ts +36 -0
- package/dist/analytics/plugins/model-metrics.plugin.d.ts.map +1 -0
- package/dist/analytics/plugins/model-metrics.plugin.js +115 -0
- package/dist/analytics/plugins/model-metrics.plugin.js.map +1 -0
- package/dist/analytics/plugins/provider-metrics.plugin.d.ts +38 -0
- package/dist/analytics/plugins/provider-metrics.plugin.d.ts.map +1 -0
- package/dist/analytics/plugins/provider-metrics.plugin.js +138 -0
- package/dist/analytics/plugins/provider-metrics.plugin.js.map +1 -0
- package/dist/analytics/plugins/types.d.ts +63 -0
- package/dist/analytics/plugins/types.d.ts.map +1 -0
- package/dist/analytics/plugins/types.js +54 -0
- package/dist/analytics/plugins/types.js.map +1 -0
- package/dist/analytics/privacy.d.ts +10 -0
- package/dist/analytics/privacy.d.ts.map +1 -0
- package/dist/analytics/privacy.js +20 -0
- package/dist/analytics/privacy.js.map +1 -0
- package/dist/analytics/session.d.ts +56 -0
- package/dist/analytics/session.d.ts.map +1 -0
- package/dist/analytics/session.js +95 -0
- package/dist/analytics/session.js.map +1 -0
- package/dist/analytics/types.d.ts +104 -0
- package/dist/analytics/types.d.ts.map +1 -0
- package/dist/analytics/types.js +15 -0
- package/dist/analytics/types.js.map +1 -0
- package/dist/analytics/writer.d.ts +18 -0
- package/dist/analytics/writer.d.ts.map +1 -0
- package/dist/analytics/writer.js +44 -0
- package/dist/analytics/writer.js.map +1 -0
- package/dist/cli/commands/analytics.d.ts +3 -0
- package/dist/cli/commands/analytics.d.ts.map +1 -0
- package/dist/cli/commands/analytics.js +319 -0
- package/dist/cli/commands/analytics.js.map +1 -0
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/config.js +14 -0
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/profile.d.ts.map +1 -1
- package/dist/cli/commands/profile.js +41 -0
- package/dist/cli/commands/profile.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/env/types.d.ts +2 -0
- package/dist/env/types.d.ts.map +1 -1
- package/dist/env/types.js.map +1 -1
- package/dist/utils/analytics-reader.d.ts +117 -0
- package/dist/utils/analytics-reader.d.ts.map +1 -0
- package/dist/utils/analytics-reader.js +421 -0
- package/dist/utils/analytics-reader.js.map +1 -0
- package/dist/utils/codemie-integration-validator.d.ts.map +1 -1
- package/dist/utils/codemie-integration-validator.js +3 -16
- package/dist/utils/codemie-integration-validator.js.map +1 -1
- package/dist/utils/codemie-proxy.d.ts +80 -0
- package/dist/utils/codemie-proxy.d.ts.map +1 -0
- package/dist/utils/codemie-proxy.js +335 -0
- package/dist/utils/codemie-proxy.js.map +1 -0
- package/dist/utils/config-loader.d.ts +7 -0
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +18 -0
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/date-formatter.d.ts +88 -0
- package/dist/utils/date-formatter.d.ts.map +1 -0
- package/dist/utils/date-formatter.js +133 -0
- package/dist/utils/date-formatter.js.map +1 -0
- package/dist/utils/installation-id.d.ts +10 -0
- package/dist/utils/installation-id.d.ts.map +1 -0
- package/dist/utils/installation-id.js +30 -0
- package/dist/utils/installation-id.js.map +1 -0
- package/dist/utils/logger.d.ts +1 -15
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +5 -86
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/proxy/errors.d.ts +45 -0
- package/dist/utils/proxy/errors.d.ts.map +1 -0
- package/dist/utils/proxy/errors.js +103 -0
- package/dist/utils/proxy/errors.js.map +1 -0
- package/dist/utils/proxy/http-client.d.ts +46 -0
- package/dist/utils/proxy/http-client.d.ts.map +1 -0
- package/dist/utils/proxy/http-client.js +133 -0
- package/dist/utils/proxy/http-client.js.map +1 -0
- package/dist/utils/proxy/interceptors.d.ts +69 -0
- package/dist/utils/proxy/interceptors.d.ts.map +1 -0
- package/dist/utils/proxy/interceptors.js +319 -0
- package/dist/utils/proxy/interceptors.js.map +1 -0
- package/dist/utils/proxy/types.d.ts +45 -0
- package/dist/utils/proxy/types.d.ts.map +1 -0
- package/dist/utils/proxy/types.js +7 -0
- package/dist/utils/proxy/types.js.map +1 -0
- package/package.json +38 -5
- package/dist/utils/sso-gateway.d.ts +0 -75
- package/dist/utils/sso-gateway.d.ts.map +0 -1
- package/dist/utils/sso-gateway.js +0 -453
- package/dist/utils/sso-gateway.js.map +0 -1
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analytics system for CodeMie CLI
|
|
3
|
+
* Provides unified analytics tracking across all agents
|
|
4
|
+
*/
|
|
5
|
+
import { EventCollector } from './collector.js';
|
|
6
|
+
import { AnalyticsWriter } from './writer.js';
|
|
7
|
+
import { SessionManager } from './session.js';
|
|
8
|
+
import { loadAnalyticsConfig } from './config.js';
|
|
9
|
+
import { getInstallationId } from '../utils/installation-id.js';
|
|
10
|
+
/**
|
|
11
|
+
* Main analytics class
|
|
12
|
+
* Handles event tracking, buffering, and persistence
|
|
13
|
+
*/
|
|
14
|
+
export class Analytics {
|
|
15
|
+
collector = null;
|
|
16
|
+
writer = null;
|
|
17
|
+
session;
|
|
18
|
+
config;
|
|
19
|
+
installationId = null;
|
|
20
|
+
// Plugin system for extensibility
|
|
21
|
+
plugins = [];
|
|
22
|
+
// Session metrics aggregation
|
|
23
|
+
sessionMetrics = {
|
|
24
|
+
totalLatencyMs: 0,
|
|
25
|
+
apiRequestCount: 0,
|
|
26
|
+
};
|
|
27
|
+
constructor(config = {}) {
|
|
28
|
+
this.config = loadAnalyticsConfig(config);
|
|
29
|
+
this.session = new SessionManager();
|
|
30
|
+
// Only initialize if enabled
|
|
31
|
+
if (this.config.enabled) {
|
|
32
|
+
this.initialize();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Register an analytics plugin (Open/Closed principle)
|
|
37
|
+
* Allows adding custom metrics without modifying core
|
|
38
|
+
*/
|
|
39
|
+
registerPlugin(plugin) {
|
|
40
|
+
this.plugins.push(plugin);
|
|
41
|
+
// Initialize plugin if it has init method
|
|
42
|
+
if (plugin.initialize) {
|
|
43
|
+
plugin.initialize(this).catch(error => {
|
|
44
|
+
console.error(`Plugin "${plugin.name}" initialization failed:`, error);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get all registered plugins
|
|
50
|
+
*/
|
|
51
|
+
getPlugins() {
|
|
52
|
+
return [...this.plugins];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get current metrics from all plugins
|
|
56
|
+
* Useful for displaying aggregated stats
|
|
57
|
+
*/
|
|
58
|
+
getPluginMetrics() {
|
|
59
|
+
const allMetrics = {};
|
|
60
|
+
for (const plugin of this.plugins) {
|
|
61
|
+
if (plugin.getMetrics) {
|
|
62
|
+
try {
|
|
63
|
+
allMetrics[plugin.name] = plugin.getMetrics();
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
console.error(`Error getting metrics from plugin "${plugin.name}":`, error);
|
|
67
|
+
allMetrics[plugin.name] = { error: 'Failed to get metrics' };
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return allMetrics;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Get metrics from a specific plugin by name
|
|
75
|
+
*/
|
|
76
|
+
getPluginMetricsByName(pluginName) {
|
|
77
|
+
const plugin = this.plugins.find(p => p.name === pluginName);
|
|
78
|
+
if (!plugin || !plugin.getMetrics) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
return plugin.getMetrics();
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
console.error(`Error getting metrics from plugin "${pluginName}":`, error);
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Initialize analytics components
|
|
91
|
+
*/
|
|
92
|
+
initialize() {
|
|
93
|
+
this.collector = new EventCollector({
|
|
94
|
+
maxBufferSize: this.config.maxBufferSize,
|
|
95
|
+
flushInterval: this.config.flushInterval,
|
|
96
|
+
});
|
|
97
|
+
// Setup writer for local target
|
|
98
|
+
if (this.config.target === 'local' || this.config.target === 'both') {
|
|
99
|
+
this.writer = new AnalyticsWriter(this.config.localPath);
|
|
100
|
+
}
|
|
101
|
+
// Register flush callback
|
|
102
|
+
this.collector.onFlush(async (events) => {
|
|
103
|
+
if (this.writer) {
|
|
104
|
+
await this.writer.write(events);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Track an analytics event
|
|
110
|
+
*/
|
|
111
|
+
async track(eventType, attributes = {}, metrics) {
|
|
112
|
+
if (!this.config.enabled || !this.collector || !this.session.isActive) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
// Lazy load installation ID
|
|
117
|
+
if (!this.installationId) {
|
|
118
|
+
this.installationId = await getInstallationId();
|
|
119
|
+
}
|
|
120
|
+
let event = {
|
|
121
|
+
timestamp: new Date().toISOString(),
|
|
122
|
+
eventType,
|
|
123
|
+
sessionId: this.session.id,
|
|
124
|
+
installationId: this.installationId,
|
|
125
|
+
agent: this.session.agent,
|
|
126
|
+
agentVersion: this.session.agentVersion,
|
|
127
|
+
cliVersion: this.session.cliVersion,
|
|
128
|
+
profile: this.session.profile,
|
|
129
|
+
provider: this.session.provider,
|
|
130
|
+
model: this.session.model,
|
|
131
|
+
attributes,
|
|
132
|
+
metrics: metrics || {},
|
|
133
|
+
};
|
|
134
|
+
// Process through plugins
|
|
135
|
+
for (const plugin of this.plugins) {
|
|
136
|
+
try {
|
|
137
|
+
// 1. Allow plugins to transform event
|
|
138
|
+
if (plugin.processEvent) {
|
|
139
|
+
const processed = await plugin.processEvent(event);
|
|
140
|
+
if (!processed) {
|
|
141
|
+
// Plugin filtered out event
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
event = processed;
|
|
145
|
+
}
|
|
146
|
+
// 2. Enrich with plugin metrics
|
|
147
|
+
if (plugin.enrichMetrics) {
|
|
148
|
+
const pluginMetrics = await plugin.enrichMetrics(event);
|
|
149
|
+
// Merge plugin metrics (cast to Record<string, number> for compatibility)
|
|
150
|
+
event.metrics = { ...event.metrics, ...pluginMetrics };
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
catch (pluginError) {
|
|
154
|
+
// Plugin errors should not break analytics
|
|
155
|
+
console.error(`Plugin "${plugin.name}" error:`, pluginError);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// Aggregate session metrics
|
|
159
|
+
if (eventType === 'api_request') {
|
|
160
|
+
this.sessionMetrics.apiRequestCount++;
|
|
161
|
+
}
|
|
162
|
+
if (eventType === 'api_response' && event.metrics?.latencyMs) {
|
|
163
|
+
this.sessionMetrics.totalLatencyMs += event.metrics.latencyMs;
|
|
164
|
+
}
|
|
165
|
+
this.collector.add(event);
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
// Silently fail - don't block agent execution
|
|
169
|
+
console.error('Analytics tracking error:', error);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Track agent response
|
|
174
|
+
*/
|
|
175
|
+
async trackAgentResponse(response, attributes = {}) {
|
|
176
|
+
const eventAttrs = {
|
|
177
|
+
...attributes,
|
|
178
|
+
responseLength: response.length,
|
|
179
|
+
};
|
|
180
|
+
await this.track('agent_response', eventAttrs);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Track API response
|
|
184
|
+
*/
|
|
185
|
+
async trackAPIResponse(data) {
|
|
186
|
+
const attributes = {};
|
|
187
|
+
if (data.statusCode) {
|
|
188
|
+
attributes.statusCode = data.statusCode;
|
|
189
|
+
}
|
|
190
|
+
const metrics = {};
|
|
191
|
+
if (data.latency)
|
|
192
|
+
metrics.latencyMs = data.latency;
|
|
193
|
+
await this.track('api_response', attributes, metrics);
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Start analytics session
|
|
197
|
+
*/
|
|
198
|
+
startSession(config) {
|
|
199
|
+
this.session.start(config);
|
|
200
|
+
this.resetMetrics(); // Reset metrics for new session
|
|
201
|
+
void this.track('session_start', {
|
|
202
|
+
workingDir: config.workingDir,
|
|
203
|
+
interactive: config.interactive,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* End analytics session
|
|
208
|
+
*/
|
|
209
|
+
async endSession(exitReason, metrics) {
|
|
210
|
+
if (!this.session.isActive) {
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
// Combine session metrics with provided metrics
|
|
214
|
+
const sessionMetrics = {
|
|
215
|
+
durationSeconds: this.session.duration,
|
|
216
|
+
totalLatencyMs: this.sessionMetrics.totalLatencyMs,
|
|
217
|
+
averageLatencyMs: this.sessionMetrics.apiRequestCount > 0
|
|
218
|
+
? this.sessionMetrics.totalLatencyMs / this.sessionMetrics.apiRequestCount
|
|
219
|
+
: 0,
|
|
220
|
+
apiRequestCount: this.sessionMetrics.apiRequestCount,
|
|
221
|
+
...metrics,
|
|
222
|
+
};
|
|
223
|
+
const attributes = {
|
|
224
|
+
exitReason,
|
|
225
|
+
};
|
|
226
|
+
await this.track('session_end', attributes, sessionMetrics);
|
|
227
|
+
// Force flush on session end
|
|
228
|
+
await this.flush();
|
|
229
|
+
// Reset metrics
|
|
230
|
+
this.resetMetrics();
|
|
231
|
+
this.session.end();
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Reset session metrics
|
|
235
|
+
*/
|
|
236
|
+
resetMetrics() {
|
|
237
|
+
this.sessionMetrics = {
|
|
238
|
+
totalLatencyMs: 0,
|
|
239
|
+
apiRequestCount: 0,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Flush buffered events
|
|
244
|
+
*/
|
|
245
|
+
async flush() {
|
|
246
|
+
if (this.collector) {
|
|
247
|
+
await this.collector.flush();
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Cleanup and destroy analytics
|
|
252
|
+
*/
|
|
253
|
+
async destroy() {
|
|
254
|
+
if (this.collector) {
|
|
255
|
+
await this.flush();
|
|
256
|
+
this.collector.destroy();
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Check if analytics is enabled
|
|
261
|
+
*/
|
|
262
|
+
get isEnabled() {
|
|
263
|
+
return this.config.enabled;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Singleton analytics instance
|
|
268
|
+
*/
|
|
269
|
+
let analyticsInstance = null;
|
|
270
|
+
/**
|
|
271
|
+
* Initialize global analytics instance
|
|
272
|
+
* Automatically registers default plugins for API tracking
|
|
273
|
+
*/
|
|
274
|
+
export function initAnalytics(config = {}, options = { registerDefaultPlugins: true }) {
|
|
275
|
+
analyticsInstance = new Analytics(config);
|
|
276
|
+
// Register default plugins if enabled
|
|
277
|
+
if (options.registerDefaultPlugins && analyticsInstance.isEnabled) {
|
|
278
|
+
registerDefaultPlugins(analyticsInstance);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Register default analytics plugins
|
|
283
|
+
* Tracks API request/response patterns, success rates, and latency
|
|
284
|
+
*/
|
|
285
|
+
export function registerDefaultPlugins(analytics) {
|
|
286
|
+
try {
|
|
287
|
+
// Import plugins dynamically to avoid unnecessary loading
|
|
288
|
+
import('./plugins/index.js').then(({ APIMetricsPlugin, ModelMetricsPlugin, ProviderMetricsPlugin }) => {
|
|
289
|
+
analytics.registerPlugin(new APIMetricsPlugin());
|
|
290
|
+
analytics.registerPlugin(new ModelMetricsPlugin());
|
|
291
|
+
analytics.registerPlugin(new ProviderMetricsPlugin());
|
|
292
|
+
}).catch(error => {
|
|
293
|
+
// Plugins are optional - don't break if they fail to load
|
|
294
|
+
console.warn('Failed to load default analytics plugins:', error);
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
catch (error) {
|
|
298
|
+
console.warn('Failed to register default analytics plugins:', error);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Get global analytics instance
|
|
303
|
+
* Auto-initializes if not already initialized
|
|
304
|
+
*/
|
|
305
|
+
export function getAnalytics() {
|
|
306
|
+
if (!analyticsInstance) {
|
|
307
|
+
// Auto-initialize with defaults
|
|
308
|
+
initAnalytics();
|
|
309
|
+
}
|
|
310
|
+
return analyticsInstance; // Safe: always initialized above
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Destroy global analytics instance
|
|
314
|
+
*/
|
|
315
|
+
export async function destroyAnalytics() {
|
|
316
|
+
if (analyticsInstance) {
|
|
317
|
+
await analyticsInstance.destroy();
|
|
318
|
+
analyticsInstance = null;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
export { DEFAULT_ANALYTICS_CONFIG } from './types.js';
|
|
322
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Metrics Plugin
|
|
3
|
+
*
|
|
4
|
+
* Tracks API request/response patterns, success/failure rates, and latency.
|
|
5
|
+
* Useful for monitoring 3rd party agent API health and performance.
|
|
6
|
+
*/
|
|
7
|
+
import { AnalyticsPlugin } from './types.js';
|
|
8
|
+
import { AnalyticsEvent } from '../types.js';
|
|
9
|
+
export declare class APIMetricsPlugin implements AnalyticsPlugin {
|
|
10
|
+
name: string;
|
|
11
|
+
version: string;
|
|
12
|
+
private sessionMetrics;
|
|
13
|
+
enrichMetrics(event: AnalyticsEvent): Promise<Record<string, unknown>>;
|
|
14
|
+
/**
|
|
15
|
+
* Get current aggregated metrics
|
|
16
|
+
*/
|
|
17
|
+
getMetrics(): Record<string, unknown>;
|
|
18
|
+
/**
|
|
19
|
+
* Reset metrics (useful for new sessions)
|
|
20
|
+
*/
|
|
21
|
+
reset(): void;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=api-metrics.plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-metrics.plugin.d.ts","sourceRoot":"","sources":["../../../src/analytics/plugins/api-metrics.plugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,qBAAa,gBAAiB,YAAW,eAAe;IACtD,IAAI,SAAiB;IACrB,OAAO,SAAW;IAGlB,OAAO,CAAC,cAAc,CASpB;IAEI,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAgE5E;;OAEG;IACH,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAsBrC;;OAEG;IACH,KAAK,IAAI,IAAI;CAYd"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Metrics Plugin
|
|
3
|
+
*
|
|
4
|
+
* Tracks API request/response patterns, success/failure rates, and latency.
|
|
5
|
+
* Useful for monitoring 3rd party agent API health and performance.
|
|
6
|
+
*/
|
|
7
|
+
export class APIMetricsPlugin {
|
|
8
|
+
name = 'api-metrics';
|
|
9
|
+
version = '1.0.0';
|
|
10
|
+
// Track metrics per session
|
|
11
|
+
sessionMetrics = {
|
|
12
|
+
totalRequests: 0,
|
|
13
|
+
successfulRequests: 0,
|
|
14
|
+
failedRequests: 0,
|
|
15
|
+
totalLatency: 0,
|
|
16
|
+
minLatency: Infinity,
|
|
17
|
+
maxLatency: 0,
|
|
18
|
+
statusCodes: {},
|
|
19
|
+
errorTypes: {}
|
|
20
|
+
};
|
|
21
|
+
async enrichMetrics(event) {
|
|
22
|
+
// Track API request metrics
|
|
23
|
+
if (event.eventType === 'api_request') {
|
|
24
|
+
this.sessionMetrics.totalRequests++;
|
|
25
|
+
}
|
|
26
|
+
// Track API response metrics
|
|
27
|
+
if (event.eventType === 'api_response') {
|
|
28
|
+
const statusCode = event.attributes.statusCode;
|
|
29
|
+
const latency = event.metrics?.latencyMs;
|
|
30
|
+
// Count successful vs failed
|
|
31
|
+
if (statusCode >= 200 && statusCode < 400) {
|
|
32
|
+
this.sessionMetrics.successfulRequests++;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
this.sessionMetrics.failedRequests++;
|
|
36
|
+
}
|
|
37
|
+
// Track status codes
|
|
38
|
+
this.sessionMetrics.statusCodes[statusCode] =
|
|
39
|
+
(this.sessionMetrics.statusCodes[statusCode] || 0) + 1;
|
|
40
|
+
// Track latency stats
|
|
41
|
+
if (latency) {
|
|
42
|
+
this.sessionMetrics.totalLatency += latency;
|
|
43
|
+
this.sessionMetrics.minLatency = Math.min(this.sessionMetrics.minLatency, latency);
|
|
44
|
+
this.sessionMetrics.maxLatency = Math.max(this.sessionMetrics.maxLatency, latency);
|
|
45
|
+
}
|
|
46
|
+
// Calculate aggregated metrics
|
|
47
|
+
const successRate = this.sessionMetrics.totalRequests > 0
|
|
48
|
+
? this.sessionMetrics.successfulRequests / this.sessionMetrics.totalRequests
|
|
49
|
+
: 0;
|
|
50
|
+
const averageLatency = this.sessionMetrics.successfulRequests > 0
|
|
51
|
+
? this.sessionMetrics.totalLatency / this.sessionMetrics.successfulRequests
|
|
52
|
+
: 0;
|
|
53
|
+
return {
|
|
54
|
+
api_total_requests: this.sessionMetrics.totalRequests,
|
|
55
|
+
api_success_count: this.sessionMetrics.successfulRequests,
|
|
56
|
+
api_failure_count: this.sessionMetrics.failedRequests,
|
|
57
|
+
api_success_rate: Math.round(successRate * 100) / 100, // Round to 2 decimals
|
|
58
|
+
api_avg_latency_ms: Math.round(averageLatency),
|
|
59
|
+
api_min_latency_ms: this.sessionMetrics.minLatency === Infinity ? 0 : this.sessionMetrics.minLatency,
|
|
60
|
+
api_max_latency_ms: this.sessionMetrics.maxLatency
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
// Track proxy errors
|
|
64
|
+
if (event.eventType === 'proxy_error') {
|
|
65
|
+
const errorType = event.attributes.errorType || 'unknown';
|
|
66
|
+
this.sessionMetrics.errorTypes[errorType] =
|
|
67
|
+
(this.sessionMetrics.errorTypes[errorType] || 0) + 1;
|
|
68
|
+
return {
|
|
69
|
+
proxy_error_count: Object.values(this.sessionMetrics.errorTypes).reduce((a, b) => a + b, 0),
|
|
70
|
+
proxy_error_types: this.sessionMetrics.errorTypes
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
return {};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get current aggregated metrics
|
|
77
|
+
*/
|
|
78
|
+
getMetrics() {
|
|
79
|
+
const successRate = this.sessionMetrics.totalRequests > 0
|
|
80
|
+
? this.sessionMetrics.successfulRequests / this.sessionMetrics.totalRequests
|
|
81
|
+
: 0;
|
|
82
|
+
const averageLatency = this.sessionMetrics.successfulRequests > 0
|
|
83
|
+
? this.sessionMetrics.totalLatency / this.sessionMetrics.successfulRequests
|
|
84
|
+
: 0;
|
|
85
|
+
return {
|
|
86
|
+
totalRequests: this.sessionMetrics.totalRequests,
|
|
87
|
+
successfulRequests: this.sessionMetrics.successfulRequests,
|
|
88
|
+
failedRequests: this.sessionMetrics.failedRequests,
|
|
89
|
+
successRate: Math.round(successRate * 100) / 100,
|
|
90
|
+
averageLatencyMs: Math.round(averageLatency),
|
|
91
|
+
minLatencyMs: this.sessionMetrics.minLatency === Infinity ? 0 : this.sessionMetrics.minLatency,
|
|
92
|
+
maxLatencyMs: this.sessionMetrics.maxLatency,
|
|
93
|
+
statusCodes: { ...this.sessionMetrics.statusCodes },
|
|
94
|
+
errorTypes: { ...this.sessionMetrics.errorTypes }
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Reset metrics (useful for new sessions)
|
|
99
|
+
*/
|
|
100
|
+
reset() {
|
|
101
|
+
this.sessionMetrics = {
|
|
102
|
+
totalRequests: 0,
|
|
103
|
+
successfulRequests: 0,
|
|
104
|
+
failedRequests: 0,
|
|
105
|
+
totalLatency: 0,
|
|
106
|
+
minLatency: Infinity,
|
|
107
|
+
maxLatency: 0,
|
|
108
|
+
statusCodes: {},
|
|
109
|
+
errorTypes: {}
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=api-metrics.plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-metrics.plugin.js","sourceRoot":"","sources":["../../../src/analytics/plugins/api-metrics.plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analytics Plugins
|
|
3
|
+
*
|
|
4
|
+
* Export all analytics plugins for easy registration.
|
|
5
|
+
*
|
|
6
|
+
* Default plugins track API request/response patterns:
|
|
7
|
+
* - APIMetricsPlugin: Overall API success/failure rates, latency
|
|
8
|
+
* - ModelMetricsPlugin: Metrics per model (Claude, GPT, Gemini)
|
|
9
|
+
* - ProviderMetricsPlugin: Metrics per provider (ai-run-sso, litellm, etc.)
|
|
10
|
+
*/
|
|
11
|
+
export { AnalyticsPlugin, AnalyticsPluginRegistry } from './types.js';
|
|
12
|
+
export { APIMetricsPlugin } from './api-metrics.plugin.js';
|
|
13
|
+
export { ModelMetricsPlugin } from './model-metrics.plugin.js';
|
|
14
|
+
export { ProviderMetricsPlugin } from './provider-metrics.plugin.js';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analytics/plugins/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analytics Plugins
|
|
3
|
+
*
|
|
4
|
+
* Export all analytics plugins for easy registration.
|
|
5
|
+
*
|
|
6
|
+
* Default plugins track API request/response patterns:
|
|
7
|
+
* - APIMetricsPlugin: Overall API success/failure rates, latency
|
|
8
|
+
* - ModelMetricsPlugin: Metrics per model (Claude, GPT, Gemini)
|
|
9
|
+
* - ProviderMetricsPlugin: Metrics per provider (ai-run-sso, litellm, etc.)
|
|
10
|
+
*/
|
|
11
|
+
export { AnalyticsPluginRegistry } from './types.js';
|
|
12
|
+
export { APIMetricsPlugin } from './api-metrics.plugin.js';
|
|
13
|
+
export { ModelMetricsPlugin } from './model-metrics.plugin.js';
|
|
14
|
+
export { ProviderMetricsPlugin } from './provider-metrics.plugin.js';
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analytics/plugins/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAmB,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model Metrics Plugin
|
|
3
|
+
*
|
|
4
|
+
* Tracks metrics per model (Claude, GPT, Gemini, etc.).
|
|
5
|
+
* Helps identify which models perform better for different use cases.
|
|
6
|
+
*/
|
|
7
|
+
import { AnalyticsPlugin } from './types.js';
|
|
8
|
+
import { AnalyticsEvent } from '../types.js';
|
|
9
|
+
interface ModelStats {
|
|
10
|
+
requestCount: number;
|
|
11
|
+
successCount: number;
|
|
12
|
+
failureCount: number;
|
|
13
|
+
totalLatency: number;
|
|
14
|
+
totalTokens: number;
|
|
15
|
+
}
|
|
16
|
+
export declare class ModelMetricsPlugin implements AnalyticsPlugin {
|
|
17
|
+
name: string;
|
|
18
|
+
version: string;
|
|
19
|
+
private modelMetrics;
|
|
20
|
+
enrichMetrics(event: AnalyticsEvent): Promise<Record<string, unknown>>;
|
|
21
|
+
/**
|
|
22
|
+
* Get current aggregated metrics for all models
|
|
23
|
+
*/
|
|
24
|
+
getMetrics(): Record<string, unknown>;
|
|
25
|
+
/**
|
|
26
|
+
* Reset metrics (useful for new sessions)
|
|
27
|
+
*/
|
|
28
|
+
reset(): void;
|
|
29
|
+
/**
|
|
30
|
+
* Get all model metrics (useful for session end reporting)
|
|
31
|
+
* @deprecated Use getMetrics() instead
|
|
32
|
+
*/
|
|
33
|
+
getAllModelMetrics(): Record<string, ModelStats>;
|
|
34
|
+
}
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=model-metrics.plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-metrics.plugin.d.ts","sourceRoot":"","sources":["../../../src/analytics/plugins/model-metrics.plugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,UAAU,UAAU;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,kBAAmB,YAAW,eAAe;IACxD,IAAI,SAAmB;IACvB,OAAO,SAAW;IAGlB,OAAO,CAAC,YAAY,CAAiC;IAE/C,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAuE5E;;OAEG;IACH,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IA4BrC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;OAGG;IACH,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC;CAOjD"}
|