@codemieai/code 0.0.12 → 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 (124) hide show
  1. package/README.md +65 -778
  2. package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
  3. package/dist/agents/core/BaseAgentAdapter.js +31 -3
  4. package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
  5. package/dist/agents/core/types.d.ts +18 -0
  6. package/dist/agents/core/types.d.ts.map +1 -1
  7. package/dist/agents/plugins/claude.plugin.d.ts +0 -3
  8. package/dist/agents/plugins/claude.plugin.d.ts.map +1 -1
  9. package/dist/agents/plugins/claude.plugin.js +12 -1
  10. package/dist/agents/plugins/claude.plugin.js.map +1 -1
  11. package/dist/agents/plugins/codex.plugin.d.ts.map +1 -1
  12. package/dist/agents/plugins/codex.plugin.js +40 -4
  13. package/dist/agents/plugins/codex.plugin.js.map +1 -1
  14. package/dist/agents/plugins/gemini.plugin.d.ts.map +1 -1
  15. package/dist/agents/plugins/gemini.plugin.js +50 -5
  16. package/dist/agents/plugins/gemini.plugin.js.map +1 -1
  17. package/dist/agents/registry.d.ts +15 -2
  18. package/dist/agents/registry.d.ts.map +1 -1
  19. package/dist/agents/registry.js +30 -6
  20. package/dist/agents/registry.js.map +1 -1
  21. package/dist/analytics/aggregation/adapters/claude.adapter.d.ts +37 -0
  22. package/dist/analytics/aggregation/adapters/claude.adapter.d.ts.map +1 -0
  23. package/dist/analytics/aggregation/adapters/claude.adapter.js +471 -0
  24. package/dist/analytics/aggregation/adapters/claude.adapter.js.map +1 -0
  25. package/dist/analytics/aggregation/adapters/codex.adapter.d.ts +25 -0
  26. package/dist/analytics/aggregation/adapters/codex.adapter.d.ts.map +1 -0
  27. package/dist/analytics/aggregation/adapters/codex.adapter.js +376 -0
  28. package/dist/analytics/aggregation/adapters/codex.adapter.js.map +1 -0
  29. package/dist/analytics/aggregation/adapters/gemini.adapter.d.ts +28 -0
  30. package/dist/analytics/aggregation/adapters/gemini.adapter.d.ts.map +1 -0
  31. package/dist/analytics/aggregation/adapters/gemini.adapter.js +320 -0
  32. package/dist/analytics/aggregation/adapters/gemini.adapter.js.map +1 -0
  33. package/dist/analytics/aggregation/adapters/index.d.ts +7 -0
  34. package/dist/analytics/aggregation/adapters/index.d.ts.map +1 -0
  35. package/dist/analytics/aggregation/adapters/index.js +7 -0
  36. package/dist/analytics/aggregation/adapters/index.js.map +1 -0
  37. package/dist/analytics/aggregation/aggregator.d.ts +49 -0
  38. package/dist/analytics/aggregation/aggregator.d.ts.map +1 -0
  39. package/dist/analytics/aggregation/aggregator.js +239 -0
  40. package/dist/analytics/aggregation/aggregator.js.map +1 -0
  41. package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.d.ts +63 -0
  42. package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.d.ts.map +1 -0
  43. package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.js +58 -0
  44. package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.js.map +1 -0
  45. package/dist/analytics/aggregation/core/adapter.interface.d.ts +65 -0
  46. package/dist/analytics/aggregation/core/adapter.interface.d.ts.map +1 -0
  47. package/dist/analytics/aggregation/core/adapter.interface.js +9 -0
  48. package/dist/analytics/aggregation/core/adapter.interface.js.map +1 -0
  49. package/dist/analytics/aggregation/core/aggregation-utils.d.ts +66 -0
  50. package/dist/analytics/aggregation/core/aggregation-utils.d.ts.map +1 -0
  51. package/dist/analytics/aggregation/core/aggregation-utils.js +83 -0
  52. package/dist/analytics/aggregation/core/aggregation-utils.js.map +1 -0
  53. package/dist/analytics/aggregation/core/discovery.d.ts +40 -0
  54. package/dist/analytics/aggregation/core/discovery.d.ts.map +1 -0
  55. package/dist/analytics/aggregation/core/discovery.js +132 -0
  56. package/dist/analytics/aggregation/core/discovery.js.map +1 -0
  57. package/dist/analytics/aggregation/core/file-utils.d.ts +23 -0
  58. package/dist/analytics/aggregation/core/file-utils.d.ts.map +1 -0
  59. package/dist/analytics/aggregation/core/file-utils.js +208 -0
  60. package/dist/analytics/aggregation/core/file-utils.js.map +1 -0
  61. package/dist/analytics/aggregation/core/index.d.ts +11 -0
  62. package/dist/analytics/aggregation/core/index.d.ts.map +1 -0
  63. package/dist/analytics/aggregation/core/index.js +11 -0
  64. package/dist/analytics/aggregation/core/index.js.map +1 -0
  65. package/dist/analytics/aggregation/core/project-mapping.d.ts +50 -0
  66. package/dist/analytics/aggregation/core/project-mapping.d.ts.map +1 -0
  67. package/dist/analytics/aggregation/core/project-mapping.js +102 -0
  68. package/dist/analytics/aggregation/core/project-mapping.js.map +1 -0
  69. package/dist/analytics/aggregation/core/streaming.d.ts +26 -0
  70. package/dist/analytics/aggregation/core/streaming.d.ts.map +1 -0
  71. package/dist/analytics/aggregation/core/streaming.js +58 -0
  72. package/dist/analytics/aggregation/core/streaming.js.map +1 -0
  73. package/dist/analytics/aggregation/index.d.ts +8 -0
  74. package/dist/analytics/aggregation/index.d.ts.map +1 -0
  75. package/dist/analytics/aggregation/index.js +8 -0
  76. package/dist/analytics/aggregation/index.js.map +1 -0
  77. package/dist/analytics/aggregation/types.d.ts +258 -0
  78. package/dist/analytics/aggregation/types.d.ts.map +1 -0
  79. package/dist/analytics/aggregation/types.js +8 -0
  80. package/dist/analytics/aggregation/types.js.map +1 -0
  81. package/dist/analytics/config.d.ts +1 -0
  82. package/dist/analytics/config.d.ts.map +1 -1
  83. package/dist/analytics/config.js +20 -1
  84. package/dist/analytics/config.js.map +1 -1
  85. package/dist/analytics/index.d.ts +0 -9
  86. package/dist/analytics/index.d.ts.map +1 -1
  87. package/dist/analytics/index.js +14 -48
  88. package/dist/analytics/index.js.map +1 -1
  89. package/dist/analytics/plugins/api-metrics.plugin.d.ts +4 -1
  90. package/dist/analytics/plugins/api-metrics.plugin.d.ts.map +1 -1
  91. package/dist/analytics/plugins/api-metrics.plugin.js +6 -22
  92. package/dist/analytics/plugins/api-metrics.plugin.js.map +1 -1
  93. package/dist/analytics/plugins/model-metrics.plugin.d.ts +4 -1
  94. package/dist/analytics/plugins/model-metrics.plugin.d.ts.map +1 -1
  95. package/dist/analytics/plugins/model-metrics.plugin.js +7 -17
  96. package/dist/analytics/plugins/model-metrics.plugin.js.map +1 -1
  97. package/dist/analytics/plugins/provider-metrics.plugin.d.ts +4 -1
  98. package/dist/analytics/plugins/provider-metrics.plugin.d.ts.map +1 -1
  99. package/dist/analytics/plugins/provider-metrics.plugin.js +7 -22
  100. package/dist/analytics/plugins/provider-metrics.plugin.js.map +1 -1
  101. package/dist/analytics/plugins/types.d.ts +0 -2
  102. package/dist/analytics/plugins/types.d.ts.map +1 -1
  103. package/dist/analytics/plugins/types.js.map +1 -1
  104. package/dist/analytics/session.d.ts +2 -2
  105. package/dist/analytics/session.d.ts.map +1 -1
  106. package/dist/analytics/session.js +3 -3
  107. package/dist/analytics/session.js.map +1 -1
  108. package/dist/analytics/types.d.ts +1 -1
  109. package/dist/analytics/types.d.ts.map +1 -1
  110. package/dist/cli/commands/analytics.d.ts.map +1 -1
  111. package/dist/cli/commands/analytics.js +512 -252
  112. package/dist/cli/commands/analytics.js.map +1 -1
  113. package/dist/cli/commands/setup.js +70 -1
  114. package/dist/cli/commands/setup.js.map +1 -1
  115. package/dist/utils/codemie-proxy.d.ts.map +1 -1
  116. package/dist/utils/codemie-proxy.js +16 -3
  117. package/dist/utils/codemie-proxy.js.map +1 -1
  118. package/dist/utils/proxy/http-client.d.ts.map +1 -1
  119. package/dist/utils/proxy/http-client.js +8 -2
  120. package/dist/utils/proxy/http-client.js.map +1 -1
  121. package/dist/utils/proxy/interceptors.d.ts.map +1 -1
  122. package/dist/utils/proxy/interceptors.js +4 -15
  123. package/dist/utils/proxy/interceptors.js.map +1 -1
  124. package/package.json +6 -2
@@ -0,0 +1,376 @@
1
+ /**
2
+ * Codex Analytics Adapter
3
+ *
4
+ * Extracts analytics data from Codex session files stored in:
5
+ * ~/.codex/sessions/YYYY/MM/DD/rollout-{timestamp}-{sessionId}.jsonl
6
+ *
7
+ * JSONL Format: One JSON event per line
8
+ * - Event types: session_meta, response_item, event_msg, turn_context, ghost_snapshot
9
+ * - Token usage: NOT directly tracked (need to infer or integrate with API)
10
+ * - File modifications: tracked via ghost_snapshot events
11
+ */
12
+ import { join } from 'node:path';
13
+ import { existsSync } from 'node:fs';
14
+ import { BaseAnalyticsAdapter, resolvePath, findFiles, filterFilesByDate, readJSONL, detectLanguage, detectFormat, calculateFileStats } from '../core/index.js';
15
+ /**
16
+ * Codex analytics adapter
17
+ */
18
+ export class CodexAnalyticsAdapter extends BaseAnalyticsAdapter {
19
+ constructor(metadata) {
20
+ super(metadata);
21
+ }
22
+ async findSessions(options) {
23
+ const baseDir = resolvePath(this.homePath);
24
+ const sessionsDir = join(baseDir, this.sessionsPath || 'sessions');
25
+ if (!existsSync(sessionsDir)) {
26
+ return [];
27
+ }
28
+ const descriptors = [];
29
+ try {
30
+ // Scan YYYY/MM/DD directory structure
31
+ const { readdir } = await import('node:fs/promises');
32
+ const years = await readdir(sessionsDir, { withFileTypes: true });
33
+ for (const yearDir of years) {
34
+ if (!yearDir.isDirectory() || !/^\d{4}$/.test(yearDir.name))
35
+ continue;
36
+ const yearPath = join(sessionsDir, yearDir.name);
37
+ const months = await readdir(yearPath, { withFileTypes: true });
38
+ for (const monthDir of months) {
39
+ if (!monthDir.isDirectory() || !/^\d{2}$/.test(monthDir.name))
40
+ continue;
41
+ const monthPath = join(yearPath, monthDir.name);
42
+ const days = await readdir(monthPath, { withFileTypes: true });
43
+ for (const dayDir of days) {
44
+ if (!dayDir.isDirectory() || !/^\d{2}$/.test(dayDir.name))
45
+ continue;
46
+ const dayPath = join(monthPath, dayDir.name);
47
+ // Find all rollout-*.jsonl files
48
+ const jsonlFiles = await findFiles(dayPath, /^rollout-.*\.jsonl$/);
49
+ // Filter by date if specified
50
+ let filteredFiles = jsonlFiles;
51
+ if (options?.dateFrom || options?.dateTo) {
52
+ filteredFiles = await filterFilesByDate(jsonlFiles, options.dateFrom, options.dateTo);
53
+ }
54
+ // Process each session file
55
+ for (const filePath of filteredFiles) {
56
+ try {
57
+ // Read first event to get session metadata
58
+ const events = await readJSONL(filePath, 1);
59
+ if (events.length === 0)
60
+ continue;
61
+ const firstEvent = events[0];
62
+ if (firstEvent.type !== 'session_meta') {
63
+ console.warn(`Expected session_meta as first event in ${filePath}`);
64
+ continue;
65
+ }
66
+ const sessionMeta = firstEvent.payload;
67
+ descriptors.push({
68
+ sessionId: sessionMeta.id,
69
+ agent: this.agentName,
70
+ filePaths: [filePath],
71
+ metadata: {
72
+ cwd: sessionMeta.cwd,
73
+ gitBranch: sessionMeta.git?.branch,
74
+ gitCommit: sessionMeta.git?.commit_hash,
75
+ cliVersion: sessionMeta.cli_version,
76
+ timestamp: sessionMeta.timestamp
77
+ }
78
+ });
79
+ }
80
+ catch (error) {
81
+ console.error(`Failed to read session file ${filePath}: ${error}`);
82
+ }
83
+ }
84
+ }
85
+ }
86
+ }
87
+ }
88
+ catch (error) {
89
+ console.error(`Error scanning Codex sessions: ${error}`);
90
+ }
91
+ // Apply pagination using inherited method
92
+ return this.applyPagination(descriptors, options);
93
+ }
94
+ async extractSession(descriptor) {
95
+ // Read all events from session file
96
+ const filePath = descriptor.filePaths[0];
97
+ const allEvents = await readJSONL(filePath);
98
+ // Extract session metadata
99
+ const sessionMetaEvent = allEvents.find(e => e.type === 'session_meta');
100
+ if (!sessionMetaEvent) {
101
+ throw new Error(`No session_meta event found in ${filePath}`);
102
+ }
103
+ const sessionMeta = sessionMetaEvent.payload;
104
+ // Calculate session timing
105
+ const firstEvent = allEvents[0];
106
+ const lastEvent = allEvents[allEvents.length - 1];
107
+ const startTime = new Date(firstEvent.timestamp);
108
+ const endTime = new Date(lastEvent.timestamp);
109
+ const durationMs = endTime.getTime() - startTime.getTime();
110
+ // Count user messages (event_msg with type: user_message)
111
+ const userMessageEvents = allEvents.filter(e => e.type === 'event_msg' && e.payload.type === 'user_message');
112
+ // Count assistant messages (response_item with role: assistant)
113
+ const assistantMessages = allEvents.filter(e => e.type === 'response_item' &&
114
+ e.payload.role === 'assistant');
115
+ // Extract tool calls (implicit - Codex doesn't have explicit tool call structure)
116
+ const toolCalls = await this.extractToolCalls(descriptor);
117
+ // Count successful/failed tool calls
118
+ const successfulToolCalls = toolCalls.filter(tc => tc.status === 'success').length;
119
+ const failedToolCalls = toolCalls.filter(tc => tc.status === 'failure').length;
120
+ // Track tool usage
121
+ const toolUsage = {};
122
+ const toolStatus = {};
123
+ for (const tc of toolCalls) {
124
+ toolUsage[tc.toolName] = (toolUsage[tc.toolName] || 0) + 1;
125
+ if (!toolStatus[tc.toolName]) {
126
+ toolStatus[tc.toolName] = { success: 0, failure: 0 };
127
+ }
128
+ if (tc.status === 'success') {
129
+ toolStatus[tc.toolName].success++;
130
+ }
131
+ else if (tc.status === 'failure') {
132
+ toolStatus[tc.toolName].failure++;
133
+ }
134
+ }
135
+ // Extract model from turn_context events
136
+ const turnContexts = allEvents.filter(e => e.type === 'turn_context');
137
+ const modelUsage = {};
138
+ let model = 'gpt-4.1'; // Default
139
+ for (const event of turnContexts) {
140
+ const context = event.payload;
141
+ if (context.model) {
142
+ model = context.model;
143
+ modelUsage[context.model] = (modelUsage[context.model] || 0) + 1;
144
+ }
145
+ }
146
+ // Extract file modifications
147
+ const fileModifications = await this.extractFileModifications(descriptor);
148
+ // Calculate file statistics
149
+ const fileStats = calculateFileStats(fileModifications);
150
+ // Token usage: NOT directly available in Codex logs
151
+ // We return 0 for all token counts with a note in design doc
152
+ const tokens = {
153
+ input: 0,
154
+ output: 0,
155
+ cacheRead: 0,
156
+ cacheCreation: 0,
157
+ total: 0
158
+ };
159
+ // Check for errors and completion status
160
+ const abortedEvents = allEvents.filter(e => e.type === 'event_msg' && e.payload.type === 'turn_aborted');
161
+ const completeEvents = allEvents.filter(e => e.type === 'event_msg' && e.payload.type === 'turn_complete');
162
+ // Session is considered failed if:
163
+ // 1. There are aborted events
164
+ // 2. There are failed tool calls
165
+ // 3. There are user messages but no assistant responses (incomplete/failed session)
166
+ // 4. No turn_complete event and session ended
167
+ const hadErrors = failedToolCalls > 0 ||
168
+ abortedEvents.length > 0 ||
169
+ (userMessageEvents.length > 0 && assistantMessages.length === 0) ||
170
+ completeEvents.length === 0;
171
+ // Determine exit reason
172
+ let exitReason;
173
+ if (abortedEvents.length > 0) {
174
+ const lastAbort = abortedEvents[abortedEvents.length - 1];
175
+ exitReason = lastAbort.payload.error || 'aborted';
176
+ }
177
+ else if (userMessageEvents.length > 0 && assistantMessages.length === 0) {
178
+ exitReason = 'incomplete - no assistant response';
179
+ }
180
+ else if (completeEvents.length === 0) {
181
+ exitReason = 'incomplete - no completion event';
182
+ }
183
+ // Get project path
184
+ const projectPath = descriptor.metadata.cwd || '';
185
+ return {
186
+ sessionId: descriptor.sessionId,
187
+ agent: 'codex',
188
+ agentVersion: sessionMeta.cli_version,
189
+ startTime,
190
+ endTime,
191
+ durationMs,
192
+ projectPath,
193
+ gitBranch: sessionMeta.git?.branch,
194
+ gitCommit: sessionMeta.git?.commit_hash,
195
+ model,
196
+ provider: sessionMeta.model_provider || 'openai',
197
+ userMessageCount: userMessageEvents.length,
198
+ assistantMessageCount: assistantMessages.length,
199
+ toolCallCount: toolCalls.length,
200
+ successfulToolCalls,
201
+ failedToolCalls,
202
+ fileModifications: fileModifications.length,
203
+ toolUsage,
204
+ toolStatus,
205
+ modelUsage,
206
+ tokens,
207
+ exitReason,
208
+ hadErrors,
209
+ fileStats
210
+ };
211
+ }
212
+ async extractMessages(descriptor) {
213
+ const filePath = descriptor.filePaths[0];
214
+ const allEvents = await readJSONL(filePath);
215
+ const messages = [];
216
+ // Extract response_item events (messages)
217
+ for (const event of allEvents) {
218
+ if (event.type === 'response_item') {
219
+ const item = event.payload;
220
+ if (item.type !== 'message')
221
+ continue;
222
+ // Extract text content
223
+ const content = item.content
224
+ .filter(c => c.type === 'input_text' || c.type === 'text')
225
+ .map(c => c.text)
226
+ .join('\n');
227
+ // Note: Codex doesn't provide message-level token data
228
+ messages.push({
229
+ messageId: `${descriptor.sessionId}-${event.timestamp}`,
230
+ sessionId: descriptor.sessionId,
231
+ timestamp: new Date(event.timestamp),
232
+ role: item.role,
233
+ content,
234
+ tokens: undefined, // Not available in Codex logs
235
+ model: undefined // Model tracked at turn level, not message level
236
+ });
237
+ }
238
+ }
239
+ return messages;
240
+ }
241
+ async extractToolCalls(descriptor) {
242
+ const filePath = descriptor.filePaths[0];
243
+ const allEvents = await readJSONL(filePath);
244
+ const toolCalls = [];
245
+ // Note: Codex doesn't have explicit tool call structure
246
+ // Tool calls are implicit in the conversation flow
247
+ // We can infer some from ghost_snapshot events (file system operations)
248
+ // Extract ghost_snapshot events as proxy for file operations
249
+ const ghostSnapshots = allEvents.filter(e => e.type === 'ghost_snapshot');
250
+ for (const event of ghostSnapshots) {
251
+ const snapshot = event.payload;
252
+ // Each ghost snapshot represents a file system state change
253
+ toolCalls.push({
254
+ toolCallId: `ghost-${snapshot.ghost_commit.id}`,
255
+ messageId: `${descriptor.sessionId}-${event.timestamp}`,
256
+ sessionId: descriptor.sessionId,
257
+ timestamp: new Date(event.timestamp),
258
+ toolName: 'ghost_snapshot',
259
+ toolArgs: {
260
+ commit_id: snapshot.ghost_commit.id,
261
+ parent: snapshot.ghost_commit.parent,
262
+ preexisting_untracked_files: snapshot.ghost_commit.preexisting_untracked_files,
263
+ preexisting_untracked_dirs: snapshot.ghost_commit.preexisting_untracked_dirs
264
+ },
265
+ status: 'success',
266
+ result: snapshot.ghost_commit
267
+ });
268
+ }
269
+ // Check for aborted turns (failures)
270
+ const abortedEvents = allEvents.filter(e => e.type === 'event_msg' && e.payload.type === 'turn_aborted');
271
+ for (const event of abortedEvents) {
272
+ const eventMsg = event.payload;
273
+ toolCalls.push({
274
+ toolCallId: `abort-${event.timestamp}`,
275
+ messageId: `${descriptor.sessionId}-${event.timestamp}`,
276
+ sessionId: descriptor.sessionId,
277
+ timestamp: new Date(event.timestamp),
278
+ toolName: 'turn_aborted',
279
+ toolArgs: {},
280
+ status: 'failure',
281
+ error: eventMsg.error || 'Turn aborted'
282
+ });
283
+ }
284
+ return toolCalls;
285
+ }
286
+ async extractFileModifications(descriptor) {
287
+ const filePath = descriptor.filePaths[0];
288
+ const allEvents = await readJSONL(filePath);
289
+ const modifications = [];
290
+ // Extract file modifications from ghost_snapshot events
291
+ const ghostSnapshots = allEvents.filter(e => e.type === 'ghost_snapshot');
292
+ // Compare consecutive snapshots to detect changes
293
+ for (let i = 0; i < ghostSnapshots.length; i++) {
294
+ const currentEvent = ghostSnapshots[i];
295
+ const currentSnapshot = currentEvent.payload;
296
+ // Get previous snapshot if exists
297
+ const prevSnapshot = i > 0 ? ghostSnapshots[i - 1].payload : null;
298
+ // Files in current snapshot but not in previous = new files
299
+ const currentFiles = new Set(currentSnapshot.ghost_commit.preexisting_untracked_files);
300
+ const prevFiles = prevSnapshot ?
301
+ new Set(prevSnapshot.ghost_commit.preexisting_untracked_files) :
302
+ new Set();
303
+ // New files (created)
304
+ for (const file of currentFiles) {
305
+ if (!prevFiles.has(file)) {
306
+ const language = detectLanguage(file);
307
+ const format = detectFormat(file);
308
+ const fileExtension = file.substring(file.lastIndexOf('.'));
309
+ modifications.push({
310
+ sessionId: descriptor.sessionId,
311
+ toolCallId: `ghost-${currentSnapshot.ghost_commit.id}`,
312
+ timestamp: new Date(currentEvent.timestamp),
313
+ filePath: file,
314
+ operation: 'create',
315
+ linesAdded: 0, // Can't determine without file content
316
+ linesRemoved: 0,
317
+ linesModified: 0,
318
+ toolName: 'ghost_snapshot',
319
+ wasNewFile: true,
320
+ fileExtension,
321
+ language,
322
+ format
323
+ });
324
+ }
325
+ }
326
+ // Modified files (existed in both snapshots)
327
+ for (const file of currentFiles) {
328
+ if (prevFiles.has(file)) {
329
+ const language = detectLanguage(file);
330
+ const format = detectFormat(file);
331
+ const fileExtension = file.substring(file.lastIndexOf('.'));
332
+ modifications.push({
333
+ sessionId: descriptor.sessionId,
334
+ toolCallId: `ghost-${currentSnapshot.ghost_commit.id}`,
335
+ timestamp: new Date(currentEvent.timestamp),
336
+ filePath: file,
337
+ operation: 'update',
338
+ linesAdded: 0, // Can't determine without file content
339
+ linesRemoved: 0,
340
+ linesModified: 0,
341
+ toolName: 'ghost_snapshot',
342
+ wasNewFile: false,
343
+ fileExtension,
344
+ language,
345
+ format
346
+ });
347
+ }
348
+ }
349
+ // Deleted files (in previous but not in current)
350
+ for (const file of prevFiles) {
351
+ if (!currentFiles.has(file)) {
352
+ const language = detectLanguage(file);
353
+ const format = detectFormat(file);
354
+ const fileExtension = file.substring(file.lastIndexOf('.'));
355
+ modifications.push({
356
+ sessionId: descriptor.sessionId,
357
+ toolCallId: `ghost-${currentSnapshot.ghost_commit.id}`,
358
+ timestamp: new Date(currentEvent.timestamp),
359
+ filePath: file,
360
+ operation: 'delete',
361
+ linesAdded: 0,
362
+ linesRemoved: 0,
363
+ linesModified: 0,
364
+ toolName: 'ghost_snapshot',
365
+ wasNewFile: false,
366
+ fileExtension,
367
+ language,
368
+ format
369
+ });
370
+ }
371
+ }
372
+ }
373
+ return modifications;
374
+ }
375
+ }
376
+ //# sourceMappingURL=codex.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.adapter.js","sourceRoot":"","sources":["../../../../src/analytics/aggregation/adapters/codex.adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Gemini CLI Analytics Adapter
3
+ *
4
+ * Extracts analytics data from Gemini CLI session files stored in:
5
+ * ~/.gemini/tmp/{projectHash}/chats/session-{timestamp}-{id}.json
6
+ */
7
+ import { BaseAnalyticsAdapter, AdapterMetadata } from '../core/index.js';
8
+ import { SessionQueryOptions, SessionDescriptor, CodemieSession, CodemieMessage, CodemieToolCall, CodemieFileModification } from '../types.js';
9
+ /**
10
+ * Gemini CLI analytics adapter
11
+ */
12
+ export declare class GeminiAnalyticsAdapter extends BaseAnalyticsAdapter {
13
+ constructor(metadata: AdapterMetadata);
14
+ findSessions(options?: SessionQueryOptions): Promise<SessionDescriptor[]>;
15
+ extractSession(descriptor: SessionDescriptor): Promise<CodemieSession>;
16
+ extractMessages(descriptor: SessionDescriptor): Promise<CodemieMessage[]>;
17
+ extractToolCalls(descriptor: SessionDescriptor): Promise<CodemieToolCall[]>;
18
+ /**
19
+ * Calculate metrics for write_file operations
20
+ */
21
+ private calculateWriteFileMetrics;
22
+ /**
23
+ * Calculate metrics for replace operations
24
+ */
25
+ private calculateReplaceMetrics;
26
+ extractFileModifications(descriptor: SessionDescriptor): Promise<CodemieFileModification[]>;
27
+ }
28
+ //# sourceMappingURL=gemini.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.adapter.d.ts","sourceRoot":"","sources":["../../../../src/analytics/aggregation/adapters/gemini.adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EACL,oBAAoB,EACpB,eAAe,EAWhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,eAAe,EACf,uBAAuB,EACxB,MAAM,aAAa,CAAC;AAwCrB;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,oBAAoB;gBAClD,QAAQ,EAAE,eAAe;IAI/B,YAAY,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAyDzE,cAAc,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC;IAyHtE,eAAe,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAuBzE,gBAAgB,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAoCjF;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAoBjC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAiBzB,wBAAwB,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC;CA+DlG"}