@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.
Files changed (129) hide show
  1. package/README.md +20 -98
  2. package/dist/agents/codemie-code/agent.d.ts.map +1 -1
  3. package/dist/agents/codemie-code/agent.js +35 -4
  4. package/dist/agents/codemie-code/agent.js.map +1 -1
  5. package/dist/agents/codemie-code/tools/index.d.ts.map +1 -1
  6. package/dist/agents/codemie-code/tools/index.js +5 -3
  7. package/dist/agents/codemie-code/tools/index.js.map +1 -1
  8. package/dist/agents/core/AgentCLI.d.ts.map +1 -1
  9. package/dist/agents/core/AgentCLI.js +57 -11
  10. package/dist/agents/core/AgentCLI.js.map +1 -1
  11. package/dist/agents/core/BaseAgentAdapter.d.ts +4 -4
  12. package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
  13. package/dist/agents/core/BaseAgentAdapter.js +31 -23
  14. package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
  15. package/dist/agents/plugins/codemie-code.plugin.js +1 -1
  16. package/dist/agents/plugins/codemie-code.plugin.js.map +1 -1
  17. package/dist/agents/plugins/gemini.plugin.js +1 -1
  18. package/dist/agents/plugins/gemini.plugin.js.map +1 -1
  19. package/dist/analytics/collector.d.ts +46 -0
  20. package/dist/analytics/collector.d.ts.map +1 -0
  21. package/dist/analytics/collector.js +83 -0
  22. package/dist/analytics/collector.js.map +1 -0
  23. package/dist/analytics/config.d.ts +14 -0
  24. package/dist/analytics/config.d.ts.map +1 -0
  25. package/dist/analytics/config.js +46 -0
  26. package/dist/analytics/config.js.map +1 -0
  27. package/dist/analytics/index.d.ts +108 -0
  28. package/dist/analytics/index.d.ts.map +1 -0
  29. package/dist/analytics/index.js +322 -0
  30. package/dist/analytics/index.js.map +1 -0
  31. package/dist/analytics/plugins/api-metrics.plugin.d.ts +23 -0
  32. package/dist/analytics/plugins/api-metrics.plugin.d.ts.map +1 -0
  33. package/dist/analytics/plugins/api-metrics.plugin.js +113 -0
  34. package/dist/analytics/plugins/api-metrics.plugin.js.map +1 -0
  35. package/dist/analytics/plugins/index.d.ts +15 -0
  36. package/dist/analytics/plugins/index.d.ts.map +1 -0
  37. package/dist/analytics/plugins/index.js +15 -0
  38. package/dist/analytics/plugins/index.js.map +1 -0
  39. package/dist/analytics/plugins/model-metrics.plugin.d.ts +36 -0
  40. package/dist/analytics/plugins/model-metrics.plugin.d.ts.map +1 -0
  41. package/dist/analytics/plugins/model-metrics.plugin.js +115 -0
  42. package/dist/analytics/plugins/model-metrics.plugin.js.map +1 -0
  43. package/dist/analytics/plugins/provider-metrics.plugin.d.ts +38 -0
  44. package/dist/analytics/plugins/provider-metrics.plugin.d.ts.map +1 -0
  45. package/dist/analytics/plugins/provider-metrics.plugin.js +138 -0
  46. package/dist/analytics/plugins/provider-metrics.plugin.js.map +1 -0
  47. package/dist/analytics/plugins/types.d.ts +63 -0
  48. package/dist/analytics/plugins/types.d.ts.map +1 -0
  49. package/dist/analytics/plugins/types.js +54 -0
  50. package/dist/analytics/plugins/types.js.map +1 -0
  51. package/dist/analytics/privacy.d.ts +10 -0
  52. package/dist/analytics/privacy.d.ts.map +1 -0
  53. package/dist/analytics/privacy.js +20 -0
  54. package/dist/analytics/privacy.js.map +1 -0
  55. package/dist/analytics/session.d.ts +56 -0
  56. package/dist/analytics/session.d.ts.map +1 -0
  57. package/dist/analytics/session.js +95 -0
  58. package/dist/analytics/session.js.map +1 -0
  59. package/dist/analytics/types.d.ts +104 -0
  60. package/dist/analytics/types.d.ts.map +1 -0
  61. package/dist/analytics/types.js +15 -0
  62. package/dist/analytics/types.js.map +1 -0
  63. package/dist/analytics/writer.d.ts +18 -0
  64. package/dist/analytics/writer.d.ts.map +1 -0
  65. package/dist/analytics/writer.js +44 -0
  66. package/dist/analytics/writer.js.map +1 -0
  67. package/dist/cli/commands/analytics.d.ts +3 -0
  68. package/dist/cli/commands/analytics.d.ts.map +1 -0
  69. package/dist/cli/commands/analytics.js +319 -0
  70. package/dist/cli/commands/analytics.js.map +1 -0
  71. package/dist/cli/commands/config.d.ts.map +1 -1
  72. package/dist/cli/commands/config.js +14 -0
  73. package/dist/cli/commands/config.js.map +1 -1
  74. package/dist/cli/commands/profile.d.ts.map +1 -1
  75. package/dist/cli/commands/profile.js +41 -0
  76. package/dist/cli/commands/profile.js.map +1 -1
  77. package/dist/cli/index.js +2 -0
  78. package/dist/cli/index.js.map +1 -1
  79. package/dist/env/types.d.ts +2 -0
  80. package/dist/env/types.d.ts.map +1 -1
  81. package/dist/env/types.js.map +1 -1
  82. package/dist/utils/analytics-reader.d.ts +117 -0
  83. package/dist/utils/analytics-reader.d.ts.map +1 -0
  84. package/dist/utils/analytics-reader.js +421 -0
  85. package/dist/utils/analytics-reader.js.map +1 -0
  86. package/dist/utils/codemie-integration-validator.d.ts.map +1 -1
  87. package/dist/utils/codemie-integration-validator.js +3 -16
  88. package/dist/utils/codemie-integration-validator.js.map +1 -1
  89. package/dist/utils/codemie-proxy.d.ts +80 -0
  90. package/dist/utils/codemie-proxy.d.ts.map +1 -0
  91. package/dist/utils/codemie-proxy.js +335 -0
  92. package/dist/utils/codemie-proxy.js.map +1 -0
  93. package/dist/utils/config-loader.d.ts +7 -0
  94. package/dist/utils/config-loader.d.ts.map +1 -1
  95. package/dist/utils/config-loader.js +18 -0
  96. package/dist/utils/config-loader.js.map +1 -1
  97. package/dist/utils/date-formatter.d.ts +88 -0
  98. package/dist/utils/date-formatter.d.ts.map +1 -0
  99. package/dist/utils/date-formatter.js +133 -0
  100. package/dist/utils/date-formatter.js.map +1 -0
  101. package/dist/utils/installation-id.d.ts +10 -0
  102. package/dist/utils/installation-id.d.ts.map +1 -0
  103. package/dist/utils/installation-id.js +30 -0
  104. package/dist/utils/installation-id.js.map +1 -0
  105. package/dist/utils/logger.d.ts +1 -15
  106. package/dist/utils/logger.d.ts.map +1 -1
  107. package/dist/utils/logger.js +5 -86
  108. package/dist/utils/logger.js.map +1 -1
  109. package/dist/utils/proxy/errors.d.ts +45 -0
  110. package/dist/utils/proxy/errors.d.ts.map +1 -0
  111. package/dist/utils/proxy/errors.js +103 -0
  112. package/dist/utils/proxy/errors.js.map +1 -0
  113. package/dist/utils/proxy/http-client.d.ts +46 -0
  114. package/dist/utils/proxy/http-client.d.ts.map +1 -0
  115. package/dist/utils/proxy/http-client.js +133 -0
  116. package/dist/utils/proxy/http-client.js.map +1 -0
  117. package/dist/utils/proxy/interceptors.d.ts +69 -0
  118. package/dist/utils/proxy/interceptors.d.ts.map +1 -0
  119. package/dist/utils/proxy/interceptors.js +319 -0
  120. package/dist/utils/proxy/interceptors.js.map +1 -0
  121. package/dist/utils/proxy/types.d.ts +45 -0
  122. package/dist/utils/proxy/types.d.ts.map +1 -0
  123. package/dist/utils/proxy/types.js +7 -0
  124. package/dist/utils/proxy/types.js.map +1 -0
  125. package/package.json +38 -5
  126. package/dist/utils/sso-gateway.d.ts +0 -75
  127. package/dist/utils/sso-gateway.d.ts.map +0 -1
  128. package/dist/utils/sso-gateway.js +0 -453
  129. 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"}