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