@codemieai/code 0.0.14 → 0.0.15

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 (173) hide show
  1. package/README.md +8 -6
  2. package/dist/agents/codemie-code/agent.d.ts.map +1 -1
  3. package/dist/agents/codemie-code/agent.js +4 -4
  4. package/dist/agents/codemie-code/agent.js.map +1 -1
  5. package/dist/agents/codemie-code/config.d.ts.map +1 -1
  6. package/dist/agents/codemie-code/config.js +2 -1
  7. package/dist/agents/codemie-code/config.js.map +1 -1
  8. package/dist/agents/codemie-code/filters.js +12 -12
  9. package/dist/agents/codemie-code/filters.js.map +1 -1
  10. package/dist/agents/codemie-code/index.d.ts.map +1 -1
  11. package/dist/agents/codemie-code/index.js +3 -1
  12. package/dist/agents/codemie-code/index.js.map +1 -1
  13. package/dist/agents/codemie-code/storage/todoStorage.js +1 -1
  14. package/dist/agents/codemie-code/storage/todoStorage.js.map +1 -1
  15. package/dist/agents/codemie-code/tools/planning.d.ts +1 -1
  16. package/dist/agents/codemie-code/ui.js +1 -1
  17. package/dist/agents/codemie-code/ui.js.map +1 -1
  18. package/dist/agents/core/AgentCLI.js +1 -1
  19. package/dist/agents/core/AgentCLI.js.map +1 -1
  20. package/dist/agents/core/types.d.ts +5 -0
  21. package/dist/agents/core/types.d.ts.map +1 -1
  22. package/dist/agents/plugins/codemie-code.plugin.js +1 -1
  23. package/dist/agents/plugins/codemie-code.plugin.js.map +1 -1
  24. package/dist/analytics/aggregation/adapters/claude.adapter.d.ts.map +1 -1
  25. package/dist/analytics/aggregation/adapters/claude.adapter.js +75 -15
  26. package/dist/analytics/aggregation/adapters/claude.adapter.js.map +1 -1
  27. package/dist/analytics/aggregation/adapters/codex.adapter.d.ts.map +1 -1
  28. package/dist/analytics/aggregation/adapters/codex.adapter.js +20 -0
  29. package/dist/analytics/aggregation/adapters/codex.adapter.js.map +1 -1
  30. package/dist/analytics/aggregation/adapters/gemini.adapter.d.ts +8 -0
  31. package/dist/analytics/aggregation/adapters/gemini.adapter.d.ts.map +1 -1
  32. package/dist/analytics/aggregation/adapters/gemini.adapter.js +46 -1
  33. package/dist/analytics/aggregation/adapters/gemini.adapter.js.map +1 -1
  34. package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.d.ts +36 -0
  35. package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.d.ts.map +1 -1
  36. package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.js +52 -0
  37. package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.js.map +1 -1
  38. package/dist/analytics/aggregation/core/adapter.interface.d.ts +11 -0
  39. package/dist/analytics/aggregation/core/adapter.interface.d.ts.map +1 -1
  40. package/dist/analytics/aggregation/core/aggregation-utils.d.ts +20 -0
  41. package/dist/analytics/aggregation/core/aggregation-utils.d.ts.map +1 -1
  42. package/dist/analytics/aggregation/core/aggregation-utils.js +43 -0
  43. package/dist/analytics/aggregation/core/aggregation-utils.js.map +1 -1
  44. package/dist/analytics/aggregation/core/file-utils.d.ts +2 -1
  45. package/dist/analytics/aggregation/core/file-utils.d.ts.map +1 -1
  46. package/dist/analytics/aggregation/core/file-utils.js +20 -85
  47. package/dist/analytics/aggregation/core/file-utils.js.map +1 -1
  48. package/dist/analytics/aggregation/core/index.d.ts +3 -0
  49. package/dist/analytics/aggregation/core/index.d.ts.map +1 -1
  50. package/dist/analytics/aggregation/core/index.js +3 -0
  51. package/dist/analytics/aggregation/core/index.js.map +1 -1
  52. package/dist/analytics/aggregation/core/user-prompt-source.d.ts +81 -0
  53. package/dist/analytics/aggregation/core/user-prompt-source.d.ts.map +1 -0
  54. package/dist/analytics/aggregation/core/user-prompt-source.js +69 -0
  55. package/dist/analytics/aggregation/core/user-prompt-source.js.map +1 -0
  56. package/dist/analytics/aggregation/core/user-prompt-sources/json.d.ts +49 -0
  57. package/dist/analytics/aggregation/core/user-prompt-sources/json.d.ts.map +1 -0
  58. package/dist/analytics/aggregation/core/user-prompt-sources/json.js +66 -0
  59. package/dist/analytics/aggregation/core/user-prompt-sources/json.js.map +1 -0
  60. package/dist/analytics/aggregation/core/user-prompt-sources/jsonl.d.ts +43 -0
  61. package/dist/analytics/aggregation/core/user-prompt-sources/jsonl.d.ts.map +1 -0
  62. package/dist/analytics/aggregation/core/user-prompt-sources/jsonl.js +56 -0
  63. package/dist/analytics/aggregation/core/user-prompt-sources/jsonl.js.map +1 -0
  64. package/dist/analytics/aggregation/types.d.ts +20 -0
  65. package/dist/analytics/aggregation/types.d.ts.map +1 -1
  66. package/dist/analytics/remote-submission/cursor-manager.d.ts +71 -0
  67. package/dist/analytics/remote-submission/cursor-manager.d.ts.map +1 -0
  68. package/dist/analytics/remote-submission/cursor-manager.js +204 -0
  69. package/dist/analytics/remote-submission/cursor-manager.js.map +1 -0
  70. package/dist/analytics/remote-submission/index.d.ts +12 -0
  71. package/dist/analytics/remote-submission/index.d.ts.map +1 -0
  72. package/dist/analytics/remote-submission/index.js +11 -0
  73. package/dist/analytics/remote-submission/index.js.map +1 -0
  74. package/dist/analytics/remote-submission/lock-manager.d.ts +71 -0
  75. package/dist/analytics/remote-submission/lock-manager.d.ts.map +1 -0
  76. package/dist/analytics/remote-submission/lock-manager.js +238 -0
  77. package/dist/analytics/remote-submission/lock-manager.js.map +1 -0
  78. package/dist/analytics/remote-submission/metric-transformer.d.ts +49 -0
  79. package/dist/analytics/remote-submission/metric-transformer.d.ts.map +1 -0
  80. package/dist/analytics/remote-submission/metric-transformer.js +175 -0
  81. package/dist/analytics/remote-submission/metric-transformer.js.map +1 -0
  82. package/dist/analytics/remote-submission/submitter.d.ts +78 -0
  83. package/dist/analytics/remote-submission/submitter.d.ts.map +1 -0
  84. package/dist/analytics/remote-submission/submitter.js +381 -0
  85. package/dist/analytics/remote-submission/submitter.js.map +1 -0
  86. package/dist/analytics/remote-submission/types.d.ts +169 -0
  87. package/dist/analytics/remote-submission/types.d.ts.map +1 -0
  88. package/dist/analytics/remote-submission/types.js +13 -0
  89. package/dist/analytics/remote-submission/types.js.map +1 -0
  90. package/dist/cli/commands/analytics.d.ts.map +1 -1
  91. package/dist/cli/commands/analytics.js +181 -12
  92. package/dist/cli/commands/analytics.js.map +1 -1
  93. package/dist/cli/commands/doctor/index.d.ts.map +1 -1
  94. package/dist/cli/commands/doctor/index.js +13 -1
  95. package/dist/cli/commands/doctor/index.js.map +1 -1
  96. package/dist/cli/commands/doctor/providers/AIRunSSOProviderCheck.d.ts.map +1 -1
  97. package/dist/cli/commands/doctor/providers/AIRunSSOProviderCheck.js +81 -9
  98. package/dist/cli/commands/doctor/providers/AIRunSSOProviderCheck.js.map +1 -1
  99. package/dist/cli/commands/profile.d.ts.map +1 -1
  100. package/dist/cli/commands/profile.js +25 -57
  101. package/dist/cli/commands/profile.js.map +1 -1
  102. package/dist/cli/commands/setup.d.ts.map +1 -1
  103. package/dist/cli/commands/setup.js +10 -0
  104. package/dist/cli/commands/setup.js.map +1 -1
  105. package/dist/cli/commands/workflow.js +1 -1
  106. package/dist/cli/commands/workflow.js.map +1 -1
  107. package/dist/cli/index.js +0 -4
  108. package/dist/cli/index.js.map +1 -1
  109. package/dist/utils/analytics-reader.js +1 -1
  110. package/dist/utils/analytics-reader.js.map +1 -1
  111. package/dist/utils/codemie-model-fetcher.d.ts.map +1 -1
  112. package/dist/utils/codemie-model-fetcher.js +197 -122
  113. package/dist/utils/codemie-model-fetcher.js.map +1 -1
  114. package/dist/utils/codemie-proxy.d.ts +41 -21
  115. package/dist/utils/codemie-proxy.d.ts.map +1 -1
  116. package/dist/utils/codemie-proxy.js +151 -86
  117. package/dist/utils/codemie-proxy.js.map +1 -1
  118. package/dist/utils/config-loader.d.ts +4 -0
  119. package/dist/utils/config-loader.d.ts.map +1 -1
  120. package/dist/utils/config-loader.js +42 -2
  121. package/dist/utils/config-loader.js.map +1 -1
  122. package/dist/utils/first-time.d.ts +0 -4
  123. package/dist/utils/first-time.d.ts.map +1 -1
  124. package/dist/utils/first-time.js +5 -117
  125. package/dist/utils/first-time.js.map +1 -1
  126. package/dist/utils/logger.d.ts +31 -1
  127. package/dist/utils/logger.d.ts.map +1 -1
  128. package/dist/utils/logger.js +112 -2
  129. package/dist/utils/logger.js.map +1 -1
  130. package/dist/utils/proxy/plugins/analytics.plugin.d.ts +19 -0
  131. package/dist/utils/proxy/plugins/analytics.plugin.d.ts.map +1 -0
  132. package/dist/utils/proxy/plugins/analytics.plugin.js +84 -0
  133. package/dist/utils/proxy/plugins/analytics.plugin.js.map +1 -0
  134. package/dist/utils/proxy/plugins/header-injection.plugin.d.ts +16 -0
  135. package/dist/utils/proxy/plugins/header-injection.plugin.d.ts.map +1 -0
  136. package/dist/utils/proxy/plugins/header-injection.plugin.js +48 -0
  137. package/dist/utils/proxy/plugins/header-injection.plugin.js.map +1 -0
  138. package/dist/utils/proxy/plugins/index.d.ts +18 -0
  139. package/dist/utils/proxy/plugins/index.d.ts.map +1 -0
  140. package/dist/utils/proxy/plugins/index.js +30 -0
  141. package/dist/utils/proxy/plugins/index.js.map +1 -0
  142. package/dist/utils/proxy/plugins/registry.d.ts +50 -0
  143. package/dist/utils/proxy/plugins/registry.d.ts.map +1 -0
  144. package/dist/utils/proxy/plugins/registry.js +124 -0
  145. package/dist/utils/proxy/plugins/registry.js.map +1 -0
  146. package/dist/utils/proxy/plugins/sso-auth.plugin.d.ts +16 -0
  147. package/dist/utils/proxy/plugins/sso-auth.plugin.d.ts.map +1 -0
  148. package/dist/utils/proxy/plugins/sso-auth.plugin.js +35 -0
  149. package/dist/utils/proxy/plugins/sso-auth.plugin.js.map +1 -0
  150. package/dist/utils/proxy/plugins/types.d.ts +79 -0
  151. package/dist/utils/proxy/plugins/types.d.ts.map +1 -0
  152. package/dist/utils/proxy/plugins/types.js +8 -0
  153. package/dist/utils/proxy/plugins/types.js.map +1 -0
  154. package/dist/utils/sanitize.d.ts +28 -0
  155. package/dist/utils/sanitize.d.ts.map +1 -0
  156. package/dist/utils/sanitize.js +213 -0
  157. package/dist/utils/sanitize.js.map +1 -0
  158. package/dist/workflows/installer.d.ts.map +1 -1
  159. package/dist/workflows/installer.js +3 -4
  160. package/dist/workflows/installer.js.map +1 -1
  161. package/package.json +1 -1
  162. package/dist/cli/commands/config.d.ts +0 -3
  163. package/dist/cli/commands/config.d.ts.map +0 -1
  164. package/dist/cli/commands/config.js +0 -198
  165. package/dist/cli/commands/config.js.map +0 -1
  166. package/dist/cli/commands/env.d.ts +0 -3
  167. package/dist/cli/commands/env.d.ts.map +0 -1
  168. package/dist/cli/commands/env.js +0 -19
  169. package/dist/cli/commands/env.js.map +0 -1
  170. package/dist/utils/proxy/interceptors.d.ts +0 -69
  171. package/dist/utils/proxy/interceptors.d.ts.map +0 -1
  172. package/dist/utils/proxy/interceptors.js +0 -308
  173. package/dist/utils/proxy/interceptors.js.map +0 -1
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Metric Transformer - Backend-Aligned Pattern
3
+ *
4
+ * Transforms CodemieSession raw events into backend-aligned metric payloads
5
+ * following the approved 3+1 metric pattern:
6
+ * - codemie_tools_usage_total (success with ALL details)
7
+ * - codemie_tools_usage_tokens (optional, when available)
8
+ * - codemie_tools_usage_errors_total (failures with details)
9
+ * - codemie_coding_agent_usage (session aggregation)
10
+ */
11
+ import type { CodemieSession, CodemieMessage, CodemieToolCall, CodemieFileModification } from '../aggregation/types.js';
12
+ import type { MetricPayload } from './types.js';
13
+ /**
14
+ * Transform CodemieSession raw events to backend-aligned metrics
15
+ *
16
+ * CRITICAL: CodemieSession contains AGGREGATED data. We extract individual
17
+ * tool call events from raw JSONL files for granular metrics.
18
+ *
19
+ * This function implements the APPROVED backend pattern with 3+1 metrics:
20
+ * - codemie_tools_usage_total (success with ALL details)
21
+ * - codemie_tools_usage_tokens (optional, if tokens available)
22
+ * - codemie_tools_usage_errors_total (failures with details)
23
+ * - codemie_coding_agent_usage (session aggregation)
24
+ */
25
+ export declare function transformSessionToMetrics(session: CodemieSession, rawData: {
26
+ messages: CodemieMessage[];
27
+ toolCalls: CodemieToolCall[];
28
+ fileModifications: CodemieFileModification[];
29
+ }, config: {
30
+ userId: string;
31
+ userName: string;
32
+ }): MetricPayload[];
33
+ /**
34
+ * Create session aggregation metric
35
+ * Only called when session ends (explicit endTime or timeout)
36
+ */
37
+ export declare function createSessionMetric(session: CodemieSession, rawData: {
38
+ messages: CodemieMessage[];
39
+ toolCalls: CodemieToolCall[];
40
+ fileModifications: CodemieFileModification[];
41
+ }, config: {
42
+ userId: string;
43
+ userName: string;
44
+ }, options: {
45
+ status: 'completed' | 'timeout' | 'resumed';
46
+ exitReason: string;
47
+ isFinal: boolean;
48
+ }): MetricPayload;
49
+ //# sourceMappingURL=metric-transformer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metric-transformer.d.ts","sourceRoot":"","sources":["../../../src/analytics/remote-submission/metric-transformer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,eAAe,EACf,uBAAuB,EACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EACV,aAAa,EAMd,MAAM,YAAY,CAAC;AAmBpB;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE;IACP,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,iBAAiB,EAAE,uBAAuB,EAAE,CAAC;CAC9C,EACD,MAAM,EAAE;IACN,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,GACA,aAAa,EAAE,CAqGjB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE;IACP,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,iBAAiB,EAAE,uBAAuB,EAAE,CAAC;CAC9C,EACD,MAAM,EAAE;IACN,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,EACD,OAAO,EAAE;IACP,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB,GACA,aAAa,CAmDf"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Metric Transformer - Backend-Aligned Pattern
3
+ *
4
+ * Transforms CodemieSession raw events into backend-aligned metric payloads
5
+ * following the approved 3+1 metric pattern:
6
+ * - codemie_tools_usage_total (success with ALL details)
7
+ * - codemie_tools_usage_tokens (optional, when available)
8
+ * - codemie_tools_usage_errors_total (failures with details)
9
+ * - codemie_coding_agent_usage (session aggregation)
10
+ */
11
+ /**
12
+ * Helper: Estimate API requests from messages
13
+ * Heuristic: Usually 1-2 API calls per assistant message
14
+ */
15
+ function estimateAPIRequests(session) {
16
+ return Math.ceil(session.assistantMessageCount * 1.5);
17
+ }
18
+ /**
19
+ * Helper: Calculate total execution time from tool calls
20
+ */
21
+ function calculateTotalExecutionTime(toolCalls) {
22
+ return toolCalls.reduce((sum, tc) => sum + (tc.durationMs || 0), 0);
23
+ }
24
+ /**
25
+ * Transform CodemieSession raw events to backend-aligned metrics
26
+ *
27
+ * CRITICAL: CodemieSession contains AGGREGATED data. We extract individual
28
+ * tool call events from raw JSONL files for granular metrics.
29
+ *
30
+ * This function implements the APPROVED backend pattern with 3+1 metrics:
31
+ * - codemie_tools_usage_total (success with ALL details)
32
+ * - codemie_tools_usage_tokens (optional, if tokens available)
33
+ * - codemie_tools_usage_errors_total (failures with details)
34
+ * - codemie_coding_agent_usage (session aggregation)
35
+ */
36
+ export function transformSessionToMetrics(session, rawData, config) {
37
+ const metrics = [];
38
+ // Base attributes (following backend pattern)
39
+ const baseAttributes = {
40
+ tool_type: 'cli',
41
+ agent: session.agent,
42
+ agent_version: session.agentVersion,
43
+ llm_model: session.model,
44
+ user_id: config.userId,
45
+ user_name: config.userName,
46
+ project: session.projectPath,
47
+ session_id: session.sessionId,
48
+ };
49
+ // ========================================================================
50
+ // 1. TOOL EXECUTION SUCCESS (with ALL details) - Backend Pattern
51
+ // ========================================================================
52
+ for (const toolCall of rawData.toolCalls) {
53
+ if (toolCall.status === 'success') {
54
+ // Find associated file modifications for this tool call
55
+ const fileChanges = rawData.fileModifications.filter(fm => fm.toolCallId === toolCall.toolCallId);
56
+ // Calculate aggregated file stats for this tool call
57
+ const linesAdded = fileChanges.reduce((sum, fm) => sum + fm.linesAdded, 0);
58
+ const linesRemoved = fileChanges.reduce((sum, fm) => sum + fm.linesRemoved, 0);
59
+ // Get first file's metadata (if multiple files, use primary file)
60
+ const primaryFile = fileChanges[0];
61
+ const successAttributes = {
62
+ ...baseAttributes,
63
+ // Use tool call's model if available, fallback to session model
64
+ llm_model: toolCall.llm_model || session.model,
65
+ tool_name: toolCall.toolName,
66
+ duration_ms: toolCall.durationMs || 0,
67
+ count: 1,
68
+ };
69
+ // Add file modification details (optional - only if file was modified)
70
+ if (primaryFile) {
71
+ successAttributes.file_extension = primaryFile.fileExtension;
72
+ successAttributes.operation = primaryFile.operation;
73
+ successAttributes.lines_added = linesAdded;
74
+ successAttributes.lines_removed = linesRemoved;
75
+ successAttributes.was_new_file = primaryFile.wasNewFile;
76
+ }
77
+ metrics.push({
78
+ metric_name: 'codemie_tools_usage_total',
79
+ attributes: successAttributes,
80
+ time: toolCall.timestamp.toISOString(),
81
+ });
82
+ // 2. Token consumption (optional - only if available)
83
+ // Note: Tool-level tokens are in the message that contains the tool call
84
+ const message = rawData.messages.find(m => m.messageId === toolCall.messageId);
85
+ if (message?.tokens?.output && message.tokens.output > 0) {
86
+ const tokenAttributes = {
87
+ ...baseAttributes,
88
+ // Use tool call's model if available, fallback to session model
89
+ llm_model: toolCall.llm_model || session.model,
90
+ tool_name: toolCall.toolName,
91
+ input_tokens: message.tokens.input ?? 0,
92
+ output_tokens: message.tokens.output,
93
+ cache_read_input_tokens: message.tokens.cacheRead ?? 0,
94
+ count: message.tokens.output,
95
+ };
96
+ metrics.push({
97
+ metric_name: 'codemie_tools_usage_tokens',
98
+ attributes: tokenAttributes,
99
+ time: toolCall.timestamp.toISOString(),
100
+ });
101
+ }
102
+ }
103
+ else {
104
+ // ========================================================================
105
+ // 3. TOOL EXECUTION FAILURE - Backend Pattern
106
+ // ========================================================================
107
+ const errorAttributes = {
108
+ ...baseAttributes,
109
+ // Use tool call's model if available, fallback to session model
110
+ llm_model: toolCall.llm_model || session.model,
111
+ tool_name: toolCall.toolName,
112
+ error: toolCall.error || 'Unknown error',
113
+ status: 'failure',
114
+ duration_ms: toolCall.durationMs || 0,
115
+ count: 1,
116
+ };
117
+ metrics.push({
118
+ metric_name: 'codemie_tools_usage_errors_total',
119
+ attributes: errorAttributes,
120
+ time: toolCall.timestamp.toISOString(),
121
+ });
122
+ }
123
+ }
124
+ return metrics;
125
+ }
126
+ /**
127
+ * Create session aggregation metric
128
+ * Only called when session ends (explicit endTime or timeout)
129
+ */
130
+ export function createSessionMetric(session, rawData, config, options) {
131
+ const sessionAttributes = {
132
+ // Base context (no tool_type for session metric)
133
+ user_id: config.userId,
134
+ user_name: config.userName,
135
+ agent: session.agent,
136
+ agent_version: session.agentVersion,
137
+ llm_model: session.model,
138
+ project: session.projectPath,
139
+ session_id: session.sessionId,
140
+ // Interaction tracking
141
+ total_user_prompts: session.userPromptCount,
142
+ total_ai_requests: estimateAPIRequests(session),
143
+ total_ai_responses: session.assistantMessageCount,
144
+ total_tool_calls: session.toolCallCount,
145
+ successful_tool_calls: session.successfulToolCalls,
146
+ failed_tool_calls: session.failedToolCalls,
147
+ // Token totals
148
+ total_input_tokens: session.tokens.input,
149
+ total_output_tokens: session.tokens.output,
150
+ total_cache_read_input_tokens: session.tokens.cacheRead,
151
+ total_money_spent: 0, // Cost calculation removed - handled by backend
152
+ total_cached_tokens_money_spent: 0, // Cost calculation removed - handled by backend
153
+ // Code totals
154
+ files_created: session.fileStats?.filesCreated || 0,
155
+ files_modified: session.fileStats?.filesModified || 0,
156
+ files_deleted: session.fileStats?.filesDeleted || 0,
157
+ total_lines_added: session.fileStats?.totalLinesAdded || 0,
158
+ total_lines_removed: session.fileStats?.totalLinesRemoved || 0,
159
+ // Performance
160
+ session_duration_ms: session.durationMs || 0,
161
+ total_execution_time: calculateTotalExecutionTime(rawData.toolCalls),
162
+ // Status
163
+ exit_reason: options.exitReason,
164
+ had_errors: session.hadErrors,
165
+ status: options.status,
166
+ is_final: options.isFinal,
167
+ count: 1,
168
+ };
169
+ return {
170
+ metric_name: 'codemie_coding_agent_usage',
171
+ attributes: sessionAttributes,
172
+ time: (session.endTime || new Date()).toISOString(),
173
+ };
174
+ }
175
+ //# sourceMappingURL=metric-transformer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metric-transformer.js","sourceRoot":"","sources":["../../../src/analytics/remote-submission/metric-transformer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Remote Analytics Submitter
3
+ *
4
+ * Orchestrates periodic submission of analytics metrics to /v1/metrics endpoint.
5
+ * Handles event-level tracking, concurrency control, and backend-aligned metrics.
6
+ *
7
+ * Key Features:
8
+ * - 5-minute submission interval
9
+ * - Event-level tracking (message IDs, tool call IDs)
10
+ * - Multi-terminal safety via file locking
11
+ * - Inactivity-based session end detection
12
+ * - Backend-aligned metric transformation (3+1 pattern)
13
+ */
14
+ import type { RemoteSubmissionConfig } from './types.js';
15
+ /**
16
+ * Remote Analytics Submitter
17
+ */
18
+ export declare class RemoteAnalyticsSubmitter {
19
+ private config;
20
+ private cursorManager;
21
+ private lockManager;
22
+ private intervalTimer;
23
+ private isRunning;
24
+ constructor(config: RemoteSubmissionConfig);
25
+ /**
26
+ * Start periodic submission
27
+ */
28
+ start(): void;
29
+ /**
30
+ * Stop periodic submission
31
+ */
32
+ stop(): void;
33
+ /**
34
+ * Main submission cycle
35
+ */
36
+ private submitCycle;
37
+ /**
38
+ * Process all external agents
39
+ */
40
+ private processExternalAgents;
41
+ /**
42
+ * Process single agent
43
+ */
44
+ private processAgent;
45
+ /**
46
+ * Process single session
47
+ */
48
+ private processSession;
49
+ /**
50
+ * Determine session status based on activity
51
+ */
52
+ private determineSessionStatus;
53
+ /**
54
+ * Get last activity time from session
55
+ */
56
+ private getLastActivityTime;
57
+ /**
58
+ * Maybe submit session metric based on status
59
+ */
60
+ private maybeSubmitSessionMetric;
61
+ /**
62
+ * Submit batch of metrics - writes to local file and/or remote endpoint
63
+ */
64
+ private submitBatch;
65
+ /**
66
+ * Write metrics to local JSONL file
67
+ */
68
+ private writeMetricsToLocalFile;
69
+ /**
70
+ * Submit metrics to remote /v1/metrics endpoint
71
+ */
72
+ private submitToRemote;
73
+ /**
74
+ * Create batches from metrics
75
+ */
76
+ private createBatches;
77
+ }
78
+ //# sourceMappingURL=submitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submitter.d.ts","sourceRoot":"","sources":["../../../src/analytics/remote-submission/submitter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,OAAO,KAAK,EACV,sBAAsB,EAIvB,MAAM,YAAY,CAAC;AAMpB;;GAEG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,sBAAsB;IAM1C;;OAEG;IACH,KAAK,IAAI,IAAI;IAuBb;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;OAEG;YACW,WAAW;IAsCzB;;OAEG;YACW,qBAAqB;IA4BnC;;OAEG;YACW,YAAY;IAoB1B;;OAEG;YACW,cAAc;IAwG5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAkC9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;YACW,wBAAwB;IAkEtC;;OAEG;YACW,WAAW;IAYzB;;OAEG;YACW,uBAAuB;IAyBrC;;OAEG;YACW,cAAc;IA+B5B;;OAEG;IACH,OAAO,CAAC,aAAa;CAOtB"}