Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 52 additions & 12 deletions cli.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -304,8 +304,16 @@ const CLI_INSTALL_TARGETS = Object.freeze([
}
]);

const HTTP_KEEP_ALIVE_AGENT = new http.Agent({ keepAlive: true });
const HTTPS_KEEP_ALIVE_AGENT = new https.Agent({ keepAlive: true });
const HTTP_KEEP_ALIVE_AGENT = new http.Agent({
keepAlive: true,
keepAliveMsecs: 1000,
maxFreeSockets: 4
});
const HTTPS_KEEP_ALIVE_AGENT = new https.Agent({
keepAlive: true,
keepAliveMsecs: 1000,
maxFreeSockets: 4
});

const openaiBridgeHandler = createOpenaiBridgeHttpHandler({
settingsFile: OPENAI_BRIDGE_SETTINGS_FILE,
Expand DownExpand Up@@ -3639,32 +3647,46 @@ function readTotalTokensFromUsage(usage) {
return explicitTotal;
}
const inputTokens = readNonNegativeInteger(usage.input_tokens ?? usage.inputTokens);
const cachedInputTokens = readNonNegativeInteger(
usage.cached_input_tokens ?? usage.cachedInputTokens
?? usage.cache_read_input_tokens ?? usage.cacheReadInputTokens
);
const cacheCreationInputTokens = readNonNegativeInteger(
usage.cache_creation_input_tokens ?? usage.cacheCreationInputTokens
);
const outputTokens = readNonNegativeInteger(usage.output_tokens ?? usage.outputTokens);
const reasoningOutputTokens = readNonNegativeInteger(usage.reasoning_output_tokens ?? usage.reasoningOutputTokens);
if (inputTokens === null && outputTokens === null && reasoningOutputTokens === null) {
if (inputTokens === null && cachedInputTokens === null && cacheCreationInputTokens === null && outputTokens === null && reasoningOutputTokens === null) {
return null;
}
return (inputTokens || 0) + (outputTokens || 0) + (reasoningOutputTokens || 0);
return (inputTokens || 0) + (cachedInputTokens || 0) + (cacheCreationInputTokens || 0) + (outputTokens || 0) + (reasoningOutputTokens || 0);
}

function readUsageTotalsFromUsage(usage) {
if (!usage || typeof usage !== 'object' || Array.isArray(usage)) {
return null;
}
const inputTokens = readNonNegativeInteger(usage.input_tokens ?? usage.inputTokens);
const cachedInputTokens = readNonNegativeInteger(usage.cached_input_tokens ?? usage.cachedInputTokens);
const cachedInputTokens = readNonNegativeInteger(
usage.cached_input_tokens ?? usage.cachedInputTokens
?? usage.cache_read_input_tokens ?? usage.cacheReadInputTokens
);
const cacheCreationInputTokens = readNonNegativeInteger(
usage.cache_creation_input_tokens ?? usage.cacheCreationInputTokens
);
const outputTokens = readNonNegativeInteger(usage.output_tokens ?? usage.outputTokens);
const reasoningOutputTokens = readNonNegativeInteger(usage.reasoning_output_tokens ?? usage.reasoningOutputTokens);
const totalTokens = readNonNegativeInteger(usage.total_tokens ?? usage.totalTokens)
?? ((inputTokens === null && cachedInputTokens === null && outputTokens === null && reasoningOutputTokens === null)
?? ((inputTokens === null && cachedInputTokens === null && cacheCreationInputTokens === null && outputTokens === null && reasoningOutputTokens === null)
? null
: ((inputTokens || 0) + (outputTokens || 0) + (reasoningOutputTokens || 0)));
if (inputTokens === null && cachedInputTokens === null && outputTokens === null && reasoningOutputTokens === null && totalTokens === null) {
: ((inputTokens || 0) + (cachedInputTokens || 0) + (cacheCreationInputTokens || 0) + (outputTokens || 0) + (reasoningOutputTokens || 0)));
if (inputTokens === null && cachedInputTokens === null && cacheCreationInputTokens === null && outputTokens === null && reasoningOutputTokens === null && totalTokens === null) {
return null;
}
return {
inputTokens,
cachedInputTokens,
cacheCreationInputTokens,
outputTokens,
reasoningOutputTokens,
totalTokens
Expand All@@ -3690,6 +3712,7 @@ function applyUsageTotalsToState(state, usageTotals) {
const pairs = [
['inputTokens', usageTotals.inputTokens],
['cachedInputTokens', usageTotals.cachedInputTokens],
['cacheCreationInputTokens', usageTotals.cacheCreationInputTokens],
['outputTokens', usageTotals.outputTokens],
['reasoningOutputTokens', usageTotals.reasoningOutputTokens],
['totalTokens', usageTotals.totalTokens]
Expand DownExpand Up@@ -3940,12 +3963,13 @@ function parseCodexSessionSummary(filePath, options = {}) {
let contextWindow = 0;
let inputTokens = 0;
let cachedInputTokens = 0;
let cacheCreationInputTokens = 0;
let outputTokens = 0;
let reasoningOutputTokens = 0;
let provider = 'codex';
let model = '';
const models = [];
const usageState = { totalTokens, contextWindow, inputTokens, cachedInputTokens, outputTokens, reasoningOutputTokens };
const usageState = { totalTokens, contextWindow, inputTokens, cachedInputTokens, cacheCreationInputTokens, outputTokens, reasoningOutputTokens };
const previewMessages = [];

for (const record of records) {
Expand All@@ -3958,6 +3982,7 @@ function parseCodexSessionSummary(filePath, options = {}) {
contextWindow = usageState.contextWindow || 0;
inputTokens = usageState.inputTokens || 0;
cachedInputTokens = usageState.cachedInputTokens || 0;
cacheCreationInputTokens = usageState.cacheCreationInputTokens || 0;
outputTokens = usageState.outputTokens || 0;
reasoningOutputTokens = usageState.reasoningOutputTokens || 0;

Expand DownExpand Up@@ -3992,6 +4017,7 @@ function parseCodexSessionSummary(filePath, options = {}) {
contextWindow = usageState.contextWindow || 0;
inputTokens = usageState.inputTokens || 0;
cachedInputTokens = usageState.cachedInputTokens || 0;
cacheCreationInputTokens = usageState.cacheCreationInputTokens || 0;
outputTokens = usageState.outputTokens || 0;
reasoningOutputTokens = usageState.reasoningOutputTokens || 0;
provider = readExplicitSessionProviderFromRecord(record) || provider;
Expand DownExpand Up@@ -4051,6 +4077,7 @@ function parseCodexSessionSummary(filePath, options = {}) {
contextWindow,
inputTokens,
cachedInputTokens,
cacheCreationInputTokens,
outputTokens,
reasoningOutputTokens,
__messageCountExact: isSessionSummaryMessageCountExact(stat, summaryReadBytes),
Expand DownExpand Up@@ -4087,12 +4114,13 @@ function parseClaudeSessionSummary(filePath, options = {}) {
let contextWindow = 0;
let inputTokens = 0;
let cachedInputTokens = 0;
let cacheCreationInputTokens = 0;
let outputTokens = 0;
let reasoningOutputTokens = 0;
let provider = 'claude';
let model = '';
const models = [];
const usageState = { totalTokens, contextWindow, inputTokens, cachedInputTokens, outputTokens, reasoningOutputTokens };
const usageState = { totalTokens, contextWindow, inputTokens, cachedInputTokens, cacheCreationInputTokens, outputTokens, reasoningOutputTokens };
const previewMessages = [];
let createdAt = '';
let updatedAt = stat.mtime.toISOString();
Expand All@@ -4110,6 +4138,7 @@ function parseClaudeSessionSummary(filePath, options = {}) {
contextWindow = usageState.contextWindow || 0;
inputTokens = usageState.inputTokens || 0;
cachedInputTokens = usageState.cachedInputTokens || 0;
cacheCreationInputTokens = usageState.cacheCreationInputTokens || 0;
outputTokens = usageState.outputTokens || 0;
reasoningOutputTokens = usageState.reasoningOutputTokens || 0;

Expand DownExpand Up@@ -4143,6 +4172,7 @@ function parseClaudeSessionSummary(filePath, options = {}) {
contextWindow = usageState.contextWindow || 0;
inputTokens = usageState.inputTokens || 0;
cachedInputTokens = usageState.cachedInputTokens || 0;
cacheCreationInputTokens = usageState.cacheCreationInputTokens || 0;
outputTokens = usageState.outputTokens || 0;
reasoningOutputTokens = usageState.reasoningOutputTokens || 0;
provider = readExplicitSessionProviderFromRecord(record) || provider;
Expand DownExpand Up@@ -4201,6 +4231,7 @@ function parseClaudeSessionSummary(filePath, options = {}) {
contextWindow,
inputTokens,
cachedInputTokens,
cacheCreationInputTokens,
outputTokens,
reasoningOutputTokens,
__messageCountExact: isSessionSummaryMessageCountExact(stat, summaryReadBytes),
Expand DownExpand Up@@ -4237,12 +4268,13 @@ function parseCodeBuddySessionSummary(filePath, options = {}) {
let contextWindow = 0;
let inputTokens = 0;
let cachedInputTokens = 0;
let cacheCreationInputTokens = 0;
let outputTokens = 0;
let reasoningOutputTokens = 0;
let provider = 'codebuddy';
let model = '';
const models = [];
const usageState = { totalTokens, contextWindow, inputTokens, cachedInputTokens, outputTokens, reasoningOutputTokens };
const usageState = { totalTokens, contextWindow, inputTokens, cachedInputTokens, cacheCreationInputTokens, outputTokens, reasoningOutputTokens };
const previewMessages = [];
let createdAt = '';
let updatedAt = stat.mtime.toISOString();
Expand All@@ -4260,6 +4292,7 @@ function parseCodeBuddySessionSummary(filePath, options = {}) {
contextWindow = usageState.contextWindow || 0;
inputTokens = usageState.inputTokens || 0;
cachedInputTokens = usageState.cachedInputTokens || 0;
cacheCreationInputTokens = usageState.cacheCreationInputTokens || 0;
outputTokens = usageState.outputTokens || 0;
reasoningOutputTokens = usageState.reasoningOutputTokens || 0;

Expand DownExpand Up@@ -4298,6 +4331,7 @@ function parseCodeBuddySessionSummary(filePath, options = {}) {
contextWindow = usageState.contextWindow || 0;
inputTokens = usageState.inputTokens || 0;
cachedInputTokens = usageState.cachedInputTokens || 0;
cacheCreationInputTokens = usageState.cacheCreationInputTokens || 0;
outputTokens = usageState.outputTokens || 0;
reasoningOutputTokens = usageState.reasoningOutputTokens || 0;
provider = readExplicitSessionProviderFromRecord(record) || provider;
Expand DownExpand Up@@ -4358,6 +4392,7 @@ function parseCodeBuddySessionSummary(filePath, options = {}) {
contextWindow,
inputTokens,
cachedInputTokens,
cacheCreationInputTokens,
outputTokens,
reasoningOutputTokens,
__messageCountExact: isSessionSummaryMessageCountExact(stat, summaryReadBytes),
Expand DownExpand Up@@ -4647,17 +4682,19 @@ function listClaudeSessions(limit, options = {}) {
let contextWindow = 0;
let inputTokens = 0;
let cachedInputTokens = 0;
let cacheCreationInputTokens = 0;
let outputTokens = 0;
let reasoningOutputTokens = 0;
let model = typeof entry.model === 'string' ? entry.model.trim() : '';
const models = model ? [model] : [];

const usageState = { totalTokens, contextWindow, inputTokens, cachedInputTokens, outputTokens, reasoningOutputTokens };
const usageState = { totalTokens, contextWindow, inputTokens, cachedInputTokens, cacheCreationInputTokens, outputTokens, reasoningOutputTokens };
applySessionUsageSummaryFromIndexEntry(usageState, entry);
totalTokens = usageState.totalTokens || 0;
contextWindow = usageState.contextWindow || 0;
inputTokens = usageState.inputTokens || 0;
cachedInputTokens = usageState.cachedInputTokens || 0;
cacheCreationInputTokens = usageState.cacheCreationInputTokens || 0;
outputTokens = usageState.outputTokens || 0;
reasoningOutputTokens = usageState.reasoningOutputTokens || 0;

Expand DownExpand Up@@ -4688,6 +4725,7 @@ function listClaudeSessions(limit, options = {}) {
contextWindow = usageState.contextWindow || 0;
inputTokens = usageState.inputTokens || 0;
cachedInputTokens = usageState.cachedInputTokens || 0;
cacheCreationInputTokens = usageState.cacheCreationInputTokens || 0;
outputTokens = usageState.outputTokens || 0;
reasoningOutputTokens = usageState.reasoningOutputTokens || 0;
const filteredQuickMessages = removeLeadingSystemMessage(quickMessages);
Expand All@@ -4712,6 +4750,7 @@ function listClaudeSessions(limit, options = {}) {
contextWindow = usageState.contextWindow || 0;
inputTokens = usageState.inputTokens || 0;
cachedInputTokens = usageState.cachedInputTokens || 0;
cacheCreationInputTokens = usageState.cacheCreationInputTokens || 0;
outputTokens = usageState.outputTokens || 0;
reasoningOutputTokens = usageState.reasoningOutputTokens || 0;

Expand All@@ -4735,6 +4774,7 @@ function listClaudeSessions(limit, options = {}) {
contextWindow,
inputTokens,
cachedInputTokens,
cacheCreationInputTokens,
outputTokens,
reasoningOutputTokens,
model,
Expand Down
Loading
Loading