@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.
- package/README.md +70 -861
- 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 +59 -23
- package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
- package/dist/agents/core/types.d.ts +18 -0
- package/dist/agents/core/types.d.ts.map +1 -1
- package/dist/agents/plugins/claude.plugin.d.ts +0 -3
- package/dist/agents/plugins/claude.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/claude.plugin.js +12 -1
- package/dist/agents/plugins/claude.plugin.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/codex.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/codex.plugin.js +40 -4
- package/dist/agents/plugins/codex.plugin.js.map +1 -1
- package/dist/agents/plugins/gemini.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/gemini.plugin.js +51 -6
- package/dist/agents/plugins/gemini.plugin.js.map +1 -1
- package/dist/agents/registry.d.ts +15 -2
- package/dist/agents/registry.d.ts.map +1 -1
- package/dist/agents/registry.js +30 -6
- package/dist/agents/registry.js.map +1 -1
- package/dist/analytics/aggregation/adapters/claude.adapter.d.ts +37 -0
- package/dist/analytics/aggregation/adapters/claude.adapter.d.ts.map +1 -0
- package/dist/analytics/aggregation/adapters/claude.adapter.js +471 -0
- package/dist/analytics/aggregation/adapters/claude.adapter.js.map +1 -0
- package/dist/analytics/aggregation/adapters/codex.adapter.d.ts +25 -0
- package/dist/analytics/aggregation/adapters/codex.adapter.d.ts.map +1 -0
- package/dist/analytics/aggregation/adapters/codex.adapter.js +376 -0
- package/dist/analytics/aggregation/adapters/codex.adapter.js.map +1 -0
- package/dist/analytics/aggregation/adapters/gemini.adapter.d.ts +28 -0
- package/dist/analytics/aggregation/adapters/gemini.adapter.d.ts.map +1 -0
- package/dist/analytics/aggregation/adapters/gemini.adapter.js +320 -0
- package/dist/analytics/aggregation/adapters/gemini.adapter.js.map +1 -0
- package/dist/analytics/aggregation/adapters/index.d.ts +7 -0
- package/dist/analytics/aggregation/adapters/index.d.ts.map +1 -0
- package/dist/analytics/aggregation/adapters/index.js +7 -0
- package/dist/analytics/aggregation/adapters/index.js.map +1 -0
- package/dist/analytics/aggregation/aggregator.d.ts +49 -0
- package/dist/analytics/aggregation/aggregator.d.ts.map +1 -0
- package/dist/analytics/aggregation/aggregator.js +239 -0
- package/dist/analytics/aggregation/aggregator.js.map +1 -0
- package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.d.ts +63 -0
- package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.d.ts.map +1 -0
- package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.js +58 -0
- package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.js.map +1 -0
- package/dist/analytics/aggregation/core/adapter.interface.d.ts +65 -0
- package/dist/analytics/aggregation/core/adapter.interface.d.ts.map +1 -0
- package/dist/analytics/aggregation/core/adapter.interface.js +9 -0
- package/dist/analytics/aggregation/core/adapter.interface.js.map +1 -0
- package/dist/analytics/aggregation/core/aggregation-utils.d.ts +66 -0
- package/dist/analytics/aggregation/core/aggregation-utils.d.ts.map +1 -0
- package/dist/analytics/aggregation/core/aggregation-utils.js +83 -0
- package/dist/analytics/aggregation/core/aggregation-utils.js.map +1 -0
- package/dist/analytics/aggregation/core/discovery.d.ts +40 -0
- package/dist/analytics/aggregation/core/discovery.d.ts.map +1 -0
- package/dist/analytics/aggregation/core/discovery.js +132 -0
- package/dist/analytics/aggregation/core/discovery.js.map +1 -0
- package/dist/analytics/aggregation/core/file-utils.d.ts +23 -0
- package/dist/analytics/aggregation/core/file-utils.d.ts.map +1 -0
- package/dist/analytics/aggregation/core/file-utils.js +208 -0
- package/dist/analytics/aggregation/core/file-utils.js.map +1 -0
- package/dist/analytics/aggregation/core/index.d.ts +11 -0
- package/dist/analytics/aggregation/core/index.d.ts.map +1 -0
- package/dist/analytics/aggregation/core/index.js +11 -0
- package/dist/analytics/aggregation/core/index.js.map +1 -0
- package/dist/analytics/aggregation/core/project-mapping.d.ts +50 -0
- package/dist/analytics/aggregation/core/project-mapping.d.ts.map +1 -0
- package/dist/analytics/aggregation/core/project-mapping.js +102 -0
- package/dist/analytics/aggregation/core/project-mapping.js.map +1 -0
- package/dist/analytics/aggregation/core/streaming.d.ts +26 -0
- package/dist/analytics/aggregation/core/streaming.d.ts.map +1 -0
- package/dist/analytics/aggregation/core/streaming.js +58 -0
- package/dist/analytics/aggregation/core/streaming.js.map +1 -0
- package/dist/analytics/aggregation/index.d.ts +8 -0
- package/dist/analytics/aggregation/index.d.ts.map +1 -0
- package/dist/analytics/aggregation/index.js +8 -0
- package/dist/analytics/aggregation/index.js.map +1 -0
- package/dist/analytics/aggregation/types.d.ts +258 -0
- package/dist/analytics/aggregation/types.d.ts.map +1 -0
- package/dist/analytics/aggregation/types.js +8 -0
- package/dist/analytics/aggregation/types.js.map +1 -0
- 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 +15 -0
- package/dist/analytics/config.d.ts.map +1 -0
- package/dist/analytics/config.js +65 -0
- package/dist/analytics/config.js.map +1 -0
- package/dist/analytics/index.d.ts +99 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/index.js +288 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/plugins/api-metrics.plugin.d.ts +26 -0
- package/dist/analytics/plugins/api-metrics.plugin.d.ts.map +1 -0
- package/dist/analytics/plugins/api-metrics.plugin.js +97 -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 +39 -0
- package/dist/analytics/plugins/model-metrics.plugin.d.ts.map +1 -0
- package/dist/analytics/plugins/model-metrics.plugin.js +105 -0
- package/dist/analytics/plugins/model-metrics.plugin.js.map +1 -0
- package/dist/analytics/plugins/provider-metrics.plugin.d.ts +41 -0
- package/dist/analytics/plugins/provider-metrics.plugin.d.ts.map +1 -0
- package/dist/analytics/plugins/provider-metrics.plugin.js +123 -0
- package/dist/analytics/plugins/provider-metrics.plugin.js.map +1 -0
- package/dist/analytics/plugins/types.d.ts +61 -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 +579 -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/commands/setup.js +70 -1
- package/dist/cli/commands/setup.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 +348 -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 +139 -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 +308 -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 +43 -6
- 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,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
|