@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.
- package/README.md +65 -778
- package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.js +31 -3
- package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
- package/dist/agents/core/types.d.ts +18 -0
- package/dist/agents/core/types.d.ts.map +1 -1
- package/dist/agents/plugins/claude.plugin.d.ts +0 -3
- package/dist/agents/plugins/claude.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/claude.plugin.js +12 -1
- package/dist/agents/plugins/claude.plugin.js.map +1 -1
- package/dist/agents/plugins/codex.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/codex.plugin.js +40 -4
- package/dist/agents/plugins/codex.plugin.js.map +1 -1
- package/dist/agents/plugins/gemini.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/gemini.plugin.js +50 -5
- package/dist/agents/plugins/gemini.plugin.js.map +1 -1
- package/dist/agents/registry.d.ts +15 -2
- package/dist/agents/registry.d.ts.map +1 -1
- package/dist/agents/registry.js +30 -6
- package/dist/agents/registry.js.map +1 -1
- package/dist/analytics/aggregation/adapters/claude.adapter.d.ts +37 -0
- package/dist/analytics/aggregation/adapters/claude.adapter.d.ts.map +1 -0
- package/dist/analytics/aggregation/adapters/claude.adapter.js +471 -0
- package/dist/analytics/aggregation/adapters/claude.adapter.js.map +1 -0
- package/dist/analytics/aggregation/adapters/codex.adapter.d.ts +25 -0
- package/dist/analytics/aggregation/adapters/codex.adapter.d.ts.map +1 -0
- package/dist/analytics/aggregation/adapters/codex.adapter.js +376 -0
- package/dist/analytics/aggregation/adapters/codex.adapter.js.map +1 -0
- package/dist/analytics/aggregation/adapters/gemini.adapter.d.ts +28 -0
- package/dist/analytics/aggregation/adapters/gemini.adapter.d.ts.map +1 -0
- package/dist/analytics/aggregation/adapters/gemini.adapter.js +320 -0
- package/dist/analytics/aggregation/adapters/gemini.adapter.js.map +1 -0
- package/dist/analytics/aggregation/adapters/index.d.ts +7 -0
- package/dist/analytics/aggregation/adapters/index.d.ts.map +1 -0
- package/dist/analytics/aggregation/adapters/index.js +7 -0
- package/dist/analytics/aggregation/adapters/index.js.map +1 -0
- package/dist/analytics/aggregation/aggregator.d.ts +49 -0
- package/dist/analytics/aggregation/aggregator.d.ts.map +1 -0
- package/dist/analytics/aggregation/aggregator.js +239 -0
- package/dist/analytics/aggregation/aggregator.js.map +1 -0
- package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.d.ts +63 -0
- package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.d.ts.map +1 -0
- package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.js +58 -0
- package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.js.map +1 -0
- package/dist/analytics/aggregation/core/adapter.interface.d.ts +65 -0
- package/dist/analytics/aggregation/core/adapter.interface.d.ts.map +1 -0
- package/dist/analytics/aggregation/core/adapter.interface.js +9 -0
- package/dist/analytics/aggregation/core/adapter.interface.js.map +1 -0
- package/dist/analytics/aggregation/core/aggregation-utils.d.ts +66 -0
- package/dist/analytics/aggregation/core/aggregation-utils.d.ts.map +1 -0
- package/dist/analytics/aggregation/core/aggregation-utils.js +83 -0
- package/dist/analytics/aggregation/core/aggregation-utils.js.map +1 -0
- package/dist/analytics/aggregation/core/discovery.d.ts +40 -0
- package/dist/analytics/aggregation/core/discovery.d.ts.map +1 -0
- package/dist/analytics/aggregation/core/discovery.js +132 -0
- package/dist/analytics/aggregation/core/discovery.js.map +1 -0
- package/dist/analytics/aggregation/core/file-utils.d.ts +23 -0
- package/dist/analytics/aggregation/core/file-utils.d.ts.map +1 -0
- package/dist/analytics/aggregation/core/file-utils.js +208 -0
- package/dist/analytics/aggregation/core/file-utils.js.map +1 -0
- package/dist/analytics/aggregation/core/index.d.ts +11 -0
- package/dist/analytics/aggregation/core/index.d.ts.map +1 -0
- package/dist/analytics/aggregation/core/index.js +11 -0
- package/dist/analytics/aggregation/core/index.js.map +1 -0
- package/dist/analytics/aggregation/core/project-mapping.d.ts +50 -0
- package/dist/analytics/aggregation/core/project-mapping.d.ts.map +1 -0
- package/dist/analytics/aggregation/core/project-mapping.js +102 -0
- package/dist/analytics/aggregation/core/project-mapping.js.map +1 -0
- package/dist/analytics/aggregation/core/streaming.d.ts +26 -0
- package/dist/analytics/aggregation/core/streaming.d.ts.map +1 -0
- package/dist/analytics/aggregation/core/streaming.js +58 -0
- package/dist/analytics/aggregation/core/streaming.js.map +1 -0
- package/dist/analytics/aggregation/index.d.ts +8 -0
- package/dist/analytics/aggregation/index.d.ts.map +1 -0
- package/dist/analytics/aggregation/index.js +8 -0
- package/dist/analytics/aggregation/index.js.map +1 -0
- package/dist/analytics/aggregation/types.d.ts +258 -0
- package/dist/analytics/aggregation/types.d.ts.map +1 -0
- package/dist/analytics/aggregation/types.js +8 -0
- package/dist/analytics/aggregation/types.js.map +1 -0
- package/dist/analytics/config.d.ts +1 -0
- package/dist/analytics/config.d.ts.map +1 -1
- package/dist/analytics/config.js +20 -1
- package/dist/analytics/config.js.map +1 -1
- package/dist/analytics/index.d.ts +0 -9
- package/dist/analytics/index.d.ts.map +1 -1
- package/dist/analytics/index.js +14 -48
- package/dist/analytics/index.js.map +1 -1
- package/dist/analytics/plugins/api-metrics.plugin.d.ts +4 -1
- package/dist/analytics/plugins/api-metrics.plugin.d.ts.map +1 -1
- package/dist/analytics/plugins/api-metrics.plugin.js +6 -22
- package/dist/analytics/plugins/api-metrics.plugin.js.map +1 -1
- package/dist/analytics/plugins/model-metrics.plugin.d.ts +4 -1
- package/dist/analytics/plugins/model-metrics.plugin.d.ts.map +1 -1
- package/dist/analytics/plugins/model-metrics.plugin.js +7 -17
- package/dist/analytics/plugins/model-metrics.plugin.js.map +1 -1
- package/dist/analytics/plugins/provider-metrics.plugin.d.ts +4 -1
- package/dist/analytics/plugins/provider-metrics.plugin.d.ts.map +1 -1
- package/dist/analytics/plugins/provider-metrics.plugin.js +7 -22
- package/dist/analytics/plugins/provider-metrics.plugin.js.map +1 -1
- package/dist/analytics/plugins/types.d.ts +0 -2
- package/dist/analytics/plugins/types.d.ts.map +1 -1
- package/dist/analytics/plugins/types.js.map +1 -1
- package/dist/analytics/session.d.ts +2 -2
- package/dist/analytics/session.d.ts.map +1 -1
- package/dist/analytics/session.js +3 -3
- package/dist/analytics/session.js.map +1 -1
- package/dist/analytics/types.d.ts +1 -1
- package/dist/analytics/types.d.ts.map +1 -1
- package/dist/cli/commands/analytics.d.ts.map +1 -1
- package/dist/cli/commands/analytics.js +512 -252
- package/dist/cli/commands/analytics.js.map +1 -1
- package/dist/cli/commands/setup.js +70 -1
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/utils/codemie-proxy.d.ts.map +1 -1
- package/dist/utils/codemie-proxy.js +16 -3
- package/dist/utils/codemie-proxy.js.map +1 -1
- package/dist/utils/proxy/http-client.d.ts.map +1 -1
- package/dist/utils/proxy/http-client.js +8 -2
- package/dist/utils/proxy/http-client.js.map +1 -1
- package/dist/utils/proxy/interceptors.d.ts.map +1 -1
- package/dist/utils/proxy/interceptors.js +4 -15
- package/dist/utils/proxy/interceptors.js.map +1 -1
- 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":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EACL,oBAAoB,EAEpB,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,SAAS,EACT,cAAc,EACd,YAAY,EACZ,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAuE1B;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,oBAAoB;IAC7D,YAAY,QAAyB;QACnC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAA6B;QAC9C,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,IAAI,UAAU,CAAC,CAAC;QAEnE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,WAAW,GAAwB,EAAE,CAAC;QAE5C,IAAI,CAAC;YACH,sCAAsC;YACtC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAElE,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;gBAC5B,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAEtE,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;gBACjD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;gBAEhE,KAAK,MAAM,QAAQ,IAAI,MAAM,EAAE,CAAC;oBAC9B,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;wBAAE,SAAS;oBAExE,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;oBAChD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;oBAE/D,KAAK,MAAM,MAAM,IAAI,IAAI,EAAE,CAAC;wBAC1B,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;4BAAE,SAAS;wBAEpE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;wBAE7C,iCAAiC;wBACjC,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;wBAEnE,8BAA8B;wBAC9B,IAAI,aAAa,GAAG,UAAU,CAAC;wBAC/B,IAAI,OAAO,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;4BACzC,aAAa,GAAG,MAAM,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;wBACxF,CAAC;wBAED,4BAA4B;wBAC5B,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;4BACrC,IAAI,CAAC;gCACH,2CAA2C;gCAC3C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gCAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;oCAAE,SAAS;gCAElC,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAe,CAAC;gCAC3C,IAAI,UAAU,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oCACvC,OAAO,CAAC,IAAI,CAAC,2CAA2C,QAAQ,EAAE,CAAC,CAAC;oCACpE,SAAS;gCACX,CAAC;gCAED,MAAM,WAAW,GAAG,UAAU,CAAC,OAA2B,CAAC;gCAE3D,WAAW,CAAC,IAAI,CAAC;oCACf,SAAS,EAAE,WAAW,CAAC,EAAE;oCACzB,KAAK,EAAE,IAAI,CAAC,SAAS;oCACrB,SAAS,EAAE,CAAC,QAAQ,CAAC;oCACrB,QAAQ,EAAE;wCACR,GAAG,EAAE,WAAW,CAAC,GAAG;wCACpB,SAAS,EAAE,WAAW,CAAC,GAAG,EAAE,MAAM;wCAClC,SAAS,EAAE,WAAW,CAAC,GAAG,EAAE,WAAW;wCACvC,UAAU,EAAE,WAAW,CAAC,WAAW;wCACnC,SAAS,EAAE,WAAW,CAAC,SAAS;qCACjC;iCACF,CAAC,CAAC;4BACL,CAAC;4BAAC,OAAO,KAAK,EAAE,CAAC;gCACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC;4BACrE,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,KAAK,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,0CAA0C;QAC1C,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,UAA6B;QAChD,oCAAoC;QACpC,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAiB,CAAC;QAE5D,2BAA2B;QAC3B,MAAM,gBAAgB,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;QACxE,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,kCAAkC,QAAQ,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAA2B,CAAC;QAEjE,2BAA2B;QAC3B,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;QAE3D,0DAA0D;QAC1D,MAAM,iBAAiB,GAAG,SAAS,CAAC,MAAM,CACxC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,IAAK,CAAC,CAAC,OAAyB,CAAC,IAAI,KAAK,cAAc,CACpF,CAAC;QAEF,gEAAgE;QAChE,MAAM,iBAAiB,GAAG,SAAS,CAAC,MAAM,CACxC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,eAAe;YACzB,CAAC,CAAC,OAA6B,CAAC,IAAI,KAAK,WAAW,CAC3D,CAAC;QAEF,kFAAkF;QAClF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAE1D,qCAAqC;QACrC,MAAM,mBAAmB,GAAG,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;QACnF,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;QAE/E,mBAAmB;QACnB,MAAM,SAAS,GAA2B,EAAE,CAAC;QAC7C,MAAM,UAAU,GAAyD,EAAE,CAAC;QAE5E,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC3B,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAE3D,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7B,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;YACvD,CAAC;YACD,IAAI,EAAE,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC5B,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;YACpC,CAAC;iBAAM,IAAI,EAAE,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACnC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;YACpC,CAAC;QACH,CAAC;QAED,yCAAyC;QACzC,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;QACtE,MAAM,UAAU,GAA2B,EAAE,CAAC;QAC9C,IAAI,KAAK,GAAG,SAAS,CAAC,CAAC,UAAU;QAEjC,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,KAAK,CAAC,OAA2B,CAAC;YAClD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAClB,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;gBACtB,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC;QAE1E,4BAA4B;QAC5B,MAAM,SAAS,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;QAExD,oDAAoD;QACpD,6DAA6D;QAC7D,MAAM,MAAM,GAAG;YACb,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,CAAC;YACZ,aAAa,EAAE,CAAC;YAChB,KAAK,EAAE,CAAC;SACT,CAAC;QAEF,yCAAyC;QACzC,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CACpC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,IAAK,CAAC,CAAC,OAAyB,CAAC,IAAI,KAAK,cAAc,CACpF,CAAC;QAEF,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CACrC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,IAAK,CAAC,CAAC,OAAyB,CAAC,IAAI,KAAK,eAAe,CACrF,CAAC;QAEF,mCAAmC;QACnC,8BAA8B;QAC9B,iCAAiC;QACjC,oFAAoF;QACpF,8CAA8C;QAC9C,MAAM,SAAS,GAAG,eAAe,GAAG,CAAC;YACpB,aAAa,CAAC,MAAM,GAAG,CAAC;YACxB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,CAAC;YAChE,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC;QAE7C,wBAAwB;QACxB,IAAI,UAA8B,CAAC;QACnC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC1D,UAAU,GAAI,SAAS,CAAC,OAAyB,CAAC,KAAK,IAAI,SAAS,CAAC;QACvE,CAAC;aAAM,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1E,UAAU,GAAG,oCAAoC,CAAC;QACpD,CAAC;aAAM,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvC,UAAU,GAAG,kCAAkC,CAAC;QAClD,CAAC;QAED,mBAAmB;QACnB,MAAM,WAAW,GAAI,UAAU,CAAC,QAAQ,CAAC,GAAc,IAAI,EAAE,CAAC;QAE9D,OAAO;YACL,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,KAAK,EAAE,OAAO;YACd,YAAY,EAAE,WAAW,CAAC,WAAW;YACrC,SAAS;YACT,OAAO;YACP,UAAU;YACV,WAAW;YACX,SAAS,EAAE,WAAW,CAAC,GAAG,EAAE,MAAM;YAClC,SAAS,EAAE,WAAW,CAAC,GAAG,EAAE,WAAW;YACvC,KAAK;YACL,QAAQ,EAAE,WAAW,CAAC,cAAc,IAAI,QAAQ;YAChD,gBAAgB,EAAE,iBAAiB,CAAC,MAAM;YAC1C,qBAAqB,EAAE,iBAAiB,CAAC,MAAM;YAC/C,aAAa,EAAE,SAAS,CAAC,MAAM;YAC/B,mBAAmB;YACnB,eAAe;YACf,iBAAiB,EAAE,iBAAiB,CAAC,MAAM;YAC3C,SAAS;YACT,UAAU;YACV,UAAU;YACV,MAAM;YACN,UAAU;YACV,SAAS;YACT,SAAS;SACV,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,UAA6B;QACjD,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAiB,CAAC;QAE5D,MAAM,QAAQ,GAAqB,EAAE,CAAC;QAEtC,0CAA0C;QAC1C,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBACnC,MAAM,IAAI,GAAG,KAAK,CAAC,OAA4B,CAAC;gBAChD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;oBAAE,SAAS;gBAEtC,uBAAuB;gBACvB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;qBACzB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;qBACzD,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;qBAChB,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEd,uDAAuD;gBACvD,QAAQ,CAAC,IAAI,CAAC;oBACZ,SAAS,EAAE,GAAG,UAAU,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,EAAE;oBACvD,SAAS,EAAE,UAAU,CAAC,SAAS;oBAC/B,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;oBACpC,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,OAAO;oBACP,MAAM,EAAE,SAAS,EAAE,8BAA8B;oBACjD,KAAK,EAAE,SAAS,CAAG,iDAAiD;iBACrE,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,UAA6B;QAClD,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAiB,CAAC;QAE5D,MAAM,SAAS,GAAsB,EAAE,CAAC;QAExC,wDAAwD;QACxD,mDAAmD;QACnD,wEAAwE;QAExE,6DAA6D;QAC7D,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC;QAE1E,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAA6B,CAAC;YAErD,4DAA4D;YAC5D,SAAS,CAAC,IAAI,CAAC;gBACb,UAAU,EAAE,SAAS,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE;gBAC/C,SAAS,EAAE,GAAG,UAAU,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,EAAE;gBACvD,SAAS,EAAE,UAAU,CAAC,SAAS;gBAC/B,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;gBACpC,QAAQ,EAAE,gBAAgB;gBAC1B,QAAQ,EAAE;oBACR,SAAS,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE;oBACnC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,MAAM;oBACpC,2BAA2B,EAAE,QAAQ,CAAC,YAAY,CAAC,2BAA2B;oBAC9E,0BAA0B,EAAE,QAAQ,CAAC,YAAY,CAAC,0BAA0B;iBAC7E;gBACD,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,QAAQ,CAAC,YAAY;aAC9B,CAAC,CAAC;QACL,CAAC;QAED,qCAAqC;QACrC,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CACpC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,IAAK,CAAC,CAAC,OAAyB,CAAC,IAAI,KAAK,cAAc,CACpF,CAAC;QAEF,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAwB,CAAC;YAChD,SAAS,CAAC,IAAI,CAAC;gBACb,UAAU,EAAE,SAAS,KAAK,CAAC,SAAS,EAAE;gBACtC,SAAS,EAAE,GAAG,UAAU,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,EAAE;gBACvD,SAAS,EAAE,UAAU,CAAC,SAAS;gBAC/B,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;gBACpC,QAAQ,EAAE,cAAc;gBACxB,QAAQ,EAAE,EAAE;gBACZ,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,cAAc;aACxC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,UAA6B;QAC1D,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAiB,CAAC;QAE5D,MAAM,aAAa,GAA8B,EAAE,CAAC;QAEpD,wDAAwD;QACxD,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC;QAE1E,kDAAkD;QAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,eAAe,GAAG,YAAY,CAAC,OAA6B,CAAC;YAEnE,kCAAkC;YAClC,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAA8B,CAAC,CAAC,CAAC,IAAI,CAAC;YAE1F,4DAA4D;YAC5D,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,YAAY,CAAC,2BAA2B,CAAC,CAAC;YACvF,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC;gBAC9B,IAAI,GAAG,CAAC,YAAY,CAAC,YAAY,CAAC,2BAA2B,CAAC,CAAC,CAAC;gBAChE,IAAI,GAAG,EAAU,CAAC;YAEpB,sBAAsB;YACtB,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;gBAChC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBACzB,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;oBACtC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;oBAClC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;oBAE5D,aAAa,CAAC,IAAI,CAAC;wBACjB,SAAS,EAAE,UAAU,CAAC,SAAS;wBAC/B,UAAU,EAAE,SAAS,eAAe,CAAC,YAAY,CAAC,EAAE,EAAE;wBACtD,SAAS,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;wBAC3C,QAAQ,EAAE,IAAI;wBACd,SAAS,EAAE,QAAQ;wBACnB,UAAU,EAAE,CAAC,EAAE,uCAAuC;wBACtD,YAAY,EAAE,CAAC;wBACf,aAAa,EAAE,CAAC;wBAChB,QAAQ,EAAE,gBAAgB;wBAC1B,UAAU,EAAE,IAAI;wBAChB,aAAa;wBACb,QAAQ;wBACR,MAAM;qBACP,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,6CAA6C;YAC7C,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;gBAChC,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxB,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;oBACtC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;oBAClC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;oBAE5D,aAAa,CAAC,IAAI,CAAC;wBACjB,SAAS,EAAE,UAAU,CAAC,SAAS;wBAC/B,UAAU,EAAE,SAAS,eAAe,CAAC,YAAY,CAAC,EAAE,EAAE;wBACtD,SAAS,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;wBAC3C,QAAQ,EAAE,IAAI;wBACd,SAAS,EAAE,QAAQ;wBACnB,UAAU,EAAE,CAAC,EAAE,uCAAuC;wBACtD,YAAY,EAAE,CAAC;wBACf,aAAa,EAAE,CAAC;wBAChB,QAAQ,EAAE,gBAAgB;wBAC1B,UAAU,EAAE,KAAK;wBACjB,aAAa;wBACb,QAAQ;wBACR,MAAM;qBACP,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,iDAAiD;YACjD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;gBAC7B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5B,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;oBACtC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;oBAClC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;oBAE5D,aAAa,CAAC,IAAI,CAAC;wBACjB,SAAS,EAAE,UAAU,CAAC,SAAS;wBAC/B,UAAU,EAAE,SAAS,eAAe,CAAC,YAAY,CAAC,EAAE,EAAE;wBACtD,SAAS,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;wBAC3C,QAAQ,EAAE,IAAI;wBACd,SAAS,EAAE,QAAQ;wBACnB,UAAU,EAAE,CAAC;wBACb,YAAY,EAAE,CAAC;wBACf,aAAa,EAAE,CAAC;wBAChB,QAAQ,EAAE,gBAAgB;wBAC1B,UAAU,EAAE,KAAK;wBACjB,aAAa;wBACb,QAAQ;wBACR,MAAM;qBACP,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -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"}
|