@codemieai/code 0.0.10 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -98
- package/dist/agents/codemie-code/agent.d.ts.map +1 -1
- package/dist/agents/codemie-code/agent.js +35 -4
- package/dist/agents/codemie-code/agent.js.map +1 -1
- package/dist/agents/codemie-code/tools/index.d.ts.map +1 -1
- package/dist/agents/codemie-code/tools/index.js +5 -3
- package/dist/agents/codemie-code/tools/index.js.map +1 -1
- package/dist/agents/core/AgentCLI.d.ts.map +1 -1
- package/dist/agents/core/AgentCLI.js +57 -11
- package/dist/agents/core/AgentCLI.js.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.d.ts +4 -4
- package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.js +31 -23
- package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
- package/dist/agents/plugins/codemie-code.plugin.js +1 -1
- package/dist/agents/plugins/codemie-code.plugin.js.map +1 -1
- package/dist/agents/plugins/gemini.plugin.js +1 -1
- package/dist/agents/plugins/gemini.plugin.js.map +1 -1
- package/dist/analytics/collector.d.ts +46 -0
- package/dist/analytics/collector.d.ts.map +1 -0
- package/dist/analytics/collector.js +83 -0
- package/dist/analytics/collector.js.map +1 -0
- package/dist/analytics/config.d.ts +14 -0
- package/dist/analytics/config.d.ts.map +1 -0
- package/dist/analytics/config.js +46 -0
- package/dist/analytics/config.js.map +1 -0
- package/dist/analytics/index.d.ts +108 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/index.js +322 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/plugins/api-metrics.plugin.d.ts +23 -0
- package/dist/analytics/plugins/api-metrics.plugin.d.ts.map +1 -0
- package/dist/analytics/plugins/api-metrics.plugin.js +113 -0
- package/dist/analytics/plugins/api-metrics.plugin.js.map +1 -0
- package/dist/analytics/plugins/index.d.ts +15 -0
- package/dist/analytics/plugins/index.d.ts.map +1 -0
- package/dist/analytics/plugins/index.js +15 -0
- package/dist/analytics/plugins/index.js.map +1 -0
- package/dist/analytics/plugins/model-metrics.plugin.d.ts +36 -0
- package/dist/analytics/plugins/model-metrics.plugin.d.ts.map +1 -0
- package/dist/analytics/plugins/model-metrics.plugin.js +115 -0
- package/dist/analytics/plugins/model-metrics.plugin.js.map +1 -0
- package/dist/analytics/plugins/provider-metrics.plugin.d.ts +38 -0
- package/dist/analytics/plugins/provider-metrics.plugin.d.ts.map +1 -0
- package/dist/analytics/plugins/provider-metrics.plugin.js +138 -0
- package/dist/analytics/plugins/provider-metrics.plugin.js.map +1 -0
- package/dist/analytics/plugins/types.d.ts +63 -0
- package/dist/analytics/plugins/types.d.ts.map +1 -0
- package/dist/analytics/plugins/types.js +54 -0
- package/dist/analytics/plugins/types.js.map +1 -0
- package/dist/analytics/privacy.d.ts +10 -0
- package/dist/analytics/privacy.d.ts.map +1 -0
- package/dist/analytics/privacy.js +20 -0
- package/dist/analytics/privacy.js.map +1 -0
- package/dist/analytics/session.d.ts +56 -0
- package/dist/analytics/session.d.ts.map +1 -0
- package/dist/analytics/session.js +95 -0
- package/dist/analytics/session.js.map +1 -0
- package/dist/analytics/types.d.ts +104 -0
- package/dist/analytics/types.d.ts.map +1 -0
- package/dist/analytics/types.js +15 -0
- package/dist/analytics/types.js.map +1 -0
- package/dist/analytics/writer.d.ts +18 -0
- package/dist/analytics/writer.d.ts.map +1 -0
- package/dist/analytics/writer.js +44 -0
- package/dist/analytics/writer.js.map +1 -0
- package/dist/cli/commands/analytics.d.ts +3 -0
- package/dist/cli/commands/analytics.d.ts.map +1 -0
- package/dist/cli/commands/analytics.js +319 -0
- package/dist/cli/commands/analytics.js.map +1 -0
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/config.js +14 -0
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/profile.d.ts.map +1 -1
- package/dist/cli/commands/profile.js +41 -0
- package/dist/cli/commands/profile.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/env/types.d.ts +2 -0
- package/dist/env/types.d.ts.map +1 -1
- package/dist/env/types.js.map +1 -1
- package/dist/utils/analytics-reader.d.ts +117 -0
- package/dist/utils/analytics-reader.d.ts.map +1 -0
- package/dist/utils/analytics-reader.js +421 -0
- package/dist/utils/analytics-reader.js.map +1 -0
- package/dist/utils/codemie-integration-validator.d.ts.map +1 -1
- package/dist/utils/codemie-integration-validator.js +3 -16
- package/dist/utils/codemie-integration-validator.js.map +1 -1
- package/dist/utils/codemie-proxy.d.ts +80 -0
- package/dist/utils/codemie-proxy.d.ts.map +1 -0
- package/dist/utils/codemie-proxy.js +335 -0
- package/dist/utils/codemie-proxy.js.map +1 -0
- package/dist/utils/config-loader.d.ts +7 -0
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +18 -0
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/date-formatter.d.ts +88 -0
- package/dist/utils/date-formatter.d.ts.map +1 -0
- package/dist/utils/date-formatter.js +133 -0
- package/dist/utils/date-formatter.js.map +1 -0
- package/dist/utils/installation-id.d.ts +10 -0
- package/dist/utils/installation-id.d.ts.map +1 -0
- package/dist/utils/installation-id.js +30 -0
- package/dist/utils/installation-id.js.map +1 -0
- package/dist/utils/logger.d.ts +1 -15
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +5 -86
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/proxy/errors.d.ts +45 -0
- package/dist/utils/proxy/errors.d.ts.map +1 -0
- package/dist/utils/proxy/errors.js +103 -0
- package/dist/utils/proxy/errors.js.map +1 -0
- package/dist/utils/proxy/http-client.d.ts +46 -0
- package/dist/utils/proxy/http-client.d.ts.map +1 -0
- package/dist/utils/proxy/http-client.js +133 -0
- package/dist/utils/proxy/http-client.js.map +1 -0
- package/dist/utils/proxy/interceptors.d.ts +69 -0
- package/dist/utils/proxy/interceptors.d.ts.map +1 -0
- package/dist/utils/proxy/interceptors.js +319 -0
- package/dist/utils/proxy/interceptors.js.map +1 -0
- package/dist/utils/proxy/types.d.ts +45 -0
- package/dist/utils/proxy/types.d.ts.map +1 -0
- package/dist/utils/proxy/types.js +7 -0
- package/dist/utils/proxy/types.js.map +1 -0
- package/package.json +46 -5
- package/dist/utils/sso-gateway.d.ts +0 -75
- package/dist/utils/sso-gateway.d.ts.map +0 -1
- package/dist/utils/sso-gateway.js +0 -453
- package/dist/utils/sso-gateway.js.map +0 -1
|
@@ -0,0 +1,115 @@
|
|
|
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
|
+
async enrichMetrics(event) {
|
|
13
|
+
// Extract model from event
|
|
14
|
+
const model = event.model || event.attributes.model;
|
|
15
|
+
if (!model) {
|
|
16
|
+
return {};
|
|
17
|
+
}
|
|
18
|
+
// Initialize model stats if needed
|
|
19
|
+
if (!this.modelMetrics.has(model)) {
|
|
20
|
+
this.modelMetrics.set(model, {
|
|
21
|
+
requestCount: 0,
|
|
22
|
+
successCount: 0,
|
|
23
|
+
failureCount: 0,
|
|
24
|
+
totalLatency: 0,
|
|
25
|
+
totalTokens: 0
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
const stats = this.modelMetrics.get(model);
|
|
29
|
+
// Track API requests
|
|
30
|
+
if (event.eventType === 'api_request') {
|
|
31
|
+
stats.requestCount++;
|
|
32
|
+
}
|
|
33
|
+
// Track API responses
|
|
34
|
+
if (event.eventType === 'api_response') {
|
|
35
|
+
const statusCode = event.attributes.statusCode;
|
|
36
|
+
const latency = event.metrics?.latencyMs;
|
|
37
|
+
if (statusCode >= 200 && statusCode < 400) {
|
|
38
|
+
stats.successCount++;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
stats.failureCount++;
|
|
42
|
+
}
|
|
43
|
+
if (latency) {
|
|
44
|
+
stats.totalLatency += latency;
|
|
45
|
+
}
|
|
46
|
+
// Track token usage if available
|
|
47
|
+
const responseBody = event.attributes.responseBody;
|
|
48
|
+
if (responseBody?.usage) {
|
|
49
|
+
const totalTokens = responseBody.usage.total_tokens ||
|
|
50
|
+
(responseBody.usage.input_tokens + responseBody.usage.output_tokens) ||
|
|
51
|
+
0;
|
|
52
|
+
stats.totalTokens += totalTokens;
|
|
53
|
+
}
|
|
54
|
+
// Calculate model-specific metrics
|
|
55
|
+
const successRate = stats.requestCount > 0
|
|
56
|
+
? stats.successCount / stats.requestCount
|
|
57
|
+
: 0;
|
|
58
|
+
const avgLatency = stats.successCount > 0
|
|
59
|
+
? stats.totalLatency / stats.successCount
|
|
60
|
+
: 0;
|
|
61
|
+
return {
|
|
62
|
+
model_name: model,
|
|
63
|
+
model_request_count: stats.requestCount,
|
|
64
|
+
model_success_rate: Math.round(successRate * 100) / 100,
|
|
65
|
+
model_avg_latency_ms: Math.round(avgLatency),
|
|
66
|
+
model_total_tokens: stats.totalTokens
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
return {};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get current aggregated metrics for all models
|
|
73
|
+
*/
|
|
74
|
+
getMetrics() {
|
|
75
|
+
const modelMetrics = {};
|
|
76
|
+
for (const [model, stats] of this.modelMetrics.entries()) {
|
|
77
|
+
const successRate = stats.requestCount > 0
|
|
78
|
+
? stats.successCount / stats.requestCount
|
|
79
|
+
: 0;
|
|
80
|
+
const avgLatency = stats.successCount > 0
|
|
81
|
+
? stats.totalLatency / stats.successCount
|
|
82
|
+
: 0;
|
|
83
|
+
modelMetrics[model] = {
|
|
84
|
+
requestCount: stats.requestCount,
|
|
85
|
+
successCount: stats.successCount,
|
|
86
|
+
failureCount: stats.failureCount,
|
|
87
|
+
successRate: Math.round(successRate * 100) / 100,
|
|
88
|
+
averageLatencyMs: Math.round(avgLatency),
|
|
89
|
+
totalTokens: stats.totalTokens
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
models: modelMetrics,
|
|
94
|
+
modelCount: this.modelMetrics.size
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Reset metrics (useful for new sessions)
|
|
99
|
+
*/
|
|
100
|
+
reset() {
|
|
101
|
+
this.modelMetrics.clear();
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get all model metrics (useful for session end reporting)
|
|
105
|
+
* @deprecated Use getMetrics() instead
|
|
106
|
+
*/
|
|
107
|
+
getAllModelMetrics() {
|
|
108
|
+
const result = {};
|
|
109
|
+
for (const [model, stats] of this.modelMetrics.entries()) {
|
|
110
|
+
result[model] = { ...stats };
|
|
111
|
+
}
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
//# 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":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
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
|
+
enrichMetrics(event: AnalyticsEvent): Promise<Record<string, unknown>>;
|
|
23
|
+
/**
|
|
24
|
+
* Get current aggregated metrics for all providers
|
|
25
|
+
*/
|
|
26
|
+
getMetrics(): Record<string, unknown>;
|
|
27
|
+
/**
|
|
28
|
+
* Reset metrics (useful for new sessions)
|
|
29
|
+
*/
|
|
30
|
+
reset(): void;
|
|
31
|
+
/**
|
|
32
|
+
* Get all provider metrics (useful for session end reporting)
|
|
33
|
+
* @deprecated Use getMetrics() instead
|
|
34
|
+
*/
|
|
35
|
+
getAllProviderMetrics(): Record<string, ProviderStats>;
|
|
36
|
+
}
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=provider-metrics.plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-metrics.plugin.d.ts","sourceRoot":"","sources":["../../../src/analytics/plugins/provider-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,aAAa;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,qBAAsB,YAAW,eAAe;IAC3D,IAAI,SAAsB;IAC1B,OAAO,SAAW;IAGlB,OAAO,CAAC,eAAe,CAAoC;IAErD,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAyF5E;;OAEG;IACH,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAmCrC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;OAGG;IACH,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;CAOvD"}
|
|
@@ -0,0 +1,138 @@
|
|
|
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
|
+
export class ProviderMetricsPlugin {
|
|
8
|
+
name = 'provider-metrics';
|
|
9
|
+
version = '1.0.0';
|
|
10
|
+
// Track metrics per provider
|
|
11
|
+
providerMetrics = new Map();
|
|
12
|
+
async enrichMetrics(event) {
|
|
13
|
+
// Extract provider from event
|
|
14
|
+
const provider = event.provider || event.attributes.provider;
|
|
15
|
+
if (!provider) {
|
|
16
|
+
return {};
|
|
17
|
+
}
|
|
18
|
+
// Initialize provider stats if needed
|
|
19
|
+
if (!this.providerMetrics.has(provider)) {
|
|
20
|
+
this.providerMetrics.set(provider, {
|
|
21
|
+
requestCount: 0,
|
|
22
|
+
successCount: 0,
|
|
23
|
+
failureCount: 0,
|
|
24
|
+
totalLatency: 0,
|
|
25
|
+
timeouts: 0,
|
|
26
|
+
networkErrors: 0,
|
|
27
|
+
authErrors: 0
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
const stats = this.providerMetrics.get(provider);
|
|
31
|
+
// Track API requests
|
|
32
|
+
if (event.eventType === 'api_request') {
|
|
33
|
+
stats.requestCount++;
|
|
34
|
+
}
|
|
35
|
+
// Track API responses
|
|
36
|
+
if (event.eventType === 'api_response') {
|
|
37
|
+
const statusCode = event.attributes.statusCode;
|
|
38
|
+
const latency = event.metrics?.latencyMs;
|
|
39
|
+
if (statusCode >= 200 && statusCode < 400) {
|
|
40
|
+
stats.successCount++;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
stats.failureCount++;
|
|
44
|
+
// Track specific error types
|
|
45
|
+
if (statusCode === 401 || statusCode === 403) {
|
|
46
|
+
stats.authErrors++;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (latency) {
|
|
50
|
+
stats.totalLatency += latency;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Track proxy errors
|
|
54
|
+
if (event.eventType === 'proxy_error') {
|
|
55
|
+
const errorType = event.attributes.errorType;
|
|
56
|
+
if (errorType === 'TimeoutError') {
|
|
57
|
+
stats.timeouts++;
|
|
58
|
+
}
|
|
59
|
+
else if (errorType === 'NetworkError') {
|
|
60
|
+
stats.networkErrors++;
|
|
61
|
+
}
|
|
62
|
+
else if (errorType === 'AuthenticationError') {
|
|
63
|
+
stats.authErrors++;
|
|
64
|
+
}
|
|
65
|
+
stats.failureCount++;
|
|
66
|
+
}
|
|
67
|
+
// Calculate provider-specific metrics
|
|
68
|
+
const successRate = stats.requestCount > 0
|
|
69
|
+
? stats.successCount / stats.requestCount
|
|
70
|
+
: 0;
|
|
71
|
+
const avgLatency = stats.successCount > 0
|
|
72
|
+
? stats.totalLatency / stats.successCount
|
|
73
|
+
: 0;
|
|
74
|
+
const errorRate = stats.requestCount > 0
|
|
75
|
+
? stats.failureCount / stats.requestCount
|
|
76
|
+
: 0;
|
|
77
|
+
return {
|
|
78
|
+
provider_name: provider,
|
|
79
|
+
provider_request_count: stats.requestCount,
|
|
80
|
+
provider_success_rate: Math.round(successRate * 100) / 100,
|
|
81
|
+
provider_error_rate: Math.round(errorRate * 100) / 100,
|
|
82
|
+
provider_avg_latency_ms: Math.round(avgLatency),
|
|
83
|
+
provider_timeout_count: stats.timeouts,
|
|
84
|
+
provider_network_error_count: stats.networkErrors,
|
|
85
|
+
provider_auth_error_count: stats.authErrors
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Get current aggregated metrics for all providers
|
|
90
|
+
*/
|
|
91
|
+
getMetrics() {
|
|
92
|
+
const providerMetrics = {};
|
|
93
|
+
for (const [provider, stats] of this.providerMetrics.entries()) {
|
|
94
|
+
const successRate = stats.requestCount > 0
|
|
95
|
+
? stats.successCount / stats.requestCount
|
|
96
|
+
: 0;
|
|
97
|
+
const errorRate = stats.requestCount > 0
|
|
98
|
+
? stats.failureCount / stats.requestCount
|
|
99
|
+
: 0;
|
|
100
|
+
const avgLatency = stats.successCount > 0
|
|
101
|
+
? stats.totalLatency / stats.successCount
|
|
102
|
+
: 0;
|
|
103
|
+
providerMetrics[provider] = {
|
|
104
|
+
requestCount: stats.requestCount,
|
|
105
|
+
successCount: stats.successCount,
|
|
106
|
+
failureCount: stats.failureCount,
|
|
107
|
+
successRate: Math.round(successRate * 100) / 100,
|
|
108
|
+
errorRate: Math.round(errorRate * 100) / 100,
|
|
109
|
+
averageLatencyMs: Math.round(avgLatency),
|
|
110
|
+
timeouts: stats.timeouts,
|
|
111
|
+
networkErrors: stats.networkErrors,
|
|
112
|
+
authErrors: stats.authErrors
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
providers: providerMetrics,
|
|
117
|
+
providerCount: this.providerMetrics.size
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Reset metrics (useful for new sessions)
|
|
122
|
+
*/
|
|
123
|
+
reset() {
|
|
124
|
+
this.providerMetrics.clear();
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Get all provider metrics (useful for session end reporting)
|
|
128
|
+
* @deprecated Use getMetrics() instead
|
|
129
|
+
*/
|
|
130
|
+
getAllProviderMetrics() {
|
|
131
|
+
const result = {};
|
|
132
|
+
for (const [provider, stats] of this.providerMetrics.entries()) {
|
|
133
|
+
result[provider] = { ...stats };
|
|
134
|
+
}
|
|
135
|
+
return result;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=provider-metrics.plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-metrics.plugin.js","sourceRoot":"","sources":["../../../src/analytics/plugins/provider-metrics.plugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH,MAAM,OAAO,qBAAqB;IAChC,IAAI,GAAG,kBAAkB,CAAC;IAC1B,OAAO,GAAG,OAAO,CAAC;IAElB,6BAA6B;IACrB,eAAe,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE3D,KAAK,CAAC,aAAa,CAAC,KAAqB;QACvC,8BAA8B;QAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,QAAkB,CAAC;QAEvE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,sCAAsC;QACtC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE;gBACjC,YAAY,EAAE,CAAC;gBACf,YAAY,EAAE,CAAC;gBACf,YAAY,EAAE,CAAC;gBACf,YAAY,EAAE,CAAC;gBACf,QAAQ,EAAE,CAAC;gBACX,aAAa,EAAE,CAAC;gBAChB,UAAU,EAAE,CAAC;aACd,CAAC,CAAC;QACL,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;QAElD,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;gBAErB,6BAA6B;gBAC7B,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;oBAC7C,KAAK,CAAC,UAAU,EAAE,CAAC;gBACrB,CAAC;YACH,CAAC;YAED,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,CAAC,YAAY,IAAI,OAAO,CAAC;YAChC,CAAC;QACH,CAAC;QAED,qBAAqB;QACrB,IAAI,KAAK,CAAC,SAAS,KAAK,aAAa,EAAE,CAAC;YACtC,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,SAAmB,CAAC;YAEvD,IAAI,SAAS,KAAK,cAAc,EAAE,CAAC;gBACjC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,CAAC;iBAAM,IAAI,SAAS,KAAK,cAAc,EAAE,CAAC;gBACxC,KAAK,CAAC,aAAa,EAAE,CAAC;YACxB,CAAC;iBAAM,IAAI,SAAS,KAAK,qBAAqB,EAAE,CAAC;gBAC/C,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,CAAC;YAED,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,CAAC;QAED,sCAAsC;QACtC,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,GAAG,CAAC;YACxC,CAAC,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY;YACzC,CAAC,CAAC,CAAC,CAAC;QAEN,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,GAAG,CAAC;YACvC,CAAC,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY;YACzC,CAAC,CAAC,CAAC,CAAC;QAEN,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,GAAG,CAAC;YACtC,CAAC,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY;YACzC,CAAC,CAAC,CAAC,CAAC;QAEN,OAAO;YACL,aAAa,EAAE,QAAQ;YACvB,sBAAsB,EAAE,KAAK,CAAC,YAAY;YAC1C,qBAAqB,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,GAAG;YAC1D,mBAAmB,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,GAAG;YACtD,uBAAuB,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;YAC/C,sBAAsB,EAAE,KAAK,CAAC,QAAQ;YACtC,4BAA4B,EAAE,KAAK,CAAC,aAAa;YACjD,yBAAyB,EAAE,KAAK,CAAC,UAAU;SAC5C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,UAAU;QACR,MAAM,eAAe,GAAwB,EAAE,CAAC;QAEhD,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;YAC/D,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,SAAS,GAAG,KAAK,CAAC,YAAY,GAAG,CAAC;gBACtC,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,eAAe,CAAC,QAAQ,CAAC,GAAG;gBAC1B,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,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,GAAG;gBAC5C,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;gBACxC,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,UAAU,EAAE,KAAK,CAAC,UAAU;aAC7B,CAAC;QACJ,CAAC;QAED,OAAO;YACL,SAAS,EAAE,eAAe;YAC1B,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI;SACzC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,qBAAqB;QACnB,MAAM,MAAM,GAAkC,EAAE,CAAC;QACjD,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;YAC/D,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;QAClC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analytics Plugin System
|
|
3
|
+
*
|
|
4
|
+
* Extensible architecture for adding custom metrics without modifying core.
|
|
5
|
+
* SOLID: Open/Closed - extend analytics via plugins, don't modify core.
|
|
6
|
+
*/
|
|
7
|
+
import { Analytics } from '../index.js';
|
|
8
|
+
import { AnalyticsEvent } from '../types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Analytics Plugin Interface
|
|
11
|
+
* Allows extending analytics without modifying core
|
|
12
|
+
*/
|
|
13
|
+
export interface AnalyticsPlugin {
|
|
14
|
+
/** Plugin name (must be unique) */
|
|
15
|
+
name: string;
|
|
16
|
+
/** Plugin version */
|
|
17
|
+
version: string;
|
|
18
|
+
/** Called when plugin is registered */
|
|
19
|
+
initialize?(analytics: Analytics): Promise<void>;
|
|
20
|
+
/** Transform/enrich events before writing */
|
|
21
|
+
processEvent?(event: AnalyticsEvent): Promise<AnalyticsEvent | null>;
|
|
22
|
+
/** Add custom metrics to events */
|
|
23
|
+
enrichMetrics?(event: AnalyticsEvent): Promise<Record<string, unknown>>;
|
|
24
|
+
/** Get current aggregated metrics snapshot (for reporting) */
|
|
25
|
+
getMetrics?(): Record<string, unknown>;
|
|
26
|
+
/** Reset plugin metrics (useful for new sessions) */
|
|
27
|
+
reset?(): void;
|
|
28
|
+
/** Custom event types this plugin handles (optional) */
|
|
29
|
+
customEventTypes?: string[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Plugin Registry
|
|
33
|
+
* Central place for all analytics plugins
|
|
34
|
+
*/
|
|
35
|
+
export declare class AnalyticsPluginRegistry {
|
|
36
|
+
private plugins;
|
|
37
|
+
/**
|
|
38
|
+
* Register a plugin
|
|
39
|
+
* @throws Error if plugin name already registered
|
|
40
|
+
*/
|
|
41
|
+
register(plugin: AnalyticsPlugin): void;
|
|
42
|
+
/**
|
|
43
|
+
* Get all registered plugins
|
|
44
|
+
*/
|
|
45
|
+
getAll(): AnalyticsPlugin[];
|
|
46
|
+
/**
|
|
47
|
+
* Get plugin by name
|
|
48
|
+
*/
|
|
49
|
+
getByName(name: string): AnalyticsPlugin | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* Check if plugin is registered
|
|
52
|
+
*/
|
|
53
|
+
has(name: string): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Unregister plugin
|
|
56
|
+
*/
|
|
57
|
+
unregister(name: string): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Clear all plugins
|
|
60
|
+
*/
|
|
61
|
+
clear(): void;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/analytics/plugins/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IAEb,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAEhB,uCAAuC;IACvC,UAAU,CAAC,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjD,6CAA6C;IAC7C,YAAY,CAAC,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAErE,mCAAmC;IACnC,aAAa,CAAC,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAExE,8DAA8D;IAC9D,UAAU,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEvC,qDAAqD;IACrD,KAAK,CAAC,IAAI,IAAI,CAAC;IAEf,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;;GAGG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,OAAO,CAAsC;IAErD;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAQvC;;OAEG;IACH,MAAM,IAAI,eAAe,EAAE;IAI3B;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAIpD;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analytics Plugin System
|
|
3
|
+
*
|
|
4
|
+
* Extensible architecture for adding custom metrics without modifying core.
|
|
5
|
+
* SOLID: Open/Closed - extend analytics via plugins, don't modify core.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Plugin Registry
|
|
9
|
+
* Central place for all analytics plugins
|
|
10
|
+
*/
|
|
11
|
+
export class AnalyticsPluginRegistry {
|
|
12
|
+
plugins = new Map();
|
|
13
|
+
/**
|
|
14
|
+
* Register a plugin
|
|
15
|
+
* @throws Error if plugin name already registered
|
|
16
|
+
*/
|
|
17
|
+
register(plugin) {
|
|
18
|
+
if (this.plugins.has(plugin.name)) {
|
|
19
|
+
throw new Error(`Analytics plugin "${plugin.name}" is already registered`);
|
|
20
|
+
}
|
|
21
|
+
this.plugins.set(plugin.name, plugin);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get all registered plugins
|
|
25
|
+
*/
|
|
26
|
+
getAll() {
|
|
27
|
+
return Array.from(this.plugins.values());
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get plugin by name
|
|
31
|
+
*/
|
|
32
|
+
getByName(name) {
|
|
33
|
+
return this.plugins.get(name);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Check if plugin is registered
|
|
37
|
+
*/
|
|
38
|
+
has(name) {
|
|
39
|
+
return this.plugins.has(name);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Unregister plugin
|
|
43
|
+
*/
|
|
44
|
+
unregister(name) {
|
|
45
|
+
return this.plugins.delete(name);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Clear all plugins
|
|
49
|
+
*/
|
|
50
|
+
clear() {
|
|
51
|
+
this.plugins.clear();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/analytics/plugins/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmCH;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IAC1B,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;IAErD;;;OAGG;IACH,QAAQ,CAAC,MAAuB;QAC9B,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,CAAC,IAAI,yBAAyB,CAAC,CAAC;QAC7E,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Privacy utilities for analytics
|
|
3
|
+
* Handles sensitive data redaction
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Redact sensitive data from parameters
|
|
7
|
+
* Removes API keys, tokens, passwords, secrets
|
|
8
|
+
*/
|
|
9
|
+
export declare function redactSensitive(params: Record<string, unknown>): Record<string, unknown>;
|
|
10
|
+
//# sourceMappingURL=privacy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"privacy.d.ts","sourceRoot":"","sources":["../../src/analytics/privacy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAYzB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Privacy utilities for analytics
|
|
3
|
+
* Handles sensitive data redaction
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Redact sensitive data from parameters
|
|
7
|
+
* Removes API keys, tokens, passwords, secrets
|
|
8
|
+
*/
|
|
9
|
+
export function redactSensitive(params) {
|
|
10
|
+
const sensitive = ['apikey', 'api_key', 'token', 'password', 'secret', 'auth'];
|
|
11
|
+
const result = { ...params };
|
|
12
|
+
for (const key of Object.keys(result)) {
|
|
13
|
+
const lowerKey = key.toLowerCase();
|
|
14
|
+
if (sensitive.some((s) => lowerKey.includes(s))) {
|
|
15
|
+
result[key] = '[REDACTED]';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return result;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=privacy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"privacy.js","sourceRoot":"","sources":["../../src/analytics/privacy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,MAA+B;IAE/B,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAE7B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session management for analytics
|
|
3
|
+
* Tracks session lifecycle and metadata
|
|
4
|
+
*/
|
|
5
|
+
import type { SessionConfig } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Manages analytics session lifecycle
|
|
8
|
+
*/
|
|
9
|
+
export declare class SessionManager {
|
|
10
|
+
private session;
|
|
11
|
+
/**
|
|
12
|
+
* Start a new session
|
|
13
|
+
*/
|
|
14
|
+
start(config: SessionConfig): void;
|
|
15
|
+
/**
|
|
16
|
+
* Get current session ID
|
|
17
|
+
*/
|
|
18
|
+
get id(): string;
|
|
19
|
+
/**
|
|
20
|
+
* Get session duration in seconds
|
|
21
|
+
*/
|
|
22
|
+
get duration(): number;
|
|
23
|
+
/**
|
|
24
|
+
* Get session agent name
|
|
25
|
+
*/
|
|
26
|
+
get agent(): string;
|
|
27
|
+
/**
|
|
28
|
+
* Get session agent version
|
|
29
|
+
*/
|
|
30
|
+
get agentVersion(): string;
|
|
31
|
+
/**
|
|
32
|
+
* Get session CLI version
|
|
33
|
+
*/
|
|
34
|
+
get cliVersion(): string;
|
|
35
|
+
/**
|
|
36
|
+
* Get session profile
|
|
37
|
+
*/
|
|
38
|
+
get profile(): string;
|
|
39
|
+
/**
|
|
40
|
+
* Get session provider
|
|
41
|
+
*/
|
|
42
|
+
get provider(): string;
|
|
43
|
+
/**
|
|
44
|
+
* Get session model
|
|
45
|
+
*/
|
|
46
|
+
get model(): string;
|
|
47
|
+
/**
|
|
48
|
+
* Check if session is active
|
|
49
|
+
*/
|
|
50
|
+
get isActive(): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* End the current session
|
|
53
|
+
*/
|
|
54
|
+
end(): void;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/analytics/session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,YAAY,CAAC;AAEjE;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAgC;IAE/C;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAelC;;OAEG;IACH,IAAI,EAAE,IAAI,MAAM,CAKf;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,CAKrB;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;OAEG;IACH,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED;;OAEG;IACH,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;;OAEG;IACH,GAAG,IAAI,IAAI;CAGZ"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session management for analytics
|
|
3
|
+
* Tracks session lifecycle and metadata
|
|
4
|
+
*/
|
|
5
|
+
import { randomUUID } from 'node:crypto';
|
|
6
|
+
/**
|
|
7
|
+
* Manages analytics session lifecycle
|
|
8
|
+
*/
|
|
9
|
+
export class SessionManager {
|
|
10
|
+
session = null;
|
|
11
|
+
/**
|
|
12
|
+
* Start a new session
|
|
13
|
+
*/
|
|
14
|
+
start(config) {
|
|
15
|
+
this.session = {
|
|
16
|
+
id: randomUUID(),
|
|
17
|
+
startTime: Date.now(),
|
|
18
|
+
agent: config.agent,
|
|
19
|
+
agentVersion: config.agentVersion,
|
|
20
|
+
cliVersion: config.cliVersion,
|
|
21
|
+
profile: config.profile,
|
|
22
|
+
provider: config.provider,
|
|
23
|
+
model: config.model,
|
|
24
|
+
workingDir: config.workingDir,
|
|
25
|
+
interactive: config.interactive,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Get current session ID
|
|
30
|
+
*/
|
|
31
|
+
get id() {
|
|
32
|
+
if (!this.session) {
|
|
33
|
+
throw new Error('No active session');
|
|
34
|
+
}
|
|
35
|
+
return this.session.id;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get session duration in seconds
|
|
39
|
+
*/
|
|
40
|
+
get duration() {
|
|
41
|
+
if (!this.session) {
|
|
42
|
+
return 0;
|
|
43
|
+
}
|
|
44
|
+
return Math.floor((Date.now() - this.session.startTime) / 1000);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get session agent name
|
|
48
|
+
*/
|
|
49
|
+
get agent() {
|
|
50
|
+
return this.session?.agent || 'unknown';
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get session agent version
|
|
54
|
+
*/
|
|
55
|
+
get agentVersion() {
|
|
56
|
+
return this.session?.agentVersion || 'unknown';
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get session CLI version
|
|
60
|
+
*/
|
|
61
|
+
get cliVersion() {
|
|
62
|
+
return this.session?.cliVersion || 'unknown';
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get session profile
|
|
66
|
+
*/
|
|
67
|
+
get profile() {
|
|
68
|
+
return this.session?.profile || 'unknown';
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get session provider
|
|
72
|
+
*/
|
|
73
|
+
get provider() {
|
|
74
|
+
return this.session?.provider || 'unknown';
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Get session model
|
|
78
|
+
*/
|
|
79
|
+
get model() {
|
|
80
|
+
return this.session?.model || 'unknown';
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Check if session is active
|
|
84
|
+
*/
|
|
85
|
+
get isActive() {
|
|
86
|
+
return this.session !== null;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* End the current session
|
|
90
|
+
*/
|
|
91
|
+
end() {
|
|
92
|
+
this.session = null;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/analytics/session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC;;GAEG;AACH,MAAM,OAAO,cAAc;IACjB,OAAO,GAA2B,IAAI,CAAC;IAE/C;;OAEG;IACH,KAAK,CAAC,MAAqB;QACzB,IAAI,CAAC,OAAO,GAAG;YACb,EAAE,EAAE,UAAU,EAAE;YAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,WAAW,EAAE,MAAM,CAAC,WAAW;SAChC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,IAAI,EAAE;QACJ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACV,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,SAAS,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,OAAO,EAAE,YAAY,IAAI,SAAS,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,OAAO,EAAE,UAAU,IAAI,SAAS,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,SAAS,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,IAAI,SAAS,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,SAAS,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,GAAG;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;CACF"}
|