@newrelic/preflight 1.17.0 → 1.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dashboard/routes/api-handler.d.ts +3 -0
- package/dist/dashboard/routes/api-handler.d.ts.map +1 -1
- package/dist/dashboard/routes/api-handler.js +45 -4
- package/dist/dashboard/routes/api-handler.js.map +1 -1
- package/dist/data/pricing-overlay/README.md +58 -0
- package/dist/data/pricing-overlay/pricing.json +1 -0
- package/dist/deploy/data-paths.d.ts +4 -4
- package/dist/deploy/data-paths.js +3 -3
- package/dist/hooks/session-resolver.d.ts +134 -0
- package/dist/hooks/session-resolver.d.ts.map +1 -1
- package/dist/hooks/session-resolver.js +283 -16
- package/dist/hooks/session-resolver.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +91 -5
- package/dist/index.js.map +1 -1
- package/dist/metrics/live-session-registry.d.ts +24 -0
- package/dist/metrics/live-session-registry.d.ts.map +1 -1
- package/dist/metrics/live-session-registry.js +57 -2
- package/dist/metrics/live-session-registry.js.map +1 -1
- package/dist/metrics/{copilot-pricing-overlay.d.ts → pricing-overlay.d.ts} +9 -9
- package/dist/metrics/pricing-overlay.d.ts.map +1 -0
- package/dist/metrics/{copilot-pricing-overlay.js → pricing-overlay.js} +15 -15
- package/dist/metrics/pricing-overlay.js.map +1 -0
- package/dist/metrics/session-tracker.d.ts +49 -0
- package/dist/metrics/session-tracker.d.ts.map +1 -1
- package/dist/metrics/session-tracker.js +63 -4
- package/dist/metrics/session-tracker.js.map +1 -1
- package/dist/shared/pricing-data.d.ts.map +1 -1
- package/dist/shared/pricing-data.js +243 -12
- package/dist/shared/pricing-data.js.map +1 -1
- package/dist/storage/session-store.d.ts +11 -0
- package/dist/storage/session-store.d.ts.map +1 -1
- package/dist/storage/session-store.js +26 -0
- package/dist/storage/session-store.js.map +1 -1
- package/dist/tools/cross-session-tools.d.ts.map +1 -1
- package/dist/tools/cross-session-tools.js +4 -0
- package/dist/tools/cross-session-tools.js.map +1 -1
- package/dist/tools/session-stats.d.ts +2 -0
- package/dist/tools/session-stats.d.ts.map +1 -1
- package/dist/tools/session-stats.js +8 -1
- package/dist/tools/session-stats.js.map +1 -1
- package/dist/web/assets/index-BSqTG7nX.js +64 -0
- package/dist/web/assets/{index-DwdSz9gz.css → index-DZ9_lGC1.css} +1 -1
- package/dist/web/index.html +2 -2
- package/package.json +16 -15
- package/dist/data/copilot-pricing/README.md +0 -42
- package/dist/data/copilot-pricing/pricing.json +0 -54
- package/dist/metrics/copilot-pricing-overlay.d.ts.map +0 -1
- package/dist/metrics/copilot-pricing-overlay.js.map +0 -1
- package/dist/web/assets/index-Bwc4qaqj.js +0 -64
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Tracks which sessions are currently active based on recent tool call activity.
|
|
3
3
|
* A session is "live" if it received a tool call within the staleness threshold.
|
|
4
4
|
*/
|
|
5
|
+
import { type SessionNameSource } from '../hooks/session-resolver.js';
|
|
5
6
|
export declare const DEFAULT_STALE_THRESHOLD_MS = 180000;
|
|
6
7
|
export interface ConcurrencySample {
|
|
7
8
|
readonly timestamp: number;
|
|
@@ -10,13 +11,36 @@ export interface ConcurrencySample {
|
|
|
10
11
|
export declare class LiveSessionRegistry {
|
|
11
12
|
private readonly lastActivity;
|
|
12
13
|
private readonly sessionNames;
|
|
14
|
+
private readonly authoritativeNames;
|
|
15
|
+
private readonly authoritativeSources;
|
|
13
16
|
private readonly staleThresholdMs;
|
|
14
17
|
private peakConcurrent;
|
|
15
18
|
private readonly concurrencyTimeSeries;
|
|
16
19
|
private samplingInterval;
|
|
17
20
|
constructor(staleThresholdMs?: number);
|
|
18
21
|
touch(sessionId: string, cwd?: string): void;
|
|
22
|
+
/**
|
|
23
|
+
* Set the authoritative display name for a session (from the job-state title
|
|
24
|
+
* or transcript ai-title, per `resolveSessionName`'s precedence). Overrides
|
|
25
|
+
* any cwd basename `touch()` may have already stored and pins it against
|
|
26
|
+
* future `touch()` calls. Ignores empty names. Mirrors
|
|
27
|
+
* `SessionTracker.setAuthoritativeName`, including the Phase-2 freshness
|
|
28
|
+
* guard: when re-resolved on the persist/shutdown path, a strictly-less-
|
|
29
|
+
* trusted `source` (e.g. `cwd` after a `user` name) is refused via
|
|
30
|
+
* `shouldReplaceSessionName`, so a better name is never downgraded here.
|
|
31
|
+
*/
|
|
32
|
+
setAuthoritativeName(sessionId: string, name: string, source: SessionNameSource): void;
|
|
19
33
|
getSessionName(sessionId: string): string | null;
|
|
34
|
+
/**
|
|
35
|
+
* Which source produced the name `getSessionName` returns for this session
|
|
36
|
+
* (see `SessionNameSource`), or null when the session is untracked or was
|
|
37
|
+
* only ever named by the streaming cwd fallback in `touch()` (which records
|
|
38
|
+
* a name but no source). Lets dashboard surfaces distinguish an
|
|
39
|
+
* authoritative `user`/`ai-title`/`auto` name from a cwd-basename fallback,
|
|
40
|
+
* matching the `session_name_source` the MCP tool and persisted summaries
|
|
41
|
+
* already expose.
|
|
42
|
+
*/
|
|
43
|
+
getSessionNameSource(sessionId: string): SessionNameSource | null;
|
|
20
44
|
getLastActivity(sessionId: string): number | null;
|
|
21
45
|
getLiveSessions(options?: {
|
|
22
46
|
includeSynthetic?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live-session-registry.d.ts","sourceRoot":"","sources":["../../src/metrics/live-session-registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"live-session-registry.d.ts","sourceRoot":"","sources":["../../src/metrics/live-session-registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,8BAA8B,CAAC;AAEtC,eAAO,MAAM,0BAA0B,SAAU,CAAC;AAIlD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAC1D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAG1D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IAKxD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAwC;IAC7E,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA2B;IACjE,OAAO,CAAC,gBAAgB,CAA+C;gBAE3D,gBAAgB,SAA6B;IAIzD,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAuB5C;;;;;;;;;OASG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAUtF,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIhD;;;;;;;;OAQG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAQjE,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIjD,eAAe,CAAC,OAAO,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,MAAM,EAAE;IAyBnE,KAAK,IAAI,IAAI;IAOb,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAalC,aAAa,IAAI,IAAI;IAYrB,YAAY,IAAI,IAAI;IAOpB,kBAAkB,IAAI,MAAM;IAI5B,iBAAiB,IAAI,MAAM;IAI3B,wBAAwB,IAAI,SAAS,iBAAiB,EAAE;CAGzD"}
|
|
@@ -3,13 +3,21 @@
|
|
|
3
3
|
* A session is "live" if it received a tool call within the staleness threshold.
|
|
4
4
|
*/
|
|
5
5
|
import { basename } from 'node:path';
|
|
6
|
-
import { isSyntheticSessionId } from '../hooks/session-resolver.js';
|
|
6
|
+
import { isSyntheticSessionId, shouldReplaceSessionName, } from '../hooks/session-resolver.js';
|
|
7
7
|
export const DEFAULT_STALE_THRESHOLD_MS = 180_000; // 3 minutes
|
|
8
8
|
const MAX_CONCURRENCY_SAMPLES = 2880; // 24h at 30s intervals
|
|
9
9
|
const SAMPLE_INTERVAL_MS = 30_000;
|
|
10
10
|
export class LiveSessionRegistry {
|
|
11
11
|
lastActivity = new Map();
|
|
12
12
|
sessionNames = new Map();
|
|
13
|
+
// Sessions whose name was set authoritatively (job-state title / transcript
|
|
14
|
+
// ai-title). `touch()` must never overwrite these with a cwd basename.
|
|
15
|
+
authoritativeNames = new Set();
|
|
16
|
+
// The source that produced each authoritative name, so a Phase-2 freshness
|
|
17
|
+
// re-resolve can be refused when it would DOWNGRADE the name (e.g. a `cwd`
|
|
18
|
+
// re-resolve arriving after a `user` name was set). Keyed identically to
|
|
19
|
+
// `authoritativeNames`; cleared alongside it on eviction/reset.
|
|
20
|
+
authoritativeSources = new Map();
|
|
13
21
|
staleThresholdMs;
|
|
14
22
|
peakConcurrent = 0;
|
|
15
23
|
concurrencyTimeSeries = [];
|
|
@@ -19,10 +27,19 @@ export class LiveSessionRegistry {
|
|
|
19
27
|
}
|
|
20
28
|
touch(sessionId, cwd) {
|
|
21
29
|
this.lastActivity.set(sessionId, Date.now());
|
|
22
|
-
|
|
30
|
+
// Streaming FALLBACK naming: skip when an authoritative name is set, and
|
|
31
|
+
// (as before) only fill the first time we see a cwd for this session.
|
|
32
|
+
if (cwd && !this.authoritativeNames.has(sessionId) && !this.sessionNames.has(sessionId)) {
|
|
23
33
|
const name = basename(cwd);
|
|
24
34
|
if (name.length > 0 && name !== '.' && name !== '..') {
|
|
25
35
|
this.sessionNames.set(sessionId, name);
|
|
36
|
+
// Tag the fallback source so getSessionNameSource() reports 'cwd' for a
|
|
37
|
+
// basename-named session (matching SessionTracker's streaming fallback,
|
|
38
|
+
// which also tags 'cwd'). NOT added to `authoritativeNames`: this stays
|
|
39
|
+
// a low-trust fallback that setAuthoritativeName may freely upgrade —
|
|
40
|
+
// 'cwd' is the lowest rank, so shouldReplaceSessionName lets any real
|
|
41
|
+
// source override it.
|
|
42
|
+
this.authoritativeSources.set(sessionId, 'cwd');
|
|
26
43
|
}
|
|
27
44
|
}
|
|
28
45
|
const liveCount = this.getLiveSessions({ includeSynthetic: true }).length;
|
|
@@ -30,9 +47,41 @@ export class LiveSessionRegistry {
|
|
|
30
47
|
this.peakConcurrent = liveCount;
|
|
31
48
|
}
|
|
32
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* Set the authoritative display name for a session (from the job-state title
|
|
52
|
+
* or transcript ai-title, per `resolveSessionName`'s precedence). Overrides
|
|
53
|
+
* any cwd basename `touch()` may have already stored and pins it against
|
|
54
|
+
* future `touch()` calls. Ignores empty names. Mirrors
|
|
55
|
+
* `SessionTracker.setAuthoritativeName`, including the Phase-2 freshness
|
|
56
|
+
* guard: when re-resolved on the persist/shutdown path, a strictly-less-
|
|
57
|
+
* trusted `source` (e.g. `cwd` after a `user` name) is refused via
|
|
58
|
+
* `shouldReplaceSessionName`, so a better name is never downgraded here.
|
|
59
|
+
*/
|
|
60
|
+
setAuthoritativeName(sessionId, name, source) {
|
|
61
|
+
if (typeof name !== 'string' || name.length === 0)
|
|
62
|
+
return;
|
|
63
|
+
if (!shouldReplaceSessionName(this.authoritativeSources.get(sessionId) ?? null, source)) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
this.authoritativeNames.add(sessionId);
|
|
67
|
+
this.authoritativeSources.set(sessionId, source);
|
|
68
|
+
this.sessionNames.set(sessionId, name);
|
|
69
|
+
}
|
|
33
70
|
getSessionName(sessionId) {
|
|
34
71
|
return this.sessionNames.get(sessionId) ?? null;
|
|
35
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Which source produced the name `getSessionName` returns for this session
|
|
75
|
+
* (see `SessionNameSource`), or null when the session is untracked or was
|
|
76
|
+
* only ever named by the streaming cwd fallback in `touch()` (which records
|
|
77
|
+
* a name but no source). Lets dashboard surfaces distinguish an
|
|
78
|
+
* authoritative `user`/`ai-title`/`auto` name from a cwd-basename fallback,
|
|
79
|
+
* matching the `session_name_source` the MCP tool and persisted summaries
|
|
80
|
+
* already expose.
|
|
81
|
+
*/
|
|
82
|
+
getSessionNameSource(sessionId) {
|
|
83
|
+
return this.authoritativeSources.get(sessionId) ?? null;
|
|
84
|
+
}
|
|
36
85
|
// The dashboard's `/api/sessions/live` endpoint surfaces last-activity per
|
|
37
86
|
// live session so the Today selector can default to the most-recently-active
|
|
38
87
|
// live session. Returns null when the session is not tracked (e.g. already
|
|
@@ -55,6 +104,8 @@ export class LiveSessionRegistry {
|
|
|
55
104
|
for (const id of stale) {
|
|
56
105
|
this.lastActivity.delete(id);
|
|
57
106
|
this.sessionNames.delete(id);
|
|
107
|
+
this.authoritativeNames.delete(id);
|
|
108
|
+
this.authoritativeSources.delete(id);
|
|
58
109
|
}
|
|
59
110
|
// Synthetic session IDs (`local-*`, `proxy-*`, `pending-*`) are
|
|
60
111
|
// MCP-internal bookkeeping from --local / proxy modes, not real Claude
|
|
@@ -66,6 +117,8 @@ export class LiveSessionRegistry {
|
|
|
66
117
|
reset() {
|
|
67
118
|
this.lastActivity.clear();
|
|
68
119
|
this.sessionNames.clear();
|
|
120
|
+
this.authoritativeNames.clear();
|
|
121
|
+
this.authoritativeSources.clear();
|
|
69
122
|
}
|
|
70
123
|
isLive(sessionId) {
|
|
71
124
|
const ts = this.lastActivity.get(sessionId);
|
|
@@ -74,6 +127,8 @@ export class LiveSessionRegistry {
|
|
|
74
127
|
if (Date.now() - ts > this.staleThresholdMs) {
|
|
75
128
|
this.lastActivity.delete(sessionId);
|
|
76
129
|
this.sessionNames.delete(sessionId);
|
|
130
|
+
this.authoritativeNames.delete(sessionId);
|
|
131
|
+
this.authoritativeSources.delete(sessionId);
|
|
77
132
|
return false;
|
|
78
133
|
}
|
|
79
134
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live-session-registry.js","sourceRoot":"","sources":["../../src/metrics/live-session-registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,
|
|
1
|
+
{"version":3,"file":"live-session-registry.js","sourceRoot":"","sources":["../../src/metrics/live-session-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Resolves the bundled `
|
|
3
|
-
* `
|
|
2
|
+
* Resolves the bundled `pricing-overlay/pricing.json` overlay path (see
|
|
3
|
+
* `pricing-overlay/README.md` for what it fixes and why), or `null` when it
|
|
4
4
|
* cannot be located.
|
|
5
5
|
*
|
|
6
6
|
* Reuses `resolveDataDir()` (src/deploy/data-paths.ts) for the actual
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* enhancement, and its absence (e.g. an unusual install layout) must never
|
|
11
11
|
* block MCP server startup.
|
|
12
12
|
*/
|
|
13
|
-
export declare function
|
|
13
|
+
export declare function resolvePricingOverlayPath(): string | null;
|
|
14
14
|
/**
|
|
15
15
|
* Loads an overlay file and applies only the entries that don't already
|
|
16
16
|
* resolve against the vendored/default pricing table — enforcing the
|
|
@@ -23,20 +23,20 @@ export declare function resolveCopilotPricingOverlayPath(): string | null;
|
|
|
23
23
|
* check.
|
|
24
24
|
*
|
|
25
25
|
* Exported for direct testing of the collision guard without needing to
|
|
26
|
-
* fake `
|
|
26
|
+
* fake `resolvePricingOverlayPath()`'s resolution logic.
|
|
27
27
|
*/
|
|
28
28
|
export declare function applyGapFilledOverlay(overlayPath: string): void;
|
|
29
29
|
/**
|
|
30
|
-
* Applies the bundled
|
|
31
|
-
*
|
|
30
|
+
* Applies the bundled pricing gap-fill overlay to the process-wide pricing
|
|
31
|
+
* singleton at startup, unless the user has configured their own
|
|
32
32
|
* `customPricingFile` (env or config `customPricingFile`, see
|
|
33
33
|
* `src/config.ts`'s `McpServerConfig`) — that always takes precedence and is applied
|
|
34
|
-
* unchanged. See
|
|
34
|
+
* unchanged. See pricing-overlay/README.md for why: `initPricing()`/
|
|
35
35
|
* `PricingTable.reset()` accept exactly one file path and always rebuild
|
|
36
36
|
* from `DEFAULT_PRICING_TABLE` — repeated calls REPLACE, they do not merge —
|
|
37
37
|
* so a user's own pricing file and this bundled overlay are mutually
|
|
38
38
|
* exclusive today; layering both would require a merge feature this doesn't
|
|
39
39
|
* build (YAGNI unless requested).
|
|
40
40
|
*/
|
|
41
|
-
export declare function
|
|
42
|
-
//# sourceMappingURL=
|
|
41
|
+
export declare function applyPricingOverlay(customPricingFile: string | null): void;
|
|
42
|
+
//# sourceMappingURL=pricing-overlay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing-overlay.d.ts","sourceRoot":"","sources":["../../src/metrics/pricing-overlay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAaH,wBAAgB,yBAAyB,IAAI,MAAM,GAAG,IAAI,CAMzD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAgC/D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAS1E"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Resolves the bundled `
|
|
3
|
-
* `
|
|
2
|
+
* Resolves the bundled `pricing-overlay/pricing.json` overlay path (see
|
|
3
|
+
* `pricing-overlay/README.md` for what it fixes and why), or `null` when it
|
|
4
4
|
* cannot be located.
|
|
5
5
|
*
|
|
6
6
|
* Reuses `resolveDataDir()` (src/deploy/data-paths.ts) for the actual
|
|
@@ -16,10 +16,10 @@ import { join, resolve } from 'node:path';
|
|
|
16
16
|
import { createLogger } from '../shared/index.js';
|
|
17
17
|
import { initPricing, loadCustomPricing, resolveModelPricing } from '../shared/pricing.js';
|
|
18
18
|
import { resolveDataDir } from '../deploy/data-paths.js';
|
|
19
|
-
const logger = createLogger('
|
|
20
|
-
export function
|
|
19
|
+
const logger = createLogger('pricing-overlay');
|
|
20
|
+
export function resolvePricingOverlayPath() {
|
|
21
21
|
try {
|
|
22
|
-
return resolve(resolveDataDir('
|
|
22
|
+
return resolve(resolveDataDir('pricing-overlay'), 'pricing.json');
|
|
23
23
|
}
|
|
24
24
|
catch {
|
|
25
25
|
return null;
|
|
@@ -37,7 +37,7 @@ export function resolveCopilotPricingOverlayPath() {
|
|
|
37
37
|
* check.
|
|
38
38
|
*
|
|
39
39
|
* Exported for direct testing of the collision guard without needing to
|
|
40
|
-
* fake `
|
|
40
|
+
* fake `resolvePricingOverlayPath()`'s resolution logic.
|
|
41
41
|
*/
|
|
42
42
|
export function applyGapFilledOverlay(overlayPath) {
|
|
43
43
|
const overlay = loadCustomPricing(overlayPath);
|
|
@@ -46,7 +46,7 @@ export function applyGapFilledOverlay(overlayPath) {
|
|
|
46
46
|
const gaps = {};
|
|
47
47
|
for (const [modelId, pricing] of Object.entries(overlay)) {
|
|
48
48
|
if (resolveModelPricing(modelId)) {
|
|
49
|
-
logger.warn('
|
|
49
|
+
logger.warn('pricing overlay entry already resolves against the vendored pricing table — dropped to avoid overriding it', { modelId });
|
|
50
50
|
continue;
|
|
51
51
|
}
|
|
52
52
|
gaps[modelId] = pricing;
|
|
@@ -57,13 +57,13 @@ export function applyGapFilledOverlay(overlayPath) {
|
|
|
57
57
|
// written to a throwaway temp file rather than the original overlay path.
|
|
58
58
|
let tmpDir = null;
|
|
59
59
|
try {
|
|
60
|
-
tmpDir = mkdtempSync(join(tmpdir(), 'preflight-
|
|
60
|
+
tmpDir = mkdtempSync(join(tmpdir(), 'preflight-pricing-overlay-'));
|
|
61
61
|
const filteredPath = join(tmpDir, 'pricing.json');
|
|
62
62
|
writeFileSync(filteredPath, JSON.stringify(gaps), { mode: 0o600 });
|
|
63
63
|
initPricing(filteredPath);
|
|
64
64
|
}
|
|
65
65
|
catch (err) {
|
|
66
|
-
logger.warn('Failed to apply gap-filtered
|
|
66
|
+
logger.warn('Failed to apply gap-filtered pricing overlay', {
|
|
67
67
|
error: err instanceof Error ? err.message : String(err),
|
|
68
68
|
});
|
|
69
69
|
}
|
|
@@ -73,25 +73,25 @@ export function applyGapFilledOverlay(overlayPath) {
|
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
/**
|
|
76
|
-
* Applies the bundled
|
|
77
|
-
*
|
|
76
|
+
* Applies the bundled pricing gap-fill overlay to the process-wide pricing
|
|
77
|
+
* singleton at startup, unless the user has configured their own
|
|
78
78
|
* `customPricingFile` (env or config `customPricingFile`, see
|
|
79
79
|
* `src/config.ts`'s `McpServerConfig`) — that always takes precedence and is applied
|
|
80
|
-
* unchanged. See
|
|
80
|
+
* unchanged. See pricing-overlay/README.md for why: `initPricing()`/
|
|
81
81
|
* `PricingTable.reset()` accept exactly one file path and always rebuild
|
|
82
82
|
* from `DEFAULT_PRICING_TABLE` — repeated calls REPLACE, they do not merge —
|
|
83
83
|
* so a user's own pricing file and this bundled overlay are mutually
|
|
84
84
|
* exclusive today; layering both would require a merge feature this doesn't
|
|
85
85
|
* build (YAGNI unless requested).
|
|
86
86
|
*/
|
|
87
|
-
export function
|
|
87
|
+
export function applyPricingOverlay(customPricingFile) {
|
|
88
88
|
if (customPricingFile) {
|
|
89
89
|
initPricing(customPricingFile);
|
|
90
90
|
return;
|
|
91
91
|
}
|
|
92
|
-
const overlayPath =
|
|
92
|
+
const overlayPath = resolvePricingOverlayPath();
|
|
93
93
|
if (overlayPath) {
|
|
94
94
|
applyGapFilledOverlay(overlayPath);
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
|
-
//# sourceMappingURL=
|
|
97
|
+
//# sourceMappingURL=pricing-overlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing-overlay.js","sourceRoot":"","sources":["../../src/metrics/pricing-overlay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3F,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,MAAM,MAAM,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAC;AAE/C,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,wEAAwE;IACxE,0EAA0E;IAC1E,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,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACnE,WAAW,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,8CAA8C,EAAE;YAC1D,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;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CAAC,iBAAgC;IAClE,IAAI,iBAAiB,EAAE,CAAC;QACtB,WAAW,CAAC,iBAAiB,CAAC,CAAC;QAC/B,OAAO;IACT,CAAC;IACD,MAAM,WAAW,GAAG,yBAAyB,EAAE,CAAC;IAChD,IAAI,WAAW,EAAE,CAAC;QAChB,qBAAqB,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;AACH,CAAC"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import type { MetricAggregator } from '../shared/index.js';
|
|
9
9
|
import type { ToolCallRecord } from '../storage/types.js';
|
|
10
|
+
import { type SessionNameSource } from '../hooks/session-resolver.js';
|
|
10
11
|
import type { Resettable } from './tracker-contracts.js';
|
|
11
12
|
export interface DurationStats {
|
|
12
13
|
count: number;
|
|
@@ -24,6 +25,16 @@ export interface TimelineEntry {
|
|
|
24
25
|
export interface SessionMetrics {
|
|
25
26
|
sessionId: string;
|
|
26
27
|
sessionName: string | null;
|
|
28
|
+
/** Which source produced `sessionName` (see SessionNameSource), or null when unnamed. */
|
|
29
|
+
sessionNameSource: SessionNameSource | null;
|
|
30
|
+
/**
|
|
31
|
+
* The session's originating intent (the first user prompt), or null. This is
|
|
32
|
+
* SENSITIVE content: it is populated ONLY when `recordContent` is enabled
|
|
33
|
+
* (force-disabled under highSecurity upstream) and is always redacted before
|
|
34
|
+
* being stored. Null whenever content recording is off. See
|
|
35
|
+
* `setSessionIntent`.
|
|
36
|
+
*/
|
|
37
|
+
sessionIntent: string | null;
|
|
27
38
|
sessionStartTime: number;
|
|
28
39
|
sessionDurationMs: number;
|
|
29
40
|
toolCallCount: number;
|
|
@@ -68,6 +79,15 @@ export interface SessionTrackerSeed {
|
|
|
68
79
|
export declare class SessionTracker implements Resettable {
|
|
69
80
|
private sessionId;
|
|
70
81
|
private sessionName;
|
|
82
|
+
private sessionNameSource;
|
|
83
|
+
private sessionIntent;
|
|
84
|
+
/**
|
|
85
|
+
* True once an authoritative name (resolved at startup from the job state
|
|
86
|
+
* file or transcript title) has been set via `setAuthoritativeName`. While
|
|
87
|
+
* true, the streaming cwd-basename derivation in `recordToolCall` is
|
|
88
|
+
* suppressed — the authoritative name always wins.
|
|
89
|
+
*/
|
|
90
|
+
private authoritativeName;
|
|
71
91
|
private sessionStartTime;
|
|
72
92
|
private toolCallCount;
|
|
73
93
|
private toolErrorCount;
|
|
@@ -88,6 +108,35 @@ export declare class SessionTracker implements Resettable {
|
|
|
88
108
|
recordToolCall(record: ToolCallRecord): void;
|
|
89
109
|
getMetrics(): SessionMetrics;
|
|
90
110
|
emitMetrics(aggregator: MetricAggregator): void;
|
|
111
|
+
/**
|
|
112
|
+
* Set the authoritative session name (from the job-state title or the
|
|
113
|
+
* transcript ai-title, per `resolveSessionName`'s precedence). Overrides any
|
|
114
|
+
* name the streaming cwd fallback may have set, and suppresses that fallback
|
|
115
|
+
* for the rest of the session. Ignores empty names. The name is a display
|
|
116
|
+
* LABEL; callers redact it at each sink.
|
|
117
|
+
*
|
|
118
|
+
* Called both once at startup AND repeatedly on the persist/shutdown path
|
|
119
|
+
* (Phase 2 freshness), so a refined `ai-title` — or a name a human later
|
|
120
|
+
* assigns — replaces the first-prompt guess. `shouldReplaceSessionName`
|
|
121
|
+
* enforces the no-downgrade invariant: a strictly-less-trusted source (e.g.
|
|
122
|
+
* a `cwd` re-resolve arriving after a `user` name was set) is refused rather
|
|
123
|
+
* than allowed to demote the better name.
|
|
124
|
+
*
|
|
125
|
+
* Returns true only when the stored name or source actually changed, so the
|
|
126
|
+
* caller can log a genuine (re)naming without spamming on every no-op
|
|
127
|
+
* re-resolve.
|
|
128
|
+
*/
|
|
129
|
+
setAuthoritativeName(name: string, source: SessionNameSource): boolean;
|
|
130
|
+
/**
|
|
131
|
+
* Set the session's originating intent (the first user prompt).
|
|
132
|
+
*
|
|
133
|
+
* The caller owns the content gate and redaction: this must only be called
|
|
134
|
+
* with an already-redacted string, and only when `recordContent` is enabled
|
|
135
|
+
* (force-disabled under highSecurity upstream — never bypass). A null/empty
|
|
136
|
+
* value clears it. Because the intent is stable across a session (it is the
|
|
137
|
+
* first prompt), re-calling on the persist/shutdown path is idempotent.
|
|
138
|
+
*/
|
|
139
|
+
setSessionIntent(intent: string | null): void;
|
|
91
140
|
/** Update the session ID in place without clearing any accumulated metrics. */
|
|
92
141
|
adoptSessionId(sessionId: string): void;
|
|
93
142
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-tracker.d.ts","sourceRoot":"","sources":["../../src/metrics/session-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"session-tracker.d.ts","sourceRoot":"","sources":["../../src/metrics/session-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* emission (for NR ingestion via MetricAggregator).
|
|
7
7
|
*/
|
|
8
8
|
import { basename } from 'node:path';
|
|
9
|
+
import { DEGENERATE_NAMES, shouldReplaceSessionName, } from '../hooks/session-resolver.js';
|
|
9
10
|
import { computePercentile } from './percentile.js';
|
|
10
11
|
// ---------------------------------------------------------------------------
|
|
11
12
|
// Helpers
|
|
@@ -58,6 +59,15 @@ export function computeDurationStats(durations) {
|
|
|
58
59
|
export class SessionTracker {
|
|
59
60
|
sessionId;
|
|
60
61
|
sessionName = null;
|
|
62
|
+
sessionNameSource = null;
|
|
63
|
+
sessionIntent = null;
|
|
64
|
+
/**
|
|
65
|
+
* True once an authoritative name (resolved at startup from the job state
|
|
66
|
+
* file or transcript title) has been set via `setAuthoritativeName`. While
|
|
67
|
+
* true, the streaming cwd-basename derivation in `recordToolCall` is
|
|
68
|
+
* suppressed — the authoritative name always wins.
|
|
69
|
+
*/
|
|
70
|
+
authoritativeName = false;
|
|
61
71
|
sessionStartTime;
|
|
62
72
|
toolCallCount = 0;
|
|
63
73
|
toolErrorCount = 0;
|
|
@@ -85,14 +95,17 @@ export class SessionTracker {
|
|
|
85
95
|
}
|
|
86
96
|
recordToolCall(record) {
|
|
87
97
|
this.toolCallCount++;
|
|
88
|
-
//
|
|
89
|
-
//
|
|
90
|
-
|
|
91
|
-
|
|
98
|
+
// FALLBACK naming only: an authoritative name (job-state title or
|
|
99
|
+
// transcript ai-title, resolved once at startup) always wins, so skip the
|
|
100
|
+
// cwd derivation entirely once one is set. Otherwise derive from cwd,
|
|
101
|
+
// preferring a later, more meaningful name if the current one is a
|
|
102
|
+
// degenerate system directory (tmp, var, usr, etc.).
|
|
103
|
+
if (!this.authoritativeName && typeof record.cwd === 'string' && record.cwd.length > 0) {
|
|
92
104
|
const name = basename(record.cwd);
|
|
93
105
|
if (name.length > 0 && name !== '.' && name !== '..') {
|
|
94
106
|
if (this.sessionName === null || DEGENERATE_NAMES.has(this.sessionName.toLowerCase())) {
|
|
95
107
|
this.sessionName = name;
|
|
108
|
+
this.sessionNameSource = 'cwd';
|
|
96
109
|
}
|
|
97
110
|
}
|
|
98
111
|
}
|
|
@@ -193,6 +206,8 @@ export class SessionTracker {
|
|
|
193
206
|
return {
|
|
194
207
|
sessionId: this.sessionId,
|
|
195
208
|
sessionName: this.sessionName,
|
|
209
|
+
sessionNameSource: this.sessionNameSource,
|
|
210
|
+
sessionIntent: this.sessionIntent,
|
|
196
211
|
sessionStartTime: this.sessionStartTime,
|
|
197
212
|
sessionDurationMs: Date.now() - this.sessionStartTime,
|
|
198
213
|
toolCallCount: this.toolCallCount,
|
|
@@ -237,6 +252,47 @@ export class SessionTracker {
|
|
|
237
252
|
aggregator.record('ai.session.unique_files_read', this.filesRead.size);
|
|
238
253
|
aggregator.record('ai.session.unique_files_written', this.filesWritten.size);
|
|
239
254
|
}
|
|
255
|
+
/**
|
|
256
|
+
* Set the authoritative session name (from the job-state title or the
|
|
257
|
+
* transcript ai-title, per `resolveSessionName`'s precedence). Overrides any
|
|
258
|
+
* name the streaming cwd fallback may have set, and suppresses that fallback
|
|
259
|
+
* for the rest of the session. Ignores empty names. The name is a display
|
|
260
|
+
* LABEL; callers redact it at each sink.
|
|
261
|
+
*
|
|
262
|
+
* Called both once at startup AND repeatedly on the persist/shutdown path
|
|
263
|
+
* (Phase 2 freshness), so a refined `ai-title` — or a name a human later
|
|
264
|
+
* assigns — replaces the first-prompt guess. `shouldReplaceSessionName`
|
|
265
|
+
* enforces the no-downgrade invariant: a strictly-less-trusted source (e.g.
|
|
266
|
+
* a `cwd` re-resolve arriving after a `user` name was set) is refused rather
|
|
267
|
+
* than allowed to demote the better name.
|
|
268
|
+
*
|
|
269
|
+
* Returns true only when the stored name or source actually changed, so the
|
|
270
|
+
* caller can log a genuine (re)naming without spamming on every no-op
|
|
271
|
+
* re-resolve.
|
|
272
|
+
*/
|
|
273
|
+
setAuthoritativeName(name, source) {
|
|
274
|
+
if (typeof name !== 'string' || name.length === 0)
|
|
275
|
+
return false;
|
|
276
|
+
if (!shouldReplaceSessionName(this.sessionNameSource, source))
|
|
277
|
+
return false;
|
|
278
|
+
const changed = this.sessionName !== name || this.sessionNameSource !== source;
|
|
279
|
+
this.sessionName = name;
|
|
280
|
+
this.sessionNameSource = source;
|
|
281
|
+
this.authoritativeName = true;
|
|
282
|
+
return changed;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Set the session's originating intent (the first user prompt).
|
|
286
|
+
*
|
|
287
|
+
* The caller owns the content gate and redaction: this must only be called
|
|
288
|
+
* with an already-redacted string, and only when `recordContent` is enabled
|
|
289
|
+
* (force-disabled under highSecurity upstream — never bypass). A null/empty
|
|
290
|
+
* value clears it. Because the intent is stable across a session (it is the
|
|
291
|
+
* first prompt), re-calling on the persist/shutdown path is idempotent.
|
|
292
|
+
*/
|
|
293
|
+
setSessionIntent(intent) {
|
|
294
|
+
this.sessionIntent = intent && intent.length > 0 ? intent : null;
|
|
295
|
+
}
|
|
240
296
|
/** Update the session ID in place without clearing any accumulated metrics. */
|
|
241
297
|
adoptSessionId(sessionId) {
|
|
242
298
|
if (typeof sessionId !== 'string' || sessionId.length === 0) {
|
|
@@ -261,6 +317,9 @@ export class SessionTracker {
|
|
|
261
317
|
}
|
|
262
318
|
this.sessionId = sessionId;
|
|
263
319
|
this.sessionName = null;
|
|
320
|
+
this.sessionNameSource = null;
|
|
321
|
+
this.sessionIntent = null;
|
|
322
|
+
this.authoritativeName = false;
|
|
264
323
|
this.sessionStartTime = Date.now();
|
|
265
324
|
this.toolCallCount = 0;
|
|
266
325
|
this.toolErrorCount = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-tracker.js","sourceRoot":"","sources":["../../src/metrics/session-tracker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session-tracker.js","sourceRoot":"","sources":["../../src/metrics/session-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGrC,OAAO,EACL,gBAAgB,EAChB,wBAAwB,GAEzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AA0DpD,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAEpC,6EAA6E;AAC7E,0EAA0E;AAC1E,oEAAoE;AACpE,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC,wGAAwG;AACxG,SAAS,cAAc,CAAC,GAAgB,EAAE,QAAgB;IACxD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,gBAAgB,EAAE,CAAC;QACvD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QACzC,IAAI,MAAM,KAAK,SAAS;YAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IACD,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAgB;IACzC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,OAAO,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,SAAmB;IACtD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IACtD,CAAC;IACD,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,QAAQ,CAAC;IACnB,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;IACpB,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,GAAG,IAAI,CAAC,CAAC;QACT,IAAI,CAAC,GAAG,GAAG;YAAE,GAAG,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,GAAG,GAAG;YAAE,GAAG,GAAG,CAAC,CAAC;IACvB,CAAC;IACD,OAAO;QACL,KAAK,EAAE,SAAS,CAAC,MAAM;QACvB,GAAG;QACH,GAAG;QACH,GAAG;QACH,GAAG,EAAE,UAAU,CAAC,SAAS,CAAC;KAC3B,CAAC;AACJ,CAAC;AAoBD,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,MAAM,OAAO,cAAc;IACjB,SAAS,CAAS;IAClB,WAAW,GAAkB,IAAI,CAAC;IAClC,iBAAiB,GAA6B,IAAI,CAAC;IACnD,aAAa,GAAkB,IAAI,CAAC;IAC5C;;;;;OAKG;IACK,iBAAiB,GAAG,KAAK,CAAC;IAC1B,gBAAgB,CAAS;IAEzB,aAAa,GAAG,CAAC,CAAC;IAClB,cAAc,GAAG,CAAC,CAAC;IACnB,YAAY,GAAG,CAAC,CAAC;IACjB,eAAe,GAAG,CAAC,CAAC;IACpB,aAAa,GAAG,CAAC,CAAC;IAET,mBAAmB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAChD,mBAAmB,GAAG,IAAI,GAAG,EAAoB,CAAC;IAClD,iBAAiB,GAAG,IAAI,GAAG,EAA8C,CAAC;IAC1E,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,mBAAmB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzD,QAAQ,GAAoB,EAAE,CAAC;IAC/B,kBAAkB,GAAG,CAAC,CAAC;IAE/B,YAAY,SAAiB;QAC3B,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5D,kEAAkE;YAClE,8DAA8D;YAC9D,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACrC,CAAC;IAED,cAAc,CAAC,MAAsB;QACnC,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,kEAAkE;QAClE,0EAA0E;QAC1E,sEAAsE;QACtE,mEAAmE;QACnE,qDAAqD;QACrD,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvF,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBACrD,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;oBACtF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;oBACxB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBACjC,CAAC;YACH,CAAC;QACH,CAAC;QAED,iBAAiB;QACjB,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC7B,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAElF,oBAAoB;QACpB,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAClE,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACrD,IAAI,SAAS,EAAE,CAAC;gBACd,gEAAgE;gBAChE,8CAA8C;gBAC9C,IAAI,SAAS,CAAC,MAAM,GAAG,GAAG;oBAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAClF,YAAY,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,YAAY,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CACvB,MAAM,CAAC,SAAS,EAChB,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CACvD,CAAC;YACJ,CAAC;QACH,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAE/C,yDAAyD;QACzD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAA8B,CAAC;QACvD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC3C,CAAC;iBAAM,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC/C,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,gBAAgB;QAChB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,MAAM,CAAC,QAA8B,CAAC;YACvD,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;gBACrB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChF,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAkC,CAAC;YAC3D,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACvC,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC;QAED,4DAA4D;QAC5D,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,oBAAoB,EAAE,CAAC;YAChD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACjB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,UAAU;QACR,gCAAgC;QAChC,MAAM,mBAAmB,GAA2B,EAAE,CAAC;QACvD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACrD,mBAAmB,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACpC,CAAC;QAED,MAAM,oBAAoB,GAAkC,EAAE,CAAC;QAC/D,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzD,oBAAoB,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,qBAAqB,GAA2B,EAAE,CAAC;QACzD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACnD,qBAAqB,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAClF,CAAC;QAED,MAAM,gBAAgB,GAA2B,EAAE,CAAC;QACpD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAClD,gBAAgB,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACjC,CAAC;QAED,MAAM,aAAa,GAA2B,EAAE,CAAC;QACjD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAC/C,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;QACtC,CAAC;QAED,MAAM,mBAAmB,GAA2B,EAAE,CAAC;QACvD,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzD,mBAAmB,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;QACxC,CAAC;QAED,MAAM,kBAAkB,GACtB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;QAEzE,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,iBAAiB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB;YACrD,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,mBAAmB;YACnB,oBAAoB;YACpB,eAAe,EAAE,kBAAkB;YACnC,qBAAqB;YACrB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,gBAAgB;YAChB,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;YACpC,kBAAkB,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI;YAC1C,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,aAAa;YACb,mBAAmB;YACnB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,gBAAgB,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;YACpC,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM;YACjE,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;SAC5C,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,UAA4B;QACtC,mBAAmB;QACnB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACrD,UAAU,CAAC,MAAM,CAAC,oBAAoB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC1B,UAAU,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACnD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/D,UAAU,CAAC,MAAM,CAAC,sBAAsB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,qEAAqE;QACrE,oEAAoE;QACpE,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzD,UAAU,CAAC,MAAM,CAAC,oBAAoB,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,wBAAwB;QACxB,UAAU,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAChF,UAAU,CAAC,MAAM,CAAC,8BAA8B,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACvE,UAAU,CAAC,MAAM,CAAC,iCAAiC,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC/E,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,oBAAoB,CAAC,IAAY,EAAE,MAAyB;QAC1D,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAChE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,KAAK,IAAI,IAAI,IAAI,CAAC,iBAAiB,KAAK,MAAM,CAAC;QAC/E,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC;QAChC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;;;OAQG;IACH,gBAAgB,CAAC,MAAqB;QACpC,IAAI,CAAC,aAAa,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACnE,CAAC;IAED,+EAA+E;IAC/E,cAAc,CAAC,SAAiB;QAC9B,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACH,iBAAiB,CAAC,IAAwB;QACxC,IAAI,IAAI,CAAC,aAAa,KAAK,CAAC,IAAI,IAAI,CAAC,gBAAgB,KAAK,CAAC;YAAE,OAAO;QACpE,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC;QACzC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,gBAAgB,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,SAAiB;QACrB,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;IAC9B,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing-data.d.ts","sourceRoot":"","sources":["../../src/shared/pricing-data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAejD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"pricing-data.d.ts","sourceRoot":"","sources":["../../src/shared/pricing-data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAejD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAoEhD,CAAC;AAiCF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CA84B9D,CAAC"}
|