@newrelic/preflight 1.0.4 → 1.0.5
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 +2 -1
- package/dist/alerts/types.d.ts.map +1 -1
- package/dist/alerts/types.js.map +1 -1
- package/dist/config.js +3 -3
- package/dist/config.js.map +1 -1
- package/dist/dashboard/dashboard-server.d.ts +4 -0
- package/dist/dashboard/dashboard-server.d.ts.map +1 -1
- package/dist/dashboard/dashboard-server.js +42 -1
- package/dist/dashboard/dashboard-server.js.map +1 -1
- package/dist/dashboard/live-event-bus.js +2 -2
- package/dist/dashboard/live-event-bus.js.map +1 -1
- package/dist/dashboard/routes/sse-handler.js +3 -3
- package/dist/dashboard/routes/sse-handler.js.map +1 -1
- package/dist/hooks/collector-script.d.ts.map +1 -1
- package/dist/hooks/collector-script.js +1 -5
- package/dist/hooks/collector-script.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/install/schedule.d.ts +1 -0
- package/dist/install/schedule.d.ts.map +1 -1
- package/dist/install/schedule.js +23 -5
- package/dist/install/schedule.js.map +1 -1
- package/dist/metrics/anti-patterns.d.ts.map +1 -1
- package/dist/metrics/anti-patterns.js.map +1 -1
- package/dist/metrics/context-composition-tracker.d.ts.map +1 -1
- package/dist/metrics/context-composition-tracker.js.map +1 -1
- package/dist/platforms/copilot-adapter.d.ts.map +1 -1
- package/dist/platforms/copilot-adapter.js.map +1 -1
- package/dist/proxy/otlp-receiver.d.ts.map +1 -1
- package/dist/proxy/otlp-receiver.js.map +1 -1
- package/dist/proxy/proxy-manager.js +1 -1
- package/dist/proxy/proxy-manager.js.map +1 -1
- package/dist/proxy/upstream-stdio.d.ts.map +1 -1
- package/dist/proxy/upstream-stdio.js.map +1 -1
- package/dist/security/ssrf.js +1 -1
- package/dist/security/ssrf.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -1
- package/dist/server.js.map +1 -1
- package/dist/shared/__test-utils__/log-output.d.ts +1 -2
- package/dist/shared/__test-utils__/log-output.d.ts.map +1 -1
- package/dist/shared/__test-utils__/log-output.js +1 -2
- package/dist/shared/__test-utils__/log-output.js.map +1 -1
- package/dist/shared/config.d.ts +8 -2
- package/dist/shared/config.d.ts.map +1 -1
- package/dist/shared/config.js +20 -20
- package/dist/shared/config.js.map +1 -1
- package/dist/shared/errors.d.ts +1 -1
- package/dist/shared/errors.js +10 -10
- package/dist/shared/errors.js.map +1 -1
- package/dist/shared/events/factory.js +12 -12
- package/dist/shared/events/factory.js.map +1 -1
- package/dist/shared/events/serialize.d.ts +2 -2
- package/dist/shared/events/serialize.js +19 -19
- package/dist/shared/events/serialize.js.map +1 -1
- package/dist/shared/harvest/event-buffer.d.ts +2 -2
- package/dist/shared/harvest/event-buffer.js +3 -3
- package/dist/shared/harvest/event-buffer.js.map +1 -1
- package/dist/shared/harvest/harvest-scheduler.d.ts +4 -5
- package/dist/shared/harvest/harvest-scheduler.d.ts.map +1 -1
- package/dist/shared/harvest/harvest-scheduler.js +35 -35
- package/dist/shared/harvest/harvest-scheduler.js.map +1 -1
- package/dist/shared/harvest/metric-aggregator.d.ts +9 -9
- package/dist/shared/harvest/metric-aggregator.d.ts.map +1 -1
- package/dist/shared/harvest/metric-aggregator.js +16 -18
- package/dist/shared/harvest/metric-aggregator.js.map +1 -1
- package/dist/shared/index.d.ts +0 -1
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +0 -1
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/logger.d.ts +4 -5
- package/dist/shared/logger.d.ts.map +1 -1
- package/dist/shared/logger.js +12 -12
- package/dist/shared/logger.js.map +1 -1
- package/dist/shared/pricing-data.js +10 -10
- package/dist/shared/pricing-data.js.map +1 -1
- package/dist/shared/pricing.d.ts +3 -3
- package/dist/shared/pricing.js +12 -12
- package/dist/shared/pricing.js.map +1 -1
- package/dist/shared/redact.d.ts +1 -3
- package/dist/shared/redact.d.ts.map +1 -1
- package/dist/shared/redact.js +8 -10
- package/dist/shared/redact.js.map +1 -1
- package/dist/shared/timing.d.ts +4 -4
- package/dist/shared/timing.d.ts.map +1 -1
- package/dist/shared/timing.js +9 -9
- package/dist/shared/timing.js.map +1 -1
- package/dist/shared/tokens.d.ts +4 -4
- package/dist/shared/tokens.js +16 -16
- package/dist/shared/tokens.js.map +1 -1
- package/dist/shared/transport/events-api.d.ts +1 -1
- package/dist/shared/transport/events-api.d.ts.map +1 -1
- package/dist/shared/transport/events-api.js +2 -1
- package/dist/shared/transport/events-api.js.map +1 -1
- package/dist/shared/transport/http-client.d.ts +1 -1
- package/dist/shared/transport/http-client.d.ts.map +1 -1
- package/dist/shared/transport/http-client.js +19 -28
- package/dist/shared/transport/http-client.js.map +1 -1
- package/dist/shared/transport/logs-api.d.ts +2 -3
- package/dist/shared/transport/logs-api.d.ts.map +1 -1
- package/dist/shared/transport/logs-api.js +3 -3
- package/dist/shared/transport/logs-api.js.map +1 -1
- package/dist/shared/transport/metric-api.d.ts.map +1 -1
- package/dist/shared/transport/metric-api.js +1 -0
- package/dist/shared/transport/metric-api.js.map +1 -1
- package/dist/shared/transport/otlp-event-bridge.d.ts +10 -5
- package/dist/shared/transport/otlp-event-bridge.d.ts.map +1 -1
- package/dist/shared/transport/otlp-event-bridge.js +20 -11
- package/dist/shared/transport/otlp-event-bridge.js.map +1 -1
- package/dist/shared/transport/otlp-shared.d.ts +12 -1
- package/dist/shared/transport/otlp-shared.d.ts.map +1 -1
- package/dist/shared/transport/otlp-shared.js +20 -4
- package/dist/shared/transport/otlp-shared.js.map +1 -1
- package/dist/shared/transport/otlp-transport.d.ts +22 -19
- package/dist/shared/transport/otlp-transport.d.ts.map +1 -1
- package/dist/shared/transport/otlp-transport.js +136 -120
- package/dist/shared/transport/otlp-transport.js.map +1 -1
- package/dist/shared/transport/types.d.ts +7 -3
- package/dist/shared/transport/types.d.ts.map +1 -1
- package/dist/storage/session-store.js +1 -1
- package/dist/storage/weekly-summary.js +3 -3
- package/dist/storage/weekly-summary.js.map +1 -1
- package/dist/tools/cross-session-tools.js +1 -1
- package/dist/tools/cross-session-tools.js.map +1 -1
- package/dist/tools/session-stats.d.ts.map +1 -1
- package/dist/tools/session-stats.js +2 -1
- package/dist/tools/session-stats.js.map +1 -1
- package/dist/tracing/mcp-tracer.js +1 -1
- package/dist/tracing/mcp-tracer.js.map +1 -1
- package/dist/transport/nr-ingest.d.ts.map +1 -1
- package/dist/transport/nr-ingest.js +4 -0
- package/dist/transport/nr-ingest.js.map +1 -1
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +21 -0
- package/dist/version.js.map +1 -0
- package/dist/web/assets/index-CW0UCwb9.css +2 -0
- package/dist/web/assets/index-HRyb4aZK.js +64 -0
- package/dist/web/index.html +2 -2
- package/package.json +23 -23
- package/dist/shared/version.d.ts +0 -2
- package/dist/shared/version.d.ts.map +0 -1
- package/dist/shared/version.js +0 -2
- package/dist/shared/version.js.map +0 -1
- package/dist/web/assets/index-BrL281N-.css +0 -2
- package/dist/web/assets/index-CcaYZzXm.js +0 -42
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/shared/logger.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAsD3D;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7D
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/shared/logger.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAsD3D;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7D;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;CACjD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,QAAQ,GAAG,MAAM,CAEhF"}
|
package/dist/shared/logger.js
CHANGED
|
@@ -6,7 +6,7 @@ const LOG_LEVEL_ORDER = {
|
|
|
6
6
|
error: 3,
|
|
7
7
|
};
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
9
|
+
* Type-safe narrowing helper. The previous
|
|
10
10
|
* `envLevel in LOG_LEVEL_ORDER` check + `as LogLevel` cast was sound at
|
|
11
11
|
* runtime today but the cast hid the gap: TS can't narrow `string` to a
|
|
12
12
|
* literal union via `in`, so a refactor that broadened `LOG_LEVEL_ORDER`
|
|
@@ -28,7 +28,7 @@ function resolveLogLevel() {
|
|
|
28
28
|
/**
|
|
29
29
|
* Cached resolved log level.
|
|
30
30
|
*
|
|
31
|
-
*
|
|
31
|
+
* Previously, every `createLogger()` call re-read `NEW_RELIC_AI_LOG_LEVEL`
|
|
32
32
|
* from the env. If a process changed the env between two calls — common
|
|
33
33
|
* in tests that flip it per-block — the two loggers ended up with
|
|
34
34
|
* different levels, producing flapping behavior that was hard to debug.
|
|
@@ -73,14 +73,14 @@ export function __resetLogLevelCache() {
|
|
|
73
73
|
*
|
|
74
74
|
* makes the http-client module emit only errors regardless of how the
|
|
75
75
|
* rest of the process is configured. Without an override, the level
|
|
76
|
-
* resolves from the env (cached
|
|
76
|
+
* resolves from the env (cached) and tracks
|
|
77
77
|
* process-wide changes via `__resetLogLevelCache()`.
|
|
78
78
|
*/
|
|
79
79
|
export function createLogger(component, levelOverride) {
|
|
80
80
|
return createLoggerInternal(component, levelOverride, undefined);
|
|
81
81
|
}
|
|
82
82
|
function createLoggerInternal(component, levelOverride, boundContext) {
|
|
83
|
-
//
|
|
83
|
+
// When no override is supplied, the minimum level is
|
|
84
84
|
// resolved per-log-call via the cached `getMinLevel()` so a process-wide
|
|
85
85
|
// log-level change (env mutation + cache reset) takes effect immediately
|
|
86
86
|
// for already-constructed loggers — without a Map lookup penalty in the
|
|
@@ -91,7 +91,7 @@ function createLoggerInternal(component, levelOverride, boundContext) {
|
|
|
91
91
|
const minLevelOrder = fixedLevelOrder ?? LOG_LEVEL_ORDER[getMinLevel()];
|
|
92
92
|
if (LOG_LEVEL_ORDER[level] < minLevelOrder)
|
|
93
93
|
return;
|
|
94
|
-
//
|
|
94
|
+
// Defensively redact secret-shaped keys from caller-supplied `data`
|
|
95
95
|
// before merging into the log entry. Callers occasionally pass through
|
|
96
96
|
// config objects (`{ ...config }`) or response payloads that contain
|
|
97
97
|
// licenseKey / authorization headers; without this guard those fields
|
|
@@ -99,13 +99,13 @@ function createLoggerInternal(component, levelOverride, boundContext) {
|
|
|
99
99
|
const safeData = data === undefined ? undefined : redact(data);
|
|
100
100
|
const now = new Date();
|
|
101
101
|
const entry = {
|
|
102
|
-
//
|
|
102
|
+
// Bound context first, per-call data wins on key collision.
|
|
103
103
|
// Canonical fields come last so callers cannot accidentally overwrite
|
|
104
104
|
// level, message, component, timestamp, or epoch_ms.
|
|
105
105
|
...(boundContext ?? {}),
|
|
106
106
|
...safeData,
|
|
107
107
|
timestamp: now.toISOString(),
|
|
108
|
-
//
|
|
108
|
+
// epoch_ms alongside ISO timestamp for NR Logs API ingestion.
|
|
109
109
|
epoch_ms: now.getTime(),
|
|
110
110
|
level,
|
|
111
111
|
component,
|
|
@@ -116,7 +116,7 @@ function createLoggerInternal(component, levelOverride, boundContext) {
|
|
|
116
116
|
serialized = JSON.stringify(entry);
|
|
117
117
|
}
|
|
118
118
|
catch {
|
|
119
|
-
//
|
|
119
|
+
// Per-field fallback. JSON.stringify on the whole entry threw,
|
|
120
120
|
// but most fields are probably fine — only one or two values are bad
|
|
121
121
|
// (e.g. a BigInt buried in caller data). Walk top-level keys and
|
|
122
122
|
// replace ONLY the offending ones with '[unserializable]', so
|
|
@@ -124,7 +124,7 @@ function createLoggerInternal(component, levelOverride, boundContext) {
|
|
|
124
124
|
// and any well-formed data fields) still surface. `data` is spread
|
|
125
125
|
// into entry via `...safeData` above, so its keys are already
|
|
126
126
|
// top-level here.
|
|
127
|
-
// NOTE
|
|
127
|
+
// NOTE: this walk operates on top-level entry keys only. If a
|
|
128
128
|
// data field is a nested object containing an unserializable value
|
|
129
129
|
// (e.g. `data = { outer: { amount: 1n } }`), the entire `outer` key is
|
|
130
130
|
// replaced with '[unserializable]' — not just the `amount` sub-key.
|
|
@@ -141,7 +141,7 @@ function createLoggerInternal(component, levelOverride, boundContext) {
|
|
|
141
141
|
}
|
|
142
142
|
serialized = JSON.stringify(safeEntry);
|
|
143
143
|
}
|
|
144
|
-
//
|
|
144
|
+
// Prefer console.error over a raw process.stderr.write. Both go to
|
|
145
145
|
// the same underlying stream, but console.error uses Node's Console
|
|
146
146
|
// implementation which handles formatting and any future buffering
|
|
147
147
|
// changes — and it keeps log output cooperative with consumer code that
|
|
@@ -156,8 +156,8 @@ function createLoggerInternal(component, levelOverride, boundContext) {
|
|
|
156
156
|
child: (context) => createLoggerInternal(component, levelOverride, {
|
|
157
157
|
...(boundContext ?? {}),
|
|
158
158
|
// Redacting at child-creation time avoids re-running redact() on the
|
|
159
|
-
// bound context per log call
|
|
160
|
-
// redacted on every emit
|
|
159
|
+
// bound context per log call. Note: per-call data is still
|
|
160
|
+
// redacted on every emit — only bound context gets the
|
|
161
161
|
// creation-time optimization.
|
|
162
162
|
...redact(context),
|
|
163
163
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/shared/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIrC,MAAM,eAAe,GAA6B;IAChD,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACT,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;AAE/D,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAQ,UAAgC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,WAAW,EAAE,CAAC;IACnE,IAAI,QAAQ,KAAK,SAAS,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,IAAI,cAAc,GAAoB,IAAI,CAAC;AAE3C,SAAS,WAAW;IAClB,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QAC5B,cAAc,GAAG,eAAe,EAAE,CAAC;IACrC,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB;IAClC,cAAc,GAAG,IAAI,CAAC;AACxB,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/shared/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,12 +21,12 @@ export const MODEL_ALIASES = {
|
|
|
21
21
|
'gemini-3.1-pro': 'gemini-3.1-pro-preview',
|
|
22
22
|
'gemini-3.1-flash-lite': 'gemini-3.1-flash-lite-preview',
|
|
23
23
|
'gemini-3-flash': 'gemini-3-flash-preview',
|
|
24
|
-
// Gemini family shortcuts
|
|
24
|
+
// Gemini family shortcuts: without these, bare family queries like
|
|
25
25
|
// 'gemini-2.5' return null (gpt-style .x suffixes don't match -\d prefix
|
|
26
26
|
// heuristic) or non-deterministically pick between pro/flash.
|
|
27
27
|
'gemini-2.5': 'gemini-2.5-pro',
|
|
28
28
|
'gemini-2.0': 'gemini-2.0-flash',
|
|
29
|
-
// OpenAI family shortcuts
|
|
29
|
+
// OpenAI family shortcuts: 'gpt-5' has no exact key and the .x
|
|
30
30
|
// suffix prevents the forward-prefix heuristic from matching.
|
|
31
31
|
'gpt-5': 'gpt-5.5',
|
|
32
32
|
};
|
|
@@ -67,7 +67,7 @@ export const DEFAULT_PRICING_TABLE = {
|
|
|
67
67
|
// Dateless current-gen entry — MODEL_ALIASES['claude-haiku-4'] routes here.
|
|
68
68
|
// Matches the opus/sonnet convention: alias → dateless key → dated legacy key.
|
|
69
69
|
// Update this entry when Haiku 4.x rates change; the dated entry below is
|
|
70
|
-
// retained only for historical-cost backfill
|
|
70
|
+
// retained only for historical-cost backfill.
|
|
71
71
|
'claude-haiku-4-5': {
|
|
72
72
|
inputPerMTok: 1,
|
|
73
73
|
outputPerMTok: 5,
|
|
@@ -85,7 +85,7 @@ export const DEFAULT_PRICING_TABLE = {
|
|
|
85
85
|
contextWindow: 200_000,
|
|
86
86
|
},
|
|
87
87
|
// ---- Anthropic (legacy Claude 4 generation) ----
|
|
88
|
-
//
|
|
88
|
+
// These legacy entries share input/output/cache rates
|
|
89
89
|
// with their current-generation counterparts, but `contextWindow` differs
|
|
90
90
|
// (200K legacy vs 1M current). They are NOT alias candidates: the cost
|
|
91
91
|
// calculations downstream don't use contextWindow, but downstream tooling
|
|
@@ -120,7 +120,7 @@ export const DEFAULT_PRICING_TABLE = {
|
|
|
120
120
|
// The reverse-prefix algorithm strips only 8-digit date suffixes, so a
|
|
121
121
|
// future model named 'claude-opus-4-10' (or 'claude-opus-4-100') would
|
|
122
122
|
// match this entry via reverse-prefix because
|
|
123
|
-
// 'claude-opus-4-10'.startsWith('claude-opus-4-1') is true
|
|
123
|
+
// 'claude-opus-4-10'.startsWith('claude-opus-4-1') is true.
|
|
124
124
|
// If Anthropic releases a claude-opus-4-10 model, add an explicit alias
|
|
125
125
|
// before that model key appears in the table.
|
|
126
126
|
'claude-opus-4-1': {
|
|
@@ -235,7 +235,7 @@ export const DEFAULT_PRICING_TABLE = {
|
|
|
235
235
|
cacheReadPerMTok: 0.5,
|
|
236
236
|
contextWindow: 1_000_000,
|
|
237
237
|
// OpenAI long-context pricing is marginal: only tokens above 270k are
|
|
238
|
-
// billed at the tier rate — not the entire request
|
|
238
|
+
// billed at the tier rate — not the entire request.
|
|
239
239
|
tierThreshold: 270_000,
|
|
240
240
|
tierMode: 'marginal',
|
|
241
241
|
tierInputPerMTok: 10,
|
|
@@ -296,7 +296,7 @@ export const DEFAULT_PRICING_TABLE = {
|
|
|
296
296
|
// completion_tokens at outputPerMTok. The extractor sets thinkingTokens
|
|
297
297
|
// from completion_tokens_details.reasoning_tokens as an informational
|
|
298
298
|
// breakdown, but those tokens are already counted in outputTokens, so
|
|
299
|
-
// a separate thinkingPerMTok rate would double-bill
|
|
299
|
+
// a separate thinkingPerMTok rate would double-bill.
|
|
300
300
|
contextWindow: 200_000,
|
|
301
301
|
},
|
|
302
302
|
'o1-mini': {
|
|
@@ -312,7 +312,7 @@ export const DEFAULT_PRICING_TABLE = {
|
|
|
312
312
|
o3: {
|
|
313
313
|
inputPerMTok: 10,
|
|
314
314
|
outputPerMTok: 40,
|
|
315
|
-
// No thinkingPerMTok — see 'o1' comment above
|
|
315
|
+
// No thinkingPerMTok — see 'o1' comment above.
|
|
316
316
|
contextWindow: 200_000,
|
|
317
317
|
},
|
|
318
318
|
'o3-mini': {
|
|
@@ -337,7 +337,7 @@ export const DEFAULT_PRICING_TABLE = {
|
|
|
337
337
|
},
|
|
338
338
|
// ---- AWS Bedrock (Converse API pricing for on-demand) ----
|
|
339
339
|
// Current Claude generation via Bedrock
|
|
340
|
-
// NOTE
|
|
340
|
+
// NOTE: cache pricing for claude-opus-4-7 and claude-sonnet-4-6 on
|
|
341
341
|
// Bedrock has not been publicly documented as of 2026-06-03. Rates below are
|
|
342
342
|
// omitted until verified against the AWS Bedrock pricing page.
|
|
343
343
|
'anthropic.claude-opus-4-7': {
|
|
@@ -356,7 +356,7 @@ export const DEFAULT_PRICING_TABLE = {
|
|
|
356
356
|
contextWindow: 200_000,
|
|
357
357
|
},
|
|
358
358
|
// Legacy Claude models via Bedrock cross-region inference
|
|
359
|
-
// Cache rates verified against AWS Bedrock pricing page (2026-06-03)
|
|
359
|
+
// Cache rates verified against AWS Bedrock pricing page (2026-06-03).
|
|
360
360
|
'anthropic.claude-3-5-sonnet-20241022-v2:0': {
|
|
361
361
|
inputPerMTok: 3,
|
|
362
362
|
outputPerMTok: 15,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing-data.js","sourceRoot":"","sources":["../../src/shared/pricing-data.ts"],"names":[],"mappings":"AAEA,8EAA8E;AAC9E,+CAA+C;AAC/C,EAAE;AACF,yEAAyE;AACzE,2EAA2E;AAC3E,4EAA4E;AAC5E,8EAA8E;AAC9E,uEAAuE;AACvE,mEAAmE;AACnE,EAAE;AACF,4EAA4E;AAC5E,2BAA2B;AAC3B,8EAA8E;AAC9E,MAAM,CAAC,MAAM,aAAa,GAA2B;IACnD,4BAA4B;IAC5B,eAAe,EAAE,iBAAiB;IAClC,iBAAiB,EAAE,mBAAmB;IACtC,gBAAgB,EAAE,kBAAkB;IACpC,kBAAkB,EAAE,2BAA2B;IAE/C,sCAAsC;IACtC,gBAAgB,EAAE,wBAAwB;IAC1C,uBAAuB,EAAE,+BAA+B;IACxD,gBAAgB,EAAE,wBAAwB;IAC1C,
|
|
1
|
+
{"version":3,"file":"pricing-data.js","sourceRoot":"","sources":["../../src/shared/pricing-data.ts"],"names":[],"mappings":"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"}
|
package/dist/shared/pricing.d.ts
CHANGED
|
@@ -52,7 +52,7 @@ export interface CostBreakdown {
|
|
|
52
52
|
* mis-pointed multi-GB file would OOM `JSON.parse`.
|
|
53
53
|
*
|
|
54
54
|
* Returns the parsed override map on success, or `null` when the file is
|
|
55
|
-
* missing, the wrong shape, too large, or contains no valid entries
|
|
55
|
+
* missing, the wrong shape, too large, or contains no valid entries.
|
|
56
56
|
*
|
|
57
57
|
* **Note:** `null` is returned for both "file not found" and "all entries
|
|
58
58
|
* invalid" — callers cannot distinguish the two cases from the return value
|
|
@@ -103,8 +103,8 @@ export declare class PricingTable {
|
|
|
103
103
|
* file path to overlay user-provided prices on top of the built-in table.
|
|
104
104
|
* Call with `null`/`undefined` to reset to the built-in defaults.
|
|
105
105
|
*
|
|
106
|
-
* **Synchronous I/O — startup-only.** Reads the custom file with `readFileSync
|
|
107
|
-
|
|
106
|
+
* **Synchronous I/O — startup-only.** Reads the custom file with `readFileSync`;
|
|
107
|
+
* calling this on a hot path (e.g. a SIGHUP-triggered
|
|
108
108
|
* reload while the process is serving inference traffic) blocks the event
|
|
109
109
|
* loop. Schedule reloads from a worker thread or wrap in `setImmediate`.
|
|
110
110
|
*
|
package/dist/shared/pricing.js
CHANGED
|
@@ -143,7 +143,7 @@ function validatePricingEntry(model, entry) {
|
|
|
143
143
|
// future / unknown keys from the user's JSON into the merged table, where
|
|
144
144
|
// they would surface in serialization (`Object.entries(...)`) and risk
|
|
145
145
|
// future code mistaking them for valid pricing fields. Built as a single
|
|
146
|
-
// literal to satisfy the readonly interface
|
|
146
|
+
// literal to satisfy the readonly interface.
|
|
147
147
|
return {
|
|
148
148
|
inputPerMTok: e.inputPerMTok,
|
|
149
149
|
outputPerMTok: e.outputPerMTok,
|
|
@@ -177,7 +177,7 @@ function validatePricingEntry(model, entry) {
|
|
|
177
177
|
* mis-pointed multi-GB file would OOM `JSON.parse`.
|
|
178
178
|
*
|
|
179
179
|
* Returns the parsed override map on success, or `null` when the file is
|
|
180
|
-
* missing, the wrong shape, too large, or contains no valid entries
|
|
180
|
+
* missing, the wrong shape, too large, or contains no valid entries.
|
|
181
181
|
*
|
|
182
182
|
* **Note:** `null` is returned for both "file not found" and "all entries
|
|
183
183
|
* invalid" — callers cannot distinguish the two cases from the return value
|
|
@@ -210,7 +210,7 @@ export function loadCustomPricing(filePath) {
|
|
|
210
210
|
return null;
|
|
211
211
|
}
|
|
212
212
|
// Null-prototype object prevents __proto__ assignment from polluting
|
|
213
|
-
// Object.prototype even if a reserved key slips through
|
|
213
|
+
// Object.prototype even if a reserved key slips through.
|
|
214
214
|
const result = Object.create(null);
|
|
215
215
|
const RESERVED = new Set(['__proto__', 'constructor', 'prototype']);
|
|
216
216
|
for (const [model, entry] of Object.entries(parsed)) {
|
|
@@ -224,7 +224,7 @@ export function loadCustomPricing(filePath) {
|
|
|
224
224
|
}
|
|
225
225
|
}
|
|
226
226
|
// Return null when no valid entries were found so callers can distinguish
|
|
227
|
-
// "applied custom pricing" (truthy) from "file present but all invalid"
|
|
227
|
+
// "applied custom pricing" (truthy) from "file present but all invalid".
|
|
228
228
|
if (Object.keys(result).length === 0) {
|
|
229
229
|
logger.warn('Custom pricing file contained no valid entries', { filePath: resolvedPath });
|
|
230
230
|
return null;
|
|
@@ -292,7 +292,7 @@ export class PricingTable {
|
|
|
292
292
|
constructor(customFilePath) {
|
|
293
293
|
// Null-prototype base: Object.assign to a null-prototype target does not
|
|
294
294
|
// invoke the __proto__ setter, so prototype pollution is defused even if
|
|
295
|
-
// loadCustomPricing returns a result containing that key
|
|
295
|
+
// loadCustomPricing returns a result containing that key.
|
|
296
296
|
this.table = Object.assign(Object.create(null), clonePricingTable(DEFAULT_PRICING_TABLE));
|
|
297
297
|
if (customFilePath) {
|
|
298
298
|
const custom = loadCustomPricing(customFilePath);
|
|
@@ -321,9 +321,9 @@ export class PricingTable {
|
|
|
321
321
|
*/
|
|
322
322
|
resolve(modelName) {
|
|
323
323
|
// Returns shallow copies so caller mutation cannot corrupt the instance
|
|
324
|
-
// table — resolved entries are values, not live references
|
|
324
|
+
// table — resolved entries are values, not live references.
|
|
325
325
|
// 1. Exact match — Object.hasOwn guards against inherited prototype values
|
|
326
|
-
// for non-null-prototype tables and makes intent explicit
|
|
326
|
+
// for non-null-prototype tables and makes intent explicit.
|
|
327
327
|
if (Object.hasOwn(this.table, modelName)) {
|
|
328
328
|
return { ...this.table[modelName] };
|
|
329
329
|
}
|
|
@@ -334,7 +334,7 @@ export class PricingTable {
|
|
|
334
334
|
}
|
|
335
335
|
// Forward prefix: find table keys that start with the given name followed
|
|
336
336
|
// by a digit-led suffix. Longest key wins on tie — but two same-length
|
|
337
|
-
// candidates would be non-deterministic
|
|
337
|
+
// candidates would be non-deterministic. Log a warning in that case
|
|
338
338
|
// so future table additions that create ambiguity are visible.
|
|
339
339
|
let bestKey = null;
|
|
340
340
|
let ambiguous = false;
|
|
@@ -351,7 +351,7 @@ export class PricingTable {
|
|
|
351
351
|
}
|
|
352
352
|
}
|
|
353
353
|
if (ambiguous && bestKey !== null) {
|
|
354
|
-
//
|
|
354
|
+
// Returning a non-deterministic result is worse than returning null,
|
|
355
355
|
// because the caller cannot distinguish "pricing found" from "pricing guessed".
|
|
356
356
|
// Returning null forces the table maintainer to add an explicit alias entry
|
|
357
357
|
// rather than silently accepting iteration-order-dependent pricing.
|
|
@@ -410,8 +410,8 @@ const defaultTable = new PricingTable();
|
|
|
410
410
|
* file path to overlay user-provided prices on top of the built-in table.
|
|
411
411
|
* Call with `null`/`undefined` to reset to the built-in defaults.
|
|
412
412
|
*
|
|
413
|
-
* **Synchronous I/O — startup-only.** Reads the custom file with `readFileSync
|
|
414
|
-
|
|
413
|
+
* **Synchronous I/O — startup-only.** Reads the custom file with `readFileSync`;
|
|
414
|
+
* calling this on a hot path (e.g. a SIGHUP-triggered
|
|
415
415
|
* reload while the process is serving inference traffic) blocks the event
|
|
416
416
|
* loop. Schedule reloads from a worker thread or wrap in `setImmediate`.
|
|
417
417
|
*
|
|
@@ -486,7 +486,7 @@ function computeCost(pricing, usage) {
|
|
|
486
486
|
// Savings: what the cache-read tokens would have cost at the full input rate.
|
|
487
487
|
// In marginal mode, the savings rate depends on whether the fresh input
|
|
488
488
|
// exceeded the tier threshold — above-threshold tokens save at the tier rate,
|
|
489
|
-
// not the base rate
|
|
489
|
+
// not the base rate.
|
|
490
490
|
const savingsInputRate = useTier &&
|
|
491
491
|
tierMode === 'marginal' &&
|
|
492
492
|
pricing.tierInputPerMTok !== undefined &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/shared/pricing.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/shared/pricing.ts"],"names":[],"mappings":"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"}
|
package/dist/shared/redact.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ import type { AgentConfig } from './config.js';
|
|
|
11
11
|
* - Functions, symbols, undefined are returned as-is (they don't serialize anyway).
|
|
12
12
|
* - **`Map` and `Set` values are NOT walked for secrets** — they are summarized
|
|
13
13
|
* as `'[Map(N)]'` / `'[Set(N)]'` because `Object.entries` does not enumerate
|
|
14
|
-
* their contents
|
|
14
|
+
* their contents. If credentials are stored as Map entries under a
|
|
15
15
|
* non-secret key (e.g. `{ headers: new Map([['Authorization', 'Bearer x']]) }`),
|
|
16
16
|
* they will NOT be redacted. Convert to plain objects before passing to `redact()`.
|
|
17
17
|
*/
|
|
@@ -26,8 +26,6 @@ export declare function redact<T>(value: T): T;
|
|
|
26
26
|
*
|
|
27
27
|
* Keep `redact()` for arbitrary objects; reach for `safeForLog()` when you
|
|
28
28
|
* specifically have an `AgentConfig` and want a typed return.
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
29
|
*/
|
|
32
30
|
export declare function safeForLog(config: AgentConfig): Readonly<AgentConfig>;
|
|
33
31
|
//# sourceMappingURL=redact.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/shared/redact.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAoB/C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAErC;AA4CD
|
|
1
|
+
{"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/shared/redact.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAoB/C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAErC;AA4CD;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,CAErE"}
|
package/dist/shared/redact.js
CHANGED
|
@@ -10,22 +10,22 @@
|
|
|
10
10
|
// redact() before handing it to a logger or external sink.
|
|
11
11
|
//
|
|
12
12
|
// safeForLog(config) — convenience wrapper that returns a redacted copy of an
|
|
13
|
-
// AgentConfig, suitable for diagnostic dumps.
|
|
13
|
+
// AgentConfig, suitable for diagnostic dumps.
|
|
14
14
|
// ---------------------------------------------------------------------------
|
|
15
15
|
// Pattern notes:
|
|
16
|
-
// - `key(?!s)` matches `apiKey`, `licenseKey`, bare `key`, but NOT `keys` (plural
|
|
17
|
-
// The `\b` word-boundary upgrade that was applied to `token\b`
|
|
18
|
-
// `credentials?\b`
|
|
16
|
+
// - `key(?!s)` matches `apiKey`, `licenseKey`, bare `key`, but NOT `keys` (plural).
|
|
17
|
+
// The `\b` word-boundary upgrade that was applied to `token\b` and
|
|
18
|
+
// `credentials?\b` cannot be applied here: CamelCase names like `licenseKey`
|
|
19
19
|
// and `apiKey` do NOT have a word boundary before the `K` (both sides are word chars),
|
|
20
|
-
// so `\bkey` would FAIL to match them (
|
|
20
|
+
// so `\bkey` would FAIL to match them (deliberate false-positive trade-off).
|
|
21
21
|
// Mid-word false positives (`monkey`, `jockey`) are accepted in exchange for reliably
|
|
22
22
|
// redacting all camelCase key properties. A regex-only fix is not feasible without
|
|
23
23
|
// enumerating every legitimate CamelCase prefix, which would miss future additions.
|
|
24
24
|
// - `token\b` matches `apiToken`, `accessToken`, bare `token`, but NOT `tokenCount`,
|
|
25
|
-
// `tokenize`, `tokenAmount`, etc.
|
|
25
|
+
// `tokenize`, `tokenAmount`, etc. The `\b` works here because `token` almost
|
|
26
26
|
// never appears mid-word in legitimate property names.
|
|
27
27
|
// - `credentials?\b` matches `credential` and `credentials`, but NOT `credentialType`,
|
|
28
|
-
// `credentialProvider`, etc.
|
|
28
|
+
// `credentialProvider`, etc. Same fix applied to `passwords?\b`.
|
|
29
29
|
const SECRET_KEY_RE = /key(?!s)|token\b|secret|passwords?\b|authorization|credentials?\b|bearer/i;
|
|
30
30
|
const REDACTED = '***';
|
|
31
31
|
const MAX_DEPTH = 8;
|
|
@@ -41,7 +41,7 @@ const MAX_DEPTH = 8;
|
|
|
41
41
|
* - Functions, symbols, undefined are returned as-is (they don't serialize anyway).
|
|
42
42
|
* - **`Map` and `Set` values are NOT walked for secrets** — they are summarized
|
|
43
43
|
* as `'[Map(N)]'` / `'[Set(N)]'` because `Object.entries` does not enumerate
|
|
44
|
-
* their contents
|
|
44
|
+
* their contents. If credentials are stored as Map entries under a
|
|
45
45
|
* non-secret key (e.g. `{ headers: new Map([['Authorization', 'Bearer x']]) }`),
|
|
46
46
|
* they will NOT be redacted. Convert to plain objects before passing to `redact()`.
|
|
47
47
|
*/
|
|
@@ -101,8 +101,6 @@ function redactInner(value, depth, ancestors) {
|
|
|
101
101
|
*
|
|
102
102
|
* Keep `redact()` for arbitrary objects; reach for `safeForLog()` when you
|
|
103
103
|
* specifically have an `AgentConfig` and want a typed return.
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
104
|
*/
|
|
107
105
|
export function safeForLog(config) {
|
|
108
106
|
return Object.freeze(redact(config));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/shared/redact.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,sEAAsE;AACtE,uEAAuE;AACvE,yEAAyE;AACzE,SAAS;AACT,EAAE;AACF,6EAA6E;AAC7E,2EAA2E;AAC3E,4EAA4E;AAC5E,2DAA2D;AAC3D,EAAE;AACF,8EAA8E;AAC9E,
|
|
1
|
+
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/shared/redact.ts"],"names":[],"mappings":"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"}
|
package/dist/shared/timing.d.ts
CHANGED
|
@@ -49,7 +49,7 @@ export declare class RequestTimer {
|
|
|
49
49
|
private openPhase;
|
|
50
50
|
/** Closed phases in start-order. */
|
|
51
51
|
private closedPhases;
|
|
52
|
-
/** Record the request start time. Idempotent — only the first call takes effect
|
|
52
|
+
/** Record the request start time. Idempotent — only the first call takes effect. */
|
|
53
53
|
start(): void;
|
|
54
54
|
/**
|
|
55
55
|
* Record when the first NON-thinking content token arrives. Idempotent —
|
|
@@ -76,7 +76,7 @@ export declare class RequestTimer {
|
|
|
76
76
|
* - With no open phase: debug log and ignored.
|
|
77
77
|
*/
|
|
78
78
|
markThinkingEnd(): void;
|
|
79
|
-
/** Record the request end time. Idempotent — only the first call takes effect
|
|
79
|
+
/** Record the request end time. Idempotent — only the first call takes effect. */
|
|
80
80
|
stop(): void;
|
|
81
81
|
/**
|
|
82
82
|
* Compute derived timing metrics.
|
|
@@ -84,8 +84,8 @@ export declare class RequestTimer {
|
|
|
84
84
|
* **Side effects:** if a thinking phase was started but never ended (e.g. the
|
|
85
85
|
* stream disconnected before `markThinkingEnd()` was called), this method
|
|
86
86
|
* auto-closes the open phase at `stopAt` and writes back `this.closedPhases`
|
|
87
|
-
* and `this.openPhase = null` so subsequent calls see a consistent state
|
|
88
|
-
*
|
|
87
|
+
* and `this.openPhase = null` so subsequent calls see a consistent state.
|
|
88
|
+
* This mutation is intentional — it means `getMetrics()` is safe to
|
|
89
89
|
* call multiple times and will return consistent results after the first call.
|
|
90
90
|
*
|
|
91
91
|
* @param outputTokens — If provided, `tokensPerSecond` is calculated.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../../src/shared/timing.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,aAAa;IAC5B,mFAAmF;IACnF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,mFAAmF;IACnF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,yBAAyB;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,sCAAsC;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C;;;OAGG;IACH,QAAQ,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,SAAS,aAAa,EAAE,CAAC;IAClD;;;OAGG;IACH,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,8EAA8E;IAC9E,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC;;;;;;;;;OASG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAWD,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,YAAY,CAAuB;IAC3C,qDAAqD;IACrD,OAAO,CAAC,SAAS,CAA0B;IAC3C,oCAAoC;IACpC,OAAO,CAAC,YAAY,CAAqB;IAEzC,
|
|
1
|
+
{"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../../src/shared/timing.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,aAAa;IAC5B,mFAAmF;IACnF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,mFAAmF;IACnF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,yBAAyB;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,sCAAsC;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C;;;OAGG;IACH,QAAQ,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,SAAS,aAAa,EAAE,CAAC;IAClD;;;OAGG;IACH,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,8EAA8E;IAC9E,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC;;;;;;;;;OASG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAWD,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,YAAY,CAAuB;IAC3C,qDAAqD;IACrD,OAAO,CAAC,SAAS,CAA0B;IAC3C,oCAAoC;IACpC,OAAO,CAAC,YAAY,CAAqB;IAEzC,oFAAoF;IACpF,KAAK,IAAI,IAAI;IAQb;;;;;OAKG;IACH,cAAc,IAAI,IAAI;IAQtB;;;;;;;;;OASG;IACH,iBAAiB,IAAI,IAAI;IAQzB;;;;;OAKG;IACH,eAAe,IAAI,IAAI;IASvB,kFAAkF;IAClF,IAAI,IAAI,IAAI;IAQZ;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,mBAAmB;CA6EvD"}
|
package/dist/shared/timing.js
CHANGED
|
@@ -30,7 +30,7 @@ export class RequestTimer {
|
|
|
30
30
|
openPhase = null;
|
|
31
31
|
/** Closed phases in start-order. */
|
|
32
32
|
closedPhases = [];
|
|
33
|
-
/** Record the request start time. Idempotent — only the first call takes effect
|
|
33
|
+
/** Record the request start time. Idempotent — only the first call takes effect. */
|
|
34
34
|
start() {
|
|
35
35
|
if (this.startAt !== null) {
|
|
36
36
|
timerLogger.debug('start() called more than once — ignoring duplicate');
|
|
@@ -83,7 +83,7 @@ export class RequestTimer {
|
|
|
83
83
|
this.closedPhases.push({ startAt: this.openPhase.startAt, endAt: performance.now() });
|
|
84
84
|
this.openPhase = null;
|
|
85
85
|
}
|
|
86
|
-
/** Record the request end time. Idempotent — only the first call takes effect
|
|
86
|
+
/** Record the request end time. Idempotent — only the first call takes effect. */
|
|
87
87
|
stop() {
|
|
88
88
|
if (this.stopAt !== null) {
|
|
89
89
|
timerLogger.debug('stop() called more than once — ignoring duplicate');
|
|
@@ -97,8 +97,8 @@ export class RequestTimer {
|
|
|
97
97
|
* **Side effects:** if a thinking phase was started but never ended (e.g. the
|
|
98
98
|
* stream disconnected before `markThinkingEnd()` was called), this method
|
|
99
99
|
* auto-closes the open phase at `stopAt` and writes back `this.closedPhases`
|
|
100
|
-
* and `this.openPhase = null` so subsequent calls see a consistent state
|
|
101
|
-
*
|
|
100
|
+
* and `this.openPhase = null` so subsequent calls see a consistent state.
|
|
101
|
+
* This mutation is intentional — it means `getMetrics()` is safe to
|
|
102
102
|
* call multiple times and will return consistent results after the first call.
|
|
103
103
|
*
|
|
104
104
|
* @param outputTokens — If provided, `tokensPerSecond` is calculated.
|
|
@@ -113,12 +113,12 @@ export class RequestTimer {
|
|
|
113
113
|
}
|
|
114
114
|
const durationMs = this.stopAt - this.startAt;
|
|
115
115
|
// Clamp to 0 so a markFirstToken() call that happens before start() (out of
|
|
116
|
-
// order usage) produces 0 rather than a negative latency
|
|
116
|
+
// order usage) produces 0 rather than a negative latency.
|
|
117
117
|
const timeToFirstTokenMs = this.firstTokenAt !== null ? Math.max(0, this.firstTokenAt - this.startAt) : null;
|
|
118
118
|
// Auto-close any phase that was started but never ended (e.g. stream
|
|
119
119
|
// disconnected during thinking, so markThinkingEnd was never called).
|
|
120
120
|
// Without this, the open phase's wall-clock time is counted inside
|
|
121
|
-
// generationDurationMs instead of thinkingDurationMs
|
|
121
|
+
// generationDurationMs instead of thinkingDurationMs.
|
|
122
122
|
let effectiveClosedPhases = this.closedPhases;
|
|
123
123
|
if (this.openPhase !== null) {
|
|
124
124
|
timerLogger.debug('thinking phase still open at getMetrics() — auto-closed at stopAt', {
|
|
@@ -130,7 +130,7 @@ export class RequestTimer {
|
|
|
130
130
|
{ startAt: this.openPhase.startAt, endAt: this.stopAt },
|
|
131
131
|
];
|
|
132
132
|
// Move the auto-closed phase into closedPhases so subsequent
|
|
133
|
-
// markThinkingEnd() or getMetrics() calls see a consistent state
|
|
133
|
+
// markThinkingEnd() or getMetrics() calls see a consistent state.
|
|
134
134
|
this.closedPhases = effectiveClosedPhases;
|
|
135
135
|
this.openPhase = null;
|
|
136
136
|
}
|
|
@@ -141,13 +141,13 @@ export class RequestTimer {
|
|
|
141
141
|
}));
|
|
142
142
|
const thinkingDurationMs = thinkingPhases.length > 0 ? thinkingPhases.reduce((sum, p) => sum + p.durationMs, 0) : null;
|
|
143
143
|
const generationDurationMs = Math.max(0, durationMs - (thinkingDurationMs ?? 0));
|
|
144
|
-
//
|
|
144
|
+
// Align tokensPerSecond semantics with `factory.ts` —
|
|
145
145
|
// return `null` when either the duration is zero or no output tokens were
|
|
146
146
|
// produced, treating both as "no meaningful rate to report". The previous
|
|
147
147
|
// path returned 0 when `outputTokens === 0`, which read downstream as a
|
|
148
148
|
// measured-zero rate rather than a missing measurement.
|
|
149
149
|
//
|
|
150
|
-
//
|
|
150
|
+
// Compute as `(outputTokens / durationMs) * 1000`
|
|
151
151
|
// rather than `outputTokens / (durationMs / 1000)`. The two are
|
|
152
152
|
// mathematically equivalent for non-degenerate inputs but the multiply
|
|
153
153
|
// form preserves precision better when `durationMs` is small (e.g.
|