@codemieai/code 0.0.11 → 0.0.12
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 +20 -98
- package/dist/agents/codemie-code/agent.d.ts.map +1 -1
- package/dist/agents/codemie-code/agent.js +35 -4
- package/dist/agents/codemie-code/agent.js.map +1 -1
- package/dist/agents/codemie-code/tools/index.d.ts.map +1 -1
- package/dist/agents/codemie-code/tools/index.js +5 -3
- package/dist/agents/codemie-code/tools/index.js.map +1 -1
- package/dist/agents/core/AgentCLI.d.ts.map +1 -1
- package/dist/agents/core/AgentCLI.js +57 -11
- package/dist/agents/core/AgentCLI.js.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.d.ts +4 -4
- package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.js +31 -23
- package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
- package/dist/agents/plugins/codemie-code.plugin.js +1 -1
- package/dist/agents/plugins/codemie-code.plugin.js.map +1 -1
- package/dist/agents/plugins/gemini.plugin.js +1 -1
- package/dist/agents/plugins/gemini.plugin.js.map +1 -1
- package/dist/analytics/collector.d.ts +46 -0
- package/dist/analytics/collector.d.ts.map +1 -0
- package/dist/analytics/collector.js +83 -0
- package/dist/analytics/collector.js.map +1 -0
- package/dist/analytics/config.d.ts +14 -0
- package/dist/analytics/config.d.ts.map +1 -0
- package/dist/analytics/config.js +46 -0
- package/dist/analytics/config.js.map +1 -0
- package/dist/analytics/index.d.ts +108 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/index.js +322 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/plugins/api-metrics.plugin.d.ts +23 -0
- package/dist/analytics/plugins/api-metrics.plugin.d.ts.map +1 -0
- package/dist/analytics/plugins/api-metrics.plugin.js +113 -0
- package/dist/analytics/plugins/api-metrics.plugin.js.map +1 -0
- package/dist/analytics/plugins/index.d.ts +15 -0
- package/dist/analytics/plugins/index.d.ts.map +1 -0
- package/dist/analytics/plugins/index.js +15 -0
- package/dist/analytics/plugins/index.js.map +1 -0
- package/dist/analytics/plugins/model-metrics.plugin.d.ts +36 -0
- package/dist/analytics/plugins/model-metrics.plugin.d.ts.map +1 -0
- package/dist/analytics/plugins/model-metrics.plugin.js +115 -0
- package/dist/analytics/plugins/model-metrics.plugin.js.map +1 -0
- package/dist/analytics/plugins/provider-metrics.plugin.d.ts +38 -0
- package/dist/analytics/plugins/provider-metrics.plugin.d.ts.map +1 -0
- package/dist/analytics/plugins/provider-metrics.plugin.js +138 -0
- package/dist/analytics/plugins/provider-metrics.plugin.js.map +1 -0
- package/dist/analytics/plugins/types.d.ts +63 -0
- package/dist/analytics/plugins/types.d.ts.map +1 -0
- package/dist/analytics/plugins/types.js +54 -0
- package/dist/analytics/plugins/types.js.map +1 -0
- package/dist/analytics/privacy.d.ts +10 -0
- package/dist/analytics/privacy.d.ts.map +1 -0
- package/dist/analytics/privacy.js +20 -0
- package/dist/analytics/privacy.js.map +1 -0
- package/dist/analytics/session.d.ts +56 -0
- package/dist/analytics/session.d.ts.map +1 -0
- package/dist/analytics/session.js +95 -0
- package/dist/analytics/session.js.map +1 -0
- package/dist/analytics/types.d.ts +104 -0
- package/dist/analytics/types.d.ts.map +1 -0
- package/dist/analytics/types.js +15 -0
- package/dist/analytics/types.js.map +1 -0
- package/dist/analytics/writer.d.ts +18 -0
- package/dist/analytics/writer.d.ts.map +1 -0
- package/dist/analytics/writer.js +44 -0
- package/dist/analytics/writer.js.map +1 -0
- package/dist/cli/commands/analytics.d.ts +3 -0
- package/dist/cli/commands/analytics.d.ts.map +1 -0
- package/dist/cli/commands/analytics.js +319 -0
- package/dist/cli/commands/analytics.js.map +1 -0
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/config.js +14 -0
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/profile.d.ts.map +1 -1
- package/dist/cli/commands/profile.js +41 -0
- package/dist/cli/commands/profile.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/env/types.d.ts +2 -0
- package/dist/env/types.d.ts.map +1 -1
- package/dist/env/types.js.map +1 -1
- package/dist/utils/analytics-reader.d.ts +117 -0
- package/dist/utils/analytics-reader.d.ts.map +1 -0
- package/dist/utils/analytics-reader.js +421 -0
- package/dist/utils/analytics-reader.js.map +1 -0
- package/dist/utils/codemie-integration-validator.d.ts.map +1 -1
- package/dist/utils/codemie-integration-validator.js +3 -16
- package/dist/utils/codemie-integration-validator.js.map +1 -1
- package/dist/utils/codemie-proxy.d.ts +80 -0
- package/dist/utils/codemie-proxy.d.ts.map +1 -0
- package/dist/utils/codemie-proxy.js +335 -0
- package/dist/utils/codemie-proxy.js.map +1 -0
- package/dist/utils/config-loader.d.ts +7 -0
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +18 -0
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/date-formatter.d.ts +88 -0
- package/dist/utils/date-formatter.d.ts.map +1 -0
- package/dist/utils/date-formatter.js +133 -0
- package/dist/utils/date-formatter.js.map +1 -0
- package/dist/utils/installation-id.d.ts +10 -0
- package/dist/utils/installation-id.d.ts.map +1 -0
- package/dist/utils/installation-id.js +30 -0
- package/dist/utils/installation-id.js.map +1 -0
- package/dist/utils/logger.d.ts +1 -15
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +5 -86
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/proxy/errors.d.ts +45 -0
- package/dist/utils/proxy/errors.d.ts.map +1 -0
- package/dist/utils/proxy/errors.js +103 -0
- package/dist/utils/proxy/errors.js.map +1 -0
- package/dist/utils/proxy/http-client.d.ts +46 -0
- package/dist/utils/proxy/http-client.d.ts.map +1 -0
- package/dist/utils/proxy/http-client.js +133 -0
- package/dist/utils/proxy/http-client.js.map +1 -0
- package/dist/utils/proxy/interceptors.d.ts +69 -0
- package/dist/utils/proxy/interceptors.d.ts.map +1 -0
- package/dist/utils/proxy/interceptors.js +319 -0
- package/dist/utils/proxy/interceptors.js.map +1 -0
- package/dist/utils/proxy/types.d.ts +45 -0
- package/dist/utils/proxy/types.d.ts.map +1 -0
- package/dist/utils/proxy/types.js +7 -0
- package/dist/utils/proxy/types.js.map +1 -0
- package/package.json +38 -5
- package/dist/utils/sso-gateway.d.ts +0 -75
- package/dist/utils/sso-gateway.d.ts.map +0 -1
- package/dist/utils/sso-gateway.js +0 -453
- package/dist/utils/sso-gateway.js.map +0 -1
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analytics Reader Utility
|
|
3
|
+
* Reads and aggregates analytics data from JSONL files
|
|
4
|
+
*/
|
|
5
|
+
import { readFile, readdir, stat, unlink } from 'node:fs/promises';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { homedir } from 'node:os';
|
|
8
|
+
import { createReadStream, createWriteStream } from 'node:fs';
|
|
9
|
+
import { createInterface } from 'node:readline';
|
|
10
|
+
import { getUTCDateString, localDateToUTCRange, getUTCFilesForLocalDate } from './date-formatter.js';
|
|
11
|
+
import { AgentRegistry } from '../agents/registry.js';
|
|
12
|
+
/**
|
|
13
|
+
* Get analytics directory path
|
|
14
|
+
*/
|
|
15
|
+
export function getAnalyticsPath() {
|
|
16
|
+
return join(homedir(), '.codemie', 'analytics');
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get analytics file path for a specific date
|
|
20
|
+
* @param date - Date in YYYY-MM-DD format
|
|
21
|
+
*/
|
|
22
|
+
export function getAnalyticsFilePath(date) {
|
|
23
|
+
return join(getAnalyticsPath(), `${date}.jsonl`);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Read analytics events for a specific date
|
|
27
|
+
* @param date - Date in YYYY-MM-DD format (UTC)
|
|
28
|
+
* @returns Array of analytics events
|
|
29
|
+
*/
|
|
30
|
+
export async function readAnalyticsForDate(date) {
|
|
31
|
+
const filePath = getAnalyticsFilePath(date);
|
|
32
|
+
const events = [];
|
|
33
|
+
try {
|
|
34
|
+
const content = await readFile(filePath, 'utf-8');
|
|
35
|
+
const lines = content.trim().split('\n');
|
|
36
|
+
for (const line of lines) {
|
|
37
|
+
if (line.trim()) {
|
|
38
|
+
try {
|
|
39
|
+
const event = JSON.parse(line);
|
|
40
|
+
events.push(event);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// Skip invalid lines
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
if (error.code === 'ENOENT') {
|
|
50
|
+
// File doesn't exist, return empty array
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
return events;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Read analytics events for a local date
|
|
59
|
+
* Handles timezone conversion to read correct UTC files
|
|
60
|
+
* @param localDate - Date in YYYY-MM-DD format (local timezone)
|
|
61
|
+
* @returns Array of analytics events that fall within the local date
|
|
62
|
+
*/
|
|
63
|
+
export async function readAnalyticsForLocalDate(localDate) {
|
|
64
|
+
// Get UTC files that might contain events for this local date
|
|
65
|
+
const utcDates = getUTCFilesForLocalDate(localDate);
|
|
66
|
+
// Get the UTC time range for the local date
|
|
67
|
+
const { start, end } = localDateToUTCRange(localDate);
|
|
68
|
+
// Read all potentially relevant UTC files
|
|
69
|
+
const allEvents = [];
|
|
70
|
+
for (const utcDate of utcDates) {
|
|
71
|
+
const events = await readAnalyticsForDate(utcDate);
|
|
72
|
+
allEvents.push(...events);
|
|
73
|
+
}
|
|
74
|
+
// Filter to only events within the local date range
|
|
75
|
+
return allEvents.filter(event => {
|
|
76
|
+
const eventTime = new Date(event.timestamp);
|
|
77
|
+
return eventTime >= start && eventTime <= end;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Read analytics events for a date range (UTC dates)
|
|
82
|
+
* @param from - Start date (YYYY-MM-DD, UTC)
|
|
83
|
+
* @param to - End date (YYYY-MM-DD, UTC)
|
|
84
|
+
* @returns Array of analytics events
|
|
85
|
+
*/
|
|
86
|
+
export async function readAnalyticsForDateRange(from, to) {
|
|
87
|
+
const events = [];
|
|
88
|
+
const fromDate = new Date(from + 'T00:00:00.000Z');
|
|
89
|
+
const toDate = new Date(to + 'T23:59:59.999Z');
|
|
90
|
+
// Iterate through each UTC date in the range
|
|
91
|
+
const currentDate = new Date(fromDate);
|
|
92
|
+
while (currentDate <= toDate) {
|
|
93
|
+
const dateStr = getUTCDateString(currentDate);
|
|
94
|
+
const dateEvents = await readAnalyticsForDate(dateStr);
|
|
95
|
+
events.push(...dateEvents);
|
|
96
|
+
currentDate.setUTCDate(currentDate.getUTCDate() + 1);
|
|
97
|
+
}
|
|
98
|
+
return events;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Read analytics events for a local date range
|
|
102
|
+
* Handles timezone conversion to read correct UTC files
|
|
103
|
+
* @param from - Start date (YYYY-MM-DD, local timezone)
|
|
104
|
+
* @param to - End date (YYYY-MM-DD, local timezone)
|
|
105
|
+
* @returns Array of analytics events that fall within the local date range
|
|
106
|
+
*/
|
|
107
|
+
export async function readAnalyticsForLocalDateRange(from, to) {
|
|
108
|
+
// Get UTC time range for the local date range
|
|
109
|
+
const { start: startLocal } = localDateToUTCRange(from);
|
|
110
|
+
const { end: endLocal } = localDateToUTCRange(to);
|
|
111
|
+
// Determine which UTC files to read
|
|
112
|
+
const utcFrom = getUTCDateString(startLocal);
|
|
113
|
+
const utcTo = getUTCDateString(endLocal);
|
|
114
|
+
// Read all events in UTC range
|
|
115
|
+
const allEvents = await readAnalyticsForDateRange(utcFrom, utcTo);
|
|
116
|
+
// Filter to only events within the local date range
|
|
117
|
+
return allEvents.filter(event => {
|
|
118
|
+
const eventTime = new Date(event.timestamp);
|
|
119
|
+
return eventTime >= startLocal && eventTime <= endLocal;
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Filter analytics events
|
|
124
|
+
* @param events - Array of events to filter
|
|
125
|
+
* @param filters - Filter criteria
|
|
126
|
+
* @returns Filtered events
|
|
127
|
+
*/
|
|
128
|
+
export function filterEvents(events, filters) {
|
|
129
|
+
return events.filter(event => {
|
|
130
|
+
if (filters.agent && event.agent !== filters.agent) {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
if (filters.eventType && event.eventType !== filters.eventType) {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
if (filters.from || filters.to) {
|
|
137
|
+
const eventDate = new Date(event.timestamp);
|
|
138
|
+
if (filters.from && eventDate < filters.from) {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
if (filters.to && eventDate > filters.to) {
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return true;
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Calculate statistics from analytics events
|
|
150
|
+
* @param events - Array of analytics events
|
|
151
|
+
* @returns Calculated statistics
|
|
152
|
+
*/
|
|
153
|
+
export function calculateStats(events) {
|
|
154
|
+
const sessions = new Set();
|
|
155
|
+
let totalLatency = 0;
|
|
156
|
+
let latencyCount = 0;
|
|
157
|
+
// API counters
|
|
158
|
+
let apiRequests = 0;
|
|
159
|
+
let apiErrors = 0;
|
|
160
|
+
// Agent usage tracking
|
|
161
|
+
const agentUsage = {};
|
|
162
|
+
// Model usage tracking
|
|
163
|
+
const modelUsage = {};
|
|
164
|
+
for (const event of events) {
|
|
165
|
+
// Track sessions
|
|
166
|
+
if (event.sessionId) {
|
|
167
|
+
sessions.add(event.sessionId);
|
|
168
|
+
}
|
|
169
|
+
// Track event types
|
|
170
|
+
switch (event.eventType) {
|
|
171
|
+
case 'api_request':
|
|
172
|
+
apiRequests++;
|
|
173
|
+
if (event.agent) {
|
|
174
|
+
if (!agentUsage[event.agent]) {
|
|
175
|
+
agentUsage[event.agent] = { sessions: new Set(), apiCalls: 0 };
|
|
176
|
+
}
|
|
177
|
+
agentUsage[event.agent].apiCalls++;
|
|
178
|
+
}
|
|
179
|
+
if (event.model) {
|
|
180
|
+
if (!modelUsage[event.model]) {
|
|
181
|
+
modelUsage[event.model] = { apiCalls: 0 };
|
|
182
|
+
}
|
|
183
|
+
modelUsage[event.model].apiCalls++;
|
|
184
|
+
}
|
|
185
|
+
break;
|
|
186
|
+
case 'api_error':
|
|
187
|
+
apiErrors++;
|
|
188
|
+
if (event.agent) {
|
|
189
|
+
if (!agentUsage[event.agent]) {
|
|
190
|
+
agentUsage[event.agent] = { sessions: new Set(), apiCalls: 0 };
|
|
191
|
+
}
|
|
192
|
+
agentUsage[event.agent].apiCalls++;
|
|
193
|
+
}
|
|
194
|
+
if (event.model) {
|
|
195
|
+
if (!modelUsage[event.model]) {
|
|
196
|
+
modelUsage[event.model] = { apiCalls: 0 };
|
|
197
|
+
}
|
|
198
|
+
modelUsage[event.model].apiCalls++;
|
|
199
|
+
}
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
// Track latency
|
|
203
|
+
if (event.metrics?.latencyMs) {
|
|
204
|
+
totalLatency += event.metrics.latencyMs;
|
|
205
|
+
latencyCount++;
|
|
206
|
+
}
|
|
207
|
+
// Ensure agent sessions are tracked
|
|
208
|
+
if (event.agent && event.sessionId) {
|
|
209
|
+
if (!agentUsage[event.agent]) {
|
|
210
|
+
agentUsage[event.agent] = { sessions: new Set(), apiCalls: 0 };
|
|
211
|
+
}
|
|
212
|
+
agentUsage[event.agent].sessions.add(event.sessionId);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// Calculate success rate from API responses
|
|
216
|
+
let apiSuccessCount = 0;
|
|
217
|
+
let apiTotalCount = 0;
|
|
218
|
+
for (const event of events) {
|
|
219
|
+
if (event.eventType === 'api_response' && event.attributes.statusCode) {
|
|
220
|
+
apiTotalCount++;
|
|
221
|
+
const statusCode = Number(event.attributes.statusCode);
|
|
222
|
+
if (statusCode >= 200 && statusCode < 300) {
|
|
223
|
+
apiSuccessCount++;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
const successRate = apiTotalCount > 0 ? (apiSuccessCount / apiTotalCount) * 100 : 0;
|
|
228
|
+
// Convert agent usage to final format with display names from registry
|
|
229
|
+
const finalAgentUsage = {};
|
|
230
|
+
for (const [agentName, data] of Object.entries(agentUsage)) {
|
|
231
|
+
// Get display name from plugin registry
|
|
232
|
+
const adapter = AgentRegistry.getAgent(agentName);
|
|
233
|
+
const displayName = adapter?.displayName || agentName;
|
|
234
|
+
finalAgentUsage[agentName] = {
|
|
235
|
+
displayName,
|
|
236
|
+
sessions: data.sessions.size,
|
|
237
|
+
apiCalls: data.apiCalls
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
return {
|
|
241
|
+
totalSessions: sessions.size,
|
|
242
|
+
successRate,
|
|
243
|
+
avgLatency: latencyCount > 0 ? totalLatency / latencyCount : 0,
|
|
244
|
+
apiRequests,
|
|
245
|
+
apiErrors,
|
|
246
|
+
agentUsage: finalAgentUsage,
|
|
247
|
+
modelUsage
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Export analytics events to CSV format
|
|
252
|
+
* @param events - Array of events to export
|
|
253
|
+
* @param outputPath - Output file path
|
|
254
|
+
*/
|
|
255
|
+
export async function exportToCSV(events, outputPath) {
|
|
256
|
+
const writeStream = createWriteStream(outputPath);
|
|
257
|
+
// Write CSV header
|
|
258
|
+
const headers = [
|
|
259
|
+
'timestamp',
|
|
260
|
+
'eventType',
|
|
261
|
+
'sessionId',
|
|
262
|
+
'installationId',
|
|
263
|
+
'agent',
|
|
264
|
+
'agentVersion',
|
|
265
|
+
'cliVersion',
|
|
266
|
+
'profile',
|
|
267
|
+
'provider',
|
|
268
|
+
'model',
|
|
269
|
+
'latencyMs',
|
|
270
|
+
'attributes'
|
|
271
|
+
];
|
|
272
|
+
writeStream.write(headers.join(',') + '\n');
|
|
273
|
+
// Write events
|
|
274
|
+
for (const event of events) {
|
|
275
|
+
const row = [
|
|
276
|
+
event.timestamp,
|
|
277
|
+
event.eventType,
|
|
278
|
+
event.sessionId,
|
|
279
|
+
event.installationId,
|
|
280
|
+
event.agent,
|
|
281
|
+
event.agentVersion,
|
|
282
|
+
event.cliVersion,
|
|
283
|
+
event.profile,
|
|
284
|
+
event.provider,
|
|
285
|
+
event.model,
|
|
286
|
+
event.metrics?.latencyMs || '',
|
|
287
|
+
JSON.stringify(event.attributes).replace(/"/g, '""') // Escape quotes
|
|
288
|
+
];
|
|
289
|
+
writeStream.write(row.join(',') + '\n');
|
|
290
|
+
}
|
|
291
|
+
writeStream.end();
|
|
292
|
+
return new Promise((resolve, reject) => {
|
|
293
|
+
writeStream.on('finish', resolve);
|
|
294
|
+
writeStream.on('error', reject);
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Export analytics events to JSON format
|
|
299
|
+
* @param events - Array of events to export
|
|
300
|
+
* @param outputPath - Output file path
|
|
301
|
+
*/
|
|
302
|
+
export async function exportToJSON(events, outputPath) {
|
|
303
|
+
const writeStream = createWriteStream(outputPath);
|
|
304
|
+
// Write as JSON array
|
|
305
|
+
writeStream.write('[\n');
|
|
306
|
+
for (let i = 0; i < events.length; i++) {
|
|
307
|
+
const event = events[i];
|
|
308
|
+
const json = JSON.stringify(event, null, 2);
|
|
309
|
+
const indented = json.split('\n').map(line => ' ' + line).join('\n');
|
|
310
|
+
writeStream.write(indented);
|
|
311
|
+
if (i < events.length - 1) {
|
|
312
|
+
writeStream.write(',\n');
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
writeStream.write('\n]\n');
|
|
316
|
+
writeStream.end();
|
|
317
|
+
return new Promise((resolve, reject) => {
|
|
318
|
+
writeStream.on('finish', resolve);
|
|
319
|
+
writeStream.on('error', reject);
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* List all analytics files
|
|
324
|
+
* @returns Array of file info with dates and sizes
|
|
325
|
+
*/
|
|
326
|
+
export async function listAnalyticsFiles() {
|
|
327
|
+
const analyticsPath = getAnalyticsPath();
|
|
328
|
+
const files = [];
|
|
329
|
+
try {
|
|
330
|
+
const entries = await readdir(analyticsPath);
|
|
331
|
+
for (const entry of entries) {
|
|
332
|
+
if (entry.endsWith('.jsonl')) {
|
|
333
|
+
const filePath = join(analyticsPath, entry);
|
|
334
|
+
const stats = await stat(filePath);
|
|
335
|
+
const date = entry.replace('.jsonl', '');
|
|
336
|
+
// Count events by counting lines
|
|
337
|
+
let eventCount = 0;
|
|
338
|
+
try {
|
|
339
|
+
const fileStream = createReadStream(filePath);
|
|
340
|
+
const rl = createInterface({
|
|
341
|
+
input: fileStream,
|
|
342
|
+
crlfDelay: Infinity
|
|
343
|
+
});
|
|
344
|
+
for await (const line of rl) {
|
|
345
|
+
if (line.trim()) {
|
|
346
|
+
eventCount++;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
catch {
|
|
351
|
+
// If counting fails, estimate from file size
|
|
352
|
+
eventCount = Math.floor(stats.size / 500); // Rough estimate: 500 bytes per event
|
|
353
|
+
}
|
|
354
|
+
files.push({
|
|
355
|
+
date,
|
|
356
|
+
path: filePath,
|
|
357
|
+
size: stats.size,
|
|
358
|
+
events: eventCount
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
// Sort by date descending (newest first)
|
|
363
|
+
files.sort((a, b) => b.date.localeCompare(a.date));
|
|
364
|
+
}
|
|
365
|
+
catch (error) {
|
|
366
|
+
if (error.code === 'ENOENT') {
|
|
367
|
+
// Directory doesn't exist, return empty array
|
|
368
|
+
return [];
|
|
369
|
+
}
|
|
370
|
+
throw error;
|
|
371
|
+
}
|
|
372
|
+
return files;
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Delete analytics files older than a threshold
|
|
376
|
+
* @param olderThanDays - Delete files older than this many days
|
|
377
|
+
* @returns Array of deleted file paths
|
|
378
|
+
*/
|
|
379
|
+
export async function clearOldAnalytics(olderThanDays) {
|
|
380
|
+
const files = await listAnalyticsFiles();
|
|
381
|
+
const threshold = new Date();
|
|
382
|
+
threshold.setDate(threshold.getDate() - olderThanDays);
|
|
383
|
+
const deletedFiles = [];
|
|
384
|
+
for (const file of files) {
|
|
385
|
+
const fileDate = new Date(file.date);
|
|
386
|
+
if (fileDate < threshold) {
|
|
387
|
+
await unlink(file.path);
|
|
388
|
+
deletedFiles.push(file.path);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
return deletedFiles;
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Format file size for display
|
|
395
|
+
* @param bytes - Size in bytes
|
|
396
|
+
* @returns Formatted string
|
|
397
|
+
*/
|
|
398
|
+
export function formatFileSize(bytes) {
|
|
399
|
+
if (bytes < 1024)
|
|
400
|
+
return `${bytes} B`;
|
|
401
|
+
if (bytes < 1024 * 1024)
|
|
402
|
+
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
403
|
+
if (bytes < 1024 * 1024 * 1024)
|
|
404
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
405
|
+
return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Format duration in milliseconds to human-readable string
|
|
409
|
+
* @param ms - Duration in milliseconds
|
|
410
|
+
* @returns Formatted string
|
|
411
|
+
*/
|
|
412
|
+
export function formatDuration(ms) {
|
|
413
|
+
if (ms < 1000)
|
|
414
|
+
return `${ms}ms`;
|
|
415
|
+
if (ms < 60000)
|
|
416
|
+
return `${(ms / 1000).toFixed(1)}s`;
|
|
417
|
+
if (ms < 3600000)
|
|
418
|
+
return `${Math.floor(ms / 60000)}m ${Math.floor((ms % 60000) / 1000)}s`;
|
|
419
|
+
return `${Math.floor(ms / 3600000)}h ${Math.floor((ms % 3600000) / 60000)}m`;
|
|
420
|
+
}
|
|
421
|
+
//# sourceMappingURL=analytics-reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics-reader.js","sourceRoot":"","sources":["../../src/utils/analytics-reader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codemie-integration-validator.d.ts","sourceRoot":"","sources":["../../src/utils/codemie-integration-validator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGpE;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,UAAU,EAAE,aAAa,EACzB,OAAO,CAAC,EAAE,GAAG,GACZ,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"codemie-integration-validator.d.ts","sourceRoot":"","sources":["../../src/utils/codemie-integration-validator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGpE;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,UAAU,EAAE,aAAa,EACzB,OAAO,CAAC,EAAE,GAAG,GACZ,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAc/C;AAwFD;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,OAAO,CAAC,CAalB;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB"}
|
|
@@ -9,22 +9,9 @@ export async function validateCodeMieIntegrations(authResult, spinner) {
|
|
|
9
9
|
const integrations = await fetchCodeMieIntegrations(authResult.apiUrl, authResult.cookies, CODEMIE_ENDPOINTS.USER_SETTINGS);
|
|
10
10
|
// Integrations are already filtered by API for LiteLLM type
|
|
11
11
|
if (integrations.length === 0) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
console.log(chalk.yellow('To set up an integration later:'));
|
|
16
|
-
console.log(chalk.white(' 1. Contact your support team to request a LiteLLM key'));
|
|
17
|
-
console.log(chalk.white(' 2. In CodeMie, go to Integrations → User Integrations'));
|
|
18
|
-
console.log(chalk.white(' 3. Add the key as a new integration with type "LiteLLM"'));
|
|
19
|
-
console.log(chalk.white(' 4. Re-run: codemie setup\n'));
|
|
20
|
-
const { continueWithoutIntegration } = await inquirer.prompt([{
|
|
21
|
-
type: 'confirm',
|
|
22
|
-
name: 'continueWithoutIntegration',
|
|
23
|
-
message: 'Continue without integration?',
|
|
24
|
-
default: true
|
|
25
|
-
}]);
|
|
26
|
-
if (!continueWithoutIntegration) {
|
|
27
|
-
throw new Error('Setup cancelled by user');
|
|
12
|
+
// No integrations found - continue without integration
|
|
13
|
+
if (spinner) {
|
|
14
|
+
spinner.info(chalk.white('No CodeMie integrations found - continuing without integration'));
|
|
28
15
|
}
|
|
29
16
|
return null;
|
|
30
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codemie-integration-validator.js","sourceRoot":"","sources":["../../src/utils/codemie-integration-validator.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEzF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,UAAyB,EACzB,OAAa;IAEb,MAAM,YAAY,GAAG,MAAM,wBAAwB,CAAC,UAAU,CAAC,MAAO,EAAE,UAAU,CAAC,OAAQ,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC;IAE9H,4DAA4D;IAC5D,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,
|
|
1
|
+
{"version":3,"file":"codemie-integration-validator.js","sourceRoot":"","sources":["../../src/utils/codemie-integration-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CodeMie Proxy Server - Refactored
|
|
3
|
+
*
|
|
4
|
+
* Clean, modular proxy implementation following SOLID principles.
|
|
5
|
+
* Uses interceptor pattern for extensibility (Open/Closed).
|
|
6
|
+
*
|
|
7
|
+
* Architecture:
|
|
8
|
+
* - ProxyHTTPClient: Handles HTTP forwarding with streaming
|
|
9
|
+
* - Interceptors: Plugin-based request/response/error handling
|
|
10
|
+
* - Main Proxy: Orchestrates the flow
|
|
11
|
+
*
|
|
12
|
+
* KISS: Simple flow - build context → run interceptors → forward → stream
|
|
13
|
+
* DRY: Reuses Analytics system, delegates to interceptors
|
|
14
|
+
* SOLID: Each component has single responsibility, extensible via plugins
|
|
15
|
+
*/
|
|
16
|
+
import { ProxyConfig } from './proxy/types.js';
|
|
17
|
+
export type GatewayConfig = ProxyConfig;
|
|
18
|
+
/**
|
|
19
|
+
* CodeMie Proxy - Simple HTTP proxy with interceptor support
|
|
20
|
+
* KISS: Core responsibility = forward requests + run interceptors
|
|
21
|
+
*/
|
|
22
|
+
export declare class CodeMieProxy {
|
|
23
|
+
private config;
|
|
24
|
+
private server;
|
|
25
|
+
private credentials;
|
|
26
|
+
private httpClient;
|
|
27
|
+
private interceptors;
|
|
28
|
+
private actualPort;
|
|
29
|
+
constructor(config: ProxyConfig);
|
|
30
|
+
/**
|
|
31
|
+
* Register interceptors
|
|
32
|
+
* Easy to add new interceptors without modifying handleRequest
|
|
33
|
+
*/
|
|
34
|
+
private registerInterceptors;
|
|
35
|
+
/**
|
|
36
|
+
* Start the proxy server
|
|
37
|
+
*/
|
|
38
|
+
start(): Promise<{
|
|
39
|
+
port: number;
|
|
40
|
+
url: string;
|
|
41
|
+
}>;
|
|
42
|
+
/**
|
|
43
|
+
* Stop the proxy server
|
|
44
|
+
*/
|
|
45
|
+
stop(): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Core request handler - Clean, simple flow
|
|
48
|
+
* KISS: Build context → run interceptors → forward → stream
|
|
49
|
+
*/
|
|
50
|
+
private handleRequest;
|
|
51
|
+
/**
|
|
52
|
+
* Build proxy context from incoming request
|
|
53
|
+
*/
|
|
54
|
+
private buildContext;
|
|
55
|
+
/**
|
|
56
|
+
* Build target URL from request path
|
|
57
|
+
*/
|
|
58
|
+
private buildTargetUrl;
|
|
59
|
+
/**
|
|
60
|
+
* Read request body
|
|
61
|
+
*/
|
|
62
|
+
private readBody;
|
|
63
|
+
/**
|
|
64
|
+
* Send successful response to client
|
|
65
|
+
*/
|
|
66
|
+
private sendResponse;
|
|
67
|
+
/**
|
|
68
|
+
* Handle errors with proper status codes and structure
|
|
69
|
+
*/
|
|
70
|
+
private handleError;
|
|
71
|
+
/**
|
|
72
|
+
* Send error response to client
|
|
73
|
+
*/
|
|
74
|
+
private sendErrorResponse;
|
|
75
|
+
/**
|
|
76
|
+
* Find an available port for the proxy server
|
|
77
|
+
*/
|
|
78
|
+
private findAvailablePort;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=codemie-proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codemie-proxy.d.ts","sourceRoot":"","sources":["../../src/utils/codemie-proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAgBH,OAAO,EAAE,WAAW,EAAkC,MAAM,kBAAkB,CAAC;AAI/E,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC;AAExC;;;GAGG;AACH,qBAAa,YAAY;IAOX,OAAO,CAAC,MAAM;IAN1B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,UAAU,CAAa;gBAEX,MAAM,EAAE,WAAW;IAWvC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAK5B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAyErD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3B;;;OAGG;YACW,aAAa;IAmD3B;;OAEG;YACW,YAAY;IA0B1B;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB;;OAEG;YACW,QAAQ;IAiBtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAkBpB;;OAEG;YACW,WAAW;IA4CzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAuBzB;;OAEG;YACW,iBAAiB;CAsBhC"}
|