@codemieai/code 0.0.11 → 0.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/README.md +70 -861
  2. package/dist/agents/codemie-code/agent.d.ts.map +1 -1
  3. package/dist/agents/codemie-code/agent.js +35 -4
  4. package/dist/agents/codemie-code/agent.js.map +1 -1
  5. package/dist/agents/codemie-code/tools/index.d.ts.map +1 -1
  6. package/dist/agents/codemie-code/tools/index.js +5 -3
  7. package/dist/agents/codemie-code/tools/index.js.map +1 -1
  8. package/dist/agents/core/AgentCLI.d.ts.map +1 -1
  9. package/dist/agents/core/AgentCLI.js +57 -11
  10. package/dist/agents/core/AgentCLI.js.map +1 -1
  11. package/dist/agents/core/BaseAgentAdapter.d.ts +4 -4
  12. package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
  13. package/dist/agents/core/BaseAgentAdapter.js +59 -23
  14. package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
  15. package/dist/agents/core/types.d.ts +18 -0
  16. package/dist/agents/core/types.d.ts.map +1 -1
  17. package/dist/agents/plugins/claude.plugin.d.ts +0 -3
  18. package/dist/agents/plugins/claude.plugin.d.ts.map +1 -1
  19. package/dist/agents/plugins/claude.plugin.js +12 -1
  20. package/dist/agents/plugins/claude.plugin.js.map +1 -1
  21. package/dist/agents/plugins/codemie-code.plugin.js +1 -1
  22. package/dist/agents/plugins/codemie-code.plugin.js.map +1 -1
  23. package/dist/agents/plugins/codex.plugin.d.ts.map +1 -1
  24. package/dist/agents/plugins/codex.plugin.js +40 -4
  25. package/dist/agents/plugins/codex.plugin.js.map +1 -1
  26. package/dist/agents/plugins/gemini.plugin.d.ts.map +1 -1
  27. package/dist/agents/plugins/gemini.plugin.js +51 -6
  28. package/dist/agents/plugins/gemini.plugin.js.map +1 -1
  29. package/dist/agents/registry.d.ts +15 -2
  30. package/dist/agents/registry.d.ts.map +1 -1
  31. package/dist/agents/registry.js +30 -6
  32. package/dist/agents/registry.js.map +1 -1
  33. package/dist/analytics/aggregation/adapters/claude.adapter.d.ts +37 -0
  34. package/dist/analytics/aggregation/adapters/claude.adapter.d.ts.map +1 -0
  35. package/dist/analytics/aggregation/adapters/claude.adapter.js +471 -0
  36. package/dist/analytics/aggregation/adapters/claude.adapter.js.map +1 -0
  37. package/dist/analytics/aggregation/adapters/codex.adapter.d.ts +25 -0
  38. package/dist/analytics/aggregation/adapters/codex.adapter.d.ts.map +1 -0
  39. package/dist/analytics/aggregation/adapters/codex.adapter.js +376 -0
  40. package/dist/analytics/aggregation/adapters/codex.adapter.js.map +1 -0
  41. package/dist/analytics/aggregation/adapters/gemini.adapter.d.ts +28 -0
  42. package/dist/analytics/aggregation/adapters/gemini.adapter.d.ts.map +1 -0
  43. package/dist/analytics/aggregation/adapters/gemini.adapter.js +320 -0
  44. package/dist/analytics/aggregation/adapters/gemini.adapter.js.map +1 -0
  45. package/dist/analytics/aggregation/adapters/index.d.ts +7 -0
  46. package/dist/analytics/aggregation/adapters/index.d.ts.map +1 -0
  47. package/dist/analytics/aggregation/adapters/index.js +7 -0
  48. package/dist/analytics/aggregation/adapters/index.js.map +1 -0
  49. package/dist/analytics/aggregation/aggregator.d.ts +49 -0
  50. package/dist/analytics/aggregation/aggregator.d.ts.map +1 -0
  51. package/dist/analytics/aggregation/aggregator.js +239 -0
  52. package/dist/analytics/aggregation/aggregator.js.map +1 -0
  53. package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.d.ts +63 -0
  54. package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.d.ts.map +1 -0
  55. package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.js +58 -0
  56. package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.js.map +1 -0
  57. package/dist/analytics/aggregation/core/adapter.interface.d.ts +65 -0
  58. package/dist/analytics/aggregation/core/adapter.interface.d.ts.map +1 -0
  59. package/dist/analytics/aggregation/core/adapter.interface.js +9 -0
  60. package/dist/analytics/aggregation/core/adapter.interface.js.map +1 -0
  61. package/dist/analytics/aggregation/core/aggregation-utils.d.ts +66 -0
  62. package/dist/analytics/aggregation/core/aggregation-utils.d.ts.map +1 -0
  63. package/dist/analytics/aggregation/core/aggregation-utils.js +83 -0
  64. package/dist/analytics/aggregation/core/aggregation-utils.js.map +1 -0
  65. package/dist/analytics/aggregation/core/discovery.d.ts +40 -0
  66. package/dist/analytics/aggregation/core/discovery.d.ts.map +1 -0
  67. package/dist/analytics/aggregation/core/discovery.js +132 -0
  68. package/dist/analytics/aggregation/core/discovery.js.map +1 -0
  69. package/dist/analytics/aggregation/core/file-utils.d.ts +23 -0
  70. package/dist/analytics/aggregation/core/file-utils.d.ts.map +1 -0
  71. package/dist/analytics/aggregation/core/file-utils.js +208 -0
  72. package/dist/analytics/aggregation/core/file-utils.js.map +1 -0
  73. package/dist/analytics/aggregation/core/index.d.ts +11 -0
  74. package/dist/analytics/aggregation/core/index.d.ts.map +1 -0
  75. package/dist/analytics/aggregation/core/index.js +11 -0
  76. package/dist/analytics/aggregation/core/index.js.map +1 -0
  77. package/dist/analytics/aggregation/core/project-mapping.d.ts +50 -0
  78. package/dist/analytics/aggregation/core/project-mapping.d.ts.map +1 -0
  79. package/dist/analytics/aggregation/core/project-mapping.js +102 -0
  80. package/dist/analytics/aggregation/core/project-mapping.js.map +1 -0
  81. package/dist/analytics/aggregation/core/streaming.d.ts +26 -0
  82. package/dist/analytics/aggregation/core/streaming.d.ts.map +1 -0
  83. package/dist/analytics/aggregation/core/streaming.js +58 -0
  84. package/dist/analytics/aggregation/core/streaming.js.map +1 -0
  85. package/dist/analytics/aggregation/index.d.ts +8 -0
  86. package/dist/analytics/aggregation/index.d.ts.map +1 -0
  87. package/dist/analytics/aggregation/index.js +8 -0
  88. package/dist/analytics/aggregation/index.js.map +1 -0
  89. package/dist/analytics/aggregation/types.d.ts +258 -0
  90. package/dist/analytics/aggregation/types.d.ts.map +1 -0
  91. package/dist/analytics/aggregation/types.js +8 -0
  92. package/dist/analytics/aggregation/types.js.map +1 -0
  93. package/dist/analytics/collector.d.ts +46 -0
  94. package/dist/analytics/collector.d.ts.map +1 -0
  95. package/dist/analytics/collector.js +83 -0
  96. package/dist/analytics/collector.js.map +1 -0
  97. package/dist/analytics/config.d.ts +15 -0
  98. package/dist/analytics/config.d.ts.map +1 -0
  99. package/dist/analytics/config.js +65 -0
  100. package/dist/analytics/config.js.map +1 -0
  101. package/dist/analytics/index.d.ts +99 -0
  102. package/dist/analytics/index.d.ts.map +1 -0
  103. package/dist/analytics/index.js +288 -0
  104. package/dist/analytics/index.js.map +1 -0
  105. package/dist/analytics/plugins/api-metrics.plugin.d.ts +26 -0
  106. package/dist/analytics/plugins/api-metrics.plugin.d.ts.map +1 -0
  107. package/dist/analytics/plugins/api-metrics.plugin.js +97 -0
  108. package/dist/analytics/plugins/api-metrics.plugin.js.map +1 -0
  109. package/dist/analytics/plugins/index.d.ts +15 -0
  110. package/dist/analytics/plugins/index.d.ts.map +1 -0
  111. package/dist/analytics/plugins/index.js +15 -0
  112. package/dist/analytics/plugins/index.js.map +1 -0
  113. package/dist/analytics/plugins/model-metrics.plugin.d.ts +39 -0
  114. package/dist/analytics/plugins/model-metrics.plugin.d.ts.map +1 -0
  115. package/dist/analytics/plugins/model-metrics.plugin.js +105 -0
  116. package/dist/analytics/plugins/model-metrics.plugin.js.map +1 -0
  117. package/dist/analytics/plugins/provider-metrics.plugin.d.ts +41 -0
  118. package/dist/analytics/plugins/provider-metrics.plugin.d.ts.map +1 -0
  119. package/dist/analytics/plugins/provider-metrics.plugin.js +123 -0
  120. package/dist/analytics/plugins/provider-metrics.plugin.js.map +1 -0
  121. package/dist/analytics/plugins/types.d.ts +61 -0
  122. package/dist/analytics/plugins/types.d.ts.map +1 -0
  123. package/dist/analytics/plugins/types.js +54 -0
  124. package/dist/analytics/plugins/types.js.map +1 -0
  125. package/dist/analytics/privacy.d.ts +10 -0
  126. package/dist/analytics/privacy.d.ts.map +1 -0
  127. package/dist/analytics/privacy.js +20 -0
  128. package/dist/analytics/privacy.js.map +1 -0
  129. package/dist/analytics/session.d.ts +56 -0
  130. package/dist/analytics/session.d.ts.map +1 -0
  131. package/dist/analytics/session.js +95 -0
  132. package/dist/analytics/session.js.map +1 -0
  133. package/dist/analytics/types.d.ts +104 -0
  134. package/dist/analytics/types.d.ts.map +1 -0
  135. package/dist/analytics/types.js +15 -0
  136. package/dist/analytics/types.js.map +1 -0
  137. package/dist/analytics/writer.d.ts +18 -0
  138. package/dist/analytics/writer.d.ts.map +1 -0
  139. package/dist/analytics/writer.js +44 -0
  140. package/dist/analytics/writer.js.map +1 -0
  141. package/dist/cli/commands/analytics.d.ts +3 -0
  142. package/dist/cli/commands/analytics.d.ts.map +1 -0
  143. package/dist/cli/commands/analytics.js +579 -0
  144. package/dist/cli/commands/analytics.js.map +1 -0
  145. package/dist/cli/commands/config.d.ts.map +1 -1
  146. package/dist/cli/commands/config.js +14 -0
  147. package/dist/cli/commands/config.js.map +1 -1
  148. package/dist/cli/commands/profile.d.ts.map +1 -1
  149. package/dist/cli/commands/profile.js +41 -0
  150. package/dist/cli/commands/profile.js.map +1 -1
  151. package/dist/cli/commands/setup.js +70 -1
  152. package/dist/cli/commands/setup.js.map +1 -1
  153. package/dist/cli/index.js +2 -0
  154. package/dist/cli/index.js.map +1 -1
  155. package/dist/env/types.d.ts +2 -0
  156. package/dist/env/types.d.ts.map +1 -1
  157. package/dist/env/types.js.map +1 -1
  158. package/dist/utils/analytics-reader.d.ts +117 -0
  159. package/dist/utils/analytics-reader.d.ts.map +1 -0
  160. package/dist/utils/analytics-reader.js +421 -0
  161. package/dist/utils/analytics-reader.js.map +1 -0
  162. package/dist/utils/codemie-integration-validator.d.ts.map +1 -1
  163. package/dist/utils/codemie-integration-validator.js +3 -16
  164. package/dist/utils/codemie-integration-validator.js.map +1 -1
  165. package/dist/utils/codemie-proxy.d.ts +80 -0
  166. package/dist/utils/codemie-proxy.d.ts.map +1 -0
  167. package/dist/utils/codemie-proxy.js +348 -0
  168. package/dist/utils/codemie-proxy.js.map +1 -0
  169. package/dist/utils/config-loader.d.ts +7 -0
  170. package/dist/utils/config-loader.d.ts.map +1 -1
  171. package/dist/utils/config-loader.js +18 -0
  172. package/dist/utils/config-loader.js.map +1 -1
  173. package/dist/utils/date-formatter.d.ts +88 -0
  174. package/dist/utils/date-formatter.d.ts.map +1 -0
  175. package/dist/utils/date-formatter.js +133 -0
  176. package/dist/utils/date-formatter.js.map +1 -0
  177. package/dist/utils/installation-id.d.ts +10 -0
  178. package/dist/utils/installation-id.d.ts.map +1 -0
  179. package/dist/utils/installation-id.js +30 -0
  180. package/dist/utils/installation-id.js.map +1 -0
  181. package/dist/utils/logger.d.ts +1 -15
  182. package/dist/utils/logger.d.ts.map +1 -1
  183. package/dist/utils/logger.js +5 -86
  184. package/dist/utils/logger.js.map +1 -1
  185. package/dist/utils/proxy/errors.d.ts +45 -0
  186. package/dist/utils/proxy/errors.d.ts.map +1 -0
  187. package/dist/utils/proxy/errors.js +103 -0
  188. package/dist/utils/proxy/errors.js.map +1 -0
  189. package/dist/utils/proxy/http-client.d.ts +46 -0
  190. package/dist/utils/proxy/http-client.d.ts.map +1 -0
  191. package/dist/utils/proxy/http-client.js +139 -0
  192. package/dist/utils/proxy/http-client.js.map +1 -0
  193. package/dist/utils/proxy/interceptors.d.ts +69 -0
  194. package/dist/utils/proxy/interceptors.d.ts.map +1 -0
  195. package/dist/utils/proxy/interceptors.js +308 -0
  196. package/dist/utils/proxy/interceptors.js.map +1 -0
  197. package/dist/utils/proxy/types.d.ts +45 -0
  198. package/dist/utils/proxy/types.d.ts.map +1 -0
  199. package/dist/utils/proxy/types.js +7 -0
  200. package/dist/utils/proxy/types.js.map +1 -0
  201. package/package.json +43 -6
  202. package/dist/utils/sso-gateway.d.ts +0 -75
  203. package/dist/utils/sso-gateway.d.ts.map +0 -1
  204. package/dist/utils/sso-gateway.js +0 -453
  205. package/dist/utils/sso-gateway.js.map +0 -1
@@ -0,0 +1 @@
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;IAE3D;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAoEzE;;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,123 @@
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
+ /**
13
+ * Process events to track metrics (no enrichment to individual events)
14
+ */
15
+ async processEvent(event) {
16
+ // Extract provider from event
17
+ const provider = event.provider || event.attributes.provider;
18
+ if (!provider) {
19
+ return event;
20
+ }
21
+ // Initialize provider stats if needed
22
+ if (!this.providerMetrics.has(provider)) {
23
+ this.providerMetrics.set(provider, {
24
+ requestCount: 0,
25
+ successCount: 0,
26
+ failureCount: 0,
27
+ totalLatency: 0,
28
+ timeouts: 0,
29
+ networkErrors: 0,
30
+ authErrors: 0
31
+ });
32
+ }
33
+ const stats = this.providerMetrics.get(provider);
34
+ // Track API requests
35
+ if (event.eventType === 'api_request') {
36
+ stats.requestCount++;
37
+ }
38
+ // Track API responses
39
+ if (event.eventType === 'api_response') {
40
+ const statusCode = event.attributes.statusCode;
41
+ const latency = event.metrics?.latencyMs;
42
+ if (statusCode >= 200 && statusCode < 400) {
43
+ stats.successCount++;
44
+ }
45
+ else {
46
+ stats.failureCount++;
47
+ // Track specific error types
48
+ if (statusCode === 401 || statusCode === 403) {
49
+ stats.authErrors++;
50
+ }
51
+ }
52
+ if (latency) {
53
+ stats.totalLatency += latency;
54
+ }
55
+ }
56
+ // Track proxy errors
57
+ if (event.eventType === 'proxy_error') {
58
+ const errorType = event.attributes.errorType;
59
+ if (errorType === 'TimeoutError') {
60
+ stats.timeouts++;
61
+ }
62
+ else if (errorType === 'NetworkError') {
63
+ stats.networkErrors++;
64
+ }
65
+ else if (errorType === 'AuthenticationError') {
66
+ stats.authErrors++;
67
+ }
68
+ stats.failureCount++;
69
+ }
70
+ // Return event unchanged (no enrichment)
71
+ return event;
72
+ }
73
+ /**
74
+ * Get current aggregated metrics for all providers
75
+ */
76
+ getMetrics() {
77
+ const providerMetrics = {};
78
+ for (const [provider, stats] of this.providerMetrics.entries()) {
79
+ const successRate = stats.requestCount > 0
80
+ ? stats.successCount / stats.requestCount
81
+ : 0;
82
+ const errorRate = stats.requestCount > 0
83
+ ? stats.failureCount / stats.requestCount
84
+ : 0;
85
+ const avgLatency = stats.successCount > 0
86
+ ? stats.totalLatency / stats.successCount
87
+ : 0;
88
+ providerMetrics[provider] = {
89
+ requestCount: stats.requestCount,
90
+ successCount: stats.successCount,
91
+ failureCount: stats.failureCount,
92
+ successRate: Math.round(successRate * 100) / 100,
93
+ errorRate: Math.round(errorRate * 100) / 100,
94
+ averageLatencyMs: Math.round(avgLatency),
95
+ timeouts: stats.timeouts,
96
+ networkErrors: stats.networkErrors,
97
+ authErrors: stats.authErrors
98
+ };
99
+ }
100
+ return {
101
+ providers: providerMetrics,
102
+ providerCount: this.providerMetrics.size
103
+ };
104
+ }
105
+ /**
106
+ * Reset metrics (useful for new sessions)
107
+ */
108
+ reset() {
109
+ this.providerMetrics.clear();
110
+ }
111
+ /**
112
+ * Get all provider metrics (useful for session end reporting)
113
+ * @deprecated Use getMetrics() instead
114
+ */
115
+ getAllProviderMetrics() {
116
+ const result = {};
117
+ for (const [provider, stats] of this.providerMetrics.entries()) {
118
+ result[provider] = { ...stats };
119
+ }
120
+ return result;
121
+ }
122
+ }
123
+ //# 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,61 @@
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
+ /** Get current aggregated metrics snapshot (for reporting) */
23
+ getMetrics?(): Record<string, unknown>;
24
+ /** Reset plugin metrics (useful for new sessions) */
25
+ reset?(): void;
26
+ /** Custom event types this plugin handles (optional) */
27
+ customEventTypes?: string[];
28
+ }
29
+ /**
30
+ * Plugin Registry
31
+ * Central place for all analytics plugins
32
+ */
33
+ export declare class AnalyticsPluginRegistry {
34
+ private plugins;
35
+ /**
36
+ * Register a plugin
37
+ * @throws Error if plugin name already registered
38
+ */
39
+ register(plugin: AnalyticsPlugin): void;
40
+ /**
41
+ * Get all registered plugins
42
+ */
43
+ getAll(): AnalyticsPlugin[];
44
+ /**
45
+ * Get plugin by name
46
+ */
47
+ getByName(name: string): AnalyticsPlugin | undefined;
48
+ /**
49
+ * Check if plugin is registered
50
+ */
51
+ has(name: string): boolean;
52
+ /**
53
+ * Unregister plugin
54
+ */
55
+ unregister(name: string): boolean;
56
+ /**
57
+ * Clear all plugins
58
+ */
59
+ clear(): void;
60
+ }
61
+ //# 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,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;AAgCH;;;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 milliseconds
21
+ */
22
+ get durationMs(): 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,UAAU,IAAI,MAAM,CAKvB;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 milliseconds
39
+ */
40
+ get durationMs() {
41
+ if (!this.session) {
42
+ return 0;
43
+ }
44
+ return Date.now() - this.session.startTime;
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,UAAU;QACZ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,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,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"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Analytics types and interfaces for CodeMie CLI
3
+ * Provides unified analytics across all agents with minimal overhead
4
+ */
5
+ /**
6
+ * Analytics configuration
7
+ */
8
+ export interface AnalyticsConfig {
9
+ /** Enable/disable analytics collection */
10
+ enabled: boolean;
11
+ /** Storage target: local file, remote endpoint, or both */
12
+ target: 'local' | 'remote' | 'both';
13
+ /** Local storage path for JSONL files */
14
+ localPath: string;
15
+ /** Remote endpoint URL (optional) */
16
+ remoteEndpoint?: string;
17
+ /** Buffer flush interval in milliseconds */
18
+ flushInterval: number;
19
+ /** Maximum events to buffer before auto-flush */
20
+ maxBufferSize: number;
21
+ }
22
+ /**
23
+ * Default analytics configuration
24
+ */
25
+ export declare const DEFAULT_ANALYTICS_CONFIG: AnalyticsConfig;
26
+ /**
27
+ * Event types tracked across all agents
28
+ */
29
+ export type EventType = 'session_start' | 'session_end' | 'session_error' | 'api_request' | 'api_response' | 'api_error' | 'proxy_error' | 'config_change' | 'profile_switch' | 'latency_measurement';
30
+ /**
31
+ * Core analytics event structure
32
+ * OpenTelemetry-inspired format for consistency
33
+ */
34
+ export interface AnalyticsEvent {
35
+ timestamp: string;
36
+ eventType: EventType;
37
+ sessionId: string;
38
+ installationId: string;
39
+ agent: string;
40
+ agentVersion: string;
41
+ cliVersion: string;
42
+ profile: string;
43
+ provider: string;
44
+ model: string;
45
+ attributes: Record<string, unknown>;
46
+ metrics?: Record<string, number>;
47
+ }
48
+ /**
49
+ * Session configuration
50
+ */
51
+ export interface SessionConfig {
52
+ agent: string;
53
+ agentVersion: string;
54
+ cliVersion: string;
55
+ profile: string;
56
+ provider: string;
57
+ model: string;
58
+ workingDir: string;
59
+ interactive: boolean;
60
+ }
61
+ /**
62
+ * Session metadata
63
+ */
64
+ export interface SessionMetadata {
65
+ id: string;
66
+ startTime: number;
67
+ agent: string;
68
+ agentVersion: string;
69
+ cliVersion: string;
70
+ profile: string;
71
+ provider: string;
72
+ model: string;
73
+ workingDir: string;
74
+ interactive: boolean;
75
+ }
76
+ /**
77
+ * Collector configuration
78
+ */
79
+ export interface CollectorConfig {
80
+ maxBufferSize: number;
81
+ flushInterval: number;
82
+ }
83
+ /**
84
+ * Analytics writer interface
85
+ */
86
+ export interface IAnalyticsWriter {
87
+ write(events: AnalyticsEvent[]): Promise<void>;
88
+ }
89
+ /**
90
+ * Remote analytics interface
91
+ */
92
+ export interface IRemoteAnalytics {
93
+ send(events: AnalyticsEvent[]): Promise<void>;
94
+ }
95
+ /**
96
+ * Comprehensive session metrics
97
+ */
98
+ export interface SessionMetrics {
99
+ apiRequestCount: number;
100
+ totalLatencyMs: number;
101
+ averageLatencyMs: number;
102
+ durationSeconds: number;
103
+ }
104
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/analytics/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,0CAA0C;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,2DAA2D;IAC3D,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpC,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,eAMtC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,SAAS,GAEjB,eAAe,GACf,aAAa,GACb,eAAe,GAEf,aAAa,GACb,cAAc,GACd,WAAW,GAEX,aAAa,GAEb,eAAe,GACf,gBAAgB,GAEhB,qBAAqB,CAAC;AAE1B;;;GAGG;AACH,MAAM,WAAW,cAAc;IAE7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IAGvB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IAGnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IAGd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAE7B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IAGzB,eAAe,EAAE,MAAM,CAAC;CACzB"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Analytics types and interfaces for CodeMie CLI
3
+ * Provides unified analytics across all agents with minimal overhead
4
+ */
5
+ /**
6
+ * Default analytics configuration
7
+ */
8
+ export const DEFAULT_ANALYTICS_CONFIG = {
9
+ enabled: false,
10
+ target: 'local',
11
+ localPath: '~/.codemie/analytics',
12
+ flushInterval: 5000, // 5 seconds
13
+ maxBufferSize: 100,
14
+ };
15
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/analytics/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoBH;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAoB;IACvD,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,OAAO;IACf,SAAS,EAAE,sBAAsB;IACjC,aAAa,EAAE,IAAI,EAAE,YAAY;IACjC,aAAa,EAAE,GAAG;CACnB,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Local JSONL writer for analytics
3
+ * Writes events to daily log files in JSONL format
4
+ */
5
+ import type { AnalyticsEvent, IAnalyticsWriter } from './types.js';
6
+ /**
7
+ * Writes analytics events to local JSONL files
8
+ * One file per day: ~/.codemie/analytics/YYYY-MM-DD.jsonl
9
+ */
10
+ export declare class AnalyticsWriter implements IAnalyticsWriter {
11
+ private basePath;
12
+ constructor(basePath?: string);
13
+ /**
14
+ * Write events to daily log file
15
+ */
16
+ write(events: AnalyticsEvent[]): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/analytics/writer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnE;;;GAGG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,CAAC,EAAE,MAAM;IAO7B;;OAEG;IACG,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAuBrD"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Local JSONL writer for analytics
3
+ * Writes events to daily log files in JSONL format
4
+ */
5
+ import { appendFile, mkdir } from 'node:fs/promises';
6
+ import { join } from 'node:path';
7
+ import { homedir } from 'node:os';
8
+ /**
9
+ * Writes analytics events to local JSONL files
10
+ * One file per day: ~/.codemie/analytics/YYYY-MM-DD.jsonl
11
+ */
12
+ export class AnalyticsWriter {
13
+ basePath;
14
+ constructor(basePath) {
15
+ // Expand ~ to home directory
16
+ this.basePath = basePath
17
+ ? basePath.replace(/^~/, homedir())
18
+ : join(homedir(), '.codemie', 'analytics');
19
+ }
20
+ /**
21
+ * Write events to daily log file
22
+ */
23
+ async write(events) {
24
+ if (events.length === 0) {
25
+ return;
26
+ }
27
+ try {
28
+ // Get current date for filename
29
+ const date = new Date().toISOString().split('T')[0];
30
+ const filePath = join(this.basePath, `${date}.jsonl`);
31
+ // Ensure directory exists
32
+ await mkdir(this.basePath, { recursive: true });
33
+ // Convert events to JSONL (one JSON per line)
34
+ const lines = events.map((event) => JSON.stringify(event)).join('\n') + '\n';
35
+ // Append to file (non-blocking)
36
+ await appendFile(filePath, lines, 'utf-8');
37
+ }
38
+ catch (error) {
39
+ // Silently fail - don't block agent execution
40
+ console.error('Analytics write error:', error);
41
+ }
42
+ }
43
+ }
44
+ //# sourceMappingURL=writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/analytics/writer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC;;;GAGG;AACH,MAAM,OAAO,eAAe;IAClB,QAAQ,CAAS;IAEzB,YAAY,QAAiB;QAC3B,6BAA6B;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ;YACtB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;YACnC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,MAAwB;QAClC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,gCAAgC;YAChC,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,QAAQ,CAAC,CAAC;YAEtD,0BAA0B;YAC1B,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEhD,8CAA8C;YAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YAE7E,gCAAgC;YAChC,MAAM,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,8CAA8C;YAC9C,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createAnalyticsCommand(): Command;
3
+ //# sourceMappingURL=analytics.d.ts.map