@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.
Files changed (50) hide show
  1. package/dist/dashboard/routes/api-handler.d.ts +3 -0
  2. package/dist/dashboard/routes/api-handler.d.ts.map +1 -1
  3. package/dist/dashboard/routes/api-handler.js +45 -4
  4. package/dist/dashboard/routes/api-handler.js.map +1 -1
  5. package/dist/data/pricing-overlay/README.md +58 -0
  6. package/dist/data/pricing-overlay/pricing.json +1 -0
  7. package/dist/deploy/data-paths.d.ts +4 -4
  8. package/dist/deploy/data-paths.js +3 -3
  9. package/dist/hooks/session-resolver.d.ts +134 -0
  10. package/dist/hooks/session-resolver.d.ts.map +1 -1
  11. package/dist/hooks/session-resolver.js +283 -16
  12. package/dist/hooks/session-resolver.js.map +1 -1
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +91 -5
  15. package/dist/index.js.map +1 -1
  16. package/dist/metrics/live-session-registry.d.ts +24 -0
  17. package/dist/metrics/live-session-registry.d.ts.map +1 -1
  18. package/dist/metrics/live-session-registry.js +57 -2
  19. package/dist/metrics/live-session-registry.js.map +1 -1
  20. package/dist/metrics/{copilot-pricing-overlay.d.ts → pricing-overlay.d.ts} +9 -9
  21. package/dist/metrics/pricing-overlay.d.ts.map +1 -0
  22. package/dist/metrics/{copilot-pricing-overlay.js → pricing-overlay.js} +15 -15
  23. package/dist/metrics/pricing-overlay.js.map +1 -0
  24. package/dist/metrics/session-tracker.d.ts +49 -0
  25. package/dist/metrics/session-tracker.d.ts.map +1 -1
  26. package/dist/metrics/session-tracker.js +63 -4
  27. package/dist/metrics/session-tracker.js.map +1 -1
  28. package/dist/shared/pricing-data.d.ts.map +1 -1
  29. package/dist/shared/pricing-data.js +243 -12
  30. package/dist/shared/pricing-data.js.map +1 -1
  31. package/dist/storage/session-store.d.ts +11 -0
  32. package/dist/storage/session-store.d.ts.map +1 -1
  33. package/dist/storage/session-store.js +26 -0
  34. package/dist/storage/session-store.js.map +1 -1
  35. package/dist/tools/cross-session-tools.d.ts.map +1 -1
  36. package/dist/tools/cross-session-tools.js +4 -0
  37. package/dist/tools/cross-session-tools.js.map +1 -1
  38. package/dist/tools/session-stats.d.ts +2 -0
  39. package/dist/tools/session-stats.d.ts.map +1 -1
  40. package/dist/tools/session-stats.js +8 -1
  41. package/dist/tools/session-stats.js.map +1 -1
  42. package/dist/web/assets/index-BSqTG7nX.js +64 -0
  43. package/dist/web/assets/{index-DwdSz9gz.css → index-DZ9_lGC1.css} +1 -1
  44. package/dist/web/index.html +2 -2
  45. package/package.json +16 -15
  46. package/dist/data/copilot-pricing/README.md +0 -42
  47. package/dist/data/copilot-pricing/pricing.json +0 -54
  48. package/dist/metrics/copilot-pricing-overlay.d.ts.map +0 -1
  49. package/dist/metrics/copilot-pricing-overlay.js.map +0 -1
  50. 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;AAKH,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;IAC1D,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;IAc5C,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQhD,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;IAuBnE,KAAK,IAAI,IAAI;IAKb,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAWlC,aAAa,IAAI,IAAI;IAYrB,YAAY,IAAI,IAAI;IAOpB,kBAAkB,IAAI,MAAM;IAI5B,iBAAiB,IAAI,MAAM;IAI3B,wBAAwB,IAAI,SAAS,iBAAiB,EAAE;CAGzD"}
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
- if (cwd && !this.sessionNames.has(sessionId)) {
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":"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"}
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,EACL,oBAAoB,EACpB,wBAAwB,GAEzB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,CAAC,MAAM,0BAA0B,GAAG,OAAO,CAAC,CAAC,YAAY;AAC/D,MAAM,uBAAuB,GAAG,IAAI,CAAC,CAAC,uBAAuB;AAC7D,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAOlC,MAAM,OAAO,mBAAmB;IACb,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1D,4EAA4E;IAC5E,uEAAuE;IACtD,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;IACxD,2EAA2E;IAC3E,2EAA2E;IAC3E,yEAAyE;IACzE,gEAAgE;IAC/C,oBAAoB,GAAG,IAAI,GAAG,EAA6B,CAAC;IAC5D,gBAAgB,CAAS;IAClC,cAAc,GAAG,CAAC,CAAC;IACV,qBAAqB,GAAwB,EAAE,CAAC;IACzD,gBAAgB,GAA0C,IAAI,CAAC;IAEvE,YAAY,gBAAgB,GAAG,0BAA0B;QACvD,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,SAAiB,EAAE,GAAY;QACnC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7C,yEAAyE;QACzE,sEAAsE;QACtE,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACxF,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBACrD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBACvC,wEAAwE;gBACxE,wEAAwE;gBACxE,wEAAwE;gBACxE,sEAAsE;gBACtE,sEAAsE;gBACtE,sBAAsB;gBACtB,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QAC1E,IAAI,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACpC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;;;;;;;;OASG;IACH,oBAAoB,CAAC,SAAiB,EAAE,IAAY,EAAE,MAAyB;QAC7E,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC1D,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;YACxF,OAAO;QACT,CAAC;QACD,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,cAAc,CAAC,SAAiB;QAC9B,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IAClD,CAAC;IAED;;;;;;;;OAQG;IACH,oBAAoB,CAAC,SAAiB;QACpC,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IAC1D,CAAC;IAED,2EAA2E;IAC3E,6EAA6E;IAC7E,2EAA2E;IAC3E,kBAAkB;IAClB,eAAe,CAAC,SAAiB;QAC/B,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IAClD,CAAC;IAED,eAAe,CAAC,OAAwC;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACzC,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QACD,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACnC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,gEAAgE;QAChE,uEAAuE;QACvE,sEAAsE;QACtE,oEAAoE;QACpE,0DAA0D;QAC1D,OAAO,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3F,CAAC;IAED,KAAK;QACH,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,SAAiB;QACtB,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,EAAE,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACnC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC5C,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACpC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACpC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC1C,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC5C,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa;QACX,IAAI,IAAI,CAAC,gBAAgB;YAAE,OAAO;QAClC,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC,GAAG,EAAE;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACtE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAClE,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAG,uBAAuB,EAAE,CAAC;gBAChE,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;YACrC,CAAC;QACH,CAAC,EAAE,kBAAkB,CAAC,CAAC;QACvB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;IAED,YAAY;QACV,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACrC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IACjE,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,wBAAwB;QACtB,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACpC,CAAC;CACF"}
@@ -1,6 +1,6 @@
1
1
  /**
2
- * Resolves the bundled `copilot-pricing/pricing.json` overlay path (see
3
- * `copilot-pricing/README.md` for what it fixes and why), or `null` when it
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 resolveCopilotPricingOverlayPath(): string | null;
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 `resolveCopilotPricingOverlayPath()`'s resolution logic.
26
+ * fake `resolvePricingOverlayPath()`'s resolution logic.
27
27
  */
28
28
  export declare function applyGapFilledOverlay(overlayPath: string): void;
29
29
  /**
30
- * Applies the bundled Copilot pricing gap-fill overlay to the process-wide
31
- * pricing singleton at startup, unless the user has configured their own
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 copilot-pricing/README.md for why: `initPricing()`/
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 applyCopilotPricingOverlay(customPricingFile: string | null): void;
42
- //# sourceMappingURL=copilot-pricing-overlay.d.ts.map
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 `copilot-pricing/pricing.json` overlay path (see
3
- * `copilot-pricing/README.md` for what it fixes and why), or `null` when it
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('copilot-pricing-overlay');
20
- export function resolveCopilotPricingOverlayPath() {
19
+ const logger = createLogger('pricing-overlay');
20
+ export function resolvePricingOverlayPath() {
21
21
  try {
22
- return resolve(resolveDataDir('copilot-pricing'), 'pricing.json');
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 `resolveCopilotPricingOverlayPath()`'s resolution logic.
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('copilot-pricing overlay entry already resolves against the vendored pricing table — dropped to avoid overriding it', { modelId });
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-copilot-pricing-'));
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 copilot-pricing overlay', {
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 Copilot pricing gap-fill overlay to the process-wide
77
- * pricing singleton at startup, unless the user has configured their own
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 copilot-pricing/README.md for why: `initPricing()`/
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 applyCopilotPricingOverlay(customPricingFile) {
87
+ export function applyPricingOverlay(customPricingFile) {
88
88
  if (customPricingFile) {
89
89
  initPricing(customPricingFile);
90
90
  return;
91
91
  }
92
- const overlayPath = resolveCopilotPricingOverlayPath();
92
+ const overlayPath = resolvePricingOverlayPath();
93
93
  if (overlayPath) {
94
94
  applyGapFilledOverlay(overlayPath);
95
95
  }
96
96
  }
97
- //# sourceMappingURL=copilot-pricing-overlay.js.map
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":"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"}
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
- // Derive session name from cwd; prefer a later, more meaningful name if the
89
- // current one is a degenerate system directory (tmp, var, usr, etc.).
90
- const DEGENERATE_NAMES = new Set(['tmp', 'temp', 'var', 'usr', 'opt', 'home', '.', '..', '']);
91
- if (typeof record.cwd === 'string' && record.cwd.length > 0) {
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":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAgDpD,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,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,4EAA4E;QAC5E,sEAAsE;QACtE,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9F,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5D,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;gBAC1B,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,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,+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,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
+ {"version":3,"file":"session-tracker.js","sourceRoot":"","sources":["../../src/metrics/session-tracker.ts"],"names":[],"mappings":"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"}
@@ -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,CA6BhD,CAAC;AAmBF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAutB9D,CAAC"}
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"}