@codemieai/code 0.0.11 → 0.0.13

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 (205) hide show
  1. package/README.md +70 -861
  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 +59 -23
  14. package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
  15. package/dist/agents/core/types.d.ts +18 -0
  16. package/dist/agents/core/types.d.ts.map +1 -1
  17. package/dist/agents/plugins/claude.plugin.d.ts +0 -3
  18. package/dist/agents/plugins/claude.plugin.d.ts.map +1 -1
  19. package/dist/agents/plugins/claude.plugin.js +12 -1
  20. package/dist/agents/plugins/claude.plugin.js.map +1 -1
  21. package/dist/agents/plugins/codemie-code.plugin.js +1 -1
  22. package/dist/agents/plugins/codemie-code.plugin.js.map +1 -1
  23. package/dist/agents/plugins/codex.plugin.d.ts.map +1 -1
  24. package/dist/agents/plugins/codex.plugin.js +40 -4
  25. package/dist/agents/plugins/codex.plugin.js.map +1 -1
  26. package/dist/agents/plugins/gemini.plugin.d.ts.map +1 -1
  27. package/dist/agents/plugins/gemini.plugin.js +51 -6
  28. package/dist/agents/plugins/gemini.plugin.js.map +1 -1
  29. package/dist/agents/registry.d.ts +15 -2
  30. package/dist/agents/registry.d.ts.map +1 -1
  31. package/dist/agents/registry.js +30 -6
  32. package/dist/agents/registry.js.map +1 -1
  33. package/dist/analytics/aggregation/adapters/claude.adapter.d.ts +37 -0
  34. package/dist/analytics/aggregation/adapters/claude.adapter.d.ts.map +1 -0
  35. package/dist/analytics/aggregation/adapters/claude.adapter.js +471 -0
  36. package/dist/analytics/aggregation/adapters/claude.adapter.js.map +1 -0
  37. package/dist/analytics/aggregation/adapters/codex.adapter.d.ts +25 -0
  38. package/dist/analytics/aggregation/adapters/codex.adapter.d.ts.map +1 -0
  39. package/dist/analytics/aggregation/adapters/codex.adapter.js +376 -0
  40. package/dist/analytics/aggregation/adapters/codex.adapter.js.map +1 -0
  41. package/dist/analytics/aggregation/adapters/gemini.adapter.d.ts +28 -0
  42. package/dist/analytics/aggregation/adapters/gemini.adapter.d.ts.map +1 -0
  43. package/dist/analytics/aggregation/adapters/gemini.adapter.js +320 -0
  44. package/dist/analytics/aggregation/adapters/gemini.adapter.js.map +1 -0
  45. package/dist/analytics/aggregation/adapters/index.d.ts +7 -0
  46. package/dist/analytics/aggregation/adapters/index.d.ts.map +1 -0
  47. package/dist/analytics/aggregation/adapters/index.js +7 -0
  48. package/dist/analytics/aggregation/adapters/index.js.map +1 -0
  49. package/dist/analytics/aggregation/aggregator.d.ts +49 -0
  50. package/dist/analytics/aggregation/aggregator.d.ts.map +1 -0
  51. package/dist/analytics/aggregation/aggregator.js +239 -0
  52. package/dist/analytics/aggregation/aggregator.js.map +1 -0
  53. package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.d.ts +63 -0
  54. package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.d.ts.map +1 -0
  55. package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.js +58 -0
  56. package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.js.map +1 -0
  57. package/dist/analytics/aggregation/core/adapter.interface.d.ts +65 -0
  58. package/dist/analytics/aggregation/core/adapter.interface.d.ts.map +1 -0
  59. package/dist/analytics/aggregation/core/adapter.interface.js +9 -0
  60. package/dist/analytics/aggregation/core/adapter.interface.js.map +1 -0
  61. package/dist/analytics/aggregation/core/aggregation-utils.d.ts +66 -0
  62. package/dist/analytics/aggregation/core/aggregation-utils.d.ts.map +1 -0
  63. package/dist/analytics/aggregation/core/aggregation-utils.js +83 -0
  64. package/dist/analytics/aggregation/core/aggregation-utils.js.map +1 -0
  65. package/dist/analytics/aggregation/core/discovery.d.ts +40 -0
  66. package/dist/analytics/aggregation/core/discovery.d.ts.map +1 -0
  67. package/dist/analytics/aggregation/core/discovery.js +132 -0
  68. package/dist/analytics/aggregation/core/discovery.js.map +1 -0
  69. package/dist/analytics/aggregation/core/file-utils.d.ts +23 -0
  70. package/dist/analytics/aggregation/core/file-utils.d.ts.map +1 -0
  71. package/dist/analytics/aggregation/core/file-utils.js +208 -0
  72. package/dist/analytics/aggregation/core/file-utils.js.map +1 -0
  73. package/dist/analytics/aggregation/core/index.d.ts +11 -0
  74. package/dist/analytics/aggregation/core/index.d.ts.map +1 -0
  75. package/dist/analytics/aggregation/core/index.js +11 -0
  76. package/dist/analytics/aggregation/core/index.js.map +1 -0
  77. package/dist/analytics/aggregation/core/project-mapping.d.ts +50 -0
  78. package/dist/analytics/aggregation/core/project-mapping.d.ts.map +1 -0
  79. package/dist/analytics/aggregation/core/project-mapping.js +102 -0
  80. package/dist/analytics/aggregation/core/project-mapping.js.map +1 -0
  81. package/dist/analytics/aggregation/core/streaming.d.ts +26 -0
  82. package/dist/analytics/aggregation/core/streaming.d.ts.map +1 -0
  83. package/dist/analytics/aggregation/core/streaming.js +58 -0
  84. package/dist/analytics/aggregation/core/streaming.js.map +1 -0
  85. package/dist/analytics/aggregation/index.d.ts +8 -0
  86. package/dist/analytics/aggregation/index.d.ts.map +1 -0
  87. package/dist/analytics/aggregation/index.js +8 -0
  88. package/dist/analytics/aggregation/index.js.map +1 -0
  89. package/dist/analytics/aggregation/types.d.ts +258 -0
  90. package/dist/analytics/aggregation/types.d.ts.map +1 -0
  91. package/dist/analytics/aggregation/types.js +8 -0
  92. package/dist/analytics/aggregation/types.js.map +1 -0
  93. package/dist/analytics/collector.d.ts +46 -0
  94. package/dist/analytics/collector.d.ts.map +1 -0
  95. package/dist/analytics/collector.js +83 -0
  96. package/dist/analytics/collector.js.map +1 -0
  97. package/dist/analytics/config.d.ts +15 -0
  98. package/dist/analytics/config.d.ts.map +1 -0
  99. package/dist/analytics/config.js +65 -0
  100. package/dist/analytics/config.js.map +1 -0
  101. package/dist/analytics/index.d.ts +99 -0
  102. package/dist/analytics/index.d.ts.map +1 -0
  103. package/dist/analytics/index.js +288 -0
  104. package/dist/analytics/index.js.map +1 -0
  105. package/dist/analytics/plugins/api-metrics.plugin.d.ts +26 -0
  106. package/dist/analytics/plugins/api-metrics.plugin.d.ts.map +1 -0
  107. package/dist/analytics/plugins/api-metrics.plugin.js +97 -0
  108. package/dist/analytics/plugins/api-metrics.plugin.js.map +1 -0
  109. package/dist/analytics/plugins/index.d.ts +15 -0
  110. package/dist/analytics/plugins/index.d.ts.map +1 -0
  111. package/dist/analytics/plugins/index.js +15 -0
  112. package/dist/analytics/plugins/index.js.map +1 -0
  113. package/dist/analytics/plugins/model-metrics.plugin.d.ts +39 -0
  114. package/dist/analytics/plugins/model-metrics.plugin.d.ts.map +1 -0
  115. package/dist/analytics/plugins/model-metrics.plugin.js +105 -0
  116. package/dist/analytics/plugins/model-metrics.plugin.js.map +1 -0
  117. package/dist/analytics/plugins/provider-metrics.plugin.d.ts +41 -0
  118. package/dist/analytics/plugins/provider-metrics.plugin.d.ts.map +1 -0
  119. package/dist/analytics/plugins/provider-metrics.plugin.js +123 -0
  120. package/dist/analytics/plugins/provider-metrics.plugin.js.map +1 -0
  121. package/dist/analytics/plugins/types.d.ts +61 -0
  122. package/dist/analytics/plugins/types.d.ts.map +1 -0
  123. package/dist/analytics/plugins/types.js +54 -0
  124. package/dist/analytics/plugins/types.js.map +1 -0
  125. package/dist/analytics/privacy.d.ts +10 -0
  126. package/dist/analytics/privacy.d.ts.map +1 -0
  127. package/dist/analytics/privacy.js +20 -0
  128. package/dist/analytics/privacy.js.map +1 -0
  129. package/dist/analytics/session.d.ts +56 -0
  130. package/dist/analytics/session.d.ts.map +1 -0
  131. package/dist/analytics/session.js +95 -0
  132. package/dist/analytics/session.js.map +1 -0
  133. package/dist/analytics/types.d.ts +104 -0
  134. package/dist/analytics/types.d.ts.map +1 -0
  135. package/dist/analytics/types.js +15 -0
  136. package/dist/analytics/types.js.map +1 -0
  137. package/dist/analytics/writer.d.ts +18 -0
  138. package/dist/analytics/writer.d.ts.map +1 -0
  139. package/dist/analytics/writer.js +44 -0
  140. package/dist/analytics/writer.js.map +1 -0
  141. package/dist/cli/commands/analytics.d.ts +3 -0
  142. package/dist/cli/commands/analytics.d.ts.map +1 -0
  143. package/dist/cli/commands/analytics.js +579 -0
  144. package/dist/cli/commands/analytics.js.map +1 -0
  145. package/dist/cli/commands/config.d.ts.map +1 -1
  146. package/dist/cli/commands/config.js +14 -0
  147. package/dist/cli/commands/config.js.map +1 -1
  148. package/dist/cli/commands/profile.d.ts.map +1 -1
  149. package/dist/cli/commands/profile.js +41 -0
  150. package/dist/cli/commands/profile.js.map +1 -1
  151. package/dist/cli/commands/setup.js +70 -1
  152. package/dist/cli/commands/setup.js.map +1 -1
  153. package/dist/cli/index.js +2 -0
  154. package/dist/cli/index.js.map +1 -1
  155. package/dist/env/types.d.ts +2 -0
  156. package/dist/env/types.d.ts.map +1 -1
  157. package/dist/env/types.js.map +1 -1
  158. package/dist/utils/analytics-reader.d.ts +117 -0
  159. package/dist/utils/analytics-reader.d.ts.map +1 -0
  160. package/dist/utils/analytics-reader.js +421 -0
  161. package/dist/utils/analytics-reader.js.map +1 -0
  162. package/dist/utils/codemie-integration-validator.d.ts.map +1 -1
  163. package/dist/utils/codemie-integration-validator.js +3 -16
  164. package/dist/utils/codemie-integration-validator.js.map +1 -1
  165. package/dist/utils/codemie-proxy.d.ts +80 -0
  166. package/dist/utils/codemie-proxy.d.ts.map +1 -0
  167. package/dist/utils/codemie-proxy.js +348 -0
  168. package/dist/utils/codemie-proxy.js.map +1 -0
  169. package/dist/utils/config-loader.d.ts +7 -0
  170. package/dist/utils/config-loader.d.ts.map +1 -1
  171. package/dist/utils/config-loader.js +18 -0
  172. package/dist/utils/config-loader.js.map +1 -1
  173. package/dist/utils/date-formatter.d.ts +88 -0
  174. package/dist/utils/date-formatter.d.ts.map +1 -0
  175. package/dist/utils/date-formatter.js +133 -0
  176. package/dist/utils/date-formatter.js.map +1 -0
  177. package/dist/utils/installation-id.d.ts +10 -0
  178. package/dist/utils/installation-id.d.ts.map +1 -0
  179. package/dist/utils/installation-id.js +30 -0
  180. package/dist/utils/installation-id.js.map +1 -0
  181. package/dist/utils/logger.d.ts +1 -15
  182. package/dist/utils/logger.d.ts.map +1 -1
  183. package/dist/utils/logger.js +5 -86
  184. package/dist/utils/logger.js.map +1 -1
  185. package/dist/utils/proxy/errors.d.ts +45 -0
  186. package/dist/utils/proxy/errors.d.ts.map +1 -0
  187. package/dist/utils/proxy/errors.js +103 -0
  188. package/dist/utils/proxy/errors.js.map +1 -0
  189. package/dist/utils/proxy/http-client.d.ts +46 -0
  190. package/dist/utils/proxy/http-client.d.ts.map +1 -0
  191. package/dist/utils/proxy/http-client.js +139 -0
  192. package/dist/utils/proxy/http-client.js.map +1 -0
  193. package/dist/utils/proxy/interceptors.d.ts +69 -0
  194. package/dist/utils/proxy/interceptors.d.ts.map +1 -0
  195. package/dist/utils/proxy/interceptors.js +308 -0
  196. package/dist/utils/proxy/interceptors.js.map +1 -0
  197. package/dist/utils/proxy/types.d.ts +45 -0
  198. package/dist/utils/proxy/types.d.ts.map +1 -0
  199. package/dist/utils/proxy/types.js +7 -0
  200. package/dist/utils/proxy/types.js.map +1 -0
  201. package/package.json +43 -6
  202. package/dist/utils/sso-gateway.d.ts +0 -75
  203. package/dist/utils/sso-gateway.d.ts.map +0 -1
  204. package/dist/utils/sso-gateway.js +0 -453
  205. package/dist/utils/sso-gateway.js.map +0 -1
@@ -0,0 +1,288 @@
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
+ constructor(config = {}) {
23
+ this.config = loadAnalyticsConfig(config);
24
+ this.session = new SessionManager();
25
+ // Only initialize if enabled
26
+ if (this.config.enabled) {
27
+ this.initialize();
28
+ }
29
+ }
30
+ /**
31
+ * Register an analytics plugin (Open/Closed principle)
32
+ * Allows adding custom metrics without modifying core
33
+ */
34
+ registerPlugin(plugin) {
35
+ this.plugins.push(plugin);
36
+ // Initialize plugin if it has init method
37
+ if (plugin.initialize) {
38
+ plugin.initialize(this).catch(error => {
39
+ console.error(`Plugin "${plugin.name}" initialization failed:`, error);
40
+ });
41
+ }
42
+ }
43
+ /**
44
+ * Get all registered plugins
45
+ */
46
+ getPlugins() {
47
+ return [...this.plugins];
48
+ }
49
+ /**
50
+ * Get current metrics from all plugins
51
+ * Useful for displaying aggregated stats
52
+ */
53
+ getPluginMetrics() {
54
+ const allMetrics = {};
55
+ for (const plugin of this.plugins) {
56
+ if (plugin.getMetrics) {
57
+ try {
58
+ allMetrics[plugin.name] = plugin.getMetrics();
59
+ }
60
+ catch (error) {
61
+ console.error(`Error getting metrics from plugin "${plugin.name}":`, error);
62
+ allMetrics[plugin.name] = { error: 'Failed to get metrics' };
63
+ }
64
+ }
65
+ }
66
+ return allMetrics;
67
+ }
68
+ /**
69
+ * Get metrics from a specific plugin by name
70
+ */
71
+ getPluginMetricsByName(pluginName) {
72
+ const plugin = this.plugins.find(p => p.name === pluginName);
73
+ if (!plugin || !plugin.getMetrics) {
74
+ return null;
75
+ }
76
+ try {
77
+ return plugin.getMetrics();
78
+ }
79
+ catch (error) {
80
+ console.error(`Error getting metrics from plugin "${pluginName}":`, error);
81
+ return null;
82
+ }
83
+ }
84
+ /**
85
+ * Initialize analytics components
86
+ */
87
+ initialize() {
88
+ this.collector = new EventCollector({
89
+ maxBufferSize: this.config.maxBufferSize,
90
+ flushInterval: this.config.flushInterval,
91
+ });
92
+ // Setup writer for local target
93
+ if (this.config.target === 'local' || this.config.target === 'both') {
94
+ this.writer = new AnalyticsWriter(this.config.localPath);
95
+ }
96
+ // Register flush callback
97
+ this.collector.onFlush(async (events) => {
98
+ if (this.writer) {
99
+ await this.writer.write(events);
100
+ }
101
+ });
102
+ }
103
+ /**
104
+ * Track an analytics event
105
+ */
106
+ async track(eventType, attributes = {}, metrics) {
107
+ if (!this.config.enabled || !this.collector || !this.session.isActive) {
108
+ return;
109
+ }
110
+ try {
111
+ // Lazy load installation ID
112
+ if (!this.installationId) {
113
+ this.installationId = await getInstallationId();
114
+ }
115
+ let event = {
116
+ timestamp: new Date().toISOString(),
117
+ eventType,
118
+ sessionId: this.session.id,
119
+ installationId: this.installationId,
120
+ agent: this.session.agent,
121
+ agentVersion: this.session.agentVersion,
122
+ cliVersion: this.session.cliVersion,
123
+ profile: this.session.profile,
124
+ provider: this.session.provider,
125
+ model: this.session.model,
126
+ attributes,
127
+ metrics: metrics || {},
128
+ };
129
+ // Process through plugins
130
+ for (const plugin of this.plugins) {
131
+ try {
132
+ // Allow plugins to transform event (but not add aggregate metrics)
133
+ if (plugin.processEvent) {
134
+ const processed = await plugin.processEvent(event);
135
+ if (!processed) {
136
+ // Plugin filtered out event
137
+ return;
138
+ }
139
+ event = processed;
140
+ }
141
+ }
142
+ catch (pluginError) {
143
+ // Plugin errors should not break analytics
144
+ console.error(`Plugin "${plugin.name}" error:`, pluginError);
145
+ }
146
+ }
147
+ this.collector.add(event);
148
+ }
149
+ catch (error) {
150
+ // Silently fail - don't block agent execution
151
+ console.error('Analytics tracking error:', error);
152
+ }
153
+ }
154
+ /**
155
+ * Track API response
156
+ */
157
+ async trackAPIResponse(data) {
158
+ const attributes = {};
159
+ if (data.statusCode) {
160
+ attributes.statusCode = data.statusCode;
161
+ }
162
+ const metrics = {};
163
+ if (data.latency)
164
+ metrics.latencyMs = data.latency;
165
+ await this.track('api_response', attributes, metrics);
166
+ }
167
+ /**
168
+ * Start analytics session
169
+ */
170
+ startSession(config) {
171
+ this.session.start(config);
172
+ // Reset all plugin metrics for new session
173
+ for (const plugin of this.plugins) {
174
+ if (plugin.reset) {
175
+ try {
176
+ plugin.reset();
177
+ }
178
+ catch (error) {
179
+ console.error(`Error resetting plugin "${plugin.name}":`, error);
180
+ }
181
+ }
182
+ }
183
+ void this.track('session_start', {
184
+ workingDir: config.workingDir,
185
+ interactive: config.interactive,
186
+ });
187
+ }
188
+ /**
189
+ * End analytics session
190
+ */
191
+ async endSession(exitReason, metrics) {
192
+ if (!this.session.isActive) {
193
+ return;
194
+ }
195
+ // Only track session duration in milliseconds
196
+ const sessionMetrics = {
197
+ durationMs: this.session.durationMs,
198
+ ...metrics,
199
+ };
200
+ const attributes = {
201
+ exitReason,
202
+ };
203
+ await this.track('session_end', attributes, sessionMetrics);
204
+ // Force flush on session end
205
+ await this.flush();
206
+ this.session.end();
207
+ }
208
+ /**
209
+ * Flush buffered events
210
+ */
211
+ async flush() {
212
+ if (this.collector) {
213
+ await this.collector.flush();
214
+ }
215
+ }
216
+ /**
217
+ * Cleanup and destroy analytics
218
+ */
219
+ async destroy() {
220
+ if (this.collector) {
221
+ await this.flush();
222
+ this.collector.destroy();
223
+ }
224
+ }
225
+ /**
226
+ * Check if analytics is enabled
227
+ */
228
+ get isEnabled() {
229
+ return this.config.enabled;
230
+ }
231
+ }
232
+ /**
233
+ * Singleton analytics instance
234
+ */
235
+ let analyticsInstance = null;
236
+ /**
237
+ * Initialize global analytics instance
238
+ * Automatically registers default plugins for API tracking
239
+ */
240
+ export function initAnalytics(config = {}, options = { registerDefaultPlugins: true }) {
241
+ analyticsInstance = new Analytics(config);
242
+ // Register default plugins if enabled
243
+ if (options.registerDefaultPlugins && analyticsInstance.isEnabled) {
244
+ registerDefaultPlugins(analyticsInstance);
245
+ }
246
+ }
247
+ /**
248
+ * Register default analytics plugins
249
+ * Tracks API request/response patterns, success rates, and latency
250
+ */
251
+ export function registerDefaultPlugins(analytics) {
252
+ try {
253
+ // Import plugins dynamically to avoid unnecessary loading
254
+ import('./plugins/index.js').then(({ APIMetricsPlugin, ModelMetricsPlugin, ProviderMetricsPlugin }) => {
255
+ analytics.registerPlugin(new APIMetricsPlugin());
256
+ analytics.registerPlugin(new ModelMetricsPlugin());
257
+ analytics.registerPlugin(new ProviderMetricsPlugin());
258
+ }).catch(error => {
259
+ // Plugins are optional - don't break if they fail to load
260
+ console.warn('Failed to load default analytics plugins:', error);
261
+ });
262
+ }
263
+ catch (error) {
264
+ console.warn('Failed to register default analytics plugins:', error);
265
+ }
266
+ }
267
+ /**
268
+ * Get global analytics instance
269
+ * Auto-initializes if not already initialized
270
+ */
271
+ export function getAnalytics() {
272
+ if (!analyticsInstance) {
273
+ // Auto-initialize with defaults
274
+ initAnalytics();
275
+ }
276
+ return analyticsInstance; // Safe: always initialized above
277
+ }
278
+ /**
279
+ * Destroy global analytics instance
280
+ */
281
+ export async function destroyAnalytics() {
282
+ if (analyticsInstance) {
283
+ await analyticsInstance.destroy();
284
+ analyticsInstance = null;
285
+ }
286
+ }
287
+ export { DEFAULT_ANALYTICS_CONFIG } from './types.js';
288
+ //# 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,26 @@
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
+ /**
14
+ * Process events to track metrics (no enrichment to individual events)
15
+ */
16
+ processEvent(event: AnalyticsEvent): Promise<AnalyticsEvent | null>;
17
+ /**
18
+ * Get current aggregated metrics
19
+ */
20
+ getMetrics(): Record<string, unknown>;
21
+ /**
22
+ * Reset metrics (useful for new sessions)
23
+ */
24
+ reset(): void;
25
+ }
26
+ //# 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;IAEF;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAyCzE;;OAEG;IACH,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAsBrC;;OAEG;IACH,KAAK,IAAI,IAAI;CAYd"}
@@ -0,0 +1,97 @@
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
+ /**
22
+ * Process events to track metrics (no enrichment to individual events)
23
+ */
24
+ async processEvent(event) {
25
+ // Track API request metrics
26
+ if (event.eventType === 'api_request') {
27
+ this.sessionMetrics.totalRequests++;
28
+ }
29
+ // Track API response metrics
30
+ if (event.eventType === 'api_response') {
31
+ const statusCode = event.attributes.statusCode;
32
+ const latency = event.metrics?.latencyMs;
33
+ // Count successful vs failed
34
+ if (statusCode >= 200 && statusCode < 400) {
35
+ this.sessionMetrics.successfulRequests++;
36
+ }
37
+ else {
38
+ this.sessionMetrics.failedRequests++;
39
+ }
40
+ // Track status codes
41
+ this.sessionMetrics.statusCodes[statusCode] =
42
+ (this.sessionMetrics.statusCodes[statusCode] || 0) + 1;
43
+ // Track latency stats
44
+ if (latency) {
45
+ this.sessionMetrics.totalLatency += latency;
46
+ this.sessionMetrics.minLatency = Math.min(this.sessionMetrics.minLatency, latency);
47
+ this.sessionMetrics.maxLatency = Math.max(this.sessionMetrics.maxLatency, latency);
48
+ }
49
+ }
50
+ // Track proxy errors
51
+ if (event.eventType === 'proxy_error') {
52
+ const errorType = event.attributes.errorType || 'unknown';
53
+ this.sessionMetrics.errorTypes[errorType] =
54
+ (this.sessionMetrics.errorTypes[errorType] || 0) + 1;
55
+ }
56
+ // Return event unchanged (no enrichment)
57
+ return event;
58
+ }
59
+ /**
60
+ * Get current aggregated metrics
61
+ */
62
+ getMetrics() {
63
+ const successRate = this.sessionMetrics.totalRequests > 0
64
+ ? this.sessionMetrics.successfulRequests / this.sessionMetrics.totalRequests
65
+ : 0;
66
+ const averageLatency = this.sessionMetrics.successfulRequests > 0
67
+ ? this.sessionMetrics.totalLatency / this.sessionMetrics.successfulRequests
68
+ : 0;
69
+ return {
70
+ totalRequests: this.sessionMetrics.totalRequests,
71
+ successfulRequests: this.sessionMetrics.successfulRequests,
72
+ failedRequests: this.sessionMetrics.failedRequests,
73
+ successRate: Math.round(successRate * 100) / 100,
74
+ averageLatencyMs: Math.round(averageLatency),
75
+ minLatencyMs: this.sessionMetrics.minLatency === Infinity ? 0 : this.sessionMetrics.minLatency,
76
+ maxLatencyMs: this.sessionMetrics.maxLatency,
77
+ statusCodes: { ...this.sessionMetrics.statusCodes },
78
+ errorTypes: { ...this.sessionMetrics.errorTypes }
79
+ };
80
+ }
81
+ /**
82
+ * Reset metrics (useful for new sessions)
83
+ */
84
+ reset() {
85
+ this.sessionMetrics = {
86
+ totalRequests: 0,
87
+ successfulRequests: 0,
88
+ failedRequests: 0,
89
+ totalLatency: 0,
90
+ minLatency: Infinity,
91
+ maxLatency: 0,
92
+ statusCodes: {},
93
+ errorTypes: {}
94
+ };
95
+ }
96
+ }
97
+ //# 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,39 @@
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
+ /**
21
+ * Process events to track metrics (no enrichment to individual events)
22
+ */
23
+ processEvent(event: AnalyticsEvent): Promise<AnalyticsEvent | null>;
24
+ /**
25
+ * Get current aggregated metrics for all models
26
+ */
27
+ getMetrics(): Record<string, unknown>;
28
+ /**
29
+ * Reset metrics (useful for new sessions)
30
+ */
31
+ reset(): void;
32
+ /**
33
+ * Get all model metrics (useful for session end reporting)
34
+ * @deprecated Use getMetrics() instead
35
+ */
36
+ getAllModelMetrics(): Record<string, ModelStats>;
37
+ }
38
+ export {};
39
+ //# 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;IAErD;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAuDzE;;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"}
@@ -0,0 +1,105 @@
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
+ export class ModelMetricsPlugin {
8
+ name = 'model-metrics';
9
+ version = '1.0.0';
10
+ // Track metrics per model
11
+ modelMetrics = new Map();
12
+ /**
13
+ * Process events to track metrics (no enrichment to individual events)
14
+ */
15
+ async processEvent(event) {
16
+ // Extract model from event
17
+ const model = event.model || event.attributes.model;
18
+ if (!model) {
19
+ return event;
20
+ }
21
+ // Initialize model stats if needed
22
+ if (!this.modelMetrics.has(model)) {
23
+ this.modelMetrics.set(model, {
24
+ requestCount: 0,
25
+ successCount: 0,
26
+ failureCount: 0,
27
+ totalLatency: 0,
28
+ totalTokens: 0
29
+ });
30
+ }
31
+ const stats = this.modelMetrics.get(model);
32
+ // Track API requests
33
+ if (event.eventType === 'api_request') {
34
+ stats.requestCount++;
35
+ }
36
+ // Track API responses
37
+ if (event.eventType === 'api_response') {
38
+ const statusCode = event.attributes.statusCode;
39
+ const latency = event.metrics?.latencyMs;
40
+ if (statusCode >= 200 && statusCode < 400) {
41
+ stats.successCount++;
42
+ }
43
+ else {
44
+ stats.failureCount++;
45
+ }
46
+ if (latency) {
47
+ stats.totalLatency += latency;
48
+ }
49
+ // Track token usage if available
50
+ const responseBody = event.attributes.responseBody;
51
+ if (responseBody?.usage) {
52
+ const totalTokens = responseBody.usage.total_tokens ||
53
+ (responseBody.usage.input_tokens + responseBody.usage.output_tokens) ||
54
+ 0;
55
+ stats.totalTokens += totalTokens;
56
+ }
57
+ }
58
+ // Return event unchanged (no enrichment)
59
+ return event;
60
+ }
61
+ /**
62
+ * Get current aggregated metrics for all models
63
+ */
64
+ getMetrics() {
65
+ const modelMetrics = {};
66
+ for (const [model, stats] of this.modelMetrics.entries()) {
67
+ const successRate = stats.requestCount > 0
68
+ ? stats.successCount / stats.requestCount
69
+ : 0;
70
+ const avgLatency = stats.successCount > 0
71
+ ? stats.totalLatency / stats.successCount
72
+ : 0;
73
+ modelMetrics[model] = {
74
+ requestCount: stats.requestCount,
75
+ successCount: stats.successCount,
76
+ failureCount: stats.failureCount,
77
+ successRate: Math.round(successRate * 100) / 100,
78
+ averageLatencyMs: Math.round(avgLatency),
79
+ totalTokens: stats.totalTokens
80
+ };
81
+ }
82
+ return {
83
+ models: modelMetrics,
84
+ modelCount: this.modelMetrics.size
85
+ };
86
+ }
87
+ /**
88
+ * Reset metrics (useful for new sessions)
89
+ */
90
+ reset() {
91
+ this.modelMetrics.clear();
92
+ }
93
+ /**
94
+ * Get all model metrics (useful for session end reporting)
95
+ * @deprecated Use getMetrics() instead
96
+ */
97
+ getAllModelMetrics() {
98
+ const result = {};
99
+ for (const [model, stats] of this.modelMetrics.entries()) {
100
+ result[model] = { ...stats };
101
+ }
102
+ return result;
103
+ }
104
+ }
105
+ //# sourceMappingURL=model-metrics.plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-metrics.plugin.js","sourceRoot":"","sources":["../../../src/analytics/plugins/model-metrics.plugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,MAAM,OAAO,kBAAkB;IAC7B,IAAI,GAAG,eAAe,CAAC;IACvB,OAAO,GAAG,OAAO,CAAC;IAElB,0BAA0B;IAClB,YAAY,GAAG,IAAI,GAAG,EAAsB,CAAC;IAErD;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,KAAqB;QACtC,2BAA2B;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,KAAe,CAAC;QAE9D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACf,CAAC;QAED,mCAAmC;QACnC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE;gBAC3B,YAAY,EAAE,CAAC;gBACf,YAAY,EAAE,CAAC;gBACf,YAAY,EAAE,CAAC;gBACf,YAAY,EAAE,CAAC;gBACf,WAAW,EAAE,CAAC;aACf,CAAC,CAAC;QACL,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;QAE5C,qBAAqB;QACrB,IAAI,KAAK,CAAC,SAAS,KAAK,aAAa,EAAE,CAAC;YACtC,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,CAAC;QAED,sBAAsB;QACtB,IAAI,KAAK,CAAC,SAAS,KAAK,cAAc,EAAE,CAAC;YACvC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,UAAoB,CAAC;YACzD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,SAAmB,CAAC;YAEnD,IAAI,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;gBAC1C,KAAK,CAAC,YAAY,EAAE,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,YAAY,EAAE,CAAC;YACvB,CAAC;YAED,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,CAAC,YAAY,IAAI,OAAO,CAAC;YAChC,CAAC;YAED,iCAAiC;YACjC,MAAM,YAAY,GAAG,KAAK,CAAC,UAAU,CAAC,YAAmB,CAAC;YAC1D,IAAI,YAAY,EAAE,KAAK,EAAE,CAAC;gBACxB,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,YAAY;oBAChC,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC;oBACpE,CAAC,CAAC;gBACrB,KAAK,CAAC,WAAW,IAAI,WAAW,CAAC;YACnC,CAAC;QACH,CAAC;QAED,yCAAyC;QACzC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,UAAU;QACR,MAAM,YAAY,GAAwB,EAAE,CAAC;QAE7C,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;YACzD,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,GAAG,CAAC;gBACxC,CAAC,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY;gBACzC,CAAC,CAAC,CAAC,CAAC;YAEN,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,GAAG,CAAC;gBACvC,CAAC,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY;gBACzC,CAAC,CAAC,CAAC,CAAC;YAEN,YAAY,CAAC,KAAK,CAAC,GAAG;gBACpB,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,GAAG;gBAChD,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;gBACxC,WAAW,EAAE,KAAK,CAAC,WAAW;aAC/B,CAAC;QACJ,CAAC;QAED,OAAO;YACL,MAAM,EAAE,YAAY;YACpB,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI;SACnC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACH,kBAAkB;QAChB,MAAM,MAAM,GAA+B,EAAE,CAAC;QAC9C,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;YACzD,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;QAC/B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Provider Metrics Plugin
3
+ *
4
+ * Tracks metrics per provider (ai-run-sso, litellm, openai, azure, bedrock).
5
+ * Helps compare provider reliability and performance.
6
+ */
7
+ import { AnalyticsPlugin } from './types.js';
8
+ import { AnalyticsEvent } from '../types.js';
9
+ interface ProviderStats {
10
+ requestCount: number;
11
+ successCount: number;
12
+ failureCount: number;
13
+ totalLatency: number;
14
+ timeouts: number;
15
+ networkErrors: number;
16
+ authErrors: number;
17
+ }
18
+ export declare class ProviderMetricsPlugin implements AnalyticsPlugin {
19
+ name: string;
20
+ version: string;
21
+ private providerMetrics;
22
+ /**
23
+ * Process events to track metrics (no enrichment to individual events)
24
+ */
25
+ processEvent(event: AnalyticsEvent): Promise<AnalyticsEvent | null>;
26
+ /**
27
+ * Get current aggregated metrics for all providers
28
+ */
29
+ getMetrics(): Record<string, unknown>;
30
+ /**
31
+ * Reset metrics (useful for new sessions)
32
+ */
33
+ reset(): void;
34
+ /**
35
+ * Get all provider metrics (useful for session end reporting)
36
+ * @deprecated Use getMetrics() instead
37
+ */
38
+ getAllProviderMetrics(): Record<string, ProviderStats>;
39
+ }
40
+ export {};
41
+ //# sourceMappingURL=provider-metrics.plugin.d.ts.map