sidekick-shared 0.23.1 → 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 +115 -37
- package/dist/aggregation/EventAggregator.d.ts +5 -1
- package/dist/aggregation/EventAggregator.js +64 -131
- package/dist/aggregation/types.d.ts +3 -0
- package/dist/browser.d.ts +6 -0
- package/dist/browser.js +10 -1
- package/dist/context/sessionContext.js +8 -6
- package/dist/extractors/tokenUsage.js +1 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.js +23 -7
- package/dist/modelInfo.d.ts +17 -7
- package/dist/modelInfo.js +5 -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 +21 -6
- package/dist/parsers/openCodeParser.js +22 -1
- package/dist/parsers/subagentTraceParser.js +11 -5
- package/dist/providers/claudeCode.js +45 -1
- package/dist/providers/codex.js +17 -7
- 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/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/observedSessionV1.d.ts +3 -1
- package/dist/types/observedSessionV1.js +14 -1
- package/dist/types/sessionEvent.d.ts +65 -7
- package/dist/usageNormalization.d.ts +69 -0
- package/dist/usageNormalization.js +100 -0
- package/package.json +1 -1
|
@@ -19,8 +19,9 @@ const noiseClassifier_1 = require("../formatters/noiseClassifier");
|
|
|
19
19
|
const FrequencyTracker_1 = require("./FrequencyTracker");
|
|
20
20
|
const HeatmapTracker_1 = require("./HeatmapTracker");
|
|
21
21
|
const PatternExtractor_1 = require("./PatternExtractor");
|
|
22
|
-
const modelInfo_1 = require("../modelInfo");
|
|
23
22
|
const errorTaxonomy_1 = require("../extractors/errorTaxonomy");
|
|
23
|
+
const tokenEstimation_1 = require("../tokenEstimation");
|
|
24
|
+
const usageNormalization_1 = require("../usageNormalization");
|
|
24
25
|
// ── Defaults ──
|
|
25
26
|
const DEFAULT_TIMELINE_CAP = 200;
|
|
26
27
|
const DEFAULT_LATENCY_CAP = 100;
|
|
@@ -29,7 +30,7 @@ const DEFAULT_BURN_WINDOW_MS = 5 * 60_000;
|
|
|
29
30
|
const DEFAULT_BURN_SAMPLE_MS = 10_000;
|
|
30
31
|
const COMPACTION_DROP_THRESHOLD = 0.8; // >20% drop
|
|
31
32
|
/** Schema version for serialized snapshots. */
|
|
32
|
-
exports.SNAPSHOT_SCHEMA_VERSION =
|
|
33
|
+
exports.SNAPSHOT_SCHEMA_VERSION = 4;
|
|
33
34
|
// ── Goal gate detection regex ──
|
|
34
35
|
const GOAL_GATE_REGEX = /\b(CRITICAL|MUST|blocker|required|must.?complete|goal.?gate|essential|do.?not.?skip|blocking)\b/i;
|
|
35
36
|
// ── Todo dependency parsing ──
|
|
@@ -75,6 +76,8 @@ class EventAggregator {
|
|
|
75
76
|
outputTokens = 0;
|
|
76
77
|
cacheWriteTokens = 0;
|
|
77
78
|
cacheReadTokens = 0;
|
|
79
|
+
reasoningTokens = 0;
|
|
80
|
+
totalTokens = 0;
|
|
78
81
|
reportedCost = 0;
|
|
79
82
|
// Per-model usage
|
|
80
83
|
modelUsage = new Map();
|
|
@@ -168,22 +171,25 @@ class EventAggregator {
|
|
|
168
171
|
this.sessionStartTime = event.timestamp;
|
|
169
172
|
}
|
|
170
173
|
this.lastEventTime = event.timestamp;
|
|
171
|
-
|
|
174
|
+
this.recordProviderMetadata(event);
|
|
175
|
+
// Bookkeeping rows can be useful without a message payload.
|
|
172
176
|
if (!event.message) {
|
|
173
177
|
if (event.type === 'summary') {
|
|
174
178
|
this.recordExplicitCompaction(event.timestamp, event.compaction);
|
|
175
|
-
this.addTimelineFromSessionEvent(event);
|
|
176
179
|
}
|
|
180
|
+
this.trackPermissionMode(event);
|
|
181
|
+
this.addTimelineFromSessionEvent(event);
|
|
182
|
+
this.feedAnalytics(event.timestamp, event.type === 'summary' ? (event.summary ?? '') : '', this.extractToolNameFromEvent(event));
|
|
177
183
|
return;
|
|
178
184
|
}
|
|
179
185
|
// 2. Track model
|
|
180
186
|
if (event.message.model) {
|
|
181
187
|
this.currentModel = event.message.model;
|
|
182
188
|
}
|
|
183
|
-
this.recordProviderMetadata(event);
|
|
184
189
|
// 3. Skip system/audit events and synthetic token-count events for messageCount
|
|
185
190
|
const msgId = event.message.id ?? '';
|
|
186
|
-
if (event.type
|
|
191
|
+
if ((event.type === 'user' || event.type === 'assistant') &&
|
|
192
|
+
!msgId.startsWith('token-count-')) {
|
|
187
193
|
this.messageCount++;
|
|
188
194
|
}
|
|
189
195
|
// 4. Latency tracking
|
|
@@ -191,9 +197,10 @@ class EventAggregator {
|
|
|
191
197
|
this.processLatency(event);
|
|
192
198
|
}
|
|
193
199
|
// 5. Token accumulation
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
this.
|
|
200
|
+
const normalizedUsage = (0, usageNormalization_1.extractNormalizedUsage)(event);
|
|
201
|
+
if (normalizedUsage) {
|
|
202
|
+
const usageCost = this.accumulateUsage(normalizedUsage, event.timestamp, event.message.model);
|
|
203
|
+
this.attributePlanUsage(normalizedUsage.totalTokens, usageCost);
|
|
197
204
|
}
|
|
198
205
|
if (event.type !== 'system') {
|
|
199
206
|
// 6. Tool extraction from content blocks
|
|
@@ -239,91 +246,25 @@ class EventAggregator {
|
|
|
239
246
|
}
|
|
240
247
|
// 3. Token accumulation from FollowEvent fields
|
|
241
248
|
if (event.tokens) {
|
|
242
|
-
const
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
contextSize = this.computeContextSize({
|
|
257
|
-
inputTokens: inputTok,
|
|
258
|
-
outputTokens: outputTok,
|
|
259
|
-
cacheWriteTokens: cacheWrite,
|
|
260
|
-
cacheReadTokens: cacheRead,
|
|
261
|
-
});
|
|
262
|
-
}
|
|
263
|
-
else {
|
|
264
|
-
contextSize = inputTok + cacheWrite + cacheRead;
|
|
265
|
-
}
|
|
266
|
-
// Compaction detection
|
|
267
|
-
if (this.resolvePendingHeuristicCompaction(contextSize)) {
|
|
268
|
-
// The drop belongs to the explicit compaction marker just recorded.
|
|
269
|
-
}
|
|
270
|
-
else if (this.previousContextSize > 0 &&
|
|
271
|
-
contextSize < this.previousContextSize * COMPACTION_DROP_THRESHOLD) {
|
|
272
|
-
this.compactionEvents.push({
|
|
273
|
-
timestamp: new Date(event.timestamp),
|
|
274
|
-
contextBefore: this.previousContextSize,
|
|
275
|
-
contextAfter: contextSize,
|
|
276
|
-
tokensReclaimed: this.previousContextSize - contextSize,
|
|
277
|
-
source: 'heuristic',
|
|
278
|
-
});
|
|
279
|
-
}
|
|
280
|
-
this.previousContextSize = contextSize;
|
|
281
|
-
this.currentContextSize = contextSize;
|
|
282
|
-
// Per-model usage. If the provider reported a cost, use it; otherwise
|
|
283
|
-
// resolve pricing from the catalog (null = unpriced → priced: false,
|
|
284
|
-
// UI renders "—").
|
|
285
|
-
if (event.model) {
|
|
286
|
-
const model = event.model;
|
|
287
|
-
const pricing = event.cost ? null : (0, modelInfo_1.getModelPricing)(model);
|
|
288
|
-
const computed = event.cost
|
|
289
|
-
? event.cost
|
|
290
|
-
: pricing
|
|
291
|
-
? (0, modelInfo_1.calculateCostWithPricing)({
|
|
292
|
-
inputTokens: inputTok,
|
|
293
|
-
outputTokens: outputTok,
|
|
294
|
-
cacheWriteTokens: cacheWrite,
|
|
295
|
-
cacheReadTokens: cacheRead,
|
|
296
|
-
}, pricing)
|
|
297
|
-
: 0;
|
|
298
|
-
const evPriced = event.cost != null || pricing != null;
|
|
299
|
-
const acc = this.modelUsage.get(model) ?? {
|
|
300
|
-
calls: 0,
|
|
301
|
-
tokens: 0,
|
|
302
|
-
inputTokens: 0,
|
|
303
|
-
outputTokens: 0,
|
|
304
|
-
cacheWriteTokens: 0,
|
|
305
|
-
cacheReadTokens: 0,
|
|
306
|
-
cost: 0,
|
|
307
|
-
priced: true,
|
|
308
|
-
};
|
|
309
|
-
acc.calls++;
|
|
310
|
-
acc.tokens += inputTok + outputTok + cacheWrite + cacheRead;
|
|
311
|
-
acc.inputTokens += inputTok;
|
|
312
|
-
acc.outputTokens += outputTok;
|
|
313
|
-
acc.cacheWriteTokens += cacheWrite;
|
|
314
|
-
acc.cacheReadTokens += cacheRead;
|
|
315
|
-
acc.cost += computed;
|
|
316
|
-
if (!evPriced)
|
|
317
|
-
acc.priced = false;
|
|
318
|
-
this.modelUsage.set(model, acc);
|
|
319
|
-
}
|
|
249
|
+
const normalized = (0, usageNormalization_1.normalizeProviderUsage)({
|
|
250
|
+
semantics: 'sidekick',
|
|
251
|
+
provider: event.providerId,
|
|
252
|
+
source: 'follow-event',
|
|
253
|
+
model: event.model,
|
|
254
|
+
inputTokens: event.tokens.input,
|
|
255
|
+
outputTokens: event.tokens.output,
|
|
256
|
+
cacheReadTokens: event.cacheTokens?.read,
|
|
257
|
+
cacheWriteTokens: event.cacheTokens?.write,
|
|
258
|
+
reasoningIncludedInOutput: false,
|
|
259
|
+
reportedCostUsd: event.cost,
|
|
260
|
+
});
|
|
261
|
+
const cost = this.accumulateUsage(normalized, event.timestamp, event.model);
|
|
262
|
+
this.attributePlanUsage(normalized.totalTokens, cost);
|
|
320
263
|
}
|
|
321
|
-
|
|
322
|
-
|
|
264
|
+
else if (typeof event.cost === 'number' && Number.isFinite(event.cost) && event.cost >= 0) {
|
|
265
|
+
// Compatibility for cost-only follow events.
|
|
323
266
|
this.reportedCost += event.cost;
|
|
324
267
|
}
|
|
325
|
-
// Burn rate sampling
|
|
326
|
-
this.updateBurnRate(event.timestamp);
|
|
327
268
|
// 4. Tool tracking from FollowEvent
|
|
328
269
|
if (event.type === 'tool_use' && event.toolName) {
|
|
329
270
|
this.recordFollowToolUse(event);
|
|
@@ -366,6 +307,8 @@ class EventAggregator {
|
|
|
366
307
|
outputTokens: this.outputTokens,
|
|
367
308
|
cacheWriteTokens: this.cacheWriteTokens,
|
|
368
309
|
cacheReadTokens: this.cacheReadTokens,
|
|
310
|
+
reasoningTokens: this.reasoningTokens,
|
|
311
|
+
totalTokens: this.totalTokens,
|
|
369
312
|
reportedCost: this.reportedCost,
|
|
370
313
|
};
|
|
371
314
|
}
|
|
@@ -482,6 +425,8 @@ class EventAggregator {
|
|
|
482
425
|
this.outputTokens = 0;
|
|
483
426
|
this.cacheWriteTokens = 0;
|
|
484
427
|
this.cacheReadTokens = 0;
|
|
428
|
+
this.reasoningTokens = 0;
|
|
429
|
+
this.totalTokens = 0;
|
|
485
430
|
this.reportedCost = 0;
|
|
486
431
|
this.modelUsage.clear();
|
|
487
432
|
this.currentContextSize = 0;
|
|
@@ -556,6 +501,8 @@ class EventAggregator {
|
|
|
556
501
|
output: this.outputTokens,
|
|
557
502
|
cacheWrite: this.cacheWriteTokens,
|
|
558
503
|
cacheRead: this.cacheReadTokens,
|
|
504
|
+
reasoning: this.reasoningTokens,
|
|
505
|
+
total: this.totalTokens,
|
|
559
506
|
reportedCost: this.reportedCost,
|
|
560
507
|
},
|
|
561
508
|
modelUsage: Array.from(this.modelUsage.entries()),
|
|
@@ -601,6 +548,8 @@ class EventAggregator {
|
|
|
601
548
|
this.outputTokens = state.tokens.output;
|
|
602
549
|
this.cacheWriteTokens = state.tokens.cacheWrite;
|
|
603
550
|
this.cacheReadTokens = state.tokens.cacheRead;
|
|
551
|
+
this.reasoningTokens = state.tokens.reasoning;
|
|
552
|
+
this.totalTokens = state.tokens.total;
|
|
604
553
|
this.reportedCost = state.tokens.reportedCost;
|
|
605
554
|
this.modelUsage = new Map(state.modelUsage);
|
|
606
555
|
this.currentContextSize = state.contextSize;
|
|
@@ -655,41 +604,24 @@ class EventAggregator {
|
|
|
655
604
|
// Private: Token & Context
|
|
656
605
|
// ═══════════════════════════════════════════════════════════════════════
|
|
657
606
|
accumulateUsage(usage, timestamp, model) {
|
|
658
|
-
const inputTok = usage.
|
|
659
|
-
const outputTok = usage.
|
|
660
|
-
const cacheWrite = usage.
|
|
661
|
-
const cacheRead = usage.
|
|
662
|
-
const reasoningTok = usage.
|
|
663
|
-
const reported = usage.reported_cost ?? 0;
|
|
664
|
-
// Resolve provider pricing when we have a model ID. Lets sessions with no
|
|
665
|
-
// reported_cost (Claude Code, Codex) still show real dollar figures.
|
|
607
|
+
const inputTok = usage.uncachedInputTokens;
|
|
608
|
+
const outputTok = usage.outputTokens;
|
|
609
|
+
const cacheWrite = usage.cacheWriteTokens;
|
|
610
|
+
const cacheRead = usage.cacheReadTokens;
|
|
611
|
+
const reasoningTok = usage.reasoningTokens;
|
|
666
612
|
const modelKey = model ?? this.currentModel;
|
|
667
|
-
const
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
if (reported > 0) {
|
|
671
|
-
cost = reported;
|
|
672
|
-
}
|
|
673
|
-
else if (pricing) {
|
|
674
|
-
cost = (0, modelInfo_1.calculateCostWithPricing)({
|
|
675
|
-
inputTokens: inputTok,
|
|
676
|
-
outputTokens: outputTok,
|
|
677
|
-
cacheWriteTokens: cacheWrite,
|
|
678
|
-
cacheReadTokens: cacheRead,
|
|
679
|
-
reasoningTokens: reasoningTok,
|
|
680
|
-
}, pricing);
|
|
681
|
-
}
|
|
682
|
-
else {
|
|
683
|
-
cost = 0;
|
|
684
|
-
priced = false;
|
|
685
|
-
}
|
|
613
|
+
const pricedUsage = (0, usageNormalization_1.calculateNormalizedUsageCost)({ usage, modelId: modelKey ?? undefined });
|
|
614
|
+
const priced = pricedUsage.source !== 'unpriced';
|
|
615
|
+
const cost = pricedUsage.costUsd ?? 0;
|
|
686
616
|
this.inputTokens += inputTok;
|
|
687
617
|
this.outputTokens += outputTok;
|
|
688
618
|
this.cacheWriteTokens += cacheWrite;
|
|
689
619
|
this.cacheReadTokens += cacheRead;
|
|
620
|
+
this.reasoningTokens += reasoningTok;
|
|
621
|
+
this.totalTokens += usage.totalTokens;
|
|
690
622
|
this.reportedCost += cost;
|
|
691
623
|
// Burn rate sample accumulation
|
|
692
|
-
this.tokensSinceLastSample +=
|
|
624
|
+
this.tokensSinceLastSample += usage.totalTokens;
|
|
693
625
|
// Context size computation
|
|
694
626
|
let contextSize;
|
|
695
627
|
if (this.computeContextSize) {
|
|
@@ -698,7 +630,7 @@ class EventAggregator {
|
|
|
698
630
|
outputTokens: outputTok,
|
|
699
631
|
cacheWriteTokens: cacheWrite,
|
|
700
632
|
cacheReadTokens: cacheRead,
|
|
701
|
-
reasoningTokens:
|
|
633
|
+
reasoningTokens: reasoningTok,
|
|
702
634
|
});
|
|
703
635
|
}
|
|
704
636
|
else {
|
|
@@ -744,7 +676,7 @@ class EventAggregator {
|
|
|
744
676
|
priced: true,
|
|
745
677
|
};
|
|
746
678
|
acc.calls++;
|
|
747
|
-
acc.tokens +=
|
|
679
|
+
acc.tokens += usage.totalTokens;
|
|
748
680
|
acc.inputTokens += inputTok;
|
|
749
681
|
acc.outputTokens += outputTok;
|
|
750
682
|
acc.cacheWriteTokens += cacheWrite;
|
|
@@ -821,7 +753,7 @@ class EventAggregator {
|
|
|
821
753
|
// Private: Tool Extraction from SessionEvent content blocks
|
|
822
754
|
// ═══════════════════════════════════════════════════════════════════════
|
|
823
755
|
extractToolsFromContent(event) {
|
|
824
|
-
const content = event.message
|
|
756
|
+
const content = event.message?.content;
|
|
825
757
|
if (!Array.isArray(content))
|
|
826
758
|
return;
|
|
827
759
|
for (const block of content) {
|
|
@@ -974,7 +906,7 @@ class EventAggregator {
|
|
|
974
906
|
this.finishReasons.set(reason, (this.finishReasons.get(reason) ?? 0) + 1);
|
|
975
907
|
}
|
|
976
908
|
if (metadata.providerError) {
|
|
977
|
-
this.recordError('ProviderAPI', (0, errorTaxonomy_1.categorizeError)(metadata.providerError, metadata.providerError.type), event.timestamp, event.message
|
|
909
|
+
this.recordError('ProviderAPI', (0, errorTaxonomy_1.categorizeError)(metadata.providerError, metadata.providerError.type), event.timestamp, event.message?.model ?? this.currentModel ?? 'unknown');
|
|
978
910
|
}
|
|
979
911
|
}
|
|
980
912
|
recordError(tool, category, timestamp, model) {
|
|
@@ -1078,7 +1010,7 @@ class EventAggregator {
|
|
|
1078
1010
|
// Private: Task State from SessionEvent
|
|
1079
1011
|
// ═══════════════════════════════════════════════════════════════════════
|
|
1080
1012
|
extractTaskStateFromEvent(event) {
|
|
1081
|
-
const content = event.message
|
|
1013
|
+
const content = event.message?.content;
|
|
1082
1014
|
if (!Array.isArray(content))
|
|
1083
1015
|
return;
|
|
1084
1016
|
for (const block of content) {
|
|
@@ -1493,7 +1425,7 @@ class EventAggregator {
|
|
|
1493
1425
|
// Private: Subagent Tracking from SessionEvent
|
|
1494
1426
|
// ═══════════════════════════════════════════════════════════════════════
|
|
1495
1427
|
extractSubagentFromEvent(event) {
|
|
1496
|
-
const content = event.message
|
|
1428
|
+
const content = event.message?.content;
|
|
1497
1429
|
if (!Array.isArray(content))
|
|
1498
1430
|
return;
|
|
1499
1431
|
for (const block of content) {
|
|
@@ -1659,7 +1591,7 @@ class EventAggregator {
|
|
|
1659
1591
|
// Private: Context Attribution from SessionEvent
|
|
1660
1592
|
// ═══════════════════════════════════════════════════════════════════════
|
|
1661
1593
|
attributeContextFromEvent(event) {
|
|
1662
|
-
const content = event.message
|
|
1594
|
+
const content = event.message?.content;
|
|
1663
1595
|
if (event.type === 'user') {
|
|
1664
1596
|
if (Array.isArray(content)) {
|
|
1665
1597
|
for (const block of content) {
|
|
@@ -1866,7 +1798,8 @@ class EventAggregator {
|
|
|
1866
1798
|
break;
|
|
1867
1799
|
case 'system':
|
|
1868
1800
|
tlType = 'session_start';
|
|
1869
|
-
description =
|
|
1801
|
+
description =
|
|
1802
|
+
this.extractTextContent(event) ?? event.message?.sourceLabel ?? 'System event';
|
|
1870
1803
|
noiseLevel = 'system';
|
|
1871
1804
|
break;
|
|
1872
1805
|
default:
|
|
@@ -1958,10 +1891,10 @@ class EventAggregator {
|
|
|
1958
1891
|
// Private: Helper methods
|
|
1959
1892
|
// ═══════════════════════════════════════════════════════════════════════
|
|
1960
1893
|
estimateTokens(text) {
|
|
1961
|
-
return
|
|
1894
|
+
return (0, tokenEstimation_1.estimateTextTokens)(text).count;
|
|
1962
1895
|
}
|
|
1963
1896
|
hasTextContent(event) {
|
|
1964
|
-
const content = event.message
|
|
1897
|
+
const content = event.message?.content;
|
|
1965
1898
|
if (typeof content === 'string')
|
|
1966
1899
|
return content.length > 0;
|
|
1967
1900
|
if (Array.isArray(content)) {
|
|
@@ -1970,7 +1903,7 @@ class EventAggregator {
|
|
|
1970
1903
|
return false;
|
|
1971
1904
|
}
|
|
1972
1905
|
extractTextContent(event) {
|
|
1973
|
-
const content = event.message
|
|
1906
|
+
const content = event.message?.content;
|
|
1974
1907
|
if (typeof content === 'string')
|
|
1975
1908
|
return content;
|
|
1976
1909
|
if (Array.isArray(content)) {
|
|
@@ -1999,7 +1932,7 @@ class EventAggregator {
|
|
|
1999
1932
|
// Private: Gonzo/Lazyjournal analytics
|
|
2000
1933
|
// ═══════════════════════════════════════════════════════════════════════
|
|
2001
1934
|
extractToolNameFromEvent(event) {
|
|
2002
|
-
const content = event.message
|
|
1935
|
+
const content = event.message?.content;
|
|
2003
1936
|
if (!Array.isArray(content))
|
|
2004
1937
|
return undefined;
|
|
2005
1938
|
for (const block of content) {
|
|
@@ -56,6 +56,9 @@ export interface AggregatedTokens {
|
|
|
56
56
|
outputTokens: number;
|
|
57
57
|
cacheWriteTokens: number;
|
|
58
58
|
cacheReadTokens: number;
|
|
59
|
+
reasoningTokens: number;
|
|
60
|
+
/** Overall total after applying provider reasoning-in-output semantics. */
|
|
61
|
+
totalTokens: number;
|
|
59
62
|
reportedCost: number;
|
|
60
63
|
}
|
|
61
64
|
/** Per-model usage breakdown. */
|
package/dist/browser.d.ts
CHANGED
|
@@ -8,6 +8,12 @@
|
|
|
8
8
|
* For pricing hydration (LiteLLM catalog refresh), use `sidekick-shared/node`.
|
|
9
9
|
*/
|
|
10
10
|
export { getModelContextWindowSize, DEFAULT_CONTEXT_WINDOW } from './modelContext';
|
|
11
|
+
export { normalizeProviderUsage, extractNormalizedUsage, calculateNormalizedUsageCost, } from './usageNormalization';
|
|
12
|
+
export type { UsageProvider, UsageSemantics, UsageNormalizationProvenance, ProviderUsageInput, AnthropicUsageInput, OpenAIUsageInput, SidekickUsageInput, NormalizedUsage, PricingProvenance, NormalizedUsageCostInput, NormalizedUsageCost, } from './usageNormalization';
|
|
13
|
+
export { estimateTextTokens, estimateSerializedTokens } from './tokenEstimation';
|
|
14
|
+
export type { ExactTokenCounterContext, ExactTokenCounter, TokenEstimationMethod, TokenEstimationConfidence, TokenEstimationOptions, TokenEstimate, } from './tokenEstimation';
|
|
15
|
+
export { projectSessionTranscript } from './transcript';
|
|
16
|
+
export type { TranscriptFidelity, TranscriptSourceProvenance, CanonicalTranscriptBlock, CanonicalTranscriptMessage, CanonicalToolCall, CanonicalTranscriptUsageTotals, CanonicalSessionTranscript, ProjectSessionTranscriptOptions, } from './transcript';
|
|
11
17
|
export { formatDurationMs, formatTokenCount } from './formatting';
|
|
12
18
|
export type { FormatDurationMsOptions, FormatTokenCountOptions } from './formatting';
|
|
13
19
|
export { buildSessionContextSnapshot, calculateSessionContextPressure, createSessionContextProjector, } from './context/sessionContext';
|
package/dist/browser.js
CHANGED
|
@@ -9,10 +9,19 @@
|
|
|
9
9
|
* For pricing hydration (LiteLLM catalog refresh), use `sidekick-shared/node`.
|
|
10
10
|
*/
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
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.segmentAssistantTurn = exports.reasoningSummary = exports.isAssistantTurnSubagentTool = exports.extractTurnSubagents = exports.assistantTurnEventsFromSessionEvents = exports.createSessionContextProjector = exports.calculateSessionContextPressure = exports.buildSessionContextSnapshot = exports.formatTokenCount = exports.formatDurationMs = exports.DEFAULT_CONTEXT_WINDOW = exports.getModelContextWindowSize = void 0;
|
|
12
|
+
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.segmentAssistantTurn = exports.reasoningSummary = exports.isAssistantTurnSubagentTool = exports.extractTurnSubagents = exports.assistantTurnEventsFromSessionEvents = exports.createSessionContextProjector = exports.calculateSessionContextPressure = exports.buildSessionContextSnapshot = exports.formatTokenCount = exports.formatDurationMs = exports.projectSessionTranscript = exports.estimateSerializedTokens = exports.estimateTextTokens = exports.calculateNormalizedUsageCost = exports.extractNormalizedUsage = exports.normalizeProviderUsage = exports.DEFAULT_CONTEXT_WINDOW = exports.getModelContextWindowSize = void 0;
|
|
13
13
|
var modelContext_1 = require("./modelContext");
|
|
14
14
|
Object.defineProperty(exports, "getModelContextWindowSize", { enumerable: true, get: function () { return modelContext_1.getModelContextWindowSize; } });
|
|
15
15
|
Object.defineProperty(exports, "DEFAULT_CONTEXT_WINDOW", { enumerable: true, get: function () { return modelContext_1.DEFAULT_CONTEXT_WINDOW; } });
|
|
16
|
+
var usageNormalization_1 = require("./usageNormalization");
|
|
17
|
+
Object.defineProperty(exports, "normalizeProviderUsage", { enumerable: true, get: function () { return usageNormalization_1.normalizeProviderUsage; } });
|
|
18
|
+
Object.defineProperty(exports, "extractNormalizedUsage", { enumerable: true, get: function () { return usageNormalization_1.extractNormalizedUsage; } });
|
|
19
|
+
Object.defineProperty(exports, "calculateNormalizedUsageCost", { enumerable: true, get: function () { return usageNormalization_1.calculateNormalizedUsageCost; } });
|
|
20
|
+
var tokenEstimation_1 = require("./tokenEstimation");
|
|
21
|
+
Object.defineProperty(exports, "estimateTextTokens", { enumerable: true, get: function () { return tokenEstimation_1.estimateTextTokens; } });
|
|
22
|
+
Object.defineProperty(exports, "estimateSerializedTokens", { enumerable: true, get: function () { return tokenEstimation_1.estimateSerializedTokens; } });
|
|
23
|
+
var transcript_1 = require("./transcript");
|
|
24
|
+
Object.defineProperty(exports, "projectSessionTranscript", { enumerable: true, get: function () { return transcript_1.projectSessionTranscript; } });
|
|
16
25
|
var formatting_1 = require("./formatting");
|
|
17
26
|
Object.defineProperty(exports, "formatDurationMs", { enumerable: true, get: function () { return formatting_1.formatDurationMs; } });
|
|
18
27
|
Object.defineProperty(exports, "formatTokenCount", { enumerable: true, get: function () { return formatting_1.formatTokenCount; } });
|
|
@@ -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;
|
|
@@ -209,16 +210,17 @@ function extractSourcesFromEvent(event, state) {
|
|
|
209
210
|
}
|
|
210
211
|
}
|
|
211
212
|
function extractSystemSource(event, state) {
|
|
212
|
-
const
|
|
213
|
-
const
|
|
214
|
-
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;
|
|
215
217
|
if (text) {
|
|
216
218
|
addSource(state, {
|
|
217
219
|
event,
|
|
218
220
|
layer: 'system',
|
|
219
221
|
sourceType: 'system',
|
|
220
222
|
title: label,
|
|
221
|
-
sourceRef:
|
|
223
|
+
sourceRef: message?.id,
|
|
222
224
|
text,
|
|
223
225
|
});
|
|
224
226
|
}
|
|
@@ -228,7 +230,7 @@ function extractSystemSource(event, state) {
|
|
|
228
230
|
layer: 'runtime',
|
|
229
231
|
sourceType: event.rateLimits ? 'rate_limit' : 'runtime',
|
|
230
232
|
title: event.rateLimits ? 'Runtime usage and rate limits' : 'Runtime usage',
|
|
231
|
-
sourceRef:
|
|
233
|
+
sourceRef: message?.id,
|
|
232
234
|
text: describeUsage(usage, event.rateLimits),
|
|
233
235
|
metadata: {
|
|
234
236
|
usage,
|
|
@@ -545,7 +547,7 @@ function truncateWithInfo(text, maxChars) {
|
|
|
545
547
|
return { text: `${text.slice(0, maxChars - 3)}...`, truncated: true };
|
|
546
548
|
}
|
|
547
549
|
function estimateTokens(text) {
|
|
548
|
-
return
|
|
550
|
+
return (0, tokenEstimation_1.estimateTextTokens)(text).count;
|
|
549
551
|
}
|
|
550
552
|
function isRecord(value) {
|
|
551
553
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
@@ -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,
|
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';
|
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 = exports.listAllAccountsResultSchema = exports.savedAccountProfileSchema = 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");
|