@newrelic/preflight 1.67.2 → 1.67.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/hooks/event-processor.d.ts.map +1 -1
- package/dist/hooks/event-processor.js +7 -4
- package/dist/hooks/event-processor.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -46
- package/dist/index.js.map +1 -1
- package/dist/metrics/cost-estimate-gate.d.ts +20 -0
- package/dist/metrics/cost-estimate-gate.d.ts.map +1 -1
- package/dist/metrics/cost-estimate-gate.js +21 -1
- package/dist/metrics/cost-estimate-gate.js.map +1 -1
- package/dist/metrics/cost-tracker-seed.d.ts.map +1 -1
- package/dist/metrics/cost-tracker-seed.js +1 -0
- package/dist/metrics/cost-tracker-seed.js.map +1 -1
- package/dist/metrics/cost-tracker.d.ts +53 -1
- package/dist/metrics/cost-tracker.d.ts.map +1 -1
- package/dist/metrics/cost-tracker.js +87 -2
- package/dist/metrics/cost-tracker.js.map +1 -1
- package/dist/metrics/local-session-aggregator.d.ts +13 -0
- package/dist/metrics/local-session-aggregator.d.ts.map +1 -1
- package/dist/metrics/local-session-aggregator.js +22 -4
- package/dist/metrics/local-session-aggregator.js.map +1 -1
- package/dist/metrics/model-pricing.d.ts +6 -0
- package/dist/metrics/model-pricing.d.ts.map +1 -1
- package/dist/metrics/model-pricing.js +19 -2
- package/dist/metrics/model-pricing.js.map +1 -1
- package/dist/metrics/pricing-overlay.d.ts.map +1 -1
- package/dist/metrics/pricing-overlay.js +4 -5
- package/dist/metrics/pricing-overlay.js.map +1 -1
- package/dist/storage/historical-costs.d.ts +6 -0
- package/dist/storage/historical-costs.d.ts.map +1 -0
- package/dist/storage/historical-costs.js +42 -0
- package/dist/storage/historical-costs.js.map +1 -0
- package/dist/storage/session-store.d.ts +23 -1
- package/dist/storage/session-store.d.ts.map +1 -1
- package/dist/storage/session-store.js +96 -5
- package/dist/storage/session-store.js.map +1 -1
- package/dist/storage/types.d.ts +7 -11
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/types.js.map +1 -1
- package/package.json +21 -8
|
@@ -1,12 +1,29 @@
|
|
|
1
1
|
import { createLogger, resolveModelPricing } from '../shared/index.js';
|
|
2
2
|
const logger = createLogger('model-pricing');
|
|
3
3
|
const CLAUDE_ID_RE = /^claude-([a-z]+)-(\d+)(?:-(\d{1,2}))?(?:-\d{8})?$/;
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Removes one trailing `[...]` tag (e.g. `[1m]`). Linear scan instead of a
|
|
6
|
+
* `/\[[^\]]*\]$/` regex, which backtracks quadratically on inputs with many `[`.
|
|
7
|
+
*/
|
|
8
|
+
export function stripTrailingTag(id) {
|
|
9
|
+
if (!id.endsWith(']'))
|
|
10
|
+
return id;
|
|
11
|
+
const prevClose = id.lastIndexOf(']', id.length - 2);
|
|
12
|
+
const open = id.indexOf('[', prevClose + 1);
|
|
13
|
+
return open === -1 ? id : id.slice(0, open);
|
|
14
|
+
}
|
|
15
|
+
export function stripTrailingTags(id) {
|
|
16
|
+
let current = id;
|
|
17
|
+
for (let next = stripTrailingTag(current); next !== current; next = stripTrailingTag(current)) {
|
|
18
|
+
current = next;
|
|
19
|
+
}
|
|
20
|
+
return current;
|
|
21
|
+
}
|
|
5
22
|
// Bedrock spells the same ids `[<region>.]anthropic.claude-...[-v1:0]`.
|
|
6
23
|
const BEDROCK_PREFIX_RE = /^(?:[a-z-]+\.)?anthropic\./;
|
|
7
24
|
const BEDROCK_VERSION_RE = /-v\d+(?::\d+)?$/;
|
|
8
25
|
function parseClaudeId(id) {
|
|
9
|
-
const match = CLAUDE_ID_RE.exec(id
|
|
26
|
+
const match = CLAUDE_ID_RE.exec(stripTrailingTags(id));
|
|
10
27
|
if (!match)
|
|
11
28
|
return null;
|
|
12
29
|
return { family: match[1], major: Number(match[2]), minor: Number(match[3] ?? 0) };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-pricing.js","sourceRoot":"","sources":["../../src/metrics/model-pricing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEvE,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;AAa7C,MAAM,YAAY,GAAG,mDAAmD,CAAC;
|
|
1
|
+
{"version":3,"file":"model-pricing.js","sourceRoot":"","sources":["../../src/metrics/model-pricing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEvE,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;AAa7C,MAAM,YAAY,GAAG,mDAAmD,CAAC;AAEzE;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAU;IACzC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;IAC5C,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAAU;IAC1C,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,KAAK,IAAI,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC,EAAE,IAAI,KAAK,OAAO,EAAE,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9F,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AACD,wEAAwE;AACxE,MAAM,iBAAiB,GAAG,4BAA4B,CAAC;AACvD,MAAM,kBAAkB,GAAG,iBAAiB,CAAC;AAQ7C,SAAS,aAAa,CAAC,EAAU;IAC/B,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;IACvD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;AACrF,CAAC;AAED,MAAM,eAAe,GAAG,SAAS,CAAC;AAElC;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAa,EACb,YAA+B,EAC/B,UAAmC,CAAC,EAAE,EAAE,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC;IAElE,wEAAwE;IACxE,2EAA2E;IAC3E,MAAM,MAAM,GAAG,aAAa,CAC1B,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CACrE,CAAC;IACF,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,QAAQ,GAA8E,EAAE,CAAC;IAC/F,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;YAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IACzD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAChC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACxE,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;IAEnF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,KAAK,MAAM,EAAE,EAAE,EAAE,IAAI,KAAK,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACpF,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,mDAAmD,EAAE;YAC/D,KAAK;YACL,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing-overlay.d.ts","sourceRoot":"","sources":["../../src/metrics/pricing-overlay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAaH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,
|
|
1
|
+
{"version":3,"file":"pricing-overlay.d.ts","sourceRoot":"","sources":["../../src/metrics/pricing-overlay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAaH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAwC,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAalG;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKpD;AAuCD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,EAAE,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAI9F;AAED,wFAAwF;AACxF,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AA0BD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAUrE;AAED,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAGjE;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;CACxC;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,WAAW,CAY7E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,aAAa,CAElF;AAED,wBAAgB,yBAAyB,IAAI,MAAM,GAAG,IAAI,CAMzD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAmB/D;AAgFD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAM1E"}
|
|
@@ -16,7 +16,7 @@ import { extname, join, resolve } from 'node:path';
|
|
|
16
16
|
import { createLogger, DEFAULT_PRICING_TABLE } from '../shared/index.js';
|
|
17
17
|
import { calculateCost, initPricing, loadCustomPricing, resolveModelPricing, } from '../shared/pricing.js';
|
|
18
18
|
import { resolveDataDir } from '../deploy/data-paths.js';
|
|
19
|
-
import { estimateFromFamily } from './model-pricing.js';
|
|
19
|
+
import { estimateFromFamily, stripTrailingTag } from './model-pricing.js';
|
|
20
20
|
const logger = createLogger('pricing-overlay');
|
|
21
21
|
const BEDROCK_SYSTEM_ARN_RE = /^arn:aws[a-z-]*:bedrock:[a-z0-9-]+:\d*:(?:inference-profile|foundation-model)\/(.+)$/;
|
|
22
22
|
// Mirrors the private limit in src/shared/pricing.ts so an oversized file falls
|
|
@@ -25,7 +25,6 @@ const MAX_PRICING_FILE_BYTES = 1_000_000;
|
|
|
25
25
|
// Deliberately strips any one leading `<segment>/`, not a fixed provider list, so
|
|
26
26
|
// gateway prefixes we have never seen (`bedrock/`, `anthropic/`, `vertex/`) resolve too.
|
|
27
27
|
const PROVIDER_PREFIX_RE = /^[a-z0-9_-]+\//;
|
|
28
|
-
const VARIANT_TAG_RE = /\[[^\]]*\]$/;
|
|
29
28
|
/**
|
|
30
29
|
* Reduces the model strings gateways and Bedrock emit to the bare id the
|
|
31
30
|
* vendored table knows. Application inference profile ARNs and gateway
|
|
@@ -49,7 +48,7 @@ const ZERO_COST = {
|
|
|
49
48
|
};
|
|
50
49
|
let pricingAliases = new Map();
|
|
51
50
|
function lookupAlias(id) {
|
|
52
|
-
return pricingAliases.get(id) ?? pricingAliases.get(id
|
|
51
|
+
return pricingAliases.get(id) ?? pricingAliases.get(stripTrailingTag(id));
|
|
53
52
|
}
|
|
54
53
|
function canonicalModelId(raw) {
|
|
55
54
|
const normalized = normalizeModelId(raw);
|
|
@@ -83,7 +82,7 @@ function computeResolution(model) {
|
|
|
83
82
|
if (pricing)
|
|
84
83
|
return { kind: 'priced', source: 'table', pricing };
|
|
85
84
|
if (refreshedTable !== null) {
|
|
86
|
-
const bare = id
|
|
85
|
+
const bare = stripTrailingTag(id);
|
|
87
86
|
const refreshed = refreshedIds.has(bare) ? refreshedTable.resolve(bare) : null;
|
|
88
87
|
if (refreshed) {
|
|
89
88
|
logger.info('Pricing from the LiteLLM refresh', { model });
|
|
@@ -131,7 +130,7 @@ export function priceModelUsage(model, usage) {
|
|
|
131
130
|
if (resolution.source === 'refreshed' && refreshedTable !== null) {
|
|
132
131
|
return {
|
|
133
132
|
resolution,
|
|
134
|
-
breakdown: refreshedTable.calculateCost(canonicalModelId(model)
|
|
133
|
+
breakdown: refreshedTable.calculateCost(stripTrailingTag(canonicalModelId(model)), usage),
|
|
135
134
|
};
|
|
136
135
|
}
|
|
137
136
|
const priceId = resolution.source === 'estimated' ? resolution.estimatedFrom : canonicalModelId(model);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing-overlay.js","sourceRoot":"","sources":["../../src/metrics/pricing-overlay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EACL,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAA0B,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"pricing-overlay.js","sourceRoot":"","sources":["../../src/metrics/pricing-overlay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EACL,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAA0B,MAAM,oBAAoB,CAAC;AAElG,MAAM,MAAM,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAC;AAE/C,MAAM,qBAAqB,GACzB,sFAAsF,CAAC;AACzF,gFAAgF;AAChF,8EAA8E;AAC9E,MAAM,sBAAsB,GAAG,SAAS,CAAC;AACzC,kFAAkF;AAClF,yFAAyF;AACzF,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AAE5C;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACtB,MAAM,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3C,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IACvB,OAAO,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,SAAS,GAAkB;IAC/B,QAAQ,EAAE,CAAC;IACX,SAAS,EAAE,CAAC;IACZ,WAAW,EAAE,CAAC;IACd,YAAY,EAAE,CAAC;IACf,gBAAgB,EAAE,CAAC;IACnB,QAAQ,EAAE,CAAC;IACX,mBAAmB,EAAE,CAAC;CACvB,CAAC;AAEF,IAAI,cAAc,GAAgC,IAAI,GAAG,EAAE,CAAC;AAE5D,SAAS,WAAW,CAAC,EAAU;IAC7B,OAAO,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW;IACnC,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACzC,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC;AAC1E,CAAC;AAED,8EAA8E;AAC9E,qDAAqD;AACrD,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAChC,MAAM,WAAW,GAAG,IAAI,GAAG,EAA6B,CAAC;AAEzD,2EAA2E;AAC3E,4EAA4E;AAC5E,8DAA8D;AAC9D,IAAI,eAAe,GAAsB,EAAE,CAAC;AAE5C,iFAAiF;AACjF,gFAAgF;AAChF,2EAA2E;AAC3E,IAAI,cAAc,GAAwB,IAAI,CAAC;AAC/C,IAAI,YAAY,GAAwB,IAAI,GAAG,EAAE,CAAC;AAElD,MAAM,UAAU,mBAAmB,CAAC,KAA0B,EAAE,GAAwB;IACtF,cAAc,GAAG,KAAK,CAAC;IACvB,YAAY,GAAG,GAAG,CAAC;IACnB,WAAW,CAAC,KAAK,EAAE,CAAC;AACtB,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,gBAAgB;IAC9B,WAAW,CAAC,KAAK,EAAE,CAAC;AACtB,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,MAAM,EAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;IACxC,IAAI,OAAO;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAEjE,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/E,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC3D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QACrE,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,kBAAkB,CAAC,EAAE,EAAE;QAC3C,GAAG,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC;QACrC,GAAG,eAAe;KACnB,CAAC,CAAC;IACH,MAAM,gBAAgB,GAAG,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAC5F,IAAI,aAAa,KAAK,IAAI,IAAI,gBAAgB,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACrF,MAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;IAC7E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC;AAC3F,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,WAAW,CAAC,IAAI,IAAI,mBAAmB,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,IAAI;YAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IACD,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACnC,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,MAAM,UAAU,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC/C,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAClE,CAAC;AAOD,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,KAAiB;IAC9D,MAAM,UAAU,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,UAAU,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,GAAG,SAAS,EAAE,EAAE,CAAC;IACvF,IAAI,UAAU,CAAC,MAAM,KAAK,WAAW,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QACjE,OAAO;YACL,UAAU;YACV,SAAS,EAAE,cAAc,CAAC,aAAa,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;SAC1F,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GACX,UAAU,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACzF,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa,EAAE,KAAiB;IACjE,OAAO,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,cAAc,CAAC,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,qBAAqB,CAAC,WAAmB;IACvD,MAAM,OAAO,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC/C,IAAI,CAAC,OAAO;QAAE,OAAO;IAErB,MAAM,IAAI,GAAiC,EAAE,CAAC;IAC9C,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACzD,IAAI,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CACT,4GAA4G,EAC5G,EAAE,OAAO,EAAE,CACZ,CAAC;YACF,SAAS;QACX,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAC1B,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAE3C,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC7B,gBAAgB,EAAE,CAAC;AACrB,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAgC;IAC9D,0EAA0E;IAC1E,qDAAqD;IACrD,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,4BAA4B,CAAC,CAAC,CAAC;QACnE,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAClD,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACtE,WAAW,CAAC,YAAY,CAAC,CAAC;QAC1B,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE;YAC7C,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,GAAY;IAChC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IAClC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;QACxF,OAAO,GAAG,CAAC;IACb,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACjD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACvD,MAAM,CAAC,IAAI,CAAC,iEAAiE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YACzF,SAAS;QACX,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,oBAAoB,CAAC,OAA4B;IACxD,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACrC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,2DAA2D,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3F,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,sBAAsB,CAAC,IAAY;IAC1C,IAAI,MAA+B,CAAC;IACpC,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,sBAAsB,EAAE,CAAC;YAC5F,MAAM,IAAI,KAAK,EAAE,CAAC;QACpB,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAY,CAAC;QAChE,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,EAAE,CAAC;QACxF,MAAM,GAAG,IAA+B,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,WAAW,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO;IACT,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;IACjD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,WAAW,CAAC,IAAI,CAAC,CAAC;QAClB,mBAAmB,EAAE,CAAC;IACxB,CAAC;IACD,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IACzC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,cAAc,GAAG,OAAO,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CAAC,iBAAgC;IAClE,IAAI,CAAC;QACH,2BAA2B,CAAC,iBAAiB,CAAC,CAAC;IACjD,CAAC;YAAS,CAAC;QACT,gBAAgB,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,2BAA2B,CAAC,iBAAgC;IACnE,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;IAC3B,eAAe,GAAG,EAAE,CAAC;IACrB,IAAI,iBAAiB,EAAE,CAAC;QACtB,sBAAsB,CAAC,iBAAiB,CAAC,CAAC;QAC1C,OAAO;IACT,CAAC;IACD,mBAAmB,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,mBAAmB;IAC1B,MAAM,WAAW,GAAG,yBAAyB,EAAE,CAAC;IAChD,IAAI,WAAW,EAAE,CAAC;QAChB,qBAAqB,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SessionStore } from './session-store.js';
|
|
2
|
+
export declare function computeHistoricalCosts(sessionStore: Pick<SessionStore, 'loadAllSessions'>, currentSessionId: string, refTs?: number): {
|
|
3
|
+
priorDailyCostUsd: number;
|
|
4
|
+
priorWeeklyCostUsd: number;
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=historical-costs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"historical-costs.d.ts","sourceRoot":"","sources":["../../src/storage/historical-costs.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAmBvD,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,iBAAiB,CAAC,EACnD,gBAAgB,EAAE,MAAM,EACxB,KAAK,GAAE,MAAmB,GACzB;IAAE,iBAAiB,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,CAmB3D"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { createLogger } from '../shared/index.js';
|
|
2
|
+
import { todayPortionOfSessionCost } from '../lib/date.js';
|
|
3
|
+
const logger = createLogger('historical-costs');
|
|
4
|
+
// Compute cost baselines from prior sessions for daily/weekly budget tracking.
|
|
5
|
+
//
|
|
6
|
+
// Called on every cost-update emission, not just at session start. Three reasons:
|
|
7
|
+
// 1) Sessions persisted by other MCP instances during this session need to
|
|
8
|
+
// land in the daily/weekly totals.
|
|
9
|
+
// 2) Day rollover — a session running past midnight needs a refreshed
|
|
10
|
+
// "today" baseline. Snapshotting at startup left long-running sessions
|
|
11
|
+
// with stale yesterday-as-today bookkeeping forever.
|
|
12
|
+
// 3) Cross-midnight prior sessions need today-portion attribution, not
|
|
13
|
+
// whole-session attribution by startTime. We use timeline-based
|
|
14
|
+
// pro-rating via todayPortionOfSessionCost() so a session that ran
|
|
15
|
+
// 11pm→2am only contributes its 2-hour today slice to the daily total.
|
|
16
|
+
//
|
|
17
|
+
// The current in-flight session is excluded from the prior totals so we don't
|
|
18
|
+
// double-count with costTracker.getCostForDay(today) on the caller side.
|
|
19
|
+
export function computeHistoricalCosts(sessionStore, currentSessionId, refTs = Date.now()) {
|
|
20
|
+
const weekAgo = new Date(refTs - 7 * 24 * 60 * 60 * 1000);
|
|
21
|
+
let priorDailyCostUsd = 0;
|
|
22
|
+
let priorWeeklyCostUsd = 0;
|
|
23
|
+
try {
|
|
24
|
+
const sessions = sessionStore.loadAllSessions({ since: weekAgo });
|
|
25
|
+
for (const session of sessions) {
|
|
26
|
+
if (session.sessionId === currentSessionId)
|
|
27
|
+
continue;
|
|
28
|
+
if (session.estimatedCostUsd === null)
|
|
29
|
+
continue;
|
|
30
|
+
priorDailyCostUsd += todayPortionOfSessionCost(session, refTs);
|
|
31
|
+
priorWeeklyCostUsd += session.estimatedCostUsd;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
// Non-fatal: fall back to session-only costs if history is unreadable
|
|
36
|
+
logger.warn('Failed to load historical costs — budget thresholds may be inaccurate', {
|
|
37
|
+
error: String(err),
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
return { priorDailyCostUsd, priorWeeklyCostUsd };
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=historical-costs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"historical-costs.js","sourceRoot":"","sources":["../../src/storage/historical-costs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAG3D,MAAM,MAAM,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAC;AAEhD,+EAA+E;AAC/E,EAAE;AACF,kFAAkF;AAClF,6EAA6E;AAC7E,wCAAwC;AACxC,wEAAwE;AACxE,4EAA4E;AAC5E,0DAA0D;AAC1D,yEAAyE;AACzE,qEAAqE;AACrE,wEAAwE;AACxE,4EAA4E;AAC5E,EAAE;AACF,8EAA8E;AAC9E,yEAAyE;AACzE,MAAM,UAAU,sBAAsB,CACpC,YAAmD,EACnD,gBAAwB,EACxB,QAAgB,IAAI,CAAC,GAAG,EAAE;IAE1B,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1D,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,YAAY,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAClE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,OAAO,CAAC,SAAS,KAAK,gBAAgB;gBAAE,SAAS;YACrD,IAAI,OAAO,CAAC,gBAAgB,KAAK,IAAI;gBAAE,SAAS;YAChD,iBAAiB,IAAI,yBAAyB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC/D,kBAAkB,IAAI,OAAO,CAAC,gBAAgB,CAAC;QACjD,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,sEAAsE;QACtE,MAAM,CAAC,IAAI,CAAC,uEAAuE,EAAE;YACnF,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;SACnB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
import { type SessionNameSource } from '../hooks/session-resolver.js';
|
|
15
15
|
import type { SessionSummary, ReplayTimelineEntry, SessionAttribution } from './types.js';
|
|
16
16
|
import type { SessionTracker } from '../metrics/session-tracker.js';
|
|
17
|
-
import type { CostTracker, EstimatedModelUsage, UnpricedModelUsage } from '../metrics/cost-tracker.js';
|
|
17
|
+
import type { CostTracker, ByteEstimateLedger, EstimatedModelUsage, UnpricedModelUsage } from '../metrics/cost-tracker.js';
|
|
18
18
|
import type { TurnCostAttributor } from '../metrics/turn-cost-attributor.js';
|
|
19
19
|
import type { TaskDetector } from '../metrics/task-detector.js';
|
|
20
20
|
import type { AntiPatternDetector } from '../metrics/anti-patterns.js';
|
|
@@ -101,6 +101,19 @@ export interface FullSessionSummary extends SessionSummary {
|
|
|
101
101
|
readonly unpricedByModel?: Record<string, UnpricedModelUsage>;
|
|
102
102
|
/** Calls priced from a sibling model; their cost is in the totals as an estimate. */
|
|
103
103
|
readonly estimatedByModel?: Record<string, EstimatedModelUsage>;
|
|
104
|
+
/**
|
|
105
|
+
* Byte-estimated share of the cost and token totals that a real token report
|
|
106
|
+
* has not yet replaced (see `ByteEstimateLedger`). Written all-zero once the
|
|
107
|
+
* report arrives so it overwrites an earlier non-zero copy on merge.
|
|
108
|
+
*/
|
|
109
|
+
readonly byteEstimates?: ByteEstimateLedger;
|
|
110
|
+
/**
|
|
111
|
+
* The totals above without the ledger. `mergeSummaries` max-merges these and
|
|
112
|
+
* adds the latest ledger back, so a shrinking ledger never competes with
|
|
113
|
+
* another writer's larger exact total. Absent on summaries written before
|
|
114
|
+
* this field, where it is derived as total minus ledger.
|
|
115
|
+
*/
|
|
116
|
+
readonly exactTotals?: ExactTotals;
|
|
104
117
|
readonly tokensInput: number;
|
|
105
118
|
readonly tokensOutput: number;
|
|
106
119
|
readonly tokensThinking: number;
|
|
@@ -228,6 +241,13 @@ export interface ListSessionsOptions {
|
|
|
228
241
|
since?: Date;
|
|
229
242
|
developer?: string;
|
|
230
243
|
}
|
|
244
|
+
/** Exact-only (non-byte-estimated) share of the cost and token totals. */
|
|
245
|
+
export interface ExactTotals {
|
|
246
|
+
readonly costUsd: number;
|
|
247
|
+
readonly inputTokens: number;
|
|
248
|
+
readonly outputTokens: number;
|
|
249
|
+
readonly costByDayUsd: Readonly<Record<string, number>>;
|
|
250
|
+
}
|
|
231
251
|
export declare function mergeSummaries(existing: FullSessionSummary, incoming: FullSessionSummary): FullSessionSummary;
|
|
232
252
|
export declare class SessionStore {
|
|
233
253
|
private readonly sessionsDir;
|
|
@@ -325,6 +345,8 @@ interface SerializedFullSessionSummary {
|
|
|
325
345
|
readonly subagentCostByDayUsd?: unknown;
|
|
326
346
|
readonly unpricedByModel?: unknown;
|
|
327
347
|
readonly estimatedByModel?: unknown;
|
|
348
|
+
readonly byteEstimates?: unknown;
|
|
349
|
+
readonly exactTotals?: unknown;
|
|
328
350
|
readonly tokensInput?: unknown;
|
|
329
351
|
readonly tokensOutput?: unknown;
|
|
330
352
|
readonly tokensThinking?: unknown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../src/storage/session-store.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../src/storage/session-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -164,9 +164,38 @@ function mergeTimeline(existing, incoming) {
|
|
|
164
164
|
? merged.slice(merged.length - MAX_TIMELINE_ENTRIES)
|
|
165
165
|
: merged;
|
|
166
166
|
}
|
|
167
|
+
/**
|
|
168
|
+
* `exactTotals` as stored, or derived as total minus ledger for a summary that
|
|
169
|
+
* predates the field. A merged total cannot be split afterwards (the file does
|
|
170
|
+
* not record which writer's figure won the max), so writers persist the split.
|
|
171
|
+
*/
|
|
172
|
+
function exactTotalsOf(s) {
|
|
173
|
+
if (s.exactTotals)
|
|
174
|
+
return s.exactTotals;
|
|
175
|
+
const ledger = s.byteEstimates;
|
|
176
|
+
return {
|
|
177
|
+
costUsd: Math.max(0, (s.estimatedCostUsd ?? 0) - (ledger?.costUsd ?? 0)),
|
|
178
|
+
inputTokens: Math.max(0, (s.tokensInput ?? 0) - (ledger?.inputTokens ?? 0)),
|
|
179
|
+
outputTokens: Math.max(0, (s.tokensOutput ?? 0) - (ledger?.outputTokens ?? 0)),
|
|
180
|
+
costByDayUsd: subtractRecord(s.costByDayUsd ?? {}, ledger?.costByDayUsd ?? {}),
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
/** Per-key `a + b` over the union of keys. */
|
|
184
|
+
function addRecord(a, b) {
|
|
185
|
+
const out = { ...a };
|
|
186
|
+
for (const [k, v] of Object.entries(b))
|
|
187
|
+
out[k] = (out[k] ?? 0) + v;
|
|
188
|
+
return out;
|
|
189
|
+
}
|
|
190
|
+
/** Per-key `a - b`, clamped at zero. */
|
|
191
|
+
function subtractRecord(a, b) {
|
|
192
|
+
const out = {};
|
|
193
|
+
for (const [k, v] of Object.entries(a))
|
|
194
|
+
out[k] = Math.max(0, v - (b[k] ?? 0));
|
|
195
|
+
return out;
|
|
196
|
+
}
|
|
167
197
|
export function mergeSummaries(existing, incoming) {
|
|
168
198
|
const maxNum = (a, b) => Math.max(typeof a === 'number' ? a : 0, typeof b === 'number' ? b : 0);
|
|
169
|
-
const maxNullable = (a, b) => a === null && b === null ? null : Math.max(a ?? 0, b ?? 0);
|
|
170
199
|
const mergeCounts = (a = {}, b = {}) => {
|
|
171
200
|
const out = { ...a };
|
|
172
201
|
for (const [k, v] of Object.entries(b))
|
|
@@ -208,10 +237,30 @@ export function mergeSummaries(existing, incoming) {
|
|
|
208
237
|
* bucket-less legacy summaries must merge to `undefined`, not to `{}`.
|
|
209
238
|
*/
|
|
210
239
|
const mergeDayMap = (a, b) => a === undefined && b === undefined ? undefined : mergeCounts(a, b);
|
|
211
|
-
|
|
240
|
+
// The ledger is latest-wins and shrinks when a real report replaces it, so
|
|
241
|
+
// only the exact-only totals are max-merged; the merged ledger is added back
|
|
242
|
+
// on top. A max over the estimate-laden totals would keep the stale estimate.
|
|
243
|
+
const mergedLedger = incoming.byteEstimates ?? existing.byteEstimates;
|
|
244
|
+
const existingExact = exactTotalsOf(existing);
|
|
245
|
+
const incomingExact = exactTotalsOf(incoming);
|
|
246
|
+
const exactTotals = {
|
|
247
|
+
costUsd: Math.max(existingExact.costUsd, incomingExact.costUsd),
|
|
248
|
+
inputTokens: Math.max(existingExact.inputTokens, incomingExact.inputTokens),
|
|
249
|
+
outputTokens: Math.max(existingExact.outputTokens, incomingExact.outputTokens),
|
|
250
|
+
costByDayUsd: mergeCounts(existingExact.costByDayUsd, incomingExact.costByDayUsd),
|
|
251
|
+
};
|
|
252
|
+
const estimatedCostUsd = existing.estimatedCostUsd === null && incoming.estimatedCostUsd === null
|
|
253
|
+
? null
|
|
254
|
+
: exactTotals.costUsd + (mergedLedger?.costUsd ?? 0);
|
|
255
|
+
const costByDayUsd = existing.costByDayUsd === undefined && incoming.costByDayUsd === undefined
|
|
256
|
+
? undefined
|
|
257
|
+
: addRecord(exactTotals.costByDayUsd, mergedLedger?.costByDayUsd ?? {});
|
|
212
258
|
const subagentCostByDayUsd = mergeDayMap(existing.subagentCostByDayUsd, incoming.subagentCostByDayUsd);
|
|
213
259
|
const unpricedByModel = mergeCallUsageMax(existing.unpricedByModel, incoming.unpricedByModel);
|
|
214
260
|
const estimatedByModel = mergeCallUsageMax(existing.estimatedByModel, incoming.estimatedByModel);
|
|
261
|
+
// Latest writer wins, not max: the ledger shrinks to zero when a real report
|
|
262
|
+
// replaces it, and a max-merge would resurrect the stale estimate.
|
|
263
|
+
const byteEstimates = mergedLedger;
|
|
215
264
|
const mergeCostByWorkflowRunId = (a = {}, b = {}) => {
|
|
216
265
|
const out = { ...a };
|
|
217
266
|
for (const [runId, dayCosts] of Object.entries(b)) {
|
|
@@ -292,14 +341,16 @@ export function mergeSummaries(existing, incoming) {
|
|
|
292
341
|
testPassCount: maxNum(existing.testPassCount, incoming.testPassCount),
|
|
293
342
|
buildRunCount: maxNum(existing.buildRunCount, incoming.buildRunCount),
|
|
294
343
|
buildPassCount: maxNum(existing.buildPassCount, incoming.buildPassCount),
|
|
295
|
-
estimatedCostUsd
|
|
344
|
+
estimatedCostUsd,
|
|
296
345
|
subagentCostUsd: maxNum(existing.subagentCostUsd, incoming.subagentCostUsd),
|
|
297
346
|
...(costByDayUsd !== undefined ? { costByDayUsd } : {}),
|
|
298
347
|
...(subagentCostByDayUsd !== undefined ? { subagentCostByDayUsd } : {}),
|
|
299
348
|
...(unpricedByModel !== undefined ? { unpricedByModel } : {}),
|
|
300
349
|
...(estimatedByModel !== undefined ? { estimatedByModel } : {}),
|
|
301
|
-
|
|
302
|
-
|
|
350
|
+
...(byteEstimates !== undefined ? { byteEstimates } : {}),
|
|
351
|
+
exactTotals,
|
|
352
|
+
tokensInput: exactTotals.inputTokens + (mergedLedger?.inputTokens ?? 0),
|
|
353
|
+
tokensOutput: exactTotals.outputTokens + (mergedLedger?.outputTokens ?? 0),
|
|
303
354
|
tokensThinking: maxNum(existing.tokensThinking, incoming.tokensThinking),
|
|
304
355
|
tokensCacheRead: maxNum(existing.tokensCacheRead, incoming.tokensCacheRead),
|
|
305
356
|
tokensCacheCreation: maxNum(existing.tokensCacheCreation, incoming.tokensCacheCreation),
|
|
@@ -766,6 +817,19 @@ export function buildSessionSummary(sources) {
|
|
|
766
817
|
...(costMetrics && Object.keys(costMetrics.estimatedByModel).length > 0
|
|
767
818
|
? { estimatedByModel: costMetrics.estimatedByModel }
|
|
768
819
|
: {}),
|
|
820
|
+
...(costMetrics?.byteEstimates !== undefined
|
|
821
|
+
? { byteEstimates: costMetrics.byteEstimates }
|
|
822
|
+
: {}),
|
|
823
|
+
...(costMetrics?.byteEstimates !== undefined
|
|
824
|
+
? {
|
|
825
|
+
exactTotals: {
|
|
826
|
+
costUsd: Math.max(0, (costMetrics.sessionTotalCostUsd ?? 0) - costMetrics.byteEstimates.costUsd),
|
|
827
|
+
inputTokens: Math.max(0, costMetrics.totalInputTokens - costMetrics.byteEstimates.inputTokens),
|
|
828
|
+
outputTokens: Math.max(0, costMetrics.totalOutputTokens - costMetrics.byteEstimates.outputTokens),
|
|
829
|
+
costByDayUsd: subtractRecord(costMetrics.costByDayUsd, costMetrics.byteEstimates.costByDayUsd),
|
|
830
|
+
},
|
|
831
|
+
}
|
|
832
|
+
: {}),
|
|
769
833
|
tokensInput: costMetrics?.totalInputTokens ?? 0,
|
|
770
834
|
tokensOutput: costMetrics?.totalOutputTokens ?? 0,
|
|
771
835
|
tokensThinking: costMetrics?.totalThinkingTokens ?? 0,
|
|
@@ -930,6 +994,31 @@ function parseNumberRecord(value) {
|
|
|
930
994
|
return out;
|
|
931
995
|
}
|
|
932
996
|
const MAX_MODEL_ID_LENGTH = 256;
|
|
997
|
+
function parseByteEstimates(value) {
|
|
998
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
999
|
+
return undefined;
|
|
1000
|
+
const obj = value;
|
|
1001
|
+
const finite = (v) => (typeof v === 'number' && Number.isFinite(v) ? v : 0);
|
|
1002
|
+
return {
|
|
1003
|
+
costUsd: finite(obj.costUsd),
|
|
1004
|
+
inputTokens: finite(obj.inputTokens),
|
|
1005
|
+
outputTokens: finite(obj.outputTokens),
|
|
1006
|
+
costByModel: parseNumberRecord(obj.costByModel) ?? {},
|
|
1007
|
+
costByDayUsd: parseNumberRecord(obj.costByDayUsd) ?? {},
|
|
1008
|
+
};
|
|
1009
|
+
}
|
|
1010
|
+
function parseExactTotals(value) {
|
|
1011
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
1012
|
+
return undefined;
|
|
1013
|
+
const obj = value;
|
|
1014
|
+
const finite = (v) => (typeof v === 'number' && Number.isFinite(v) ? v : 0);
|
|
1015
|
+
return {
|
|
1016
|
+
costUsd: finite(obj.costUsd),
|
|
1017
|
+
inputTokens: finite(obj.inputTokens),
|
|
1018
|
+
outputTokens: finite(obj.outputTokens),
|
|
1019
|
+
costByDayUsd: parseNumberRecord(obj.costByDayUsd) ?? {},
|
|
1020
|
+
};
|
|
1021
|
+
}
|
|
933
1022
|
function parseUnpricedByModel(value) {
|
|
934
1023
|
return parseCallUsageRecord(value, () => ({}));
|
|
935
1024
|
}
|
|
@@ -1137,6 +1226,8 @@ export function deserializeFullSessionSummary(obj) {
|
|
|
1137
1226
|
subagentCostByDayUsd: parseNumberRecord(obj.subagentCostByDayUsd),
|
|
1138
1227
|
unpricedByModel: parseUnpricedByModel(obj.unpricedByModel),
|
|
1139
1228
|
estimatedByModel: parseEstimatedByModel(obj.estimatedByModel),
|
|
1229
|
+
byteEstimates: parseByteEstimates(obj.byteEstimates),
|
|
1230
|
+
exactTotals: parseExactTotals(obj.exactTotals),
|
|
1140
1231
|
tokensInput: typeof obj.tokensInput === 'number' ? obj.tokensInput : 0,
|
|
1141
1232
|
tokensOutput: typeof obj.tokensOutput === 'number' ? obj.tokensOutput : 0,
|
|
1142
1233
|
tokensThinking: typeof obj.tokensThinking === 'number' ? obj.tokensThinking : 0,
|