oc2token 0.1.0 → 0.1.2

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.
Files changed (71) hide show
  1. package/README.md +40 -15
  2. package/dist/src/accounting/index.d.ts +1 -1
  3. package/dist/src/accounting/index.js +1 -1
  4. package/dist/src/accounting/index.js.map +1 -1
  5. package/dist/src/accounting/reducer.d.ts +1 -2
  6. package/dist/src/accounting/reducer.js +0 -22
  7. package/dist/src/accounting/reducer.js.map +1 -1
  8. package/dist/src/antigravity/discovery.d.ts +4 -0
  9. package/dist/src/antigravity/discovery.js +25 -2
  10. package/dist/src/antigravity/discovery.js.map +1 -1
  11. package/dist/src/antigravity/scanner.js +167 -156
  12. package/dist/src/antigravity/scanner.js.map +1 -1
  13. package/dist/src/application.js +87 -75
  14. package/dist/src/application.js.map +1 -1
  15. package/dist/src/cache/lock.js +4 -1
  16. package/dist/src/cache/lock.js.map +1 -1
  17. package/dist/src/cache/schema.js +13 -1
  18. package/dist/src/cache/schema.js.map +1 -1
  19. package/dist/src/cache/store.d.ts +1 -0
  20. package/dist/src/cache/store.js +27 -0
  21. package/dist/src/cache/store.js.map +1 -1
  22. package/dist/src/cli.js +174 -46
  23. package/dist/src/cli.js.map +1 -1
  24. package/dist/src/codex/discovery.d.ts +4 -0
  25. package/dist/src/codex/discovery.js +59 -47
  26. package/dist/src/codex/discovery.js.map +1 -1
  27. package/dist/src/codex/scanner.js +37 -11
  28. package/dist/src/codex/scanner.js.map +1 -1
  29. package/dist/src/collector/collector.js +44 -14
  30. package/dist/src/collector/collector.js.map +1 -1
  31. package/dist/src/collector/types.d.ts +8 -0
  32. package/dist/src/collector/types.js.map +1 -1
  33. package/dist/src/dashboard/render/dashboard.js +19 -6
  34. package/dist/src/dashboard/render/dashboard.js.map +1 -1
  35. package/dist/src/dashboard/render/format.d.ts +4 -0
  36. package/dist/src/dashboard/render/format.js +9 -0
  37. package/dist/src/dashboard/render/format.js.map +1 -1
  38. package/dist/src/dashboard/render/types.d.ts +14 -0
  39. package/dist/src/dashboard/render/types.js +40 -13
  40. package/dist/src/dashboard/render/types.js.map +1 -1
  41. package/dist/src/dashboard/scheduler/refresh-scheduler.js +2 -1
  42. package/dist/src/dashboard/scheduler/refresh-scheduler.js.map +1 -1
  43. package/dist/src/dashboard/settings/index.js +29 -4
  44. package/dist/src/dashboard/settings/index.js.map +1 -1
  45. package/dist/src/dashboard/state/refresh-coordinator.d.ts +7 -0
  46. package/dist/src/dashboard/state/refresh-coordinator.js +30 -0
  47. package/dist/src/dashboard/state/refresh-coordinator.js.map +1 -1
  48. package/dist/src/domain/records.d.ts +15 -1
  49. package/dist/src/domain/records.js +15 -1
  50. package/dist/src/domain/records.js.map +1 -1
  51. package/dist/src/domain/tokens.d.ts +12 -0
  52. package/dist/src/domain/tokens.js +19 -3
  53. package/dist/src/domain/tokens.js.map +1 -1
  54. package/dist/src/domain/windows.js +37 -13
  55. package/dist/src/domain/windows.js.map +1 -1
  56. package/dist/src/opencode/adapter.js +12 -3
  57. package/dist/src/opencode/adapter.js.map +1 -1
  58. package/dist/src/opencode/client.d.ts +10 -0
  59. package/dist/src/opencode/client.js +17 -3
  60. package/dist/src/opencode/client.js.map +1 -1
  61. package/dist/src/opencode/stats.js +33 -9
  62. package/dist/src/opencode/stats.js.map +1 -1
  63. package/dist/src/opencode/transport.d.ts +10 -0
  64. package/dist/src/opencode/transport.js +23 -9
  65. package/dist/src/opencode/transport.js.map +1 -1
  66. package/dist/src/output/table.js +6 -2
  67. package/dist/src/output/table.js.map +1 -1
  68. package/dist/src/pricing/pricing.d.ts +30 -0
  69. package/dist/src/pricing/pricing.js +67 -27
  70. package/dist/src/pricing/pricing.js.map +1 -1
  71. package/package.json +32 -7
@@ -5,7 +5,7 @@ import { containsInstant, createUsageRecord, sumUsageRecords } from "../domain/i
5
5
  import { UsageRecordReducer } from "../accounting/reducer.js";
6
6
  import { DomainError, cancellationError, isCancellationError, toCollectionError, } from "../domain/index.js";
7
7
  import { discoverAntigravityDatabases } from "./discovery.js";
8
- import { antigravitySqliteCreatedAt, antigravitySqliteModel, antigravitySqliteResponseId, firstProtoField, parseProtoFields, protoFieldBytes, protoFieldPositiveInteger, } from "./proto.js";
8
+ import { antigravitySqliteCreatedAt, antigravitySqliteMetadataAttributes, antigravitySqliteModel, antigravitySqliteResponseId, firstProtoField, parseProtoFields, protoFieldBytes, protoFieldPositiveInteger, } from "./proto.js";
9
9
  // SQLite driver lazy loading — mirrors codeburn loadDriver/isSqliteAvailable
10
10
  let CachedDatabaseSync = undefined;
11
11
  let loadAttempted = false;
@@ -236,6 +236,8 @@ export async function collectAntigravity(request) {
236
236
  // ignore
237
237
  }
238
238
  retried = true;
239
+ // A successful open-retry is retried work: surface it in coverage.
240
+ mutable.jobsRetried += 1;
239
241
  }
240
242
  catch (retryError) {
241
243
  if (isCancellationError(retryError)) {
@@ -263,188 +265,197 @@ export async function collectAntigravity(request) {
263
265
  mutable.errors.push(toCollectionError(new Error("Failed to open database"), "unknown", cascadeId));
264
266
  continue;
265
267
  }
266
- let rows;
268
+ // Stream rows via iterate() so a huge gen_metadata table is processed one
269
+ // row at a time instead of materializing via all(). The per-row body is a
270
+ // closure so the normal path and the single busy-retry path share it;
271
+ // re-processing after a mid-iteration retry is safe because reducer
272
+ // upserts are idempotent on the stable record key.
273
+ let fileHadRows = false;
274
+ let fileHadError = false;
275
+ const processRow = (row) => {
276
+ assertNotAborted(request.signal);
277
+ const idx = typeof row.idx === "number" ? row.idx : Number(row.idx);
278
+ const dataBytes = normalizeDataBytes(row.data);
279
+ if (dataBytes === null) {
280
+ return;
281
+ }
282
+ const rootFields = parseProtoFields(dataBytes);
283
+ const chatBytes = protoFieldBytes(firstProtoField(rootFields, 1));
284
+ const chatFields = parseProtoFields(chatBytes ?? new Uint8Array());
285
+ const usageBytes = protoFieldBytes(firstProtoField(chatFields, 4));
286
+ const usageFields = parseProtoFields(usageBytes ?? new Uint8Array());
287
+ if (usageFields.length === 0) {
288
+ // No usage payload: normal for non-assistant rows (user messages,
289
+ // system rows, in-progress generations). Nothing billable — skip
290
+ // silently, not a coverage error.
291
+ return;
292
+ }
293
+ const inputTokens = protoFieldPositiveInteger(firstProtoField(usageFields, 2)) ||
294
+ protoFieldPositiveInteger(firstProtoField(usageFields, 1));
295
+ const totalOutputTokens = protoFieldPositiveInteger(firstProtoField(usageFields, 3));
296
+ let responseTokens = protoFieldPositiveInteger(firstProtoField(usageFields, 9));
297
+ let thinkingTokens = protoFieldPositiveInteger(firstProtoField(usageFields, 10));
298
+ // Adjust logic mirrors codeburn buildCallFromSqliteGenMetadataRow:17255
299
+ if (responseTokens === 0 && thinkingTokens === 0) {
300
+ responseTokens = totalOutputTokens;
301
+ }
302
+ else if (totalOutputTokens > 0 && responseTokens + thinkingTokens !== totalOutputTokens) {
303
+ const adjustedResponseTokens = totalOutputTokens - thinkingTokens;
304
+ if (adjustedResponseTokens >= 0) {
305
+ responseTokens = adjustedResponseTokens;
306
+ }
307
+ }
308
+ if (inputTokens === 0 && totalOutputTokens === 0) {
309
+ return;
310
+ }
311
+ const rawResponseId = antigravitySqliteResponseId(usageFields, String(idx));
312
+ // Domain messageIDs reject "/" (it joins the stable record key) while
313
+ // proto responseIds only exclude whitespace — sanitize before use.
314
+ const responseId = rawResponseId.replace(/[\u0000-\u001f/]/g, "_").trim() || String(idx);
315
+ const model = antigravitySqliteModel(chatFields);
316
+ let createdAt = null;
317
+ const timestampIso = antigravitySqliteCreatedAt(chatFields);
318
+ if (timestampIso) {
319
+ const parsed = new Date(timestampIso);
320
+ if (!Number.isNaN(parsed.getTime())) {
321
+ createdAt = parsed;
322
+ }
323
+ }
324
+ // NOTE (mtime bucketing): when a row carries no proto timestamp every
325
+ // such row in this file falls back to the same file-mtime instant, so
326
+ // they all bucket into one window. That matches codeburn's
327
+ // assignStableTimestamps fallback, but it is a coarse approximation:
328
+ // per-row times are unknown and day/hour splits for these rows reflect
329
+ // file mtime, not actual generation time.
330
+ if (createdAt === null && fallbackDate !== undefined && !Number.isNaN(fallbackDate.getTime())) {
331
+ createdAt = new Date(fallbackDate.getTime());
332
+ }
333
+ if (createdAt === null) {
334
+ // No usable timestamp — skip record but count as error?
335
+ fileHadError = true;
336
+ mutable.errors.push(toCollectionError(new DomainError("invalid-data", "Missing timestamp in gen_metadata row", { sessionID: cascadeId }), "invalid-data", cascadeId));
337
+ return;
338
+ }
339
+ // Window filter — in-memory containsInstant
340
+ const inWindow = request.windows.some((w) => containsInstant(w, createdAt));
341
+ if (!inWindow) {
342
+ return;
343
+ }
344
+ const deduplicationKey = `antigravity:${cascadeId}:${responseId}`;
345
+ // NOTE (project): gen_metadata rows carry no dedicated project field,
346
+ // so records omit project unless a chat metadata attribute names one.
347
+ const attributes = antigravitySqliteMetadataAttributes(chatFields);
348
+ const projectCandidate = attributes.get("project") ??
349
+ attributes.get("projectId") ??
350
+ attributes.get("project_id") ??
351
+ attributes.get("cwd") ??
352
+ attributes.get("directory");
353
+ const project = typeof projectCandidate === "string" && projectCandidate.trim().length > 0
354
+ ? projectCandidate.trim()
355
+ : undefined;
356
+ try {
357
+ const record = createUsageRecord({
358
+ sessionID: cascadeId,
359
+ messageID: responseId,
360
+ createdAt,
361
+ model,
362
+ tokens: {
363
+ input: inputTokens,
364
+ output: responseTokens,
365
+ reasoning: thinkingTokens,
366
+ cacheRead: 0,
367
+ cacheWrite: 0,
368
+ },
369
+ observedAt: new Date(request.capturedAt.getTime()),
370
+ completeness: "final",
371
+ provider: "antigravity",
372
+ tokenRevision: deduplicationKey,
373
+ ...(project === undefined ? {} : { project }),
374
+ });
375
+ reducer.upsert(record);
376
+ fileHadRows = true;
377
+ }
378
+ catch (error) {
379
+ if (isCancellationError(error)) {
380
+ throw cancellationError();
381
+ }
382
+ fileHadError = true;
383
+ mutable.errors.push(toCollectionError(error, "invalid-data", cascadeId));
384
+ }
385
+ };
386
+ const iterateRows = (handle) => {
387
+ const stmt = handle.prepare("SELECT idx, data FROM gen_metadata ORDER BY idx");
388
+ for (const row of stmt.iterate()) {
389
+ processRow(row);
390
+ }
391
+ };
267
392
  try {
268
- const stmt = db.prepare("SELECT idx, data FROM gen_metadata ORDER BY idx");
269
- // stmt.all returns rows; for readonly we pass no params
270
- rows = stmt.all();
271
- mutable.pagesRead += 1;
272
- }
273
- catch (error) {
274
- if (isCancellationError(error)) {
393
+ try {
394
+ iterateRows(db);
395
+ mutable.pagesRead += 1;
396
+ }
397
+ catch (error) {
398
+ if (isCancellationError(error)) {
399
+ throw cancellationError();
400
+ }
401
+ if (!isSqliteBusyError(error)) {
402
+ throw error;
403
+ }
404
+ // Busy mid-query: re-open and retry the streaming query once.
275
405
  try {
276
406
  db.close();
277
407
  }
278
408
  catch {
279
409
  // ignore
280
410
  }
281
- throw cancellationError();
282
- }
283
- if (isSqliteBusyError(error)) {
284
- mutable.sessionsSkipped += 1;
285
- // retry once
411
+ const retryDb = new DatabaseSync(filePath, { readOnly: true });
286
412
  try {
287
- // Re-open and retry query once
288
- try {
289
- db.close();
290
- }
291
- catch {
292
- // ignore
293
- }
294
- const retryDb = new DatabaseSync(filePath, { readOnly: true });
295
- try {
296
- retryDb.exec?.("PRAGMA busy_timeout = 1000");
297
- }
298
- catch {
299
- // ignore
300
- }
301
- const retryStmt = retryDb.prepare("SELECT idx, data FROM gen_metadata ORDER BY idx");
302
- rows = retryStmt.all();
413
+ retryDb.exec?.("PRAGMA busy_timeout = 1000");
414
+ }
415
+ catch {
416
+ // ignore
417
+ }
418
+ try {
419
+ iterateRows(retryDb);
303
420
  mutable.jobsRetried += 1;
304
421
  mutable.pagesRead += 1;
305
- try {
306
- retryDb.close();
307
- }
308
- catch {
309
- // ignore
310
- }
311
- // continue to row processing with retry rows
312
- db = null; // already closed retryDb, prevent double close
313
422
  }
314
- catch (retryError) {
315
- if (isCancellationError(retryError)) {
316
- throw cancellationError();
317
- }
318
- mutable.errors.push(toCollectionError(retryError, "unknown", cascadeId));
423
+ finally {
319
424
  try {
320
- db?.close();
425
+ retryDb.close();
321
426
  }
322
427
  catch {
323
428
  // ignore
324
429
  }
325
- continue;
326
430
  }
327
431
  }
328
- else {
329
- mutable.sessionsSkipped += 1;
330
- mutable.errors.push(toCollectionError(error, "unknown", cascadeId));
432
+ }
433
+ catch (error) {
434
+ if (isCancellationError(error)) {
331
435
  try {
332
- db?.close();
436
+ db.close();
333
437
  }
334
438
  catch {
335
439
  // ignore
336
440
  }
337
- continue;
441
+ throw cancellationError();
338
442
  }
339
- }
340
- finally {
341
- // For non-busy-retry path, close after query; for retry success we already handled.
342
- // We need to handle both cases: if db still open, close after row processing.
343
- // So defer close until after row loop for normal path.
344
- }
345
- // If we retried successfully, rows is already set and db is null (closed). Create a new db handle not needed.
346
- // For normal path, db is still open; we will close after processing.
347
- const shouldCloseDb = db !== null;
348
- // Process rows
349
- let fileHadRows = false;
350
- let fileHadError = false;
351
- try {
352
- for (const row of rows) {
353
- assertNotAborted(request.signal);
354
- const idx = typeof row.idx === "number" ? row.idx : Number(row.idx);
355
- const dataBytes = normalizeDataBytes(row.data);
356
- if (dataBytes === null) {
357
- continue;
358
- }
359
- const rootFields = parseProtoFields(dataBytes);
360
- const chatBytes = protoFieldBytes(firstProtoField(rootFields, 1));
361
- const chatFields = parseProtoFields(chatBytes ?? new Uint8Array());
362
- const usageBytes = protoFieldBytes(firstProtoField(chatFields, 4));
363
- const usageFields = parseProtoFields(usageBytes ?? new Uint8Array());
364
- if (usageFields.length === 0) {
365
- continue;
366
- }
367
- const inputTokens = protoFieldPositiveInteger(firstProtoField(usageFields, 2)) ||
368
- protoFieldPositiveInteger(firstProtoField(usageFields, 1));
369
- const totalOutputTokens = protoFieldPositiveInteger(firstProtoField(usageFields, 3));
370
- let responseTokens = protoFieldPositiveInteger(firstProtoField(usageFields, 9));
371
- let thinkingTokens = protoFieldPositiveInteger(firstProtoField(usageFields, 10));
372
- // Adjust logic mirrors codeburn buildCallFromSqliteGenMetadataRow:17255
373
- if (responseTokens === 0 && thinkingTokens === 0) {
374
- responseTokens = totalOutputTokens;
375
- }
376
- else if (totalOutputTokens > 0 && responseTokens + thinkingTokens !== totalOutputTokens) {
377
- const adjustedResponseTokens = totalOutputTokens - thinkingTokens;
378
- if (adjustedResponseTokens >= 0) {
379
- responseTokens = adjustedResponseTokens;
380
- }
381
- }
382
- if (inputTokens === 0 && totalOutputTokens === 0) {
383
- continue;
384
- }
385
- const responseId = antigravitySqliteResponseId(usageFields, String(idx));
386
- const model = antigravitySqliteModel(chatFields);
387
- let createdAt = null;
388
- const timestampIso = antigravitySqliteCreatedAt(chatFields);
389
- if (timestampIso) {
390
- const parsed = new Date(timestampIso);
391
- if (!Number.isNaN(parsed.getTime())) {
392
- createdAt = parsed;
393
- }
394
- }
395
- if (createdAt === null && fallbackDate !== undefined && !Number.isNaN(fallbackDate.getTime())) {
396
- createdAt = new Date(fallbackDate.getTime());
397
- }
398
- if (createdAt === null) {
399
- // No usable timestamp — skip record but count as error?
400
- fileHadError = true;
401
- mutable.errors.push(toCollectionError(new DomainError("invalid-data", "Missing timestamp in gen_metadata row", { sessionID: cascadeId }), "invalid-data", cascadeId));
402
- continue;
403
- }
404
- // Window filter — in-memory containsInstant
405
- const inWindow = request.windows.some((w) => containsInstant(w, createdAt));
406
- if (!inWindow) {
407
- continue;
408
- }
409
- const deduplicationKey = `antigravity:${cascadeId}:${responseId}`;
410
- try {
411
- const record = createUsageRecord({
412
- sessionID: cascadeId,
413
- messageID: responseId,
414
- createdAt,
415
- model,
416
- tokens: {
417
- input: inputTokens,
418
- output: responseTokens,
419
- reasoning: thinkingTokens,
420
- cacheRead: 0,
421
- cacheWrite: 0,
422
- },
423
- observedAt: new Date(request.capturedAt.getTime()),
424
- completeness: "final",
425
- provider: "antigravity",
426
- tokenRevision: deduplicationKey,
427
- });
428
- reducer.upsert(record);
429
- fileHadRows = true;
430
- }
431
- catch (error) {
432
- if (isCancellationError(error)) {
433
- throw cancellationError();
434
- }
435
- fileHadError = true;
436
- mutable.errors.push(toCollectionError(error, "invalid-data", cascadeId));
437
- }
443
+ mutable.sessionsSkipped += 1;
444
+ mutable.errors.push(toCollectionError(error, "unknown", cascadeId));
445
+ try {
446
+ db.close();
447
+ }
448
+ catch {
449
+ // ignore
438
450
  }
451
+ continue;
439
452
  }
440
453
  finally {
441
- if (shouldCloseDb) {
442
- try {
443
- db.close();
444
- }
445
- catch {
446
- // ignore close errors; if busy, count as skipped
447
- }
454
+ try {
455
+ db.close();
456
+ }
457
+ catch {
458
+ // ignore close errors; if busy, count as skipped
448
459
  }
449
460
  }
450
461
  if (fileHadRows && !fileHadError) {
@@ -1 +1 @@
1
- {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../../src/antigravity/scanner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../../src/antigravity/scanner.ts"],"names":[],"mappings":"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"}
@@ -9,8 +9,11 @@ import { createNormalizedCacheStore, } from "./cache/index.js";
9
9
  import { createOpenCodeAdapter, isStatsRangeMismatch, } from "./opencode/index.js";
10
10
  /** The default is intentionally explicit so a second CLI instance is safe. */
11
11
  export function defaultCacheDirectory() {
12
- const root = process.env.XDG_CACHE_HOME ?? join(homedir(), "Library", "Caches");
13
- return join(root, "oc2token");
12
+ if (process.env.XDG_CACHE_HOME)
13
+ return join(process.env.XDG_CACHE_HOME, "oc2token");
14
+ if (process.platform === "darwin")
15
+ return join(homedir(), "Library", "Caches", "oc2token");
16
+ return join(homedir(), ".cache", "oc2token");
14
17
  }
15
18
  function appendError(coverage, error) {
16
19
  return {
@@ -46,6 +49,63 @@ function addUsageTotals(left, right) {
46
49
  function emptyUsageTotals() {
47
50
  return toUsageTotals({ input: 0, output: 0, reasoning: 0, cacheRead: 0, cacheWrite: 0 });
48
51
  }
52
+ function sortBreakdowns(values) {
53
+ values.sort((left, right) => right.totals.recorded_total - left.totals.recorded_total || left.name.localeCompare(right.name));
54
+ return values;
55
+ }
56
+ /**
57
+ * Single source of truth for provider/model/project splits: recompute from the
58
+ * merged, deduplicated records in one window. Supplied per-source breakdowns
59
+ * describe the same records, so merging both would double-count; callers use
60
+ * this result when non-empty and fall back to merged supplied breakdowns only
61
+ * when a window has no records (e.g. a stats source with zero records but
62
+ * usable totals). Empty input yields empty outputs, preserving empty-source
63
+ * behavior.
64
+ */
65
+ function buildBreakdowns(records, window) {
66
+ const windowRecords = records.filter((record) => containsInstant(window, record.createdAt));
67
+ if (windowRecords.length === 0)
68
+ return { providers: [], models: [], projects: [] };
69
+ const byProvider = new Map();
70
+ const byModel = new Map();
71
+ const byProject = new Map();
72
+ for (const record of windowRecords) {
73
+ const providerRecords = byProvider.get(record.provider);
74
+ if (providerRecords === undefined)
75
+ byProvider.set(record.provider, [record]);
76
+ else
77
+ providerRecords.push(record);
78
+ const modelRecords = byModel.get(record.model);
79
+ if (modelRecords === undefined)
80
+ byModel.set(record.model, [record]);
81
+ else
82
+ modelRecords.push(record);
83
+ if (record.project !== undefined && record.project.trim().length > 0) {
84
+ const projectRecords = byProject.get(record.project);
85
+ if (projectRecords === undefined)
86
+ byProject.set(record.project, [record]);
87
+ else
88
+ projectRecords.push(record);
89
+ }
90
+ }
91
+ const providers = [];
92
+ for (const [name, recs] of byProvider.entries()) {
93
+ providers.push({ name, provider: name, totals: sumUsageRecords(recs, window) });
94
+ }
95
+ const models = [];
96
+ for (const [name, recs] of byModel.entries()) {
97
+ models.push({ name, totals: sumUsageRecords(recs, window) });
98
+ }
99
+ const projects = [];
100
+ for (const [name, recs] of byProject.entries()) {
101
+ projects.push({ name, totals: sumUsageRecords(recs, window) });
102
+ }
103
+ return {
104
+ providers: sortBreakdowns(providers),
105
+ models: sortBreakdowns(models),
106
+ projects: sortBreakdowns(projects),
107
+ };
108
+ }
49
109
  function mergeBreakdowns(values) {
50
110
  const merged = new Map();
51
111
  for (const value of values) {
@@ -165,9 +225,11 @@ export class HybridUsageSource {
165
225
  }
166
226
  if (!isStatsRangeMismatch(error))
167
227
  throw error;
168
- // Cache this decision for the current server fingerprint. A version or
169
- // PID change causes the next refresh to probe the new implementation.
170
- this.statsUnsupportedFingerprint = fingerprint ?? "unknown";
228
+ // Cache this decision for the live server fingerprint. A reconnect
229
+ // above replaces the connection, so the stale entry-time fingerprint
230
+ // must not be reused: re-read the current connection instead.
231
+ this.statsUnsupportedFingerprint = this.adapter.currentConnection?.health.fingerprint ??
232
+ fingerprint ?? "unknown";
171
233
  return this.fallback(request);
172
234
  }
173
235
  }
@@ -370,81 +432,31 @@ export class UnifiedUsageSource {
370
432
  const modelsMutable = {};
371
433
  const projectsMutable = {};
372
434
  for (const w of request.windows) {
373
- const windowRecords = records.filter((r) => containsInstant(w, r.createdAt));
374
- if (windowRecords.length > 0) {
375
- const byProvider = new Map();
376
- const byModel = new Map();
377
- const byProject = new Map();
378
- for (const r of windowRecords) {
379
- const prov = r.provider;
380
- const arrP = byProvider.get(prov);
381
- if (arrP === undefined)
382
- byProvider.set(prov, [r]);
383
- else
384
- arrP.push(r);
385
- const modelName = r.model;
386
- const arrM = byModel.get(modelName);
387
- if (arrM === undefined)
388
- byModel.set(modelName, [r]);
389
- else
390
- arrM.push(r);
391
- if (r.project !== undefined && r.project.trim().length > 0) {
392
- const proj = r.project;
393
- const arrJ = byProject.get(proj);
394
- if (arrJ === undefined)
395
- byProject.set(proj, [r]);
396
- else
397
- arrJ.push(r);
398
- }
399
- }
400
- if (byProvider.size > 0) {
401
- const breakdowns = [];
402
- for (const [provName, recs] of byProvider.entries()) {
403
- const totals = sumUsageRecords(recs, w);
404
- breakdowns.push({ name: provName, provider: provName, totals });
405
- }
406
- breakdowns.sort((a, b) => b.totals.recorded_total - a.totals.recorded_total || a.name.localeCompare(b.name));
407
- providersMutable[w.kind] = breakdowns;
408
- }
409
- if (byModel.size > 0) {
410
- const breakdowns = [];
411
- for (const [modelName, recs] of byModel.entries()) {
412
- const totals = sumUsageRecords(recs, w);
413
- breakdowns.push({ name: modelName, totals });
414
- }
415
- breakdowns.sort((a, b) => b.totals.recorded_total - a.totals.recorded_total || a.name.localeCompare(b.name));
416
- modelsMutable[w.kind] = breakdowns;
417
- }
418
- if (byProject.size > 0) {
419
- const breakdowns = [];
420
- for (const [projName, recs] of byProject.entries()) {
421
- const totals = sumUsageRecords(recs, w);
422
- breakdowns.push({ name: projName, totals });
423
- }
424
- breakdowns.sort((a, b) => b.totals.recorded_total - a.totals.recorded_total || a.name.localeCompare(b.name));
425
- projectsMutable[w.kind] = breakdowns;
426
- }
427
- }
435
+ // Single-source breakdowns: recomputed splits describe the same records
436
+ // as the supplied per-source splits, so using both would double-count.
437
+ // Prefer the recomputed split; fall back to merged supplied splits only
438
+ // when the window has no records (e.g. stats totals without records).
439
+ const recomputed = buildBreakdowns(records, w);
428
440
  const suppliedProviders = successful.flatMap(({ result }) => result.providersByWindow?.[w.kind] ?? []);
429
- if (suppliedProviders.length > 0) {
430
- providersMutable[w.kind] = mergeBreakdowns([
431
- ...(providersMutable[w.kind] ?? []),
432
- ...suppliedProviders,
433
- ]);
441
+ if (recomputed.providers.length > 0) {
442
+ providersMutable[w.kind] = recomputed.providers;
443
+ }
444
+ else if (suppliedProviders.length > 0) {
445
+ providersMutable[w.kind] = mergeBreakdowns(suppliedProviders);
434
446
  }
435
447
  const suppliedModels = successful.flatMap(({ result }) => result.modelsByWindow?.[w.kind] ?? []);
436
- if (suppliedModels.length > 0) {
437
- modelsMutable[w.kind] = mergeBreakdowns([
438
- ...(modelsMutable[w.kind] ?? []),
439
- ...suppliedModels,
440
- ]);
448
+ if (recomputed.models.length > 0) {
449
+ modelsMutable[w.kind] = recomputed.models;
450
+ }
451
+ else if (suppliedModels.length > 0) {
452
+ modelsMutable[w.kind] = mergeBreakdowns(suppliedModels);
441
453
  }
442
454
  const suppliedProjects = successful.flatMap(({ result }) => result.projectsByWindow?.[w.kind] ?? []);
443
- if (suppliedProjects.length > 0) {
444
- projectsMutable[w.kind] = mergeBreakdowns([
445
- ...(projectsMutable[w.kind] ?? []),
446
- ...suppliedProjects,
447
- ]);
455
+ if (recomputed.projects.length > 0) {
456
+ projectsMutable[w.kind] = recomputed.projects;
457
+ }
458
+ else if (suppliedProjects.length > 0) {
459
+ projectsMutable[w.kind] = mergeBreakdowns(suppliedProjects);
448
460
  }
449
461
  }
450
462
  const providersByWindow = providersMutable;