@codemieai/code 0.0.21 → 0.0.22
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/dist/agents/core/AgentCLI.d.ts.map +1 -1
- package/dist/agents/core/AgentCLI.js +11 -8
- package/dist/agents/core/AgentCLI.js.map +1 -1
- package/dist/agents/core/BaseMetricsAdapter.d.ts +20 -1
- package/dist/agents/core/BaseMetricsAdapter.d.ts.map +1 -1
- package/dist/agents/core/BaseMetricsAdapter.js +77 -1
- package/dist/agents/core/BaseMetricsAdapter.js.map +1 -1
- package/dist/agents/plugins/claude.metrics.d.ts +0 -12
- package/dist/agents/plugins/claude.metrics.d.ts.map +1 -1
- package/dist/agents/plugins/claude.metrics.js +2 -68
- package/dist/agents/plugins/claude.metrics.js.map +1 -1
- package/dist/agents/plugins/gemini.metrics.d.ts +92 -0
- package/dist/agents/plugins/gemini.metrics.d.ts.map +1 -0
- package/dist/agents/plugins/gemini.metrics.js +423 -0
- package/dist/agents/plugins/gemini.metrics.js.map +1 -0
- package/dist/agents/plugins/gemini.plugin.d.ts +3 -0
- package/dist/agents/plugins/gemini.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/gemini.plugin.js +9 -4
- package/dist/agents/plugins/gemini.plugin.js.map +1 -1
- package/dist/cli/commands/setup.js +3 -2
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/metrics/MetricsOrchestrator.d.ts.map +1 -1
- package/dist/metrics/MetricsOrchestrator.js +8 -0
- package/dist/metrics/MetricsOrchestrator.js.map +1 -1
- package/dist/metrics/types.d.ts +1 -0
- package/dist/metrics/types.d.ts.map +1 -1
- package/dist/metrics/utils/git.d.ts +13 -0
- package/dist/metrics/utils/git.d.ts.map +1 -0
- package/dist/metrics/utils/git.js +37 -0
- package/dist/metrics/utils/git.js.map +1 -0
- package/dist/providers/plugins/ollama/ollama.models.d.ts +3 -3
- package/dist/providers/plugins/ollama/ollama.models.d.ts.map +1 -1
- package/dist/providers/plugins/ollama/ollama.models.js +5 -12
- package/dist/providers/plugins/ollama/ollama.models.js.map +1 -1
- package/dist/providers/plugins/ollama/ollama.template.d.ts.map +1 -1
- package/dist/providers/plugins/ollama/ollama.template.js +2 -35
- package/dist/providers/plugins/ollama/ollama.template.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gemini Metrics Adapter
|
|
3
|
+
*
|
|
4
|
+
* Implements metrics support for Gemini CLI agent.
|
|
5
|
+
* Handles Gemini-specific file formats (JSON) and parsing logic.
|
|
6
|
+
*/
|
|
7
|
+
import { readFile } from 'fs/promises';
|
|
8
|
+
import { join } from 'path';
|
|
9
|
+
import { homedir } from 'os';
|
|
10
|
+
import { existsSync } from 'fs';
|
|
11
|
+
import { BaseMetricsAdapter } from '../core/BaseMetricsAdapter.js';
|
|
12
|
+
import { logger } from '../../utils/logger.js';
|
|
13
|
+
export class GeminiMetricsAdapter extends BaseMetricsAdapter {
|
|
14
|
+
// Cache projectHash from last parsed session to optimize getUserPrompts()
|
|
15
|
+
lastProjectHash = null;
|
|
16
|
+
constructor(metadata) {
|
|
17
|
+
super('gemini', metadata);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Extract projectHash from Gemini session file path
|
|
21
|
+
* Path format: ~/.gemini/tmp/{projectHash}/chats/session-*.json
|
|
22
|
+
*/
|
|
23
|
+
extractProjectHashFromPath(path) {
|
|
24
|
+
const match = path.match(/\.gemini\/tmp\/([^/]+)\/chats\//);
|
|
25
|
+
return match ? match[1] : null;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Check if file matches Gemini session pattern
|
|
29
|
+
* Pattern: ~/.gemini/tmp/{projectHash}/chats/session-{date}-{id}.json
|
|
30
|
+
* Note: Gemini uses JSON format, not JSONL
|
|
31
|
+
* Flexible hex ID matching (8+ chars) to support future format changes
|
|
32
|
+
*/
|
|
33
|
+
matchesSessionPattern(path) {
|
|
34
|
+
return /\.gemini\/tmp\/[^/]+\/chats\/session-\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-[a-f0-9]+\.json$/.test(path);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Extract session ID from Gemini file path
|
|
38
|
+
* Example: ~/.gemini/tmp/abc123/chats/session-2025-12-17T11-51-e5279324.json → session-2025-12-17T11-51-e5279324
|
|
39
|
+
*/
|
|
40
|
+
extractSessionId(path) {
|
|
41
|
+
const match = path.match(/session-[^/]+\.json$/);
|
|
42
|
+
return match?.[0].replace(/^session-/, '').replace(/\.json$/, '') || '';
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Parse Gemini session file (JSON format) and extract metrics
|
|
46
|
+
* Each message in the messages array contains a conversation turn
|
|
47
|
+
*/
|
|
48
|
+
async parseSessionFile(path) {
|
|
49
|
+
try {
|
|
50
|
+
// Cache projectHash for getUserPrompts() optimization
|
|
51
|
+
this.lastProjectHash = this.extractProjectHashFromPath(path);
|
|
52
|
+
const content = await readFile(path, 'utf-8');
|
|
53
|
+
const session = JSON.parse(content);
|
|
54
|
+
if (!session.messages || session.messages.length === 0) {
|
|
55
|
+
throw new Error('Empty session file');
|
|
56
|
+
}
|
|
57
|
+
// Aggregate metrics from all messages
|
|
58
|
+
let inputTokens = 0;
|
|
59
|
+
let outputTokens = 0;
|
|
60
|
+
let cacheReadTokens = 0;
|
|
61
|
+
// Track all models
|
|
62
|
+
const modelCalls = new Map();
|
|
63
|
+
// Tool tracking
|
|
64
|
+
const toolCalls = [];
|
|
65
|
+
for (const message of session.messages) {
|
|
66
|
+
// Track models
|
|
67
|
+
if (message.model && message.type === 'gemini') {
|
|
68
|
+
const model = message.model;
|
|
69
|
+
modelCalls.set(model, (modelCalls.get(model) || 0) + 1);
|
|
70
|
+
}
|
|
71
|
+
// Aggregate token usage (only from gemini messages)
|
|
72
|
+
if (message.type === 'gemini' && message.tokens) {
|
|
73
|
+
inputTokens += message.tokens.input || 0;
|
|
74
|
+
// Output = output tokens + thoughts tokens (model's internal reasoning)
|
|
75
|
+
outputTokens += (message.tokens.output || 0) + (message.tokens.thoughts || 0);
|
|
76
|
+
cacheReadTokens += message.tokens.cached || 0; // Gemini "cached" → CodeMie "cacheRead"
|
|
77
|
+
// Extract tool calls
|
|
78
|
+
if (message.toolCalls && Array.isArray(message.toolCalls)) {
|
|
79
|
+
for (const toolCall of message.toolCalls) {
|
|
80
|
+
// Determine status: check 'status' field first, fallback to result.success
|
|
81
|
+
let status = 'error';
|
|
82
|
+
if (toolCall.status) {
|
|
83
|
+
status = toolCall.status === 'success' ? 'success' : 'error';
|
|
84
|
+
}
|
|
85
|
+
else if (toolCall.result && typeof toolCall.result.success === 'boolean') {
|
|
86
|
+
status = toolCall.result.success ? 'success' : 'error';
|
|
87
|
+
}
|
|
88
|
+
toolCalls.push({
|
|
89
|
+
id: toolCall.id,
|
|
90
|
+
name: toolCall.name,
|
|
91
|
+
timestamp: new Date(toolCall.timestamp).getTime(),
|
|
92
|
+
status,
|
|
93
|
+
input: toolCall.args,
|
|
94
|
+
error: status === 'error' ? (toolCall.error || toolCall.result?.message) : undefined,
|
|
95
|
+
fileOperation: this.extractFileOperation(toolCall.name, toolCall.args)
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Build aggregated tool usage summary
|
|
102
|
+
const toolUsageSummary = this.buildToolUsageSummary(toolCalls);
|
|
103
|
+
// Get all models
|
|
104
|
+
const allModels = Array.from(modelCalls.keys());
|
|
105
|
+
const snapshot = {
|
|
106
|
+
sessionId: session.sessionId || '',
|
|
107
|
+
timestamp: Date.now(),
|
|
108
|
+
tokens: {
|
|
109
|
+
input: inputTokens,
|
|
110
|
+
output: outputTokens,
|
|
111
|
+
cacheRead: cacheReadTokens > 0 ? cacheReadTokens : undefined
|
|
112
|
+
},
|
|
113
|
+
toolCalls,
|
|
114
|
+
toolUsageSummary,
|
|
115
|
+
turnCount: session.messages.length,
|
|
116
|
+
model: allModels.length > 0 ? allModels[0] : undefined,
|
|
117
|
+
metadata: {
|
|
118
|
+
totalInputTokens: inputTokens + cacheReadTokens,
|
|
119
|
+
models: allModels,
|
|
120
|
+
modelCalls: Object.fromEntries(modelCalls)
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
logger.debug(`[GeminiMetrics] Parsed session ${session.sessionId}: ${inputTokens} input, ${outputTokens} output, ` +
|
|
124
|
+
`${cacheReadTokens} cache read, ${toolCalls.length} tool calls, ${allModels.length} models`);
|
|
125
|
+
return snapshot;
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
logger.error(`[GeminiMetrics] Failed to parse session file: ${path}`, error);
|
|
129
|
+
throw error;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Parse session file and extract incremental delta records
|
|
134
|
+
* Returns array of delta records for turns with token usage
|
|
135
|
+
*
|
|
136
|
+
* @param path - Path to Gemini session file
|
|
137
|
+
* @param processedRecordIds - Set of record IDs already written to metrics
|
|
138
|
+
* @param attachedUserPromptTexts - Set of user prompt texts already attached (persisted from sync state)
|
|
139
|
+
*/
|
|
140
|
+
async parseIncrementalMetrics(path, processedRecordIds = new Set(), attachedUserPromptTexts = new Set()) {
|
|
141
|
+
try {
|
|
142
|
+
// Cache projectHash for getUserPrompts() optimization
|
|
143
|
+
this.lastProjectHash = this.extractProjectHashFromPath(path);
|
|
144
|
+
const content = await readFile(path, 'utf-8');
|
|
145
|
+
const session = JSON.parse(content);
|
|
146
|
+
if (!session.messages || session.messages.length === 0) {
|
|
147
|
+
return { deltas: [], lastLine: 0, newlyAttachedPrompts: [] };
|
|
148
|
+
}
|
|
149
|
+
// Load user prompts from logs.json
|
|
150
|
+
const userPrompts = await this.getUserPrompts(session.sessionId);
|
|
151
|
+
// Build map by messageId (sequential 0, 1, 2...) for reliable correlation
|
|
152
|
+
const userPromptsByMessageId = new Map();
|
|
153
|
+
for (const prompt of userPrompts) {
|
|
154
|
+
// logs.json has messageId field (sequential) - extract from metadata if available
|
|
155
|
+
const messageId = prompt.messageId;
|
|
156
|
+
if (typeof messageId === 'number') {
|
|
157
|
+
userPromptsByMessageId.set(messageId, prompt);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Track initial size to determine newly attached prompts
|
|
161
|
+
const initialAttachedCount = attachedUserPromptTexts.size;
|
|
162
|
+
const deltas = [];
|
|
163
|
+
let lastUserPrompt;
|
|
164
|
+
let userMessageIndex = 0; // Track sequential user message count
|
|
165
|
+
for (const message of session.messages) {
|
|
166
|
+
// Skip already processed messages
|
|
167
|
+
if (processedRecordIds.has(message.id)) {
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
// Track user prompts by sequential message index
|
|
171
|
+
if (message.type === 'user') {
|
|
172
|
+
// Try to match by messageId first (most reliable)
|
|
173
|
+
lastUserPrompt = userPromptsByMessageId.get(userMessageIndex);
|
|
174
|
+
// Fallback: find by closest timestamp within ±1000ms window
|
|
175
|
+
if (!lastUserPrompt && userPrompts.length > 0) {
|
|
176
|
+
const timestamp = new Date(message.timestamp).getTime();
|
|
177
|
+
lastUserPrompt = this.findUserPromptByTimestamp(userPrompts, timestamp, 1000);
|
|
178
|
+
}
|
|
179
|
+
userMessageIndex++;
|
|
180
|
+
}
|
|
181
|
+
// Create delta for gemini messages with tokens
|
|
182
|
+
if (message.type === 'gemini' && message.tokens) {
|
|
183
|
+
const tools = {};
|
|
184
|
+
const toolStatus = {};
|
|
185
|
+
const fileOperations = [];
|
|
186
|
+
let apiErrorMessage;
|
|
187
|
+
// Extract tool usage
|
|
188
|
+
if (message.toolCalls && Array.isArray(message.toolCalls)) {
|
|
189
|
+
for (const toolCall of message.toolCalls) {
|
|
190
|
+
const toolName = toolCall.name;
|
|
191
|
+
tools[toolName] = (tools[toolName] || 0) + 1;
|
|
192
|
+
if (!toolStatus[toolName]) {
|
|
193
|
+
toolStatus[toolName] = { success: 0, failure: 0 };
|
|
194
|
+
}
|
|
195
|
+
// Determine status: check 'status' field first, fallback to result.success
|
|
196
|
+
let isSuccess = false;
|
|
197
|
+
if (toolCall.status) {
|
|
198
|
+
isSuccess = toolCall.status === 'success';
|
|
199
|
+
}
|
|
200
|
+
else if (toolCall.result && typeof toolCall.result.success === 'boolean') {
|
|
201
|
+
isSuccess = toolCall.result.success;
|
|
202
|
+
}
|
|
203
|
+
if (isSuccess) {
|
|
204
|
+
toolStatus[toolName].success++;
|
|
205
|
+
const fileOp = this.extractFileOperation(toolName, toolCall.args);
|
|
206
|
+
if (fileOp) {
|
|
207
|
+
fileOperations.push(fileOp);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
toolStatus[toolName].failure++;
|
|
212
|
+
if (!apiErrorMessage && (toolCall.error || toolCall.result?.message)) {
|
|
213
|
+
apiErrorMessage = toolCall.error || toolCall.result?.message;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// Include user prompt if available and not already attached
|
|
219
|
+
const userPrompts = [];
|
|
220
|
+
if (lastUserPrompt && lastUserPrompt.display && !attachedUserPromptTexts.has(lastUserPrompt.display)) {
|
|
221
|
+
userPrompts.push({
|
|
222
|
+
count: 1,
|
|
223
|
+
text: lastUserPrompt.display
|
|
224
|
+
});
|
|
225
|
+
attachedUserPromptTexts.add(lastUserPrompt.display);
|
|
226
|
+
lastUserPrompt = undefined;
|
|
227
|
+
}
|
|
228
|
+
// Create delta record
|
|
229
|
+
const delta = {
|
|
230
|
+
recordId: message.id,
|
|
231
|
+
sessionId: '', // Set by caller (MetricsOrchestrator)
|
|
232
|
+
agentSessionId: session.sessionId || '',
|
|
233
|
+
timestamp: message.timestamp,
|
|
234
|
+
gitBranch: undefined,
|
|
235
|
+
tokens: {
|
|
236
|
+
input: message.tokens.input || 0,
|
|
237
|
+
// Output = output tokens + thoughts tokens (model's internal reasoning)
|
|
238
|
+
output: (message.tokens.output || 0) + (message.tokens.thoughts || 0),
|
|
239
|
+
cacheRead: message.tokens.cached > 0 ? message.tokens.cached : undefined
|
|
240
|
+
},
|
|
241
|
+
tools,
|
|
242
|
+
toolStatus: Object.keys(toolStatus).length > 0 ? toolStatus : undefined,
|
|
243
|
+
fileOperations: fileOperations.length > 0 ? fileOperations : undefined,
|
|
244
|
+
userPrompts: userPrompts.length > 0 ? userPrompts : undefined,
|
|
245
|
+
apiErrorMessage,
|
|
246
|
+
models: message.model ? [message.model] : undefined
|
|
247
|
+
};
|
|
248
|
+
deltas.push(delta);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
// Calculate newly attached prompts
|
|
252
|
+
const newlyAttachedPrompts = Array.from(attachedUserPromptTexts).slice(initialAttachedCount);
|
|
253
|
+
return {
|
|
254
|
+
deltas,
|
|
255
|
+
lastLine: session.messages.length,
|
|
256
|
+
newlyAttachedPrompts
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
catch (error) {
|
|
260
|
+
logger.error(`[GeminiMetrics] Failed to parse incremental metrics: ${path}`, error);
|
|
261
|
+
throw error;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Get user prompts for a specific session
|
|
266
|
+
* Gemini stores user prompts in logs.json in project directories
|
|
267
|
+
*
|
|
268
|
+
* @param sessionId - Gemini session ID
|
|
269
|
+
* @param fromTimestamp - Start timestamp (Unix ms) - optional
|
|
270
|
+
* @param toTimestamp - End timestamp (Unix ms) - optional
|
|
271
|
+
* @returns Array of user prompts
|
|
272
|
+
*/
|
|
273
|
+
async getUserPrompts(sessionId, fromTimestamp, toTimestamp) {
|
|
274
|
+
try {
|
|
275
|
+
if (!this.metadata?.dataPaths?.home) {
|
|
276
|
+
return [];
|
|
277
|
+
}
|
|
278
|
+
const home = this.metadata.dataPaths.home.replace('~', homedir());
|
|
279
|
+
// Scan all project directories in ~/.gemini/tmp/
|
|
280
|
+
const tmpDir = join(home, 'tmp');
|
|
281
|
+
if (!existsSync(tmpDir)) {
|
|
282
|
+
return [];
|
|
283
|
+
}
|
|
284
|
+
// Use cached projectHash from parseSessionFile/parseIncrementalMetrics call
|
|
285
|
+
// This is always available when getUserPrompts is called from normal flow
|
|
286
|
+
if (!this.lastProjectHash) {
|
|
287
|
+
logger.debug('[GeminiMetrics] No projectHash available - cannot determine logs.json location');
|
|
288
|
+
return [];
|
|
289
|
+
}
|
|
290
|
+
const logsPath = join(tmpDir, this.lastProjectHash, 'logs.json');
|
|
291
|
+
if (!existsSync(logsPath)) {
|
|
292
|
+
return [];
|
|
293
|
+
}
|
|
294
|
+
try {
|
|
295
|
+
const content = await readFile(logsPath, 'utf-8');
|
|
296
|
+
const logs = JSON.parse(content);
|
|
297
|
+
// Validate logs structure
|
|
298
|
+
if (!Array.isArray(logs)) {
|
|
299
|
+
logger.debug(`[GeminiMetrics] Invalid logs.json format in ${this.lastProjectHash}: not an array`);
|
|
300
|
+
return [];
|
|
301
|
+
}
|
|
302
|
+
const prompts = logs
|
|
303
|
+
.filter((log) => {
|
|
304
|
+
// Validate log entry has required fields
|
|
305
|
+
if (!log || !log.sessionId || !log.timestamp || !log.message) {
|
|
306
|
+
return false;
|
|
307
|
+
}
|
|
308
|
+
return log.sessionId === sessionId;
|
|
309
|
+
})
|
|
310
|
+
.filter((log) => {
|
|
311
|
+
const ts = new Date(log.timestamp).getTime();
|
|
312
|
+
if (isNaN(ts))
|
|
313
|
+
return false; // Invalid timestamp
|
|
314
|
+
if (fromTimestamp && ts < fromTimestamp)
|
|
315
|
+
return false;
|
|
316
|
+
if (toTimestamp && ts > toTimestamp)
|
|
317
|
+
return false;
|
|
318
|
+
return true;
|
|
319
|
+
})
|
|
320
|
+
.map((log) => ({
|
|
321
|
+
display: log.message,
|
|
322
|
+
timestamp: new Date(log.timestamp).getTime(),
|
|
323
|
+
project: '', // workingDirectory comes from MetricsSession
|
|
324
|
+
sessionId: log.sessionId,
|
|
325
|
+
messageId: log.messageId // Preserve messageId for correlation
|
|
326
|
+
}));
|
|
327
|
+
return prompts;
|
|
328
|
+
}
|
|
329
|
+
catch (parseError) {
|
|
330
|
+
// JSON parse failed or file read error
|
|
331
|
+
logger.debug(`[GeminiMetrics] Failed to parse logs.json in ${this.lastProjectHash}:`, parseError);
|
|
332
|
+
return [];
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
catch (error) {
|
|
336
|
+
logger.debug(`[GeminiMetrics] Failed to get user prompts:`, error);
|
|
337
|
+
return [];
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Find user prompt by timestamp with fuzzy matching
|
|
342
|
+
* Finds the closest user prompt within the tolerance window
|
|
343
|
+
*
|
|
344
|
+
* @param userPrompts - Array of user prompts from logs.json
|
|
345
|
+
* @param targetTimestamp - Target timestamp to match (Unix ms)
|
|
346
|
+
* @param toleranceMs - Tolerance window in milliseconds (default: 1000ms = ±1s)
|
|
347
|
+
* @returns Closest matching user prompt or undefined
|
|
348
|
+
*/
|
|
349
|
+
findUserPromptByTimestamp(userPrompts, targetTimestamp, toleranceMs = 1000) {
|
|
350
|
+
let closestPrompt;
|
|
351
|
+
let closestDiff = Infinity;
|
|
352
|
+
for (const prompt of userPrompts) {
|
|
353
|
+
const diff = Math.abs(prompt.timestamp - targetTimestamp);
|
|
354
|
+
if (diff <= toleranceMs && diff < closestDiff) {
|
|
355
|
+
closestDiff = diff;
|
|
356
|
+
closestPrompt = prompt;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
return closestPrompt;
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Extract file operation details from tool input
|
|
363
|
+
*
|
|
364
|
+
* @param toolName - Tool name (read_file, write_file, etc.)
|
|
365
|
+
* @param input - Tool input parameters
|
|
366
|
+
*/
|
|
367
|
+
extractFileOperation(toolName, input) {
|
|
368
|
+
// Map Gemini tool names to operation types
|
|
369
|
+
const typeMap = {
|
|
370
|
+
'read_file': 'read',
|
|
371
|
+
'write_file': 'write',
|
|
372
|
+
'replace': 'edit',
|
|
373
|
+
'glob': 'glob',
|
|
374
|
+
'search_file_content': 'grep',
|
|
375
|
+
'list_directory': 'glob' // Directory listing mapped to glob (similar operation)
|
|
376
|
+
};
|
|
377
|
+
const type = typeMap[toolName];
|
|
378
|
+
if (!type)
|
|
379
|
+
return undefined;
|
|
380
|
+
const fileOp = { type };
|
|
381
|
+
// Handle file_path (most tools) or dir_path (list_directory)
|
|
382
|
+
const path = input?.file_path || input?.dir_path;
|
|
383
|
+
if (path) {
|
|
384
|
+
fileOp.path = path;
|
|
385
|
+
fileOp.format = this.extractFormat(path);
|
|
386
|
+
fileOp.language = this.detectLanguage(path);
|
|
387
|
+
}
|
|
388
|
+
if (input?.pattern) {
|
|
389
|
+
fileOp.pattern = input.pattern;
|
|
390
|
+
}
|
|
391
|
+
// Line counts for write operations
|
|
392
|
+
if (toolName === 'write_file' && input?.content) {
|
|
393
|
+
fileOp.linesAdded = input.content.split('\n').length;
|
|
394
|
+
}
|
|
395
|
+
return fileOp;
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Gemini uses object-based watermark (message ID tracking)
|
|
399
|
+
*/
|
|
400
|
+
getWatermarkStrategy() {
|
|
401
|
+
return 'object';
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Gemini initialization delay: 500ms (same as Claude)
|
|
405
|
+
*/
|
|
406
|
+
getInitDelay() {
|
|
407
|
+
return 500;
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Override getDataPaths to handle dynamic projectHash pattern
|
|
411
|
+
* Pattern: ~/.gemini/tmp/{projectHash}/chats/
|
|
412
|
+
*/
|
|
413
|
+
getDataPaths() {
|
|
414
|
+
const home = this.metadata?.dataPaths?.home?.replace('~', homedir()) || join(homedir(), '.gemini');
|
|
415
|
+
// Return tmp directory - FileSnapshotter will scan subdirectories
|
|
416
|
+
// Pattern matching in matchesSessionPattern() handles the rest
|
|
417
|
+
return {
|
|
418
|
+
sessionsDir: join(home, 'tmp'),
|
|
419
|
+
settingsDir: home
|
|
420
|
+
};
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
//# sourceMappingURL=gemini.metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.metrics.js","sourceRoot":"","sources":["../../../src/agents/plugins/gemini.metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { AgentMetadata } from '../core/types.js';
|
|
2
2
|
import { BaseAgentAdapter } from '../core/BaseAgentAdapter.js';
|
|
3
|
+
import type { AgentMetricsSupport } from '../../metrics/types.js';
|
|
3
4
|
/**
|
|
4
5
|
* Gemini CLI Plugin Metadata
|
|
5
6
|
*/
|
|
@@ -8,6 +9,8 @@ export declare const GeminiPluginMetadata: AgentMetadata;
|
|
|
8
9
|
* Gemini CLI Adapter
|
|
9
10
|
*/
|
|
10
11
|
export declare class GeminiPlugin extends BaseAgentAdapter {
|
|
12
|
+
private metricsAdapter;
|
|
11
13
|
constructor();
|
|
14
|
+
getMetricsAdapter(): AgentMetricsSupport;
|
|
12
15
|
}
|
|
13
16
|
//# sourceMappingURL=gemini.plugin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.plugin.d.ts","sourceRoot":"","sources":["../../../src/agents/plugins/gemini.plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"gemini.plugin.d.ts","sourceRoot":"","sources":["../../../src/agents/plugins/gemini.plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAM/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAyClE;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,aAyClC,CAAC;AAEF;;GAEG;AACH,qBAAa,YAAa,SAAQ,gBAAgB;IAChD,OAAO,CAAC,cAAc,CAAsB;;IAO5C,iBAAiB,IAAI,mBAAmB;CAGzC"}
|
|
@@ -3,6 +3,7 @@ import { mkdir, writeFile } from 'fs/promises';
|
|
|
3
3
|
import { existsSync } from 'fs';
|
|
4
4
|
import { join } from 'path';
|
|
5
5
|
import { homedir } from 'os';
|
|
6
|
+
import { GeminiMetricsAdapter } from './gemini.metrics.js';
|
|
6
7
|
// Define metadata first (used by both lifecycle and analytics)
|
|
7
8
|
const metadata = {
|
|
8
9
|
name: 'gemini',
|
|
@@ -17,10 +18,10 @@ const metadata = {
|
|
|
17
18
|
},
|
|
18
19
|
supportedProviders: ['ai-run-sso', 'litellm'],
|
|
19
20
|
blockedModelPatterns: [/^claude/i, /^gpt/i], // Gemini models only
|
|
20
|
-
recommendedModels: ['gemini-
|
|
21
|
+
recommendedModels: ['gemini-3-pro'],
|
|
21
22
|
ssoConfig: {
|
|
22
23
|
enabled: true,
|
|
23
|
-
clientType: 'gemini
|
|
24
|
+
clientType: 'codemie-gemini'
|
|
24
25
|
},
|
|
25
26
|
flagMappings: {
|
|
26
27
|
'--task': {
|
|
@@ -70,15 +71,19 @@ export const GeminiPluginMetadata = {
|
|
|
70
71
|
}
|
|
71
72
|
return env;
|
|
72
73
|
}
|
|
73
|
-
}
|
|
74
|
-
// Analytics adapter (uses same metadata - DRY principle!)
|
|
74
|
+
}
|
|
75
75
|
};
|
|
76
76
|
/**
|
|
77
77
|
* Gemini CLI Adapter
|
|
78
78
|
*/
|
|
79
79
|
export class GeminiPlugin extends BaseAgentAdapter {
|
|
80
|
+
metricsAdapter;
|
|
80
81
|
constructor() {
|
|
81
82
|
super(GeminiPluginMetadata);
|
|
83
|
+
this.metricsAdapter = new GeminiMetricsAdapter(GeminiPluginMetadata);
|
|
84
|
+
}
|
|
85
|
+
getMetricsAdapter() {
|
|
86
|
+
return this.metricsAdapter;
|
|
82
87
|
}
|
|
83
88
|
}
|
|
84
89
|
//# sourceMappingURL=gemini.plugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.plugin.js","sourceRoot":"","sources":["../../../src/agents/plugins/gemini.plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"gemini.plugin.js","sourceRoot":"","sources":["../../../src/agents/plugins/gemini.plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,8 +33,9 @@ export function createSetupCommand() {
|
|
|
33
33
|
return command;
|
|
34
34
|
}
|
|
35
35
|
async function runSetupWizard(force) {
|
|
36
|
-
console.log(chalk.bold.cyan('\n
|
|
37
|
-
console.log(chalk.bold.cyan('
|
|
36
|
+
console.log(chalk.bold.cyan('\n'));
|
|
37
|
+
console.log(chalk.bold.cyan('╔═══════════════════════════════════════╗'));
|
|
38
|
+
console.log(chalk.bold.cyan('║ Welcome to CodeMie Code Setup! ║'));
|
|
38
39
|
console.log(chalk.bold.cyan('╚═══════════════════════════════════════╝\n'));
|
|
39
40
|
// Check if config already exists
|
|
40
41
|
const hasConfig = await ConfigLoader.hasGlobalConfig();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACzB,MAAM,yCAAyC,CAAC;AAGjD,MAAM,UAAU,kBAAkB;IAChC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAErC,OAAO;SACJ,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,SAAS,EAAE,sCAAsC,CAAC;SACzD,MAAM,CAAC,eAAe,EAAE,oDAAoD,CAAC;SAC7E,MAAM,CAAC,KAAK,EAAE,OAA+C,EAAE,EAAE;QAChE,2CAA2C;QAC3C,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC;YAEnC,yBAAyB;YACzB,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;YAC5C,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,WAAW,IAAI,CAAC,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,KAAe;IAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetricsOrchestrator.d.ts","sourceRoot":"","sources":["../../src/metrics/MetricsOrchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,OAAO,KAAK,EAAE,mBAAmB,EAAgC,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"MetricsOrchestrator.d.ts","sourceRoot":"","sources":["../../src/metrics/MetricsOrchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,OAAO,KAAK,EAAE,mBAAmB,EAAgC,MAAM,YAAY,CAAC;AAMpF,MAAM,WAAW,0BAA0B;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,mBAAmB,CAAC;CACrC;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,cAAc,CAAsB;IAE5C,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,KAAK,CAAe;IAG5B,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,WAAW,CAAyC;IAE5D,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,YAAY,CAAkB;gBAE1B,OAAO,EAAE,0BAA0B;IAa/C;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;;OAGG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAkDvC;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAiEtC;;;OAGG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyClD;;OAEG;YACW,0BAA0B;IA+CxC;;OAEG;YACW,aAAa;IA6E3B;;OAEG;IACH,OAAO,CAAC,KAAK;CAGd"}
|
|
@@ -17,6 +17,7 @@ import { SyncStateManager } from './core/SyncStateManager.js';
|
|
|
17
17
|
import { METRICS_CONFIG } from './config.js';
|
|
18
18
|
import { logger } from '../utils/logger.js';
|
|
19
19
|
import { watch } from 'fs';
|
|
20
|
+
import { detectGitBranch } from './utils/git.js';
|
|
20
21
|
export class MetricsOrchestrator {
|
|
21
22
|
sessionId;
|
|
22
23
|
agentName;
|
|
@@ -67,6 +68,8 @@ export class MetricsOrchestrator {
|
|
|
67
68
|
// Take snapshot
|
|
68
69
|
this.beforeSnapshot = await this.snapshotter.snapshot(sessionsDir);
|
|
69
70
|
logger.debug(`[MetricsOrchestrator] Pre-spawn snapshot: ${this.beforeSnapshot.files.length} files`);
|
|
71
|
+
// Detect git branch from working directory
|
|
72
|
+
const gitBranch = await detectGitBranch(this.workingDirectory);
|
|
70
73
|
// Create session record
|
|
71
74
|
this.session = {
|
|
72
75
|
sessionId: this.sessionId,
|
|
@@ -75,6 +78,7 @@ export class MetricsOrchestrator {
|
|
|
75
78
|
...(this.project && { project: this.project }),
|
|
76
79
|
startTime: Date.now(),
|
|
77
80
|
workingDirectory: this.workingDirectory,
|
|
81
|
+
...(gitBranch && { gitBranch }), // Include branch if detected
|
|
78
82
|
status: 'active',
|
|
79
83
|
correlation: {
|
|
80
84
|
status: 'pending',
|
|
@@ -259,6 +263,10 @@ export class MetricsOrchestrator {
|
|
|
259
263
|
for (const delta of deltas) {
|
|
260
264
|
// Set CodeMie session ID
|
|
261
265
|
delta.sessionId = this.sessionId;
|
|
266
|
+
// Set gitBranch if not already present in delta
|
|
267
|
+
if (!delta.gitBranch) {
|
|
268
|
+
delta.gitBranch = await detectGitBranch(this.workingDirectory);
|
|
269
|
+
}
|
|
262
270
|
// Append to JSONL
|
|
263
271
|
await this.deltaWriter.appendDelta(delta);
|
|
264
272
|
newRecordIds.push(delta.recordId);
|