@codemieai/code 0.0.26 → 0.0.28
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 +1 -1
- package/bin/codemie.js +20 -1
- package/dist/agents/codemie-code/agent.js +1 -1
- package/dist/agents/codemie-code/config.d.ts +1 -1
- package/dist/agents/codemie-code/config.d.ts.map +1 -1
- package/dist/agents/codemie-code/config.js +3 -3
- package/dist/agents/codemie-code/config.js.map +1 -1
- package/dist/agents/codemie-code/index.js +1 -1
- package/dist/agents/codemie-code/storage/todoStorage.d.ts.map +1 -1
- package/dist/agents/codemie-code/storage/todoStorage.js +2 -2
- package/dist/agents/codemie-code/storage/todoStorage.js.map +1 -1
- package/dist/agents/codemie-code/tools/index.js +1 -1
- package/dist/agents/codemie-code/tools/index.js.map +1 -1
- package/dist/agents/codemie-code/ui.d.ts.map +1 -1
- package/dist/agents/codemie-code/ui.js +9 -8
- package/dist/agents/codemie-code/ui.js.map +1 -1
- package/dist/agents/core/AgentCLI.js +2 -2
- package/dist/agents/core/AgentCLI.js.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.js +6 -6
- package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
- package/dist/agents/core/BaseMetricsAdapter.js +1 -1
- package/dist/agents/core/BaseMetricsAdapter.js.map +1 -1
- package/dist/agents/core/lifecycle-helpers.d.ts +2 -1
- package/dist/agents/core/lifecycle-helpers.d.ts.map +1 -1
- package/dist/agents/core/lifecycle-helpers.js +38 -17
- package/dist/agents/core/lifecycle-helpers.js.map +1 -1
- package/dist/agents/core/metrics/MetricsOrchestrator.js +2 -2
- package/dist/agents/core/metrics/MetricsOrchestrator.js.map +1 -1
- package/dist/agents/core/metrics/core/DeltaWriter.js +1 -1
- package/dist/agents/core/metrics/core/DeltaWriter.js.map +1 -1
- package/dist/agents/core/metrics/session/SessionStore.js +1 -1
- package/dist/agents/core/metrics/session/SessionStore.js.map +1 -1
- package/dist/agents/core/metrics-config.d.ts.map +1 -1
- package/dist/agents/core/metrics-config.js +4 -3
- package/dist/agents/core/metrics-config.js.map +1 -1
- package/dist/agents/plugins/claude.metrics.js +2 -2
- package/dist/agents/plugins/claude.metrics.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/codex.metrics.d.ts +69 -0
- package/dist/agents/plugins/codex.metrics.d.ts.map +1 -0
- package/dist/agents/plugins/codex.metrics.js +483 -0
- package/dist/agents/plugins/codex.metrics.js.map +1 -0
- package/dist/agents/plugins/codex.plugin.d.ts +7 -3
- package/dist/agents/plugins/codex.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/codex.plugin.js +41 -205
- package/dist/agents/plugins/codex.plugin.js.map +1 -1
- package/dist/agents/plugins/deepagents.plugin.js +1 -1
- package/dist/agents/plugins/deepagents.plugin.js.map +1 -1
- package/dist/agents/plugins/gemini.metrics.js +1 -1
- package/dist/agents/plugins/gemini.metrics.js.map +1 -1
- package/dist/cli/commands/analytics/data-loader.d.ts.map +1 -1
- package/dist/cli/commands/analytics/data-loader.js +2 -2
- package/dist/cli/commands/analytics/data-loader.js.map +1 -1
- package/dist/cli/commands/doctor/checks/AIConfigCheck.js +1 -1
- package/dist/cli/commands/doctor/checks/AIConfigCheck.js.map +1 -1
- package/dist/cli/commands/doctor/checks/AwsCliCheck.js +1 -1
- package/dist/cli/commands/doctor/checks/AwsCliCheck.js.map +1 -1
- package/dist/cli/commands/doctor/checks/NpmCheck.js +1 -1
- package/dist/cli/commands/doctor/checks/NpmCheck.js.map +1 -1
- package/dist/cli/commands/doctor/checks/PythonCheck.js +1 -1
- package/dist/cli/commands/doctor/checks/PythonCheck.js.map +1 -1
- package/dist/cli/commands/doctor/checks/UvCheck.js +1 -1
- package/dist/cli/commands/doctor/checks/UvCheck.js.map +1 -1
- package/dist/cli/commands/doctor/types.d.ts +1 -1
- package/dist/cli/commands/doctor/types.d.ts.map +1 -1
- package/dist/cli/commands/profile/auth.js +1 -1
- package/dist/cli/commands/profile/auth.js.map +1 -1
- package/dist/{utils/profile-display.d.ts → cli/commands/profile/display.d.ts} +3 -3
- package/dist/cli/commands/profile/display.d.ts.map +1 -0
- package/dist/{utils/profile-display.js → cli/commands/profile/display.js} +2 -2
- package/dist/cli/commands/profile/display.js.map +1 -0
- package/dist/cli/commands/profile/index.js +2 -2
- package/dist/cli/commands/profile/index.js.map +1 -1
- package/dist/cli/commands/setup.js +1 -1
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/update.d.ts +3 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +290 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/commands/version.js +1 -1
- package/dist/cli/commands/version.js.map +1 -1
- package/dist/cli/first-time.d.ts.map +1 -0
- package/dist/{utils → cli}/first-time.js +1 -1
- package/dist/cli/first-time.js.map +1 -0
- package/dist/cli/index.js +4 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/env/manager.d.ts.map +1 -1
- package/dist/env/manager.js +3 -4
- package/dist/env/manager.js.map +1 -1
- package/dist/frameworks/core/BaseFrameworkAdapter.js +1 -1
- package/dist/frameworks/core/BaseFrameworkAdapter.js.map +1 -1
- package/dist/frameworks/plugins/bmad.plugin.js +2 -2
- package/dist/frameworks/plugins/bmad.plugin.js.map +1 -1
- package/dist/frameworks/plugins/speckit.plugin.js +1 -1
- package/dist/frameworks/plugins/speckit.plugin.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/migrations/001-config-rename.migration.d.ts +33 -0
- package/dist/migrations/001-config-rename.migration.d.ts.map +1 -0
- package/dist/migrations/001-config-rename.migration.js +206 -0
- package/dist/migrations/001-config-rename.migration.js.map +1 -0
- package/dist/migrations/index.d.ts +22 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +26 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/migrations/registry.d.ts +28 -0
- package/dist/migrations/registry.d.ts.map +1 -0
- package/dist/migrations/registry.js +35 -0
- package/dist/migrations/registry.js.map +1 -0
- package/dist/migrations/runner.d.ts +26 -0
- package/dist/migrations/runner.d.ts.map +1 -0
- package/dist/migrations/runner.js +117 -0
- package/dist/migrations/runner.js.map +1 -0
- package/dist/migrations/tracker.d.ts +40 -0
- package/dist/migrations/tracker.d.ts.map +1 -0
- package/dist/migrations/tracker.js +114 -0
- package/dist/migrations/tracker.js.map +1 -0
- package/dist/migrations/types.d.ts +54 -0
- package/dist/migrations/types.d.ts.map +1 -0
- package/dist/migrations/types.js +6 -0
- package/dist/migrations/types.js.map +1 -0
- package/dist/providers/core/base/http-client.js +1 -1
- package/dist/providers/core/types.d.ts +19 -0
- package/dist/providers/core/types.d.ts.map +1 -1
- package/dist/providers/integration/setup-ui.js +1 -1
- package/dist/providers/integration/setup-ui.js.map +1 -1
- package/dist/providers/plugins/bedrock/bedrock.health.d.ts +4 -0
- package/dist/providers/plugins/bedrock/bedrock.health.d.ts.map +1 -1
- package/dist/providers/plugins/bedrock/bedrock.health.js +23 -0
- package/dist/providers/plugins/bedrock/bedrock.health.js.map +1 -1
- package/dist/providers/plugins/bedrock/bedrock.template.d.ts.map +1 -1
- package/dist/providers/plugins/bedrock/bedrock.template.js +85 -0
- package/dist/providers/plugins/bedrock/bedrock.template.js.map +1 -1
- package/dist/providers/plugins/ollama/ollama.template.d.ts.map +1 -1
- package/dist/providers/plugins/ollama/ollama.template.js +10 -0
- package/dist/providers/plugins/ollama/ollama.template.js.map +1 -1
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-sender.js +1 -1
- package/dist/providers/plugins/sso/metrics/sync/sso.metrics-sender.js.map +1 -1
- package/dist/providers/plugins/sso/sso.auth.js +1 -1
- package/dist/providers/plugins/sso/sso.auth.js.map +1 -1
- package/dist/providers/plugins/sso/sso.http-client.d.ts +1 -1
- package/dist/providers/plugins/sso/sso.http-client.js +1 -1
- package/dist/providers/plugins/sso/sso.http-client.js.map +1 -1
- package/dist/providers/plugins/sso/sso.setup-steps.d.ts.map +1 -1
- package/dist/providers/plugins/sso/sso.setup-steps.js +11 -3
- package/dist/providers/plugins/sso/sso.setup-steps.js.map +1 -1
- package/dist/providers/plugins/sso/sso.template.d.ts.map +1 -1
- package/dist/providers/plugins/sso/sso.template.js +17 -0
- package/dist/providers/plugins/sso/sso.template.js.map +1 -1
- package/dist/utils/{config-loader.d.ts → config.d.ts} +6 -1
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/{config-loader.js → config.js} +39 -34
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/errors.d.ts +89 -0
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +340 -0
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/exec.d.ts +6 -0
- package/dist/utils/exec.d.ts.map +1 -1
- package/dist/utils/exec.js +6 -0
- package/dist/utils/exec.js.map +1 -1
- package/dist/utils/logger.js +3 -3
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/{json-parser.d.ts → parsers.d.ts} +1 -1
- package/dist/utils/parsers.d.ts.map +1 -0
- package/dist/utils/{json-parser.js → parsers.js} +1 -1
- package/dist/utils/parsers.js.map +1 -0
- package/dist/utils/{path-utils.d.ts → paths.d.ts} +58 -8
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/{path-utils.js → paths.js} +81 -8
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/{npm.d.ts → processes.d.ts} +42 -7
- package/dist/utils/processes.d.ts.map +1 -0
- package/dist/utils/{npm.js → processes.js} +123 -9
- package/dist/utils/processes.js.map +1 -0
- package/dist/utils/profile.d.ts +1 -16
- package/dist/utils/profile.d.ts.map +1 -1
- package/dist/utils/profile.js +1 -27
- package/dist/utils/profile.js.map +1 -1
- package/dist/utils/security.d.ts +62 -0
- package/dist/utils/security.d.ts.map +1 -0
- package/dist/utils/security.js +396 -0
- package/dist/utils/security.js.map +1 -0
- package/package.json +3 -3
- package/dist/utils/config-loader.d.ts.map +0 -1
- package/dist/utils/config-loader.js.map +0 -1
- package/dist/utils/credential-store.d.ts +0 -22
- package/dist/utils/credential-store.d.ts.map +0 -1
- package/dist/utils/credential-store.js +0 -165
- package/dist/utils/credential-store.js.map +0 -1
- package/dist/utils/dirname.d.ts +0 -7
- package/dist/utils/dirname.d.ts.map +0 -1
- package/dist/utils/dirname.js +0 -11
- package/dist/utils/dirname.js.map +0 -1
- package/dist/utils/error-context.d.ts +0 -90
- package/dist/utils/error-context.d.ts.map +0 -1
- package/dist/utils/error-context.js +0 -338
- package/dist/utils/error-context.js.map +0 -1
- package/dist/utils/first-time.d.ts.map +0 -1
- package/dist/utils/first-time.js.map +0 -1
- package/dist/utils/git.d.ts +0 -13
- package/dist/utils/git.d.ts.map +0 -1
- package/dist/utils/git.js +0 -37
- package/dist/utils/git.js.map +0 -1
- package/dist/utils/installation-id.d.ts +0 -10
- package/dist/utils/installation-id.d.ts.map +0 -1
- package/dist/utils/installation-id.js +0 -30
- package/dist/utils/installation-id.js.map +0 -1
- package/dist/utils/json-parser.d.ts.map +0 -1
- package/dist/utils/json-parser.js.map +0 -1
- package/dist/utils/npm.d.ts.map +0 -1
- package/dist/utils/npm.js.map +0 -1
- package/dist/utils/path-utils.d.ts.map +0 -1
- package/dist/utils/path-utils.js.map +0 -1
- package/dist/utils/profile-display.d.ts.map +0 -1
- package/dist/utils/profile-display.js.map +0 -1
- package/dist/utils/sanitize.d.ts +0 -28
- package/dist/utils/sanitize.d.ts.map +0 -1
- package/dist/utils/sanitize.js +0 -212
- package/dist/utils/sanitize.js.map +0 -1
- package/dist/utils/which.d.ts +0 -20
- package/dist/utils/which.d.ts.map +0 -1
- package/dist/utils/which.js +0 -54
- package/dist/utils/which.js.map +0 -1
- /package/dist/{utils → cli}/first-time.d.ts +0 -0
|
@@ -0,0 +1,483 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex Metrics Adapter
|
|
3
|
+
*
|
|
4
|
+
* Implements metrics support for Codex agent.
|
|
5
|
+
* Handles Codex-specific file formats (JSONL) and parsing logic.
|
|
6
|
+
*/
|
|
7
|
+
import { readFile } from 'fs/promises';
|
|
8
|
+
import { join } from 'path';
|
|
9
|
+
import { BaseMetricsAdapter } from '../core/BaseMetricsAdapter.js';
|
|
10
|
+
import { logger } from '../../utils/logger.js';
|
|
11
|
+
import { parseMultiLineJSON } from '../../utils/parsers.js';
|
|
12
|
+
import { getFilename } from '../../utils/paths.js';
|
|
13
|
+
export class CodexMetricsAdapter extends BaseMetricsAdapter {
|
|
14
|
+
constructor(metadata) {
|
|
15
|
+
super('codex', metadata);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Check if file matches Codex session pattern with date filtering
|
|
19
|
+
* Pattern: ~/.codex/sessions/{YYYY}/{MM}/{DD}/rollout-{date}T{time}-{uuid}.jsonl
|
|
20
|
+
*
|
|
21
|
+
* Performance optimization: Only matches current date by default
|
|
22
|
+
*
|
|
23
|
+
* @param path - File path to check
|
|
24
|
+
* @param dateFilter - Optional date filter (YYYY-MM-DD). Defaults to today.
|
|
25
|
+
* Pass null to match all dates.
|
|
26
|
+
*/
|
|
27
|
+
matchesSessionPattern(path, dateFilter) {
|
|
28
|
+
// Check path contains required directories
|
|
29
|
+
// Pattern: ~/.codex/sessions/YYYY/MM/DD/rollout-...jsonl
|
|
30
|
+
const pathLower = path.toLowerCase();
|
|
31
|
+
if (!pathLower.includes('.codex') || !pathLower.includes('sessions')) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
const filename = getFilename(path);
|
|
35
|
+
// Check filename pattern: rollout-YYYY-MM-DDTHH-MM-SS-{uuid}.jsonl
|
|
36
|
+
// Real example: rollout-2026-01-02T14-40-09-019b7eb8-f483-71d3-ae10-1bd180168ba5.jsonl
|
|
37
|
+
if (!/^rollout-\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}-[a-f0-9-]+\.jsonl$/.test(filename)) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
// Validate directory structure: must have year/month/day folders
|
|
41
|
+
// Extract path segments after "sessions/"
|
|
42
|
+
const sessionsIndex = path.search(/sessions[\\/]/i);
|
|
43
|
+
if (sessionsIndex === -1) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
const afterSessions = path.substring(sessionsIndex + 9); // Skip "sessions/"
|
|
47
|
+
const parts = afterSessions.split(/[\\/]/);
|
|
48
|
+
// Must have at least 4 parts: year, month, day, filename
|
|
49
|
+
// Example: ['2026', '01', '02', 'rollout-2026-01-02T14-40-09-abc.jsonl']
|
|
50
|
+
if (parts.length < 4) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
// Validate year/month/day format
|
|
54
|
+
const [year, month, day] = parts;
|
|
55
|
+
if (!/^\d{4}$/.test(year) || !/^\d{2}$/.test(month) || !/^\d{2}$/.test(day)) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
// Apply date filter for performance (default: today only)
|
|
59
|
+
if (dateFilter !== null) {
|
|
60
|
+
const filterDate = dateFilter || new Date().toISOString().split('T')[0]; // Default: today
|
|
61
|
+
const pathDate = `${year}-${month}-${day}`;
|
|
62
|
+
if (pathDate !== filterDate) {
|
|
63
|
+
return false; // Not the target date, skip
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Extract session ID from Codex file path
|
|
70
|
+
* Prefers session_meta.payload.id but falls back to filename UUID
|
|
71
|
+
*/
|
|
72
|
+
extractSessionId(path) {
|
|
73
|
+
const filename = getFilename(path);
|
|
74
|
+
const match = filename.match(/rollout-\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}-([a-f0-9-]+)\.jsonl$/);
|
|
75
|
+
return match?.[1] || filename.replace('.jsonl', '');
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Parse Codex session file and extract metrics
|
|
79
|
+
*/
|
|
80
|
+
async parseSessionFile(path) {
|
|
81
|
+
try {
|
|
82
|
+
const content = await readFile(path, 'utf-8');
|
|
83
|
+
const events = parseMultiLineJSON(content);
|
|
84
|
+
if (events.length === 0) {
|
|
85
|
+
throw new Error('Empty session file');
|
|
86
|
+
}
|
|
87
|
+
// Extract session metadata from session_meta
|
|
88
|
+
const sessionMeta = events.find((e) => e.type === 'session_meta');
|
|
89
|
+
const sessionId = sessionMeta?.payload?.id || this.extractSessionId(path);
|
|
90
|
+
const workingDirectory = sessionMeta?.payload?.cwd || '';
|
|
91
|
+
const gitBranch = sessionMeta?.payload?.git?.branch;
|
|
92
|
+
const modelProvider = sessionMeta?.payload?.model_provider;
|
|
93
|
+
// Aggregate metrics from all events
|
|
94
|
+
// Note: total_token_usage is cumulative, so we take the maximum value
|
|
95
|
+
let maxInputTokens = 0;
|
|
96
|
+
let maxOutputTokens = 0;
|
|
97
|
+
let maxCachedTokens = 0;
|
|
98
|
+
let maxReasoningTokens = 0;
|
|
99
|
+
const modelCalls = new Map();
|
|
100
|
+
// Parse token_count events (only those with data - after agent responses)
|
|
101
|
+
for (const event of events) {
|
|
102
|
+
if (event.type === 'event_msg' && event.payload?.type === 'token_count') {
|
|
103
|
+
const info = event.payload.info;
|
|
104
|
+
// Skip events without token data (user messages, local providers)
|
|
105
|
+
if (!info || !info.total_token_usage) {
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
const usage = info.total_token_usage;
|
|
109
|
+
// total_token_usage is cumulative - track maximum values
|
|
110
|
+
const input = usage.input_tokens || 0;
|
|
111
|
+
const output = usage.output_tokens || 0;
|
|
112
|
+
const cache = usage.cached_input_tokens || 0;
|
|
113
|
+
const reasoning = usage.reasoning_output_tokens || 0;
|
|
114
|
+
if (input > maxInputTokens)
|
|
115
|
+
maxInputTokens = input;
|
|
116
|
+
if (output > maxOutputTokens)
|
|
117
|
+
maxOutputTokens = output;
|
|
118
|
+
if (cache > maxCachedTokens)
|
|
119
|
+
maxCachedTokens = cache;
|
|
120
|
+
if (reasoning > maxReasoningTokens)
|
|
121
|
+
maxReasoningTokens = reasoning;
|
|
122
|
+
}
|
|
123
|
+
// Track models from turn_context
|
|
124
|
+
if (event.type === 'turn_context' && event.payload?.model) {
|
|
125
|
+
const model = event.payload.model;
|
|
126
|
+
modelCalls.set(model, (modelCalls.get(model) || 0) + 1);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// Extract tool calls from function_call/function_call_output pairs
|
|
130
|
+
const toolCalls = [];
|
|
131
|
+
const toolCallMap = new Map();
|
|
132
|
+
// FIRST PASS: Build map of tool requests
|
|
133
|
+
for (const event of events) {
|
|
134
|
+
if (event.type === 'response_item' && event.payload?.type === 'function_call') {
|
|
135
|
+
toolCallMap.set(event.payload.call_id, {
|
|
136
|
+
name: event.payload.name,
|
|
137
|
+
timestamp: new Date(event.timestamp).getTime(),
|
|
138
|
+
arguments: event.payload.arguments
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// SECOND PASS: Match with tool responses and create metrics
|
|
143
|
+
for (const event of events) {
|
|
144
|
+
if (event.type === 'response_item' && event.payload?.type === 'function_call_output') {
|
|
145
|
+
const callId = event.payload.call_id;
|
|
146
|
+
const request = toolCallMap.get(callId);
|
|
147
|
+
if (!request)
|
|
148
|
+
continue;
|
|
149
|
+
// Parse output JSON (double-encoded)
|
|
150
|
+
let exitCode = 0;
|
|
151
|
+
let durationMs;
|
|
152
|
+
let errorMessage;
|
|
153
|
+
try {
|
|
154
|
+
const output = JSON.parse(event.payload.output);
|
|
155
|
+
exitCode = output.metadata?.exit_code ?? 0;
|
|
156
|
+
durationMs = output.metadata?.duration_seconds
|
|
157
|
+
? Math.round(output.metadata.duration_seconds * 1000)
|
|
158
|
+
: undefined;
|
|
159
|
+
if (exitCode !== 0) {
|
|
160
|
+
errorMessage = output.output || 'Command failed';
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
// Failed to parse output, assume success
|
|
165
|
+
}
|
|
166
|
+
const toolCall = {
|
|
167
|
+
id: callId,
|
|
168
|
+
name: request.name,
|
|
169
|
+
timestamp: request.timestamp,
|
|
170
|
+
status: exitCode === 0 ? 'success' : 'error',
|
|
171
|
+
input: request.arguments ? JSON.parse(request.arguments) : undefined,
|
|
172
|
+
error: errorMessage
|
|
173
|
+
};
|
|
174
|
+
// Extract file operation if applicable
|
|
175
|
+
const fileOp = this.extractFileOperation(request.name, toolCall.input);
|
|
176
|
+
if (fileOp && durationMs) {
|
|
177
|
+
fileOp.durationMs = durationMs;
|
|
178
|
+
}
|
|
179
|
+
if (fileOp) {
|
|
180
|
+
toolCall.fileOperation = fileOp;
|
|
181
|
+
}
|
|
182
|
+
toolCalls.push(toolCall);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
const toolUsageSummary = this.buildToolUsageSummary(toolCalls);
|
|
186
|
+
const allModels = Array.from(modelCalls.keys());
|
|
187
|
+
const snapshot = {
|
|
188
|
+
sessionId,
|
|
189
|
+
timestamp: Date.now(),
|
|
190
|
+
tokens: {
|
|
191
|
+
input: maxInputTokens,
|
|
192
|
+
output: maxOutputTokens + maxReasoningTokens, // Include reasoning in output
|
|
193
|
+
cacheRead: maxCachedTokens > 0 ? maxCachedTokens : undefined
|
|
194
|
+
},
|
|
195
|
+
toolCalls,
|
|
196
|
+
toolUsageSummary,
|
|
197
|
+
turnCount: events.filter((e) => e.type === 'turn_context').length,
|
|
198
|
+
model: allModels.length > 0 ? allModels[0] : undefined,
|
|
199
|
+
metadata: {
|
|
200
|
+
workingDirectory,
|
|
201
|
+
gitBranch,
|
|
202
|
+
totalInputTokens: maxInputTokens + maxCachedTokens,
|
|
203
|
+
models: allModels,
|
|
204
|
+
modelCalls: Object.fromEntries(modelCalls),
|
|
205
|
+
modelProvider // Add provider for debugging
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
logger.debug(`[CodexMetrics] Parsed session ${sessionId}: ${maxInputTokens} input, ${maxOutputTokens} output, ` +
|
|
209
|
+
`${maxCachedTokens} cached, ${maxReasoningTokens} reasoning`);
|
|
210
|
+
return snapshot;
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
logger.error(`[CodexMetrics] Failed to parse session file: ${path}`, error);
|
|
214
|
+
throw error;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Parse incremental metrics from session file
|
|
219
|
+
* Returns only new deltas since last processing
|
|
220
|
+
*/
|
|
221
|
+
async parseIncrementalMetrics(path, processedRecordIds, attachedUserPromptTexts) {
|
|
222
|
+
try {
|
|
223
|
+
const content = await readFile(path, 'utf-8');
|
|
224
|
+
const events = parseMultiLineJSON(content);
|
|
225
|
+
const deltas = [];
|
|
226
|
+
const newlyAttachedPrompts = [];
|
|
227
|
+
// Extract session metadata
|
|
228
|
+
const sessionMeta = events.find((e) => e.type === 'session_meta');
|
|
229
|
+
const sessionId = sessionMeta?.payload?.id || this.extractSessionId(path);
|
|
230
|
+
const gitBranch = sessionMeta?.payload?.git?.branch;
|
|
231
|
+
// Track current model from turn_context events
|
|
232
|
+
let currentModel;
|
|
233
|
+
// Track tool calls by call_id for this parsing
|
|
234
|
+
const toolCallMap = new Map();
|
|
235
|
+
// Track previous cumulative token counts to calculate deltas
|
|
236
|
+
let prevInputTokens = 0;
|
|
237
|
+
let prevOutputTokens = 0;
|
|
238
|
+
let prevCachedTokens = 0;
|
|
239
|
+
// Process events sequentially to create deltas
|
|
240
|
+
for (let i = 0; i < events.length; i++) {
|
|
241
|
+
const event = events[i];
|
|
242
|
+
const recordId = `${sessionId}:${event.timestamp}:${i}`;
|
|
243
|
+
// Skip already processed events
|
|
244
|
+
if (processedRecordIds.has(recordId)) {
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
// Mark as processed
|
|
248
|
+
processedRecordIds.add(recordId);
|
|
249
|
+
// Track model from turn_context
|
|
250
|
+
if (event.type === 'turn_context' && event.payload?.model) {
|
|
251
|
+
currentModel = event.payload.model;
|
|
252
|
+
}
|
|
253
|
+
// Process token_count events
|
|
254
|
+
if (event.type === 'event_msg' && event.payload?.type === 'token_count') {
|
|
255
|
+
const info = event.payload.info;
|
|
256
|
+
// Skip events without token data
|
|
257
|
+
if (!info || !info.total_token_usage) {
|
|
258
|
+
continue;
|
|
259
|
+
}
|
|
260
|
+
// Use total_token_usage (cumulative) and calculate delta from previous
|
|
261
|
+
const usage = info.total_token_usage;
|
|
262
|
+
const currInput = usage.input_tokens || 0;
|
|
263
|
+
const currOutput = (usage.output_tokens || 0) + (usage.reasoning_output_tokens || 0);
|
|
264
|
+
const currCache = usage.cached_input_tokens || 0;
|
|
265
|
+
// Calculate delta (new tokens since last event)
|
|
266
|
+
const deltaInput = Math.max(0, currInput - prevInputTokens);
|
|
267
|
+
const deltaOutput = Math.max(0, currOutput - prevOutputTokens);
|
|
268
|
+
const deltaCache = Math.max(0, currCache - prevCachedTokens);
|
|
269
|
+
// Only create delta if there are new tokens
|
|
270
|
+
if (deltaInput > 0 || deltaOutput > 0 || deltaCache > 0) {
|
|
271
|
+
const timestamp = new Date(event.timestamp).getTime();
|
|
272
|
+
const delta = {
|
|
273
|
+
recordId,
|
|
274
|
+
sessionId: '', // Will be set by caller
|
|
275
|
+
agentSessionId: sessionId,
|
|
276
|
+
timestamp,
|
|
277
|
+
tokens: {
|
|
278
|
+
input: deltaInput,
|
|
279
|
+
output: deltaOutput,
|
|
280
|
+
cacheRead: deltaCache > 0 ? deltaCache : undefined
|
|
281
|
+
},
|
|
282
|
+
tools: {}, // No tools for token_count events
|
|
283
|
+
models: currentModel ? [currentModel] : undefined,
|
|
284
|
+
gitBranch
|
|
285
|
+
};
|
|
286
|
+
deltas.push(delta);
|
|
287
|
+
// Update previous counts
|
|
288
|
+
prevInputTokens = currInput;
|
|
289
|
+
prevOutputTokens = currOutput;
|
|
290
|
+
prevCachedTokens = currCache;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// Collect tool call requests
|
|
294
|
+
if (event.type === 'response_item' && event.payload?.type === 'function_call') {
|
|
295
|
+
toolCallMap.set(event.payload.call_id, {
|
|
296
|
+
name: event.payload.name,
|
|
297
|
+
timestamp: new Date(event.timestamp).getTime(),
|
|
298
|
+
arguments: event.payload.arguments
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
// Process tool call responses
|
|
302
|
+
if (event.type === 'response_item' && event.payload?.type === 'function_call_output') {
|
|
303
|
+
const callId = event.payload.call_id;
|
|
304
|
+
const request = toolCallMap.get(callId);
|
|
305
|
+
if (!request)
|
|
306
|
+
continue;
|
|
307
|
+
// Parse output
|
|
308
|
+
let exitCode = 0;
|
|
309
|
+
let durationMs;
|
|
310
|
+
try {
|
|
311
|
+
const output = JSON.parse(event.payload.output);
|
|
312
|
+
exitCode = output.metadata?.exit_code ?? 0;
|
|
313
|
+
durationMs = output.metadata?.duration_seconds
|
|
314
|
+
? Math.round(output.metadata.duration_seconds * 1000)
|
|
315
|
+
: undefined;
|
|
316
|
+
}
|
|
317
|
+
catch {
|
|
318
|
+
// Failed to parse, use defaults
|
|
319
|
+
}
|
|
320
|
+
// Extract file operation if applicable
|
|
321
|
+
let fileOp;
|
|
322
|
+
try {
|
|
323
|
+
const input = JSON.parse(request.arguments);
|
|
324
|
+
fileOp = this.extractFileOperation(request.name, input);
|
|
325
|
+
if (fileOp && durationMs) {
|
|
326
|
+
fileOp.durationMs = durationMs;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
catch {
|
|
330
|
+
// Failed to parse arguments, skip file operation
|
|
331
|
+
}
|
|
332
|
+
const toolCall = {
|
|
333
|
+
id: callId,
|
|
334
|
+
name: request.name,
|
|
335
|
+
timestamp: request.timestamp,
|
|
336
|
+
status: exitCode === 0 ? 'success' : 'error'
|
|
337
|
+
};
|
|
338
|
+
if (fileOp) {
|
|
339
|
+
toolCall.fileOperation = fileOp;
|
|
340
|
+
}
|
|
341
|
+
// Create delta for tool call
|
|
342
|
+
const delta = {
|
|
343
|
+
recordId,
|
|
344
|
+
sessionId: '', // Will be set by caller
|
|
345
|
+
agentSessionId: sessionId,
|
|
346
|
+
timestamp: new Date(event.timestamp).getTime(),
|
|
347
|
+
tokens: { input: 0, output: 0 }, // No tokens for tool call events
|
|
348
|
+
tools: { [request.name]: 1 },
|
|
349
|
+
toolStatus: {
|
|
350
|
+
[request.name]: exitCode === 0 ? { success: 1, failure: 0 } : { success: 0, failure: 1 }
|
|
351
|
+
},
|
|
352
|
+
fileOperations: fileOp ? [fileOp] : undefined,
|
|
353
|
+
models: currentModel ? [currentModel] : undefined,
|
|
354
|
+
gitBranch
|
|
355
|
+
};
|
|
356
|
+
deltas.push(delta);
|
|
357
|
+
}
|
|
358
|
+
// Attach user prompts (from history.jsonl, not session file)
|
|
359
|
+
if (event.type === 'event_msg' && event.payload?.type === 'user_message') {
|
|
360
|
+
const promptText = event.payload.message;
|
|
361
|
+
if (promptText && !attachedUserPromptTexts.has(promptText)) {
|
|
362
|
+
attachedUserPromptTexts.add(promptText);
|
|
363
|
+
newlyAttachedPrompts.push(promptText);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
return {
|
|
368
|
+
deltas,
|
|
369
|
+
lastLine: events.length,
|
|
370
|
+
newlyAttachedPrompts
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
catch (error) {
|
|
374
|
+
logger.error(`[CodexMetrics] Failed to parse incremental metrics: ${path}`, error);
|
|
375
|
+
throw error;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Get user prompts for a specific session
|
|
380
|
+
* Parses ~/.codex/history.jsonl and correlates by session_id
|
|
381
|
+
*/
|
|
382
|
+
async getUserPrompts(sessionId, fromTimestamp, toTimestamp) {
|
|
383
|
+
const historyPath = this.getUserPromptsPath();
|
|
384
|
+
const prompts = [];
|
|
385
|
+
try {
|
|
386
|
+
const content = await readFile(historyPath, 'utf-8');
|
|
387
|
+
const entries = parseMultiLineJSON(content);
|
|
388
|
+
for (const entry of entries) {
|
|
389
|
+
// Filter by session_id
|
|
390
|
+
if (entry.session_id !== sessionId) {
|
|
391
|
+
continue;
|
|
392
|
+
}
|
|
393
|
+
// Convert unix seconds to milliseconds
|
|
394
|
+
const timestamp = entry.ts * 1000;
|
|
395
|
+
// Filter by timestamp range
|
|
396
|
+
if (fromTimestamp && timestamp < fromTimestamp) {
|
|
397
|
+
continue;
|
|
398
|
+
}
|
|
399
|
+
if (toTimestamp && timestamp > toTimestamp) {
|
|
400
|
+
continue;
|
|
401
|
+
}
|
|
402
|
+
prompts.push({
|
|
403
|
+
display: entry.text || '',
|
|
404
|
+
timestamp,
|
|
405
|
+
project: '', // Populated from MetricsSession workingDirectory
|
|
406
|
+
sessionId: entry.session_id
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
catch (error) {
|
|
411
|
+
// History file might not exist or be empty - not an error
|
|
412
|
+
logger.debug(`[CodexMetrics] Could not read history file: ${error.message}`);
|
|
413
|
+
}
|
|
414
|
+
return prompts.sort((a, b) => a.timestamp - b.timestamp);
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* Extract file operation from tool arguments
|
|
418
|
+
* Codex-specific tool mapping
|
|
419
|
+
*/
|
|
420
|
+
extractFileOperation(toolName, input) {
|
|
421
|
+
// Map Codex tool names to operation types
|
|
422
|
+
const typeMap = {
|
|
423
|
+
'read_file': 'read',
|
|
424
|
+
'write_file': 'write',
|
|
425
|
+
'edit_file': 'edit',
|
|
426
|
+
'shell': undefined // Shell commands vary - skip for now
|
|
427
|
+
};
|
|
428
|
+
const type = typeMap[toolName];
|
|
429
|
+
if (!type)
|
|
430
|
+
return undefined;
|
|
431
|
+
const fileOp = { type };
|
|
432
|
+
// Extract file path from tool arguments
|
|
433
|
+
if (input?.file_path || input?.path) {
|
|
434
|
+
const path = input.file_path || input.path;
|
|
435
|
+
fileOp.path = path;
|
|
436
|
+
fileOp.format = this.extractFormat(path);
|
|
437
|
+
fileOp.language = this.detectLanguage(path);
|
|
438
|
+
}
|
|
439
|
+
// Extract line changes for write operations
|
|
440
|
+
if (toolName === 'write_file' && input?.content) {
|
|
441
|
+
fileOp.linesAdded = input.content.split('\n').length;
|
|
442
|
+
}
|
|
443
|
+
return fileOp;
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Codex uses object-based watermark (record ID tracking)
|
|
447
|
+
*/
|
|
448
|
+
getWatermarkStrategy() {
|
|
449
|
+
return 'object';
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Codex initialization delay: 500ms
|
|
453
|
+
*/
|
|
454
|
+
getInitDelay() {
|
|
455
|
+
return 500;
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* Override getDataPaths to handle dynamic date-based structure
|
|
459
|
+
* Pattern: ~/.codex/sessions/{year}/{month}/{day}/
|
|
460
|
+
* Returns base directory for FileSnapshotter to scan subdirectories
|
|
461
|
+
*/
|
|
462
|
+
getDataPaths() {
|
|
463
|
+
const home = this.getHomeDir();
|
|
464
|
+
// Parse sessions template to extract directory structure
|
|
465
|
+
// Template: 'sessions/{year}/{month}/{day}' → ['sessions', '{year}', '{month}', '{day}']
|
|
466
|
+
const sessionsParts = this.parseSessionsTemplate();
|
|
467
|
+
// Build path by taking segments before first placeholder
|
|
468
|
+
const staticSegments = [];
|
|
469
|
+
for (const segment of sessionsParts) {
|
|
470
|
+
if (this.isDynamicSegment(segment)) {
|
|
471
|
+
break;
|
|
472
|
+
}
|
|
473
|
+
staticSegments.push(segment);
|
|
474
|
+
}
|
|
475
|
+
// Return base directory - FileSnapshotter will scan subdirectories
|
|
476
|
+
// Pattern matching in matchesSessionPattern() handles the rest
|
|
477
|
+
return {
|
|
478
|
+
sessionsDir: staticSegments.length > 0 ? join(home, ...staticSegments) : home,
|
|
479
|
+
settingsDir: home
|
|
480
|
+
};
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
//# sourceMappingURL=codex.metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.metrics.js","sourceRoot":"","sources":["../../../src/agents/plugins/codex.metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { AgentMetadata } from '../core/types.js';
|
|
2
2
|
import { BaseAgentAdapter } from '../core/BaseAgentAdapter.js';
|
|
3
|
-
|
|
4
|
-
export declare function
|
|
3
|
+
import type { AgentMetricsSupport } from '../core/metrics/types.js';
|
|
4
|
+
export declare function cleanupAuthJson(authFile: string, sessionEnv?: NodeJS.ProcessEnv): Promise<void>;
|
|
5
5
|
export declare function setupAuthJson(authFile: string, env: NodeJS.ProcessEnv): Promise<void>;
|
|
6
|
-
export declare function setupConfigToml(configFile: string, env: NodeJS.ProcessEnv): Promise<void>;
|
|
7
6
|
/**
|
|
8
7
|
* Codex Plugin Metadata
|
|
9
8
|
*/
|
|
@@ -12,6 +11,11 @@ export declare const CodexPluginMetadata: AgentMetadata;
|
|
|
12
11
|
* Codex Adapter
|
|
13
12
|
*/
|
|
14
13
|
export declare class CodexPlugin extends BaseAgentAdapter {
|
|
14
|
+
private metricsAdapter;
|
|
15
15
|
constructor();
|
|
16
|
+
/**
|
|
17
|
+
* Get metrics adapter for this agent
|
|
18
|
+
*/
|
|
19
|
+
getMetricsAdapter(): AgentMetricsSupport;
|
|
16
20
|
}
|
|
17
21
|
//# sourceMappingURL=codex.plugin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.plugin.d.ts","sourceRoot":"","sources":["../../../src/agents/plugins/codex.plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"codex.plugin.d.ts","sourceRoot":"","sources":["../../../src/agents/plugins/codex.plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAepE,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAkDrG;AA2DD,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAI3F;AA4CD;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,aAiEjC,CAAC;AAEF;;GAEG;AACH,qBAAa,WAAY,SAAQ,gBAAgB;IAC/C,OAAO,CAAC,cAAc,CAAsB;;IAQ5C;;OAEG;IACH,iBAAiB,IAAI,mBAAmB;CAGzC"}
|