sidekick-shared 0.23.0 → 0.24.0
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 +139 -57
- package/dist/accountManager.js +10 -0
- package/dist/aggregation/EventAggregator.d.ts +8 -1
- package/dist/aggregation/EventAggregator.js +82 -136
- package/dist/aggregation/snapshot.d.ts +1 -1
- package/dist/aggregation/snapshot.js +2 -1
- package/dist/aggregation/types.d.ts +5 -0
- package/dist/autoSwitch.d.ts +1 -1
- package/dist/autoSwitch.js +14 -3
- package/dist/browser.d.ts +6 -0
- package/dist/browser.js +10 -1
- package/dist/codexQuota.d.ts +2 -0
- package/dist/codexQuota.js +27 -0
- package/dist/codexQuotaWatcher.d.ts +7 -0
- package/dist/codexQuotaWatcher.js +37 -19
- package/dist/context/sessionContext.js +43 -15
- package/dist/credentialIO.js +19 -5
- package/dist/errorHistory.d.ts +1 -0
- package/dist/errorHistory.js +3 -2
- package/dist/extractors/tokenUsage.js +1 -1
- package/dist/extractors/toolCall.js +2 -2
- package/dist/index.d.ts +14 -4
- package/dist/index.js +25 -7
- package/dist/modelInfo.d.ts +17 -7
- package/dist/modelInfo.js +11 -2
- package/dist/multiProviderQuotaService.js +13 -2
- package/dist/node.d.ts +4 -0
- package/dist/node.js +8 -1
- package/dist/observedSessionCollector.d.ts +68 -0
- package/dist/observedSessionCollector.js +178 -0
- package/dist/parsers/codexParser.js +24 -6
- package/dist/parsers/openCodeParser.js +22 -1
- package/dist/parsers/sessionActivityDetector.js +2 -0
- package/dist/parsers/sessionPathResolver.js +19 -16
- package/dist/parsers/subagentScanner.d.ts +1 -1
- package/dist/parsers/subagentScanner.js +4 -5
- package/dist/parsers/subagentTraceParser.js +15 -12
- package/dist/providerStatus.js +13 -2
- package/dist/providers/claudeCode.js +63 -5
- package/dist/providers/codex.js +56 -17
- package/dist/providers/detect.js +32 -3
- package/dist/providers/openCodeDatabase.js +12 -3
- package/dist/quota.js +8 -0
- package/dist/quotaPoller.js +17 -6
- package/dist/quotaSnapshots.js +80 -26
- package/dist/readers/decisions.js +3 -1
- package/dist/readers/handoff.js +1 -1
- package/dist/readers/notes.js +9 -4
- package/dist/readers/plans.js +2 -4
- package/dist/readers/tasks.js +3 -1
- package/dist/report/htmlHelpers.js +6 -1
- package/dist/report/openBrowser.js +3 -3
- package/dist/report/transcriptParser.d.ts +3 -11
- package/dist/report/transcriptParser.js +69 -154
- package/dist/schemas/index.d.ts +7 -1
- package/dist/schemas/index.js +18 -2
- package/dist/schemas/observedSessionV1.d.ts +32 -1
- package/dist/schemas/observedSessionV1.js +11 -1
- package/dist/schemas/sessionEvent.d.ts +353 -12
- package/dist/schemas/sessionEvent.js +76 -14
- package/dist/schemas/tokenEstimation.d.ts +14 -0
- package/dist/schemas/tokenEstimation.js +10 -0
- package/dist/schemas/transcript.d.ts +24 -0
- package/dist/schemas/transcript.js +81 -0
- package/dist/schemas/usageNormalization.d.ts +55 -0
- package/dist/schemas/usageNormalization.js +41 -0
- package/dist/sessionTranscripts.d.ts +16 -0
- package/dist/sessionTranscripts.js +47 -0
- package/dist/statusline/formatter.js +8 -1
- package/dist/terminalSync.js +16 -7
- package/dist/tokenEstimation.d.ts +24 -0
- package/dist/tokenEstimation.js +62 -0
- package/dist/transcript.d.ts +92 -0
- package/dist/transcript.js +240 -0
- package/dist/types/historicalData.d.ts +14 -0
- package/dist/types/historicalData.js +22 -0
- package/dist/types/observedSessionV1.d.ts +3 -1
- package/dist/types/observedSessionV1.js +20 -6
- package/dist/types/sessionEvent.d.ts +66 -7
- package/dist/usageNormalization.d.ts +69 -0
- package/dist/usageNormalization.js +100 -0
- package/dist/watchers/factory.js +14 -3
- package/dist/watchers/jsonlTail.js +34 -14
- package/dist/watchers/jsonlWatcher.js +5 -3
- package/dist/watchers/providerReaderWatcher.js +4 -2
- package/dist/watchers/sqliteWatcher.d.ts +2 -0
- package/dist/watchers/sqliteWatcher.js +27 -14
- package/dist/writers/atomic.js +100 -13
- package/dist/zaiQuotaWatcher.js +6 -0
- package/package.json +1 -1
|
@@ -15,6 +15,9 @@ export interface CodexQuotaWatcherOptions {
|
|
|
15
15
|
discoveryPollIntervalMs?: number;
|
|
16
16
|
maxTailBytes?: number;
|
|
17
17
|
maxSessionFiles?: number;
|
|
18
|
+
/** Minimum interval between expensive rollout-tail fallback scans. */
|
|
19
|
+
localScanCacheMs?: number;
|
|
20
|
+
now?: () => number;
|
|
18
21
|
providerFactory?: () => CodexProvider;
|
|
19
22
|
getActiveAccount?: CodexAccountReader;
|
|
20
23
|
readSnapshot?: SnapshotReader;
|
|
@@ -39,6 +42,8 @@ export declare class CodexQuotaWatcher implements Disposable {
|
|
|
39
42
|
private readonly watchFile;
|
|
40
43
|
private readonly maxTailBytes;
|
|
41
44
|
private readonly maxSessionFiles;
|
|
45
|
+
private readonly localScanCacheMs;
|
|
46
|
+
private readonly now;
|
|
42
47
|
private readonly workspaceId;
|
|
43
48
|
private readonly appendHistorySample;
|
|
44
49
|
private readonly listeners;
|
|
@@ -48,6 +53,8 @@ export declare class CodexQuotaWatcher implements Disposable {
|
|
|
48
53
|
private fileWatcher;
|
|
49
54
|
private sessionPath;
|
|
50
55
|
private lastEmissionKey;
|
|
56
|
+
private lastLocalScanAt;
|
|
57
|
+
private lastLocalScanState;
|
|
51
58
|
private running;
|
|
52
59
|
constructor(workspacePath: string, options?: CodexQuotaWatcherOptions);
|
|
53
60
|
start(): void;
|
|
@@ -41,6 +41,7 @@ const quotaSnapshots_1 = require("./quotaSnapshots");
|
|
|
41
41
|
const quotaHistory_1 = require("./quotaHistory");
|
|
42
42
|
const codex_1 = require("./providers/codex");
|
|
43
43
|
const DEFAULT_DISCOVERY_POLL_INTERVAL_MS = 30_000;
|
|
44
|
+
const DEFAULT_LOCAL_SCAN_CACHE_MS = 5 * 60_000;
|
|
44
45
|
function accountEmail(account) {
|
|
45
46
|
return account?.email ?? account?.metadata?.email;
|
|
46
47
|
}
|
|
@@ -81,6 +82,8 @@ class CodexQuotaWatcher {
|
|
|
81
82
|
watchFile;
|
|
82
83
|
maxTailBytes;
|
|
83
84
|
maxSessionFiles;
|
|
85
|
+
localScanCacheMs;
|
|
86
|
+
now;
|
|
84
87
|
workspaceId;
|
|
85
88
|
appendHistorySample;
|
|
86
89
|
listeners = [];
|
|
@@ -90,6 +93,8 @@ class CodexQuotaWatcher {
|
|
|
90
93
|
fileWatcher = null;
|
|
91
94
|
sessionPath = null;
|
|
92
95
|
lastEmissionKey = null;
|
|
96
|
+
lastLocalScanAt = Number.NEGATIVE_INFINITY;
|
|
97
|
+
lastLocalScanState = null;
|
|
93
98
|
running = false;
|
|
94
99
|
constructor(workspacePath, options = {}) {
|
|
95
100
|
this.workspacePath = workspacePath;
|
|
@@ -110,6 +115,8 @@ class CodexQuotaWatcher {
|
|
|
110
115
|
this.watchFile = options.watchFile ?? fs.watch;
|
|
111
116
|
this.maxTailBytes = options.maxTailBytes;
|
|
112
117
|
this.maxSessionFiles = options.maxSessionFiles;
|
|
118
|
+
this.localScanCacheMs = options.localScanCacheMs ?? DEFAULT_LOCAL_SCAN_CACHE_MS;
|
|
119
|
+
this.now = options.now ?? Date.now;
|
|
113
120
|
this.workspaceId = options.workspaceId;
|
|
114
121
|
this.appendHistorySample = options.appendHistorySample ?? quotaHistory_1.appendQuotaHistorySample;
|
|
115
122
|
}
|
|
@@ -255,28 +262,39 @@ class CodexQuotaWatcher {
|
|
|
255
262
|
}
|
|
256
263
|
emitCachedOrUnavailable() {
|
|
257
264
|
const account = this.getActiveAccount();
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
workspacePath: this.workspacePath,
|
|
263
|
-
activeAccount: account,
|
|
264
|
-
readSnapshot: this.readSnapshot,
|
|
265
|
-
writeSnapshot: this.writeSnapshot,
|
|
266
|
-
provider: localProvider,
|
|
267
|
-
maxTailBytes: this.maxTailBytes,
|
|
268
|
-
maxSessionFiles: this.maxSessionFiles,
|
|
269
|
-
});
|
|
270
|
-
if (local) {
|
|
271
|
-
this.emitState(local);
|
|
265
|
+
const scanNow = this.now();
|
|
266
|
+
if (scanNow - this.lastLocalScanAt < this.localScanCacheMs) {
|
|
267
|
+
if (this.lastLocalScanState) {
|
|
268
|
+
this.emitState(this.lastLocalScanState);
|
|
272
269
|
return;
|
|
273
270
|
}
|
|
274
271
|
}
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
272
|
+
else {
|
|
273
|
+
let localProvider = null;
|
|
274
|
+
this.lastLocalScanAt = scanNow;
|
|
275
|
+
this.lastLocalScanState = null;
|
|
276
|
+
try {
|
|
277
|
+
localProvider = this.providerFactory();
|
|
278
|
+
this.lastLocalScanState = (0, codexQuota_1.resolveCodexQuotaFromLocalSources)({
|
|
279
|
+
workspacePath: this.workspacePath,
|
|
280
|
+
activeAccount: account,
|
|
281
|
+
readSnapshot: this.readSnapshot,
|
|
282
|
+
writeSnapshot: this.writeSnapshot,
|
|
283
|
+
provider: localProvider,
|
|
284
|
+
maxTailBytes: this.maxTailBytes,
|
|
285
|
+
maxSessionFiles: this.maxSessionFiles,
|
|
286
|
+
});
|
|
287
|
+
if (this.lastLocalScanState) {
|
|
288
|
+
this.emitState(this.lastLocalScanState);
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
catch {
|
|
293
|
+
// Fall through to account-scoped cache or unavailable state.
|
|
294
|
+
}
|
|
295
|
+
finally {
|
|
296
|
+
localProvider?.dispose();
|
|
297
|
+
}
|
|
280
298
|
}
|
|
281
299
|
const cached = account ? this.readSnapshot('codex', account.id) : null;
|
|
282
300
|
if (cached) {
|
|
@@ -12,6 +12,7 @@ exports.createSessionContextProjector = createSessionContextProjector;
|
|
|
12
12
|
exports.readSessionContextSnapshot = readSessionContextSnapshot;
|
|
13
13
|
const EventAggregator_1 = require("../aggregation/EventAggregator");
|
|
14
14
|
const modelContext_1 = require("../modelContext");
|
|
15
|
+
const tokenEstimation_1 = require("../tokenEstimation");
|
|
15
16
|
const DEFAULT_CONTEXT_SOURCE_LIMIT = 200;
|
|
16
17
|
const DEFAULT_SNIPPET_MAX_CHARS = 240;
|
|
17
18
|
const DEFAULT_BODY_MAX_CHARS = 5000;
|
|
@@ -57,6 +58,10 @@ function buildSessionContextSnapshot(events, options = {}) {
|
|
|
57
58
|
if (event.rateLimits)
|
|
58
59
|
lastRateLimits = event.rateLimits;
|
|
59
60
|
}
|
|
61
|
+
return assembleSessionContextSnapshot(aggregator, sourceState, lastPermissionMode, lastRateLimits, options);
|
|
62
|
+
}
|
|
63
|
+
function assembleSessionContextSnapshot(aggregator, sourceState, lastPermissionMode, lastRateLimits, options) {
|
|
64
|
+
const providerId = options.providerId;
|
|
60
65
|
const metrics = aggregator.getMetrics();
|
|
61
66
|
const model = options.model ?? metrics.currentModel ?? metrics.modelStats[0]?.model;
|
|
62
67
|
const contextWindow = options.contextWindow ??
|
|
@@ -100,24 +105,46 @@ function buildSessionContextSnapshot(events, options = {}) {
|
|
|
100
105
|
};
|
|
101
106
|
}
|
|
102
107
|
function createSessionContextProjector(options = {}) {
|
|
103
|
-
let
|
|
108
|
+
let aggregator = createProjectorAggregator(options);
|
|
109
|
+
let sourceState = createSourceExtractionState(options);
|
|
110
|
+
let lastPermissionMode;
|
|
111
|
+
let lastRateLimits;
|
|
112
|
+
const process = (event) => {
|
|
113
|
+
aggregator.processEvent(event);
|
|
114
|
+
extractSourcesFromEvent(event, sourceState);
|
|
115
|
+
if (event.permissionMode)
|
|
116
|
+
lastPermissionMode = event.permissionMode;
|
|
117
|
+
if (event.rateLimits)
|
|
118
|
+
lastRateLimits = event.rateLimits;
|
|
119
|
+
};
|
|
120
|
+
const snapshot = () => assembleSessionContextSnapshot(aggregator, sourceState, lastPermissionMode, lastRateLimits, options);
|
|
104
121
|
return {
|
|
105
122
|
processEvent(event) {
|
|
106
|
-
|
|
107
|
-
return
|
|
123
|
+
process(event);
|
|
124
|
+
return snapshot();
|
|
108
125
|
},
|
|
109
126
|
processEvents(newEvents) {
|
|
110
|
-
|
|
111
|
-
|
|
127
|
+
for (const event of newEvents)
|
|
128
|
+
process(event);
|
|
129
|
+
return snapshot();
|
|
112
130
|
},
|
|
113
131
|
getSnapshot() {
|
|
114
|
-
return
|
|
132
|
+
return snapshot();
|
|
115
133
|
},
|
|
116
134
|
reset() {
|
|
117
|
-
|
|
135
|
+
aggregator = createProjectorAggregator(options);
|
|
136
|
+
sourceState = createSourceExtractionState(options);
|
|
137
|
+
lastPermissionMode = undefined;
|
|
138
|
+
lastRateLimits = undefined;
|
|
118
139
|
},
|
|
119
140
|
};
|
|
120
141
|
}
|
|
142
|
+
function createProjectorAggregator(options) {
|
|
143
|
+
return new EventAggregator_1.EventAggregator({
|
|
144
|
+
providerId: options.providerId,
|
|
145
|
+
computeContextSize: options.computeContextSize,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
121
148
|
function readSessionContextSnapshot(provider, sessionPath, options = {}) {
|
|
122
149
|
const reader = provider.createReader(sessionPath);
|
|
123
150
|
const events = reader.readAll();
|
|
@@ -177,22 +204,23 @@ function extractSourcesFromEvent(event, state) {
|
|
|
177
204
|
layer: 'summary',
|
|
178
205
|
sourceType: 'summary',
|
|
179
206
|
title: 'Context summary',
|
|
180
|
-
text: extractText(event.message
|
|
207
|
+
text: extractText(event.message?.content) || 'Context compacted',
|
|
181
208
|
});
|
|
182
209
|
break;
|
|
183
210
|
}
|
|
184
211
|
}
|
|
185
212
|
function extractSystemSource(event, state) {
|
|
186
|
-
const
|
|
187
|
-
const
|
|
188
|
-
const
|
|
213
|
+
const message = event.message;
|
|
214
|
+
const text = extractText(message?.content);
|
|
215
|
+
const label = message?.sourceLabel ?? message?.role ?? 'system';
|
|
216
|
+
const usage = message?.usage;
|
|
189
217
|
if (text) {
|
|
190
218
|
addSource(state, {
|
|
191
219
|
event,
|
|
192
220
|
layer: 'system',
|
|
193
221
|
sourceType: 'system',
|
|
194
222
|
title: label,
|
|
195
|
-
sourceRef:
|
|
223
|
+
sourceRef: message?.id,
|
|
196
224
|
text,
|
|
197
225
|
});
|
|
198
226
|
}
|
|
@@ -202,7 +230,7 @@ function extractSystemSource(event, state) {
|
|
|
202
230
|
layer: 'runtime',
|
|
203
231
|
sourceType: event.rateLimits ? 'rate_limit' : 'runtime',
|
|
204
232
|
title: event.rateLimits ? 'Runtime usage and rate limits' : 'Runtime usage',
|
|
205
|
-
sourceRef:
|
|
233
|
+
sourceRef: message?.id,
|
|
206
234
|
text: describeUsage(usage, event.rateLimits),
|
|
207
235
|
metadata: {
|
|
208
236
|
usage,
|
|
@@ -394,7 +422,7 @@ function limitSources(sources, limit) {
|
|
|
394
422
|
}
|
|
395
423
|
function latestModel(events) {
|
|
396
424
|
for (let i = events.length - 1; i >= 0; i--) {
|
|
397
|
-
const model = events[i].message
|
|
425
|
+
const model = events[i].message?.model;
|
|
398
426
|
if (model)
|
|
399
427
|
return model;
|
|
400
428
|
}
|
|
@@ -519,7 +547,7 @@ function truncateWithInfo(text, maxChars) {
|
|
|
519
547
|
return { text: `${text.slice(0, maxChars - 3)}...`, truncated: true };
|
|
520
548
|
}
|
|
521
549
|
function estimateTokens(text) {
|
|
522
|
-
return
|
|
550
|
+
return (0, tokenEstimation_1.estimateTextTokens)(text).count;
|
|
523
551
|
}
|
|
524
552
|
function isRecord(value) {
|
|
525
553
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
package/dist/credentialIO.js
CHANGED
|
@@ -52,6 +52,12 @@ const os = __importStar(require("os"));
|
|
|
52
52
|
const child_process_1 = require("child_process");
|
|
53
53
|
const claudeProfiles_1 = require("./claudeProfiles");
|
|
54
54
|
exports.KEYCHAIN_SERVICE = 'Claude Code-credentials';
|
|
55
|
+
function quoteSecurityInteractiveArg(value) {
|
|
56
|
+
// `security -i` is not a POSIX shell: adjacent quoted segments do NOT
|
|
57
|
+
// concatenate (so the shell-style '\'' splice splits the token), and
|
|
58
|
+
// backslash escapes the next character even inside single quotes.
|
|
59
|
+
return `'${value.replace(/\\/g, '\\\\').replace(/'/g, `\\'`)}'`;
|
|
60
|
+
}
|
|
55
61
|
function getCredentialsFilePath(configDir) {
|
|
56
62
|
return path.join(configDir ?? path.join(os.homedir(), '.claude'), '.credentials.json');
|
|
57
63
|
}
|
|
@@ -93,16 +99,24 @@ function writeActiveCredentials(credentials, configDir) {
|
|
|
93
99
|
const json = JSON.stringify(credentials);
|
|
94
100
|
JSON.parse(json); // validate round-trip
|
|
95
101
|
if (process.platform === 'darwin') {
|
|
96
|
-
(0,
|
|
102
|
+
const service = (0, claudeProfiles_1.claudeKeychainService)(configDir);
|
|
103
|
+
const account = process.env.USER || 'user';
|
|
104
|
+
const command = [
|
|
97
105
|
'add-generic-password',
|
|
98
106
|
'-U',
|
|
99
107
|
'-s',
|
|
100
|
-
(
|
|
108
|
+
quoteSecurityInteractiveArg(service),
|
|
101
109
|
'-a',
|
|
102
|
-
|
|
110
|
+
quoteSecurityInteractiveArg(account),
|
|
103
111
|
'-w',
|
|
104
|
-
json,
|
|
105
|
-
]
|
|
112
|
+
quoteSecurityInteractiveArg(json),
|
|
113
|
+
].join(' ');
|
|
114
|
+
(0, child_process_1.execFileSync)('security', ['-i'], {
|
|
115
|
+
input: command + '\n',
|
|
116
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
117
|
+
timeout: 4000,
|
|
118
|
+
killSignal: 'SIGKILL',
|
|
119
|
+
});
|
|
106
120
|
return;
|
|
107
121
|
}
|
|
108
122
|
// Linux / WSL / Windows — file-based
|
package/dist/errorHistory.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ErrorRollup, ErrorRollupEntry } from './aggregation/types';
|
|
2
2
|
export declare const ERROR_HISTORY_SCHEMA_VERSION: 1;
|
|
3
|
+
export declare const MAX_ERROR_HISTORY_SESSIONS = 500;
|
|
3
4
|
export interface ErrorHistorySessionRecord {
|
|
4
5
|
sessionId: string;
|
|
5
6
|
providerId: string;
|
package/dist/errorHistory.js
CHANGED
|
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.ERROR_HISTORY_SCHEMA_VERSION = void 0;
|
|
36
|
+
exports.MAX_ERROR_HISTORY_SESSIONS = exports.ERROR_HISTORY_SCHEMA_VERSION = void 0;
|
|
37
37
|
exports.appendErrorHistory = appendErrorHistory;
|
|
38
38
|
exports.readErrorHistory = readErrorHistory;
|
|
39
39
|
exports.getTopFailingTools = getTopFailingTools;
|
|
@@ -41,6 +41,7 @@ const fs = __importStar(require("fs"));
|
|
|
41
41
|
const paths_1 = require("./paths");
|
|
42
42
|
const atomic_1 = require("./writers/atomic");
|
|
43
43
|
exports.ERROR_HISTORY_SCHEMA_VERSION = 1;
|
|
44
|
+
exports.MAX_ERROR_HISTORY_SESSIONS = 500;
|
|
44
45
|
function emptyStore() {
|
|
45
46
|
return {
|
|
46
47
|
schemaVersion: exports.ERROR_HISTORY_SCHEMA_VERSION,
|
|
@@ -59,7 +60,7 @@ async function appendErrorHistory(identity, rollup, filePath = (0, paths_1.getGl
|
|
|
59
60
|
await (0, atomic_1.updateJsonStoreAtomic)(filePath, emptyStore, (store) => ({
|
|
60
61
|
...store,
|
|
61
62
|
schemaVersion: exports.ERROR_HISTORY_SCHEMA_VERSION,
|
|
62
|
-
sessions: [...store.sessions, record],
|
|
63
|
+
sessions: [...(Array.isArray(store.sessions) ? store.sessions : []), record].slice(-exports.MAX_ERROR_HISTORY_SESSIONS),
|
|
63
64
|
lastSaved: record.endedAt,
|
|
64
65
|
}));
|
|
65
66
|
return record;
|
|
@@ -35,7 +35,7 @@ function extractTokenUsage(event) {
|
|
|
35
35
|
outputTokens: usage.output_tokens ?? 0,
|
|
36
36
|
cacheWriteTokens: usage.cache_creation_input_tokens ?? 0,
|
|
37
37
|
cacheReadTokens: usage.cache_read_input_tokens ?? 0,
|
|
38
|
-
model: event.message
|
|
38
|
+
model: event.message?.model ?? 'unknown',
|
|
39
39
|
timestamp: new Date(event.timestamp),
|
|
40
40
|
reportedCost: usage.reported_cost,
|
|
41
41
|
reasoningTokens: usage.reasoning_tokens,
|
|
@@ -85,7 +85,7 @@ class ToolCallTracker {
|
|
|
85
85
|
}
|
|
86
86
|
const topLevel = extractToolCall(event);
|
|
87
87
|
if (topLevel) {
|
|
88
|
-
const id = event.message
|
|
88
|
+
const id = event.message?.id;
|
|
89
89
|
if (id) {
|
|
90
90
|
topLevel.toolUseId = id;
|
|
91
91
|
this.pending.set(id, topLevel);
|
|
@@ -94,7 +94,7 @@ class ToolCallTracker {
|
|
|
94
94
|
completed.push(topLevel);
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
|
-
const content = event.message
|
|
97
|
+
const content = event.message?.content;
|
|
98
98
|
if (!Array.isArray(content))
|
|
99
99
|
return completed;
|
|
100
100
|
for (const block of content) {
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Public API for sidekick-shared.
|
|
3
3
|
*/
|
|
4
|
-
export
|
|
4
|
+
export { normalizeProviderUsage, extractNormalizedUsage, calculateNormalizedUsageCost, } from './usageNormalization';
|
|
5
|
+
export type { UsageProvider, UsageSemantics, UsageNormalizationProvenance, ProviderUsageInput, AnthropicUsageInput, OpenAIUsageInput, SidekickUsageInput, NormalizedUsage, PricingProvenance, NormalizedUsageCostInput, NormalizedUsageCost, } from './usageNormalization';
|
|
6
|
+
export { estimateTextTokens, estimateSerializedTokens } from './tokenEstimation';
|
|
7
|
+
export type { ExactTokenCounterContext, ExactTokenCounter, TokenEstimationMethod, TokenEstimationConfidence, TokenEstimationOptions, TokenEstimate, } from './tokenEstimation';
|
|
8
|
+
export { projectSessionTranscript } from './transcript';
|
|
9
|
+
export type { TranscriptFidelity, TranscriptSourceProvenance, CanonicalTranscriptBlock, CanonicalTranscriptMessage, CanonicalToolCall, CanonicalTranscriptUsageTotals, CanonicalSessionTranscript, ProjectSessionTranscriptOptions, } from './transcript';
|
|
10
|
+
export { listRecentSessions, readSessionTranscript } from './sessionTranscripts';
|
|
11
|
+
export type { ProviderSessionIndex, ListRecentSessionsOptions } from './sessionTranscripts';
|
|
12
|
+
export { ObservedSessionCollector, observedSessionSourceFromProvider, fileFingerprint, } from './observedSessionCollector';
|
|
13
|
+
export type { ObservedSessionReference, ObservedSessionCollectionSource, ObservedSessionDiagnosticKind, ObservedSessionDiagnostic, ObservedSessionCollection, ObservedSessionCollectorOptions, } from './observedSessionCollector';
|
|
14
|
+
export type { SessionEvent, ClaudeSessionEvent, MessageUsage, SessionMessage, SessionEventBase, MessageSessionEvent, UserSessionEvent, AssistantSessionEvent, SummarySessionEvent, SystemSessionEvent, ToolUseSessionEvent, ToolResultSessionEvent, TokenUsage, ToolCall, ToolAnalytics, TimelineEvent, PendingToolCall, TaskStatus as SessionTaskStatus, TrackedTask, TaskState, SubagentStats, PendingUserRequest, ResponseLatency, LatencyStats, PlanStep, PlanState, SessionStats, CompactionEvent, TruncationEvent, ContextAttribution, TurnAttribution, ContextSizePoint, PermissionMode, PermissionModeChange, } from './types/sessionEvent';
|
|
5
15
|
export type { OpenCodeSession, OpenCodeMessage, OpenCodePart, OpenCodeTextPart, OpenCodeReasoningPart, OpenCodeToolInvocationPart, OpenCodeCompactionPart, OpenCodeDbToolPart, OpenCodeStepStartPart, OpenCodeStepFinishPart, OpenCodePatchPart, OpenCodeSubtaskPart, OpenCodeAgentPart, OpenCodeFilePart, OpenCodeRetryPart, OpenCodeSnapshotPart, OpenCodeProject, DbProject as OpenCodeDbProject, DbSession as OpenCodeDbSession, DbMessage as OpenCodeDbMessage, DbPart as OpenCodeDbPart, } from './types/opencode';
|
|
6
16
|
export type { CodexRolloutLine, CodexSessionMeta, CodexResponseItem, CodexMessageItem, CodexContentPart, CodexReasoningItem, CodexFunctionCallItem, CodexFunctionCallOutputItem, CodexLocalShellCallItem, CodexWebSearchCallItem, CodexCustomToolCallItem, CodexCustomToolCallOutputItem, CodexCompacted, CodexTurnContext, CodexEventMsg, CodexEvent, CodexTurnStartedEvent, CodexTurnCompleteEvent, CodexTaskStartedEvent, CodexTaskCompleteEvent, CodexTurnAbortedEvent, CodexTokenCountEvent, CodexTokenUsage, CodexRateLimits, CodexAgentMessageEvent, CodexAgentReasoningEvent, CodexUserMessageEvent, CodexExecCommandBeginEvent, CodexExecCommandEndEvent, CodexMcpToolCallBeginEvent, CodexMcpToolCallEndEvent, CodexErrorEvent, CodexContextCompactedEvent, CodexPatchAppliedEvent, CodexBackgroundEvent, CodexGenericEvent, CodexDbThread, CodexReasoningSummary, } from './types/codex';
|
|
7
17
|
export { isAggregateCodexLimit } from './types/codex';
|
|
@@ -11,8 +21,8 @@ export type { DecisionEntry, DecisionLogStore, DecisionSource } from './types/de
|
|
|
11
21
|
export { DECISION_LOG_SCHEMA_VERSION } from './types/decisionLog';
|
|
12
22
|
export type { KnowledgeNote, KnowledgeNoteStore, KnowledgeNoteType, KnowledgeNoteSource, KnowledgeNoteStatus, KnowledgeNoteImportance, } from './types/knowledgeNote';
|
|
13
23
|
export { KNOWLEDGE_NOTE_SCHEMA_VERSION, IMPORTANCE_DECAY_FACTORS, STALENESS_THRESHOLDS, } from './types/knowledgeNote';
|
|
14
|
-
export type { HistoricalDataStore, DailyData, MonthlyData, AllTimeStats, TokenTotals, ModelUsageRecord, ToolUsageRecord, SessionSummary, SessionHistoryRecord, } from './types/historicalData';
|
|
15
|
-
export { HISTORICAL_DATA_SCHEMA_VERSION, HISTORICAL_SESSION_RETENTION_LIMIT, createEmptyTokenTotals, } from './types/historicalData';
|
|
24
|
+
export type { HistoricalDataStore, DailyData, HourlyData, MonthlyData, AllTimeStats, TokenTotals, ModelUsageRecord, ToolUsageRecord, SessionSummary, SessionHistoryRecord, } from './types/historicalData';
|
|
25
|
+
export { HISTORICAL_DATA_SCHEMA_VERSION, HISTORICAL_SESSION_RETENTION_LIMIT, createEmptyTokenTotals, createEmptyDataStore, } from './types/historicalData';
|
|
16
26
|
export type { PersistedPlan, PersistedPlanStep, PlanHistoryStore, PlanStepStatus, PlanStatus, PlanSource, PlanStepComplexity, } from './types/plan';
|
|
17
27
|
export { PLAN_SCHEMA_VERSION, MAX_PLANS_PER_PROJECT } from './types/plan';
|
|
18
28
|
export { getConfigDir, getProjectDataPath, getGlobalDataPath, encodeWorkspacePath, getProjectSlug, getProjectSlugRaw, resolveProjectIdentity, } from './paths';
|
|
@@ -93,7 +103,7 @@ export type { SerializedAggregatorState } from './aggregation/EventAggregator';
|
|
|
93
103
|
export { saveSnapshot, loadSnapshot, deleteSnapshot, isSnapshotValid, getSnapshotPath, } from './aggregation/snapshot';
|
|
94
104
|
export type { SessionSnapshot } from './aggregation/snapshot';
|
|
95
105
|
export type { EventAggregatorOptions, AggregatedTokens, ModelUsageStats, BurnRateInfo, SubagentLifecycle, AggregatedMetrics, FrequencyMetric, PatternMetric, HeatmapBucketMetric, ErrorRollup, ErrorRollupEntry, ErrorBucketMetric, } from './aggregation/types';
|
|
96
|
-
export { ERROR_HISTORY_SCHEMA_VERSION, appendErrorHistory, getTopFailingTools, readErrorHistory, } from './errorHistory';
|
|
106
|
+
export { ERROR_HISTORY_SCHEMA_VERSION, MAX_ERROR_HISTORY_SESSIONS, appendErrorHistory, getTopFailingTools, readErrorHistory, } from './errorHistory';
|
|
97
107
|
export type { ErrorHistorySessionRecord, ErrorHistoryStore, TopFailingTool } from './errorHistory';
|
|
98
108
|
export { FrequencyTracker } from './aggregation/FrequencyTracker';
|
|
99
109
|
export type { FrequencyEntry, SerializedFrequencyState } from './aggregation/FrequencyTracker';
|
package/dist/index.js
CHANGED
|
@@ -3,13 +3,29 @@
|
|
|
3
3
|
* Public API for sidekick-shared.
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
7
|
-
exports.
|
|
8
|
-
exports.
|
|
9
|
-
exports.
|
|
10
|
-
exports.
|
|
11
|
-
exports.
|
|
12
|
-
exports.scopePeakHoursToSessionProvider = exports.isClaudeCodeSessionProvider = exports.fetchPeakHoursStatus = exports.createPeakHoursNotApplicableState = exports.runDoctor = exports.getSessionDiagnostics = exports.formatHealthReport = exports.fetchOpenAIStatus = exports.fetchProviderStatus = exports.assistantTurnToolRefSchema = exports.assistantTurnToolGroupStepSchema = exports.assistantTurnTimelineItemSchema = exports.assistantTurnSubagentStatusSchema = exports.assistantTurnSubagentSchema = exports.assistantTurnReasoningTimelineItemSchema = exports.assistantTurnProjectionSchema = exports.assistantTurnProcessStepSchema = exports.assistantTurnProcessSchema = exports.assistantTurnNarrationStepSchema = exports.assistantTurnEventTypeSchema = exports.assistantTurnEventSchema = void 0;
|
|
6
|
+
exports.addNote = exports.decisionFingerprint = exports.addDecision = exports.completeTask = exports.addTask = exports.updateJsonStoreAtomic = exports.atomicWriteJsonSync = exports.atomicWriteJson = exports.readClaudeCodePlanFiles = exports.getPlanAnalytics = exports.writePlans = exports.getLatestPlan = exports.readPlans = exports.readLatestHandoff = exports.readHistory = exports.readNotes = exports.readDecisions = exports.readTasks = exports.migrateLegacyProjectStores = exports.resolveProjectIdentity = exports.getProjectSlugRaw = exports.getProjectSlug = exports.encodeWorkspacePath = exports.getGlobalDataPath = exports.getProjectDataPath = exports.getConfigDir = exports.MAX_PLANS_PER_PROJECT = exports.PLAN_SCHEMA_VERSION = exports.createEmptyDataStore = exports.createEmptyTokenTotals = exports.HISTORICAL_SESSION_RETENTION_LIMIT = exports.HISTORICAL_DATA_SCHEMA_VERSION = exports.STALENESS_THRESHOLDS = exports.IMPORTANCE_DECAY_FACTORS = exports.KNOWLEDGE_NOTE_SCHEMA_VERSION = exports.DECISION_LOG_SCHEMA_VERSION = exports.normalizeTaskStatus = exports.TASK_PERSISTENCE_SCHEMA_VERSION = exports.isAggregateCodexLimit = exports.fileFingerprint = exports.observedSessionSourceFromProvider = exports.ObservedSessionCollector = exports.readSessionTranscript = exports.listRecentSessions = exports.projectSessionTranscript = exports.estimateSerializedTokens = exports.estimateTextTokens = exports.calculateNormalizedUsageCost = exports.extractNormalizedUsage = exports.normalizeProviderUsage = void 0;
|
|
7
|
+
exports.createSessionContextProjector = exports.calculateSessionContextPressure = exports.buildSessionContextSnapshot = exports.composeContext = exports.FilterEngine = exports.searchSessions = exports.CodexDatabase = exports.OpenCodeDatabase = exports.discoverDebugLogs = exports.collapseDuplicates = exports.filterByLevel = exports.parseDebugLog = exports.scanSubagentTraces = exports.findAllSessionsWithWorktrees = exports.discoverWorktreeSiblings = exports.resolveWorktreeMainRepo = exports.getAllClaudeProjectFolders = exports.decodeEncodedPath = exports.getMostRecentlyActiveSessionDir = exports.findSubdirectorySessionDirs = exports.findSessionsInDirectory = exports.findAllClaudeSessions = exports.findActiveClaudeSession = exports.discoverSessionDirectory = exports.getClaudeSessionDirectory = exports.encodeClaudeWorkspacePath = exports.detectSessionActivity = exports.extractTaskInfo = exports.scanSubagentDir = exports.normalizeCodexToolInput = exports.normalizeCodexToolName = exports.extractPatchFilePaths = exports.CodexRolloutParser = exports.parseDbPartData = exports.parseDbMessageData = exports.convertOpenCodeMessage = exports.detectPlanModeFromText = exports.normalizeToolInput = exports.normalizeToolName = exports.TRUNCATION_PATTERNS = exports.JsonlParser = exports.CodexProvider = exports.getOpenCodeDataDir = exports.OpenCodeProvider = exports.ClaudeCodeProvider = exports.getAllDetectedProviders = exports.detectProvider = exports.derivePendingUserRequestV1 = exports.createProviderSessionAdapterV1 = exports.renderHandoffUrlTemplate = void 0;
|
|
8
|
+
exports.scoreSessionQuality = exports.calculateQualityTrend = exports.PatternExtractor = exports.HeatmapTracker = exports.FrequencyTracker = exports.readErrorHistory = exports.getTopFailingTools = exports.appendErrorHistory = exports.MAX_ERROR_HISTORY_SESSIONS = exports.ERROR_HISTORY_SCHEMA_VERSION = exports.getSnapshotPath = exports.isSnapshotValid = exports.deleteSnapshot = exports.loadSnapshot = exports.saveSnapshot = exports.SessionMonitor = exports.parseTodoDependencies = exports.EventAggregator = exports.getRandomPhrase = exports.PHRASE_CATEGORIES = exports.ALL_PHRASES = exports.HIGHLIGHT_CSS = exports.clearHighlightCache = exports.highlightEvent = exports.formatSessionJson = exports.formatSessionMarkdown = exports.formatSessionText = exports.classifyNoise = exports.shouldMergeWithPrevious = exports.classifyFollowEvent = exports.classifyMessage = exports.getSoftNoiseReason = exports.isHardNoiseFollowEvent = exports.isHardNoise = exports.formatToolSummary = exports.formatTokenCount = exports.formatDurationMs = exports.createJsonlTail = exports.toFollowEvents = exports.createWatcher = exports.parseChangelog = exports.extractProposedPlanShared = exports.parsePlanMarkdownShared = exports.PlanExtractor = exports.segmentAssistantTurn = exports.reasoningSummary = exports.isAssistantTurnSubagentTool = exports.extractTurnSubagents = exports.assistantTurnEventsFromSessionEvents = exports.readSessionContextSnapshot = void 0;
|
|
9
|
+
exports.getCodexProfileHome = exports.getCodexProfilesDir = exports.readClaudeProfileIdentity = exports.isClaudeProfileAuthenticated = exports.claudeKeychainService = exports.claudeKeychainSuffix = exports.getClaudeProfileHome = exports.getClaudeProfilesDir = exports.getActiveAccountStatus = exports.removeSavedAccountProfile = exports.replaceSavedAccountProfiles = exports.setActiveSavedAccount = exports.upsertSavedAccountProfile = exports.getActiveSavedAccount = exports.listSavedAccountProfiles = exports.writeSavedAccountRegistry = exports.readSavedAccountRegistry = exports.getAccountsDir = exports.resolveClaudeLoginCommand = exports.listAllAccounts = exports.switchAccount = exports.spawnAccountLogin = exports.finalizeAccountLogin = exports.getAccountLoginStatus = exports.beginAccountLogin = exports.isMultiAccountEnabled = exports.resolveActiveClaudeAccount = exports.getActiveAccount = exports.listAccounts = exports.removeAccount = exports.reconcileClaudeAuthState = exports.applyActiveClaudeToLiveHome = exports.resolveActiveClaudeHome = exports.switchToAccount = exports.addCurrentAccount = exports.readActiveClaudeAccount = exports.writeAccountRegistry = exports.readAccountRegistry = exports.ensureDefaultAccounts = exports.readClaudeMaxAccessTokenSync = exports.readClaudeMaxCredentials = exports.writeActiveCredentials = exports.readActiveCredentials = exports.openInBrowser = exports.parseTranscriptFromEvents = exports.parseTranscript = exports.generateHtmlReport = exports.formatCompactionLedger = exports.calculateCompactionLedger = exports.calculateCodeImpact = void 0;
|
|
10
|
+
exports.selectStatuslineAccount = exports.formatStatusline = exports.estimateTimeToQuota = exports.BurnRateCalculator = exports.MultiProviderQuotaService = exports.resolveZaiQuota = exports.readZaiCredentials = exports.quotaStateFromZaiQuotaLimitPayload = exports.fetchZaiQuotaFromApi = exports.CodexQuotaWatcher = exports.resolveCodexQuotaFromLocalSources = exports.resolveCodexQuota = exports.readLatestCodexQuotaFromRollouts = exports.quotaFromCodexRateLimits = exports.fetchCodexQuotaFromApi = exports.fetchCodexResetCreditsFromApi = exports.getWorkspaceIdFromPath = exports.pruneQuotaHistory = exports.readQuotaHistoryDailyBuckets = exports.readQuotaHistoryRange = exports.appendQuotaHistorySample = exports.writeQuotaSnapshot = exports.readQuotaSnapshot = exports.QuotaPoller = exports.describeQuotaFailure = exports.withQuotaProjections = exports.projectQuotaWindow = exports.fetchQuota = exports.SEVEN_DAY_WINDOW_MS = exports.FIVE_HOUR_WINDOW_MS = exports.AutoSwitchController = exports.decideAutoSwitch = exports.DEFAULT_AUTO_SWITCH_CONFIG = exports.removeLauncher = exports.writeLauncher = exports.isShellHookInstalled = exports.uninstallShellHook = exports.installShellHook = exports.setTerminalActiveProfile = exports.removeCodexAccount = exports.switchToCodexAccount = exports.finalizeCodexAccount = exports.prepareCodexAccount = exports.getCodexExecutionEnv = exports.resolveSidekickCodexHome = exports.resolveActiveCodexAccount = exports.getActiveCodexAccount = exports.listCodexAccounts = exports.getSystemCodexHome = exports.getCodexMonitoringHomes = void 0;
|
|
11
|
+
exports.zaiProviderQuotaStateSchema = exports.codexProviderQuotaStateSchema = exports.claudeProviderQuotaStateSchema = exports.providerQuotaStateSchema = exports.runtimeQuotaProviderSchema = exports.quotaFailureDescriptorSchema = exports.peakHoursStateSchema = exports.codexResetCreditsSnapshotSchema = exports.codexResetCreditSchema = exports.quotaSourceSchema = exports.quotaProviderIdSchema = exports.quotaFailureKindSchema = exports.quotaStateSchema = exports.quotaWindowSchema = exports.extractSessionEvents = exports.permissionModeSchema = exports.sessionEventSchema = exports.sessionMessageSchema = exports.messageUsageSchema = exports.ToolCallTracker = exports.extractToolCalls = exports.extractToolCall = exports.extractErrorMessage = exports.categorizeError = exports.gatherAssetsForCwd = exports.codexSessions = exports.readCodexAssets = exports.claudeSessions = exports.readClaudeAssets = exports.extractCommands = exports.extractFilePaths = exports.extractUrls = exports.extractTokenUsage = exports.LITELLM_CATALOG_URL = exports.normalizeLiteLlmCatalog = exports.hydratePricingCatalog = exports.formatCost = exports.sortModelIds = exports.compareModelIds = exports.getModelDisplayInfo = exports.shortModelName = exports.mergeCostSources = exports.calculateCostWithProvenance = exports.calculateCostWithPricing = exports.calculateCost = exports.getModelInfo = exports.getModelPricing = exports.parseModelId = exports.DEFAULT_CONTEXT_WINDOW = exports.getModelContextWindowSize = void 0;
|
|
12
|
+
exports.scopePeakHoursToSessionProvider = exports.isClaudeCodeSessionProvider = exports.fetchPeakHoursStatus = exports.createPeakHoursNotApplicableState = exports.runDoctor = exports.getSessionDiagnostics = exports.formatHealthReport = exports.fetchOpenAIStatus = exports.fetchProviderStatus = exports.assistantTurnToolRefSchema = exports.assistantTurnToolGroupStepSchema = exports.assistantTurnTimelineItemSchema = exports.assistantTurnSubagentStatusSchema = exports.assistantTurnSubagentSchema = exports.assistantTurnReasoningTimelineItemSchema = exports.assistantTurnProjectionSchema = exports.assistantTurnProcessStepSchema = exports.assistantTurnProcessSchema = exports.assistantTurnNarrationStepSchema = exports.assistantTurnEventTypeSchema = exports.assistantTurnEventSchema = exports.listAllAccountsResultSchema = exports.savedAccountProfileSchema = exports.accountEntrySchema = exports.accountLoginStatusSchema = exports.beginAccountLoginResultSchema = exports.accountManagerResultSchema = exports.accountProviderIdSchema = exports.activeAccountStatusSchema = exports.activeProviderAccountStatusSchema = exports.quotaHistoryDailyBucketSchema = exports.quotaHistorySampleSchema = exports.quotaHistoryRuntimeProviderSchema = exports.providerQuotaMapSchema = void 0;
|
|
13
|
+
var usageNormalization_1 = require("./usageNormalization");
|
|
14
|
+
Object.defineProperty(exports, "normalizeProviderUsage", { enumerable: true, get: function () { return usageNormalization_1.normalizeProviderUsage; } });
|
|
15
|
+
Object.defineProperty(exports, "extractNormalizedUsage", { enumerable: true, get: function () { return usageNormalization_1.extractNormalizedUsage; } });
|
|
16
|
+
Object.defineProperty(exports, "calculateNormalizedUsageCost", { enumerable: true, get: function () { return usageNormalization_1.calculateNormalizedUsageCost; } });
|
|
17
|
+
var tokenEstimation_1 = require("./tokenEstimation");
|
|
18
|
+
Object.defineProperty(exports, "estimateTextTokens", { enumerable: true, get: function () { return tokenEstimation_1.estimateTextTokens; } });
|
|
19
|
+
Object.defineProperty(exports, "estimateSerializedTokens", { enumerable: true, get: function () { return tokenEstimation_1.estimateSerializedTokens; } });
|
|
20
|
+
var transcript_1 = require("./transcript");
|
|
21
|
+
Object.defineProperty(exports, "projectSessionTranscript", { enumerable: true, get: function () { return transcript_1.projectSessionTranscript; } });
|
|
22
|
+
var sessionTranscripts_1 = require("./sessionTranscripts");
|
|
23
|
+
Object.defineProperty(exports, "listRecentSessions", { enumerable: true, get: function () { return sessionTranscripts_1.listRecentSessions; } });
|
|
24
|
+
Object.defineProperty(exports, "readSessionTranscript", { enumerable: true, get: function () { return sessionTranscripts_1.readSessionTranscript; } });
|
|
25
|
+
var observedSessionCollector_1 = require("./observedSessionCollector");
|
|
26
|
+
Object.defineProperty(exports, "ObservedSessionCollector", { enumerable: true, get: function () { return observedSessionCollector_1.ObservedSessionCollector; } });
|
|
27
|
+
Object.defineProperty(exports, "observedSessionSourceFromProvider", { enumerable: true, get: function () { return observedSessionCollector_1.observedSessionSourceFromProvider; } });
|
|
28
|
+
Object.defineProperty(exports, "fileFingerprint", { enumerable: true, get: function () { return observedSessionCollector_1.fileFingerprint; } });
|
|
13
29
|
var codex_1 = require("./types/codex");
|
|
14
30
|
Object.defineProperty(exports, "isAggregateCodexLimit", { enumerable: true, get: function () { return codex_1.isAggregateCodexLimit; } });
|
|
15
31
|
var taskPersistence_1 = require("./types/taskPersistence");
|
|
@@ -25,6 +41,7 @@ var historicalData_1 = require("./types/historicalData");
|
|
|
25
41
|
Object.defineProperty(exports, "HISTORICAL_DATA_SCHEMA_VERSION", { enumerable: true, get: function () { return historicalData_1.HISTORICAL_DATA_SCHEMA_VERSION; } });
|
|
26
42
|
Object.defineProperty(exports, "HISTORICAL_SESSION_RETENTION_LIMIT", { enumerable: true, get: function () { return historicalData_1.HISTORICAL_SESSION_RETENTION_LIMIT; } });
|
|
27
43
|
Object.defineProperty(exports, "createEmptyTokenTotals", { enumerable: true, get: function () { return historicalData_1.createEmptyTokenTotals; } });
|
|
44
|
+
Object.defineProperty(exports, "createEmptyDataStore", { enumerable: true, get: function () { return historicalData_1.createEmptyDataStore; } });
|
|
28
45
|
var plan_1 = require("./types/plan");
|
|
29
46
|
Object.defineProperty(exports, "PLAN_SCHEMA_VERSION", { enumerable: true, get: function () { return plan_1.PLAN_SCHEMA_VERSION; } });
|
|
30
47
|
Object.defineProperty(exports, "MAX_PLANS_PER_PROJECT", { enumerable: true, get: function () { return plan_1.MAX_PLANS_PER_PROJECT; } });
|
|
@@ -213,6 +230,7 @@ Object.defineProperty(exports, "isSnapshotValid", { enumerable: true, get: funct
|
|
|
213
230
|
Object.defineProperty(exports, "getSnapshotPath", { enumerable: true, get: function () { return snapshot_1.getSnapshotPath; } });
|
|
214
231
|
var errorHistory_1 = require("./errorHistory");
|
|
215
232
|
Object.defineProperty(exports, "ERROR_HISTORY_SCHEMA_VERSION", { enumerable: true, get: function () { return errorHistory_1.ERROR_HISTORY_SCHEMA_VERSION; } });
|
|
233
|
+
Object.defineProperty(exports, "MAX_ERROR_HISTORY_SESSIONS", { enumerable: true, get: function () { return errorHistory_1.MAX_ERROR_HISTORY_SESSIONS; } });
|
|
216
234
|
Object.defineProperty(exports, "appendErrorHistory", { enumerable: true, get: function () { return errorHistory_1.appendErrorHistory; } });
|
|
217
235
|
Object.defineProperty(exports, "getTopFailingTools", { enumerable: true, get: function () { return errorHistory_1.getTopFailingTools; } });
|
|
218
236
|
Object.defineProperty(exports, "readErrorHistory", { enumerable: true, get: function () { return errorHistory_1.readErrorHistory; } });
|
package/dist/modelInfo.d.ts
CHANGED
|
@@ -24,16 +24,20 @@ export interface ModelPricing {
|
|
|
24
24
|
cacheWriteCostPerMillion: number;
|
|
25
25
|
cacheReadCostPerMillion: number;
|
|
26
26
|
}
|
|
27
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* Token usage for the legacy cost calculation contract.
|
|
29
|
+
* @deprecated Use NormalizedUsage and calculateNormalizedUsageCost. This shape
|
|
30
|
+
* cannot state whether reasoning is already included in output.
|
|
31
|
+
*/
|
|
28
32
|
export interface CostTokenUsage {
|
|
29
33
|
inputTokens: number;
|
|
30
34
|
outputTokens: number;
|
|
31
35
|
cacheWriteTokens: number;
|
|
32
36
|
cacheReadTokens: number;
|
|
33
37
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
38
|
+
* Legacy disjoint reasoning category. The compatibility calculator always
|
|
39
|
+
* adds it at the output rate, even when a provider already included it in
|
|
40
|
+
* output. Use NormalizedUsage to state inclusion semantics.
|
|
37
41
|
*/
|
|
38
42
|
reasoningTokens?: number;
|
|
39
43
|
}
|
|
@@ -55,7 +59,10 @@ export interface ModelInfo {
|
|
|
55
59
|
}
|
|
56
60
|
/** Provenance for a displayed cost value. */
|
|
57
61
|
export type CostSource = 'reported' | 'estimated' | 'unpriced';
|
|
58
|
-
/**
|
|
62
|
+
/**
|
|
63
|
+
* Input for the legacy cost calculation contract.
|
|
64
|
+
* @deprecated Use NormalizedUsageCostInput.
|
|
65
|
+
*/
|
|
59
66
|
export interface CostProvenanceInput {
|
|
60
67
|
usage: CostTokenUsage;
|
|
61
68
|
modelId: string;
|
|
@@ -128,8 +135,9 @@ export declare function getModelInfo(modelId: string): ModelInfo;
|
|
|
128
135
|
/**
|
|
129
136
|
* Calculates cost from token usage and an explicit pricing object.
|
|
130
137
|
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
138
|
+
* Legacy behavior treats reasoning as disjoint and adds it at the output rate.
|
|
139
|
+
* @deprecated Use calculateNormalizedUsageCost. This legacy function always
|
|
140
|
+
* adds reasoning to output and cannot represent provider inclusion semantics.
|
|
133
141
|
*/
|
|
134
142
|
export declare function calculateCostWithPricing(usage: CostTokenUsage, pricing: ModelPricing): number;
|
|
135
143
|
/**
|
|
@@ -137,11 +145,13 @@ export declare function calculateCostWithPricing(usage: CostTokenUsage, pricing:
|
|
|
137
145
|
*
|
|
138
146
|
* Returns `null` for unknown models. Callers should render `—` in that case,
|
|
139
147
|
* not $0 — so users don't confuse "missing pricing" with "free".
|
|
148
|
+
* @deprecated Use calculateNormalizedUsageCost.
|
|
140
149
|
*/
|
|
141
150
|
export declare function calculateCost(usage: CostTokenUsage, modelId: string): number | null;
|
|
142
151
|
/**
|
|
143
152
|
* Calculates cost while preserving whether the value was provider-reported,
|
|
144
153
|
* locally estimated from pricing, or unavailable because the model is unpriced.
|
|
154
|
+
* @deprecated Use calculateNormalizedUsageCost.
|
|
145
155
|
*/
|
|
146
156
|
export declare function calculateCostWithProvenance(input: CostProvenanceInput): CostWithProvenance;
|
|
147
157
|
/**
|
package/dist/modelInfo.js
CHANGED
|
@@ -142,6 +142,12 @@ const PRICING_TABLE = {
|
|
|
142
142
|
cacheWriteCostPerMillion: 6.25,
|
|
143
143
|
cacheReadCostPerMillion: 0.5,
|
|
144
144
|
},
|
|
145
|
+
'claude-opus-4-5': {
|
|
146
|
+
inputCostPerMillion: 5.0,
|
|
147
|
+
outputCostPerMillion: 25.0,
|
|
148
|
+
cacheWriteCostPerMillion: 6.25,
|
|
149
|
+
cacheReadCostPerMillion: 0.5,
|
|
150
|
+
},
|
|
145
151
|
'claude-opus-4.5': {
|
|
146
152
|
inputCostPerMillion: 5.0,
|
|
147
153
|
outputCostPerMillion: 25.0,
|
|
@@ -380,8 +386,9 @@ function getModelInfo(modelId) {
|
|
|
380
386
|
/**
|
|
381
387
|
* Calculates cost from token usage and an explicit pricing object.
|
|
382
388
|
*
|
|
383
|
-
*
|
|
384
|
-
*
|
|
389
|
+
* Legacy behavior treats reasoning as disjoint and adds it at the output rate.
|
|
390
|
+
* @deprecated Use calculateNormalizedUsageCost. This legacy function always
|
|
391
|
+
* adds reasoning to output and cannot represent provider inclusion semantics.
|
|
385
392
|
*/
|
|
386
393
|
function calculateCostWithPricing(usage, pricing) {
|
|
387
394
|
const reasoning = usage.reasoningTokens ?? 0;
|
|
@@ -396,6 +403,7 @@ function calculateCostWithPricing(usage, pricing) {
|
|
|
396
403
|
*
|
|
397
404
|
* Returns `null` for unknown models. Callers should render `—` in that case,
|
|
398
405
|
* not $0 — so users don't confuse "missing pricing" with "free".
|
|
406
|
+
* @deprecated Use calculateNormalizedUsageCost.
|
|
399
407
|
*/
|
|
400
408
|
function calculateCost(usage, modelId) {
|
|
401
409
|
const pricing = getModelPricing(modelId);
|
|
@@ -406,6 +414,7 @@ function calculateCost(usage, modelId) {
|
|
|
406
414
|
/**
|
|
407
415
|
* Calculates cost while preserving whether the value was provider-reported,
|
|
408
416
|
* locally estimated from pricing, or unavailable because the model is unpriced.
|
|
417
|
+
* @deprecated Use calculateNormalizedUsageCost.
|
|
409
418
|
*/
|
|
410
419
|
function calculateCostWithProvenance(input) {
|
|
411
420
|
if (typeof input.reportedCostUsd === 'number' && Number.isFinite(input.reportedCostUsd)) {
|