@codemieai/code 0.0.11 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/README.md +20 -98
  2. package/dist/agents/codemie-code/agent.d.ts.map +1 -1
  3. package/dist/agents/codemie-code/agent.js +35 -4
  4. package/dist/agents/codemie-code/agent.js.map +1 -1
  5. package/dist/agents/codemie-code/tools/index.d.ts.map +1 -1
  6. package/dist/agents/codemie-code/tools/index.js +5 -3
  7. package/dist/agents/codemie-code/tools/index.js.map +1 -1
  8. package/dist/agents/core/AgentCLI.d.ts.map +1 -1
  9. package/dist/agents/core/AgentCLI.js +57 -11
  10. package/dist/agents/core/AgentCLI.js.map +1 -1
  11. package/dist/agents/core/BaseAgentAdapter.d.ts +4 -4
  12. package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
  13. package/dist/agents/core/BaseAgentAdapter.js +31 -23
  14. package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
  15. package/dist/agents/plugins/codemie-code.plugin.js +1 -1
  16. package/dist/agents/plugins/codemie-code.plugin.js.map +1 -1
  17. package/dist/agents/plugins/gemini.plugin.js +1 -1
  18. package/dist/agents/plugins/gemini.plugin.js.map +1 -1
  19. package/dist/analytics/collector.d.ts +46 -0
  20. package/dist/analytics/collector.d.ts.map +1 -0
  21. package/dist/analytics/collector.js +83 -0
  22. package/dist/analytics/collector.js.map +1 -0
  23. package/dist/analytics/config.d.ts +14 -0
  24. package/dist/analytics/config.d.ts.map +1 -0
  25. package/dist/analytics/config.js +46 -0
  26. package/dist/analytics/config.js.map +1 -0
  27. package/dist/analytics/index.d.ts +108 -0
  28. package/dist/analytics/index.d.ts.map +1 -0
  29. package/dist/analytics/index.js +322 -0
  30. package/dist/analytics/index.js.map +1 -0
  31. package/dist/analytics/plugins/api-metrics.plugin.d.ts +23 -0
  32. package/dist/analytics/plugins/api-metrics.plugin.d.ts.map +1 -0
  33. package/dist/analytics/plugins/api-metrics.plugin.js +113 -0
  34. package/dist/analytics/plugins/api-metrics.plugin.js.map +1 -0
  35. package/dist/analytics/plugins/index.d.ts +15 -0
  36. package/dist/analytics/plugins/index.d.ts.map +1 -0
  37. package/dist/analytics/plugins/index.js +15 -0
  38. package/dist/analytics/plugins/index.js.map +1 -0
  39. package/dist/analytics/plugins/model-metrics.plugin.d.ts +36 -0
  40. package/dist/analytics/plugins/model-metrics.plugin.d.ts.map +1 -0
  41. package/dist/analytics/plugins/model-metrics.plugin.js +115 -0
  42. package/dist/analytics/plugins/model-metrics.plugin.js.map +1 -0
  43. package/dist/analytics/plugins/provider-metrics.plugin.d.ts +38 -0
  44. package/dist/analytics/plugins/provider-metrics.plugin.d.ts.map +1 -0
  45. package/dist/analytics/plugins/provider-metrics.plugin.js +138 -0
  46. package/dist/analytics/plugins/provider-metrics.plugin.js.map +1 -0
  47. package/dist/analytics/plugins/types.d.ts +63 -0
  48. package/dist/analytics/plugins/types.d.ts.map +1 -0
  49. package/dist/analytics/plugins/types.js +54 -0
  50. package/dist/analytics/plugins/types.js.map +1 -0
  51. package/dist/analytics/privacy.d.ts +10 -0
  52. package/dist/analytics/privacy.d.ts.map +1 -0
  53. package/dist/analytics/privacy.js +20 -0
  54. package/dist/analytics/privacy.js.map +1 -0
  55. package/dist/analytics/session.d.ts +56 -0
  56. package/dist/analytics/session.d.ts.map +1 -0
  57. package/dist/analytics/session.js +95 -0
  58. package/dist/analytics/session.js.map +1 -0
  59. package/dist/analytics/types.d.ts +104 -0
  60. package/dist/analytics/types.d.ts.map +1 -0
  61. package/dist/analytics/types.js +15 -0
  62. package/dist/analytics/types.js.map +1 -0
  63. package/dist/analytics/writer.d.ts +18 -0
  64. package/dist/analytics/writer.d.ts.map +1 -0
  65. package/dist/analytics/writer.js +44 -0
  66. package/dist/analytics/writer.js.map +1 -0
  67. package/dist/cli/commands/analytics.d.ts +3 -0
  68. package/dist/cli/commands/analytics.d.ts.map +1 -0
  69. package/dist/cli/commands/analytics.js +319 -0
  70. package/dist/cli/commands/analytics.js.map +1 -0
  71. package/dist/cli/commands/config.d.ts.map +1 -1
  72. package/dist/cli/commands/config.js +14 -0
  73. package/dist/cli/commands/config.js.map +1 -1
  74. package/dist/cli/commands/profile.d.ts.map +1 -1
  75. package/dist/cli/commands/profile.js +41 -0
  76. package/dist/cli/commands/profile.js.map +1 -1
  77. package/dist/cli/index.js +2 -0
  78. package/dist/cli/index.js.map +1 -1
  79. package/dist/env/types.d.ts +2 -0
  80. package/dist/env/types.d.ts.map +1 -1
  81. package/dist/env/types.js.map +1 -1
  82. package/dist/utils/analytics-reader.d.ts +117 -0
  83. package/dist/utils/analytics-reader.d.ts.map +1 -0
  84. package/dist/utils/analytics-reader.js +421 -0
  85. package/dist/utils/analytics-reader.js.map +1 -0
  86. package/dist/utils/codemie-integration-validator.d.ts.map +1 -1
  87. package/dist/utils/codemie-integration-validator.js +3 -16
  88. package/dist/utils/codemie-integration-validator.js.map +1 -1
  89. package/dist/utils/codemie-proxy.d.ts +80 -0
  90. package/dist/utils/codemie-proxy.d.ts.map +1 -0
  91. package/dist/utils/codemie-proxy.js +335 -0
  92. package/dist/utils/codemie-proxy.js.map +1 -0
  93. package/dist/utils/config-loader.d.ts +7 -0
  94. package/dist/utils/config-loader.d.ts.map +1 -1
  95. package/dist/utils/config-loader.js +18 -0
  96. package/dist/utils/config-loader.js.map +1 -1
  97. package/dist/utils/date-formatter.d.ts +88 -0
  98. package/dist/utils/date-formatter.d.ts.map +1 -0
  99. package/dist/utils/date-formatter.js +133 -0
  100. package/dist/utils/date-formatter.js.map +1 -0
  101. package/dist/utils/installation-id.d.ts +10 -0
  102. package/dist/utils/installation-id.d.ts.map +1 -0
  103. package/dist/utils/installation-id.js +30 -0
  104. package/dist/utils/installation-id.js.map +1 -0
  105. package/dist/utils/logger.d.ts +1 -15
  106. package/dist/utils/logger.d.ts.map +1 -1
  107. package/dist/utils/logger.js +5 -86
  108. package/dist/utils/logger.js.map +1 -1
  109. package/dist/utils/proxy/errors.d.ts +45 -0
  110. package/dist/utils/proxy/errors.d.ts.map +1 -0
  111. package/dist/utils/proxy/errors.js +103 -0
  112. package/dist/utils/proxy/errors.js.map +1 -0
  113. package/dist/utils/proxy/http-client.d.ts +46 -0
  114. package/dist/utils/proxy/http-client.d.ts.map +1 -0
  115. package/dist/utils/proxy/http-client.js +133 -0
  116. package/dist/utils/proxy/http-client.js.map +1 -0
  117. package/dist/utils/proxy/interceptors.d.ts +69 -0
  118. package/dist/utils/proxy/interceptors.d.ts.map +1 -0
  119. package/dist/utils/proxy/interceptors.js +319 -0
  120. package/dist/utils/proxy/interceptors.js.map +1 -0
  121. package/dist/utils/proxy/types.d.ts +45 -0
  122. package/dist/utils/proxy/types.d.ts.map +1 -0
  123. package/dist/utils/proxy/types.js +7 -0
  124. package/dist/utils/proxy/types.js.map +1 -0
  125. package/package.json +38 -5
  126. package/dist/utils/sso-gateway.d.ts +0 -75
  127. package/dist/utils/sso-gateway.d.ts.map +0 -1
  128. package/dist/utils/sso-gateway.js +0 -453
  129. package/dist/utils/sso-gateway.js.map +0 -1
@@ -0,0 +1,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":"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,KAAK,CAAC,aAAa,CAAC,KAAqB;QACvC,2BAA2B;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,KAAe,CAAC;QAE9D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,CAAC;QACZ,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;YAED,mCAAmC;YACnC,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,OAAO;gBACL,UAAU,EAAE,KAAK;gBACjB,mBAAmB,EAAE,KAAK,CAAC,YAAY;gBACvC,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,GAAG;gBACvD,oBAAoB,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;gBAC5C,kBAAkB,EAAE,KAAK,CAAC,WAAW;aACtC,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,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,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":"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"}
@@ -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"}