@newrelic/preflight 1.14.35 → 1.14.36
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 -3
- package/dist/dashboard/routes/api-handler.d.ts.map +1 -1
- package/dist/dashboard/routes/api-handler.js +170 -39
- package/dist/dashboard/routes/api-handler.js.map +1 -1
- package/dist/dashboard/workflow-store.d.ts +20 -0
- package/dist/dashboard/workflow-store.d.ts.map +1 -1
- package/dist/dashboard/workflow-store.js +8 -0
- package/dist/dashboard/workflow-store.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +99 -33
- package/dist/index.js.map +1 -1
- package/dist/metrics/cost-tracker.d.ts +17 -0
- package/dist/metrics/cost-tracker.d.ts.map +1 -1
- package/dist/metrics/cost-tracker.js +19 -0
- package/dist/metrics/cost-tracker.js.map +1 -1
- package/dist/metrics/decision-tracker.d.ts +18 -1
- package/dist/metrics/decision-tracker.d.ts.map +1 -1
- package/dist/metrics/decision-tracker.js +28 -11
- package/dist/metrics/decision-tracker.js.map +1 -1
- package/dist/metrics/git-efficiency-tracker.d.ts +14 -1
- package/dist/metrics/git-efficiency-tracker.d.ts.map +1 -1
- package/dist/metrics/git-efficiency-tracker.js +50 -3
- package/dist/metrics/git-efficiency-tracker.js.map +1 -1
- package/dist/metrics/turn-cost-attributor.d.ts +37 -7
- package/dist/metrics/turn-cost-attributor.d.ts.map +1 -1
- package/dist/metrics/turn-cost-attributor.js +140 -45
- package/dist/metrics/turn-cost-attributor.js.map +1 -1
- package/dist/security/audit-trail.d.ts +32 -1
- package/dist/security/audit-trail.d.ts.map +1 -1
- package/dist/security/audit-trail.js +142 -4
- package/dist/security/audit-trail.js.map +1 -1
- package/dist/storage/local-store.d.ts +29 -0
- package/dist/storage/local-store.d.ts.map +1 -1
- package/dist/storage/local-store.js +93 -0
- package/dist/storage/local-store.js.map +1 -1
- package/dist/web/assets/{index-DI6sTfcj.js → index-DaSOJbc6.js} +3 -3
- package/dist/web/index.html +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-cost-attributor.d.ts","sourceRoot":"","sources":["../../src/metrics/turn-cost-attributor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAMtE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"turn-cost-attributor.d.ts","sourceRoot":"","sources":["../../src/metrics/turn-cost-attributor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAMtE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,EAAE,CAAC;IACtC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC3D,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AA8DD;;;;;;;;;;;;GAYG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAE5D,OAAO,CAAC,kBAAkB;IAoB1B,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAqB7D,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IA0DzC,kBAAkB,CAChB,SAAS,EAAE,MAAM,GAChB;QAAE,oBAAoB,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IActE;;;;;;;;;OASG;IACH,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,sBAAsB;IAkBtD,6EAA6E;IAC7E,OAAO,CAAC,oBAAoB;IAuB5B,OAAO,CAAC,MAAM,CAAC,YAAY;IAmB3B,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;CAGjC"}
|
|
@@ -15,28 +15,74 @@ const TOKEN_MATCH_WINDOW_MS = 5_000;
|
|
|
15
15
|
// Bounds memory for long sessions; only the most recent turns are needed for
|
|
16
16
|
// the cost-by-tool-type breakdown this class serves.
|
|
17
17
|
const MAX_TURNS = 200;
|
|
18
|
+
// A dedicated bucket for records/events with no sessionId (null/undefined) —
|
|
19
|
+
// distinct from any real session id string so it can never collide with one.
|
|
20
|
+
const NULL_SESSION_KEY = '__no_session__';
|
|
21
|
+
// Mirrors ContextTrackerRegistry's default (src/metrics/context-tracker.ts)
|
|
22
|
+
// so a long-running `--local` process watching many concurrent/historical
|
|
23
|
+
// sessions doesn't grow this map unboundedly.
|
|
24
|
+
const DEFAULT_MAX_SESSIONS = 50;
|
|
25
|
+
function createSessionState() {
|
|
26
|
+
return {
|
|
27
|
+
turns: [],
|
|
28
|
+
pendingTurn: null,
|
|
29
|
+
costByToolType: new Map(),
|
|
30
|
+
totalAttributedCost: 0,
|
|
31
|
+
totalToolCalls: 0,
|
|
32
|
+
attributedToolCalls: 0,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
18
35
|
// ---------------------------------------------------------------------------
|
|
19
36
|
// TurnCostAttributor
|
|
20
37
|
// ---------------------------------------------------------------------------
|
|
38
|
+
/**
|
|
39
|
+
* Per-session partitioned — each session's turns/pending-accumulator/
|
|
40
|
+
* cost-by-tool-type live in their own bucket (keyed by
|
|
41
|
+
* `ToolCallRecord.sessionId`/`TokenEvent.sessionId`), so tool calls from two
|
|
42
|
+
* concurrently-live sessions (`--local` mode's `drainAllSessions`) can never
|
|
43
|
+
* merge into one turn or blend into one session's totals. `getMetrics()`
|
|
44
|
+
* without a `sessionId` returns a real aggregate across every session this
|
|
45
|
+
* process has seen (summed/merged), matching `DecisionTracker.getMetrics()`'s
|
|
46
|
+
* "no-arg = everything" convention — not a "most recently touched session"
|
|
47
|
+
* heuristic, which `nr_observe_get_cost_per_tool` (a process-wide MCP tool
|
|
48
|
+
* with no single session in view) would otherwise silently receive instead
|
|
49
|
+
* of the sum callers actually expect.
|
|
50
|
+
*/
|
|
21
51
|
export class TurnCostAttributor {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
52
|
+
sessions = new Map();
|
|
53
|
+
getOrCreateSession(sessionId) {
|
|
54
|
+
const key = sessionId ?? NULL_SESSION_KEY;
|
|
55
|
+
let state = this.sessions.get(key);
|
|
56
|
+
if (state) {
|
|
57
|
+
// Move to the end so the DEFAULT_MAX_SESSIONS eviction below stays a
|
|
58
|
+
// real LRU (evicts the least-recently-touched session, not just the
|
|
59
|
+
// least-recently-created one).
|
|
60
|
+
this.sessions.delete(key);
|
|
61
|
+
this.sessions.set(key, state);
|
|
62
|
+
return state;
|
|
63
|
+
}
|
|
64
|
+
if (this.sessions.size >= DEFAULT_MAX_SESSIONS) {
|
|
65
|
+
const oldest = this.sessions.keys().next().value;
|
|
66
|
+
if (oldest !== undefined)
|
|
67
|
+
this.sessions.delete(oldest);
|
|
68
|
+
}
|
|
69
|
+
state = createSessionState();
|
|
70
|
+
this.sessions.set(key, state);
|
|
71
|
+
return state;
|
|
72
|
+
}
|
|
28
73
|
recordToolCall(record, turnId) {
|
|
29
|
-
this.
|
|
74
|
+
const state = this.getOrCreateSession(record.sessionId);
|
|
75
|
+
state.totalToolCalls++;
|
|
30
76
|
const endTime = record.timestamp + (record.durationMs ?? 0);
|
|
31
|
-
if (
|
|
32
|
-
|
|
33
|
-
|
|
77
|
+
if (state.pendingTurn && record.timestamp - state.pendingTurn.endTime <= TURN_GAP_MS) {
|
|
78
|
+
state.pendingTurn.endTime = endTime;
|
|
79
|
+
state.pendingTurn.toolCalls.push({
|
|
34
80
|
toolUseId: record.toolUseId,
|
|
35
81
|
toolName: record.toolName,
|
|
36
82
|
});
|
|
37
83
|
}
|
|
38
84
|
else {
|
|
39
|
-
|
|
85
|
+
state.pendingTurn = {
|
|
40
86
|
turnId: turnId ?? randomUUID(),
|
|
41
87
|
startTime: record.timestamp,
|
|
42
88
|
endTime,
|
|
@@ -45,13 +91,14 @@ export class TurnCostAttributor {
|
|
|
45
91
|
}
|
|
46
92
|
}
|
|
47
93
|
recordTokenEvent(event) {
|
|
48
|
-
|
|
94
|
+
const state = this.getOrCreateSession(event.sessionId);
|
|
95
|
+
if (!state.pendingTurn)
|
|
49
96
|
return;
|
|
50
97
|
// A token event outside the match window can't be reliably tied to the
|
|
51
98
|
// pending turn — silently drop it rather than risk mis-attributing cost
|
|
52
99
|
// to the wrong turn. Dropped events show up as a lower `attributionRate`
|
|
53
100
|
// in getMetrics(), not as an error.
|
|
54
|
-
const timeSinceLastTool = event.timestamp -
|
|
101
|
+
const timeSinceLastTool = event.timestamp - state.pendingTurn.endTime;
|
|
55
102
|
if (timeSinceLastTool < 0 || timeSinceLastTool > TOKEN_MATCH_WINDOW_MS)
|
|
56
103
|
return;
|
|
57
104
|
const usage = {
|
|
@@ -64,49 +111,102 @@ export class TurnCostAttributor {
|
|
|
64
111
|
};
|
|
65
112
|
const breakdown = calculateCost(event.model, usage);
|
|
66
113
|
const costUsd = breakdown.totalUsd;
|
|
67
|
-
const toolCount =
|
|
114
|
+
const toolCount = state.pendingTurn.toolCalls.length;
|
|
68
115
|
const costPerTool = toolCount > 0 ? costUsd / toolCount : 0;
|
|
69
116
|
const attribution = {
|
|
70
|
-
turnId:
|
|
71
|
-
startTime:
|
|
72
|
-
endTime:
|
|
73
|
-
toolCalls:
|
|
74
|
-
toolNames:
|
|
117
|
+
turnId: state.pendingTurn.turnId,
|
|
118
|
+
startTime: state.pendingTurn.startTime,
|
|
119
|
+
endTime: state.pendingTurn.endTime,
|
|
120
|
+
toolCalls: state.pendingTurn.toolCalls.map((tc) => tc.toolUseId),
|
|
121
|
+
toolNames: state.pendingTurn.toolCalls.map((tc) => tc.toolName),
|
|
75
122
|
inputTokens: event.inputTokens,
|
|
76
123
|
outputTokens: event.outputTokens,
|
|
77
124
|
cacheReadTokens: event.cacheReadTokens,
|
|
78
125
|
model: event.model,
|
|
79
126
|
estimatedCostUsd: costUsd,
|
|
80
127
|
costPerToolCall: costPerTool,
|
|
128
|
+
sessionId: event.sessionId ?? null,
|
|
81
129
|
};
|
|
82
|
-
|
|
83
|
-
if (
|
|
84
|
-
|
|
130
|
+
state.turns.push(attribution);
|
|
131
|
+
if (state.turns.length > MAX_TURNS) {
|
|
132
|
+
state.turns.shift();
|
|
85
133
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
for (const tc of
|
|
89
|
-
const entry =
|
|
134
|
+
state.totalAttributedCost += costUsd;
|
|
135
|
+
state.attributedToolCalls += toolCount;
|
|
136
|
+
for (const tc of state.pendingTurn.toolCalls) {
|
|
137
|
+
const entry = state.costByToolType.get(tc.toolName) ?? { totalCost: 0, callCount: 0 };
|
|
90
138
|
entry.totalCost += costPerTool;
|
|
91
139
|
entry.callCount += 1;
|
|
92
|
-
|
|
140
|
+
state.costByToolType.set(tc.toolName, entry);
|
|
93
141
|
}
|
|
94
|
-
|
|
142
|
+
state.pendingTurn = null;
|
|
95
143
|
}
|
|
96
144
|
getCostForToolCall(toolUseId) {
|
|
97
|
-
for (const
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
145
|
+
for (const state of this.sessions.values()) {
|
|
146
|
+
for (const turn of state.turns) {
|
|
147
|
+
if (turn.toolCalls.includes(toolUseId)) {
|
|
148
|
+
return {
|
|
149
|
+
estimatedTurnCostUsd: turn.estimatedCostUsd,
|
|
150
|
+
costPerToolCallUsd: turn.costPerToolCall,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
103
153
|
}
|
|
104
154
|
}
|
|
105
155
|
return null;
|
|
106
156
|
}
|
|
107
|
-
|
|
157
|
+
/**
|
|
158
|
+
* @param sessionId When provided, scopes every stat to that session's own
|
|
159
|
+
* bucket. Omit to get a real aggregate across every session in
|
|
160
|
+
* `this.sessions` — sums (`totalAttributedCost`, `totalToolCalls`,
|
|
161
|
+
* `attributedToolCalls`), merges (`costByToolType`), and concatenates
|
|
162
|
+
* (`turns`, capped back down to `MAX_TURNS` by recency) — matching
|
|
163
|
+
* `DecisionTracker.getMetrics()`'s "no-arg = everything" convention.
|
|
164
|
+
* Used by callers with no single session in view, e.g. the
|
|
165
|
+
* `nr_observe_get_cost_per_tool` MCP tool.
|
|
166
|
+
*/
|
|
167
|
+
getMetrics(sessionId) {
|
|
168
|
+
const empty = {
|
|
169
|
+
turns: [],
|
|
170
|
+
costByToolType: {},
|
|
171
|
+
totalAttributedCost: 0,
|
|
172
|
+
attributionRate: 0,
|
|
173
|
+
};
|
|
174
|
+
if (sessionId !== undefined) {
|
|
175
|
+
const state = this.sessions.get(sessionId);
|
|
176
|
+
if (!state)
|
|
177
|
+
return empty;
|
|
178
|
+
return TurnCostAttributor.buildMetrics(state);
|
|
179
|
+
}
|
|
180
|
+
if (this.sessions.size === 0)
|
|
181
|
+
return empty;
|
|
182
|
+
return TurnCostAttributor.buildMetrics(this.aggregateAllSessions());
|
|
183
|
+
}
|
|
184
|
+
/** Sums/merges every session bucket into one `SessionState`-shaped value. */
|
|
185
|
+
aggregateAllSessions() {
|
|
186
|
+
const aggregate = createSessionState();
|
|
187
|
+
for (const state of this.sessions.values()) {
|
|
188
|
+
aggregate.turns.push(...state.turns);
|
|
189
|
+
aggregate.totalAttributedCost += state.totalAttributedCost;
|
|
190
|
+
aggregate.totalToolCalls += state.totalToolCalls;
|
|
191
|
+
aggregate.attributedToolCalls += state.attributedToolCalls;
|
|
192
|
+
for (const [tool, entry] of state.costByToolType) {
|
|
193
|
+
const existing = aggregate.costByToolType.get(tool) ?? { totalCost: 0, callCount: 0 };
|
|
194
|
+
existing.totalCost += entry.totalCost;
|
|
195
|
+
existing.callCount += entry.callCount;
|
|
196
|
+
aggregate.costByToolType.set(tool, existing);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// Same cap as each per-session bucket already enforces on insert — keep
|
|
200
|
+
// only the most recent MAX_TURNS across the merged set, by start time.
|
|
201
|
+
if (aggregate.turns.length > MAX_TURNS) {
|
|
202
|
+
aggregate.turns.sort((a, b) => a.startTime - b.startTime);
|
|
203
|
+
aggregate.turns = aggregate.turns.slice(-MAX_TURNS);
|
|
204
|
+
}
|
|
205
|
+
return aggregate;
|
|
206
|
+
}
|
|
207
|
+
static buildMetrics(state) {
|
|
108
208
|
const costByToolType = {};
|
|
109
|
-
for (const [tool, entry] of
|
|
209
|
+
for (const [tool, entry] of state.costByToolType) {
|
|
110
210
|
costByToolType[tool] = {
|
|
111
211
|
totalCost: entry.totalCost,
|
|
112
212
|
callCount: entry.callCount,
|
|
@@ -114,19 +214,14 @@ export class TurnCostAttributor {
|
|
|
114
214
|
};
|
|
115
215
|
}
|
|
116
216
|
return {
|
|
117
|
-
turns: [...
|
|
217
|
+
turns: [...state.turns],
|
|
118
218
|
costByToolType,
|
|
119
|
-
totalAttributedCost:
|
|
120
|
-
attributionRate:
|
|
219
|
+
totalAttributedCost: state.totalAttributedCost,
|
|
220
|
+
attributionRate: state.totalToolCalls > 0 ? state.attributedToolCalls / state.totalToolCalls : 0,
|
|
121
221
|
};
|
|
122
222
|
}
|
|
123
223
|
reset(_sessionId) {
|
|
124
|
-
this.
|
|
125
|
-
this.pendingTurn = null;
|
|
126
|
-
this.costByToolType = new Map();
|
|
127
|
-
this.totalAttributedCost = 0;
|
|
128
|
-
this.totalToolCalls = 0;
|
|
129
|
-
this.attributedToolCalls = 0;
|
|
224
|
+
this.sessions.clear();
|
|
130
225
|
}
|
|
131
226
|
}
|
|
132
227
|
//# sourceMappingURL=turn-cost-attributor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-cost-attributor.js","sourceRoot":"","sources":["../../src/metrics/turn-cost-attributor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"turn-cost-attributor.js","sourceRoot":"","sources":["../../src/metrics/turn-cost-attributor.ts"],"names":[],"mappings":"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"}
|
|
@@ -62,10 +62,41 @@ export declare class AuditTrailManager {
|
|
|
62
62
|
private entries;
|
|
63
63
|
private sensitiveAccessLog;
|
|
64
64
|
private static readonly MAX_ENTRIES;
|
|
65
|
+
/**
|
|
66
|
+
* Default cap for `getAuditLog()` when the caller doesn't pass an
|
|
67
|
+
* explicit `limit`. The largest known consumer is `Audit.tsx`, which
|
|
68
|
+
* renders at most 200 rows and exports at most the same 200-row slice —
|
|
69
|
+
* 1000 gives headroom for its per-classification client-side filter
|
|
70
|
+
* (a rare classification like `external_network` may need to look past
|
|
71
|
+
* more than 200 raw rows to find 200 matching ones) without ever falling
|
|
72
|
+
* back to a full unbounded disk read.
|
|
73
|
+
*/
|
|
74
|
+
private static readonly DEFAULT_LOG_LIMIT;
|
|
65
75
|
constructor(options: AuditTrailManagerOptions);
|
|
66
76
|
recordToolCall(record: ToolCallRecord): AuditRecord;
|
|
67
77
|
recordProxyCall(record: ProxyToolCallRecord): AuditRecord;
|
|
68
|
-
|
|
78
|
+
/**
|
|
79
|
+
* Merges this process's own in-memory `entries` (capped at
|
|
80
|
+
* `MAX_ENTRIES`, evicted FIFO) with every process's persisted history from
|
|
81
|
+
* `~/.newrelic-preflight/audit/*.jsonl` via `LocalStore.peekAllAuditLogs()`,
|
|
82
|
+
* so disk is the durable source of truth and the in-memory array is just
|
|
83
|
+
* this process's own cache. Without this, every OTHER concurrent (or
|
|
84
|
+
* already-exited) process's flagged sensitive-file/destructive-command/
|
|
85
|
+
* external-network events would be invisible through this API even
|
|
86
|
+
* though they were faithfully written to disk.
|
|
87
|
+
*
|
|
88
|
+
* Bounded to `limit` (default `DEFAULT_LOG_LIMIT`): a long-lived `--local`
|
|
89
|
+
* daemon accumulates hundreds of thousands of on-disk rows across many
|
|
90
|
+
* `audit/*.jsonl` files, and reading/parsing all of them on every call
|
|
91
|
+
* would be unbounded CPU and payload for a caller that only ever renders
|
|
92
|
+
* or exports a couple hundred rows. `LocalStore.peekAllAuditLogs(limit)`
|
|
93
|
+
* itself stops reading once it has collected `limit` rows (newest files
|
|
94
|
+
* first), which is sufficient here: the merged set's size is always at
|
|
95
|
+
* least `max(this.entries.length, diskRowsPulled)`, so pulling `limit`
|
|
96
|
+
* disk rows guarantees at least `limit` total distinct rows are available
|
|
97
|
+
* to sort and slice below, whenever that many actually exist.
|
|
98
|
+
*/
|
|
99
|
+
getAuditLog(limit?: number): readonly AuditRecord[];
|
|
69
100
|
getSensitiveAccessLog(): readonly AuditRecord[];
|
|
70
101
|
getMetrics(): AuditMetrics;
|
|
71
102
|
reset(sessionId?: string | null): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-trail.d.ts","sourceRoot":"","sources":["../../src/security/audit-trail.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"audit-trail.d.ts","sourceRoot":"","sources":["../../src/security/audit-trail.ts"],"names":[],"mappings":"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"}
|
|
@@ -202,6 +202,95 @@ export function securityAlertToNrEvent(record, attrs) {
|
|
|
202
202
|
event.command = redactSensitive(record.command);
|
|
203
203
|
return event;
|
|
204
204
|
}
|
|
205
|
+
// ---------------------------------------------------------------------------
|
|
206
|
+
// Session ID resolution
|
|
207
|
+
// ---------------------------------------------------------------------------
|
|
208
|
+
/**
|
|
209
|
+
* `record.sessionId` can itself already be synthetic
|
|
210
|
+
* (`pending-<ts>` before stdio session-ID resolution, `local-<ts>` in
|
|
211
|
+
* `--local` mode, `proxy-<ts>`/`proxy-conn-<uuid>` proxy fallbacks — see
|
|
212
|
+
* `src/index.ts`), so `isSyntheticSessionId()` must run against whichever
|
|
213
|
+
* value is actually used (the record's own id when present, otherwise the
|
|
214
|
+
* manager's own fallback `managerSessionId`), not only against the
|
|
215
|
+
* fallback. Matches the pattern already used by `SessionStore.
|
|
216
|
+
* loadAllSessions()` and `LiveSessionRegistry.getLiveSessions()`.
|
|
217
|
+
*/
|
|
218
|
+
function resolveAuditSessionId(recordSessionId, managerSessionId) {
|
|
219
|
+
const raw = recordSessionId ?? managerSessionId;
|
|
220
|
+
return isSyntheticSessionId(raw) ? null : raw;
|
|
221
|
+
}
|
|
222
|
+
// ---------------------------------------------------------------------------
|
|
223
|
+
// Disk read-back
|
|
224
|
+
// ---------------------------------------------------------------------------
|
|
225
|
+
function isAuditAction(value) {
|
|
226
|
+
return (value === 'FileRead' ||
|
|
227
|
+
value === 'FileWrite' ||
|
|
228
|
+
value === 'FileEdit' ||
|
|
229
|
+
value === 'BashCommand' ||
|
|
230
|
+
value === 'McpToolCall' ||
|
|
231
|
+
value === 'AgentSpawn' ||
|
|
232
|
+
value === 'Search' ||
|
|
233
|
+
value === 'Other');
|
|
234
|
+
}
|
|
235
|
+
function isAlertSeverity(value) {
|
|
236
|
+
return value === 'critical' || value === 'high' || value === 'medium';
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Converts one on-disk `AuditEntry` (persisted by `appendAuditLog()`, from
|
|
240
|
+
* this process or another one) back into an `AuditRecord`. Returns `null`
|
|
241
|
+
* for a line that's missing/mistyped a required field rather than throwing
|
|
242
|
+
* or fabricating placeholder values — a malformed line is dropped, not
|
|
243
|
+
* surfaced as a broken row in the Audit page.
|
|
244
|
+
*
|
|
245
|
+
* Defensively re-applies `isSyntheticSessionId()` to the persisted
|
|
246
|
+
* `sessionId` too: files written before that filtering existed may still
|
|
247
|
+
* contain an unfiltered synthetic id (`pending-*`/`local-*`/`proxy-*`).
|
|
248
|
+
*/
|
|
249
|
+
function auditEntryToRecord(entry) {
|
|
250
|
+
const { timestamp, action, tool, detail, developer } = entry;
|
|
251
|
+
if (typeof timestamp !== 'number' ||
|
|
252
|
+
typeof action !== 'string' ||
|
|
253
|
+
typeof tool !== 'string' ||
|
|
254
|
+
typeof detail !== 'string' ||
|
|
255
|
+
typeof developer !== 'string' ||
|
|
256
|
+
!isAuditAction(action)) {
|
|
257
|
+
return null;
|
|
258
|
+
}
|
|
259
|
+
const rawSessionId = entry.sessionId;
|
|
260
|
+
const sessionId = typeof rawSessionId === 'string' && !isSyntheticSessionId(rawSessionId) ? rawSessionId : null;
|
|
261
|
+
const filePath = typeof entry.filePath === 'string' ? entry.filePath : undefined;
|
|
262
|
+
const command = typeof entry.command === 'string' ? entry.command : undefined;
|
|
263
|
+
let securityAlert;
|
|
264
|
+
const rawAlert = entry.securityAlert;
|
|
265
|
+
if (rawAlert && typeof rawAlert === 'object') {
|
|
266
|
+
const a = rawAlert;
|
|
267
|
+
if (isAlertSeverity(a.severity) && typeof a.alertType === 'string') {
|
|
268
|
+
securityAlert = {
|
|
269
|
+
severity: a.severity,
|
|
270
|
+
alertType: a.alertType,
|
|
271
|
+
description: typeof a.description === 'string' ? a.description : a.alertType,
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
return {
|
|
276
|
+
timestamp,
|
|
277
|
+
sessionId,
|
|
278
|
+
action,
|
|
279
|
+
tool,
|
|
280
|
+
detail,
|
|
281
|
+
developer,
|
|
282
|
+
filePath,
|
|
283
|
+
command,
|
|
284
|
+
securityAlert,
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
/** Best-effort content fingerprint — AuditRecord has no unique id field, so
|
|
288
|
+
* this is the identity dedup key used to avoid double-counting a record
|
|
289
|
+
* that exists both in this process's own in-memory `entries` (not yet
|
|
290
|
+
* evicted) AND in the disk file it was already persisted to. */
|
|
291
|
+
function auditIdentityKey(r) {
|
|
292
|
+
return `${r.timestamp}|${r.sessionId ?? ''}|${r.tool}|${r.detail}`;
|
|
293
|
+
}
|
|
205
294
|
export class AuditTrailManager {
|
|
206
295
|
developer;
|
|
207
296
|
sessionId;
|
|
@@ -212,6 +301,16 @@ export class AuditTrailManager {
|
|
|
212
301
|
entries = [];
|
|
213
302
|
sensitiveAccessLog = [];
|
|
214
303
|
static MAX_ENTRIES = 10_000;
|
|
304
|
+
/**
|
|
305
|
+
* Default cap for `getAuditLog()` when the caller doesn't pass an
|
|
306
|
+
* explicit `limit`. The largest known consumer is `Audit.tsx`, which
|
|
307
|
+
* renders at most 200 rows and exports at most the same 200-row slice —
|
|
308
|
+
* 1000 gives headroom for its per-classification client-side filter
|
|
309
|
+
* (a rare classification like `external_network` may need to look past
|
|
310
|
+
* more than 200 raw rows to find 200 matching ones) without ever falling
|
|
311
|
+
* back to a full unbounded disk read.
|
|
312
|
+
*/
|
|
313
|
+
static DEFAULT_LOG_LIMIT = 1000;
|
|
215
314
|
constructor(options) {
|
|
216
315
|
this.developer = options.developer;
|
|
217
316
|
this.sessionId = options.sessionId;
|
|
@@ -228,7 +327,7 @@ export class AuditTrailManager {
|
|
|
228
327
|
const rawCommand = record.command;
|
|
229
328
|
const auditRecord = {
|
|
230
329
|
timestamp: record.timestamp,
|
|
231
|
-
sessionId: record.sessionId
|
|
330
|
+
sessionId: resolveAuditSessionId(record.sessionId, this.sessionId),
|
|
232
331
|
action,
|
|
233
332
|
tool: record.toolName,
|
|
234
333
|
detail,
|
|
@@ -263,7 +362,7 @@ export class AuditTrailManager {
|
|
|
263
362
|
const alert = detectSecurityAlert(record, this.sensitivePatterns, this.destructivePatterns, this.networkPatterns);
|
|
264
363
|
const auditRecord = {
|
|
265
364
|
timestamp: record.timestamp,
|
|
266
|
-
sessionId: record.sessionId
|
|
365
|
+
sessionId: resolveAuditSessionId(record.sessionId, this.sessionId),
|
|
267
366
|
action: 'McpToolCall',
|
|
268
367
|
tool: record.toolName,
|
|
269
368
|
detail,
|
|
@@ -290,8 +389,47 @@ export class AuditTrailManager {
|
|
|
290
389
|
this.persistToDisk(auditRecord);
|
|
291
390
|
return auditRecord;
|
|
292
391
|
}
|
|
293
|
-
|
|
294
|
-
|
|
392
|
+
/**
|
|
393
|
+
* Merges this process's own in-memory `entries` (capped at
|
|
394
|
+
* `MAX_ENTRIES`, evicted FIFO) with every process's persisted history from
|
|
395
|
+
* `~/.newrelic-preflight/audit/*.jsonl` via `LocalStore.peekAllAuditLogs()`,
|
|
396
|
+
* so disk is the durable source of truth and the in-memory array is just
|
|
397
|
+
* this process's own cache. Without this, every OTHER concurrent (or
|
|
398
|
+
* already-exited) process's flagged sensitive-file/destructive-command/
|
|
399
|
+
* external-network events would be invisible through this API even
|
|
400
|
+
* though they were faithfully written to disk.
|
|
401
|
+
*
|
|
402
|
+
* Bounded to `limit` (default `DEFAULT_LOG_LIMIT`): a long-lived `--local`
|
|
403
|
+
* daemon accumulates hundreds of thousands of on-disk rows across many
|
|
404
|
+
* `audit/*.jsonl` files, and reading/parsing all of them on every call
|
|
405
|
+
* would be unbounded CPU and payload for a caller that only ever renders
|
|
406
|
+
* or exports a couple hundred rows. `LocalStore.peekAllAuditLogs(limit)`
|
|
407
|
+
* itself stops reading once it has collected `limit` rows (newest files
|
|
408
|
+
* first), which is sufficient here: the merged set's size is always at
|
|
409
|
+
* least `max(this.entries.length, diskRowsPulled)`, so pulling `limit`
|
|
410
|
+
* disk rows guarantees at least `limit` total distinct rows are available
|
|
411
|
+
* to sort and slice below, whenever that many actually exist.
|
|
412
|
+
*/
|
|
413
|
+
getAuditLog(limit = AuditTrailManager.DEFAULT_LOG_LIMIT) {
|
|
414
|
+
const combined = [...this.entries];
|
|
415
|
+
if (this.localStore) {
|
|
416
|
+
const seen = new Set(combined.map(auditIdentityKey));
|
|
417
|
+
for (const diskEntry of this.localStore.peekAllAuditLogs(limit)) {
|
|
418
|
+
const record = auditEntryToRecord(diskEntry);
|
|
419
|
+
if (!record)
|
|
420
|
+
continue;
|
|
421
|
+
const key = auditIdentityKey(record);
|
|
422
|
+
if (seen.has(key))
|
|
423
|
+
continue;
|
|
424
|
+
seen.add(key);
|
|
425
|
+
combined.push(record);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
// `entries` is append-only in processing order, not timestamp order —
|
|
429
|
+
// sort newest-first before slicing, so the cap (and the route's own
|
|
430
|
+
// `Audit.tsx` 200-row render/export slice) keeps the most recent
|
|
431
|
+
// entries, not whichever ones happen to sit at the front of the array.
|
|
432
|
+
return combined.sort((a, b) => b.timestamp - a.timestamp).slice(0, limit);
|
|
295
433
|
}
|
|
296
434
|
getSensitiveAccessLog() {
|
|
297
435
|
return this.sensitiveAccessLog;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-trail.js","sourceRoot":"","sources":["../../src/security/audit-trail.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"audit-trail.js","sourceRoot":"","sources":["../../src/security/audit-trail.ts"],"names":[],"mappings":"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"}
|
|
@@ -253,5 +253,34 @@ export declare class LocalStore {
|
|
|
253
253
|
/** The sessionId this store was scoped to, if any (test helper). */
|
|
254
254
|
getSessionId(): string | null;
|
|
255
255
|
appendAuditLog(entry: AuditEntry): void;
|
|
256
|
+
/**
|
|
257
|
+
* Read persisted audit-log JSONL files under `audit/` (one per calendar
|
|
258
|
+
* day, written by `appendAuditLog()` — including by *other* processes'
|
|
259
|
+
* `AuditTrailManager` instances, since every `--stdio`/`--local` process
|
|
260
|
+
* persists to the same shared `audit/` directory) WITHOUT deleting or
|
|
261
|
+
* moving anything — read-only, unlike `drainAllBuffers()`, because the
|
|
262
|
+
* audit log is meant to be a durable record, not a work queue. Used by
|
|
263
|
+
* `AuditTrailManager.getAuditLog()` to merge in every process's
|
|
264
|
+
* persisted history instead of returning only the calling process's own
|
|
265
|
+
* capped in-memory `entries` array.
|
|
266
|
+
*
|
|
267
|
+
* Mirrors `peekAllBuffers()`'s torn-tail-tolerant parse pattern above: the
|
|
268
|
+
* last non-empty line of a file may legitimately be torn by a concurrent
|
|
269
|
+
* appender and is dropped silently, but a parse failure on any earlier
|
|
270
|
+
* line is real corruption and is logged.
|
|
271
|
+
*
|
|
272
|
+
* @param limit Optional cap on how many rows to return. Filenames are
|
|
273
|
+
* `YYYY-MM-DD.jsonl`, which sort lexicographically in calendar order, so
|
|
274
|
+
* files are read newest-day-first and reading stops as soon as `limit`
|
|
275
|
+
* rows have been collected — older files are never opened. A whole file
|
|
276
|
+
* is always read to completion once opened (rows aren't truncated
|
|
277
|
+
* mid-file), so the result may overshoot `limit` slightly; callers that
|
|
278
|
+
* need an exact count should slice the result themselves. Without a
|
|
279
|
+
* `limit`, every file is read (unbounded, same as `peekAllBuffers()`) —
|
|
280
|
+
* audit files are never pruned, so a very long-lived
|
|
281
|
+
* `~/.newrelic-preflight/audit/` directory means more files read on
|
|
282
|
+
* every call in that mode.
|
|
283
|
+
*/
|
|
284
|
+
peekAllAuditLogs(limit?: number): AuditEntry[];
|
|
256
285
|
}
|
|
257
286
|
//# sourceMappingURL=local-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-store.d.ts","sourceRoot":"","sources":["../../src/storage/local-store.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAiExD,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAE1C;;;;;;;;;;;OAWG;gBACS,WAAW,EAAE,MAAM,EAAE,qBAAqB,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAwCnF,UAAU,IAAI,IAAI;IAiBlB;;;OAGG;IACH,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAStC;;;;OAIG;IACH,WAAW,IAAI,SAAS,EAAE;IAI1B;;;;;;;;;;;;;;;OAeG;IACH,eAAe,IAAI,SAAS,EAAE;IA0B9B;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAepB;;;;;;;;;;;;;;;;;;OAkBG;IACH,cAAc,IAAI,SAAS,EAAE;IAsD7B;;;;;;;;;OASG;IACH,cAAc,CAAC,GAAG,GAAE,MAAoB,GAAG,IAAI;IAc/C;;;;;OAKG;IACH,eAAe,IAAI,IAAI;IAUvB;;;;;;;OAOG;IACH,sBAAsB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,MAAoB,GAAG,IAAI;IAc7F;;;;;OAKG;IACH,4BAA4B,IAAI;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAuBnF;;;;OAIG;IACH,uBAAuB,IAAI,IAAI;IAY/B;;;;;;;;;OASG;IACH,qBAAqB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,MAAoB,GAAG,IAAI;IAiB5F;;;;;OAKG;IACH,uBAAuB,CAAC,GAAG,GAAE,MAAoB,GAAG,IAAI;IASxD;;;;;;OAMG;IACH,kBAAkB,IAAI,KAAK,CAAC;QAC1B,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;IAuCF;;;;;;;;OAQG;IACH,oBAAoB,IAAI,MAAM;IAiC9B;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,eAAe,CAAC,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG;QACtD,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,EAAE,MAAM,CAAC;KACzB;IAmGD;;;;;;;;;;;;;;;OAeG;IACH,gBAAgB,CACd,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,EACrC,cAAc,EAAE,MAAM,GACrB;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,uBAAuB,EAAE,MAAM,CAAA;KAAE;IAuF1F;;;;;OAKG;IACH,iCAAiC,IAAI,GAAG,CAAC,MAAM,CAAC;IAyBhD;;;;;;OAMG;IACH,kBAAkB,IAAI,MAAM;IAmC5B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,mBAAmB,IAAI,MAAM;IAkG7B,OAAO,CAAC,SAAS;IAuCjB,uEAAuE;IACvE,aAAa,IAAI,MAAM;IAIvB,oEAAoE;IACpE,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"local-store.d.ts","sourceRoot":"","sources":["../../src/storage/local-store.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAiExD,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAE1C;;;;;;;;;;;OAWG;gBACS,WAAW,EAAE,MAAM,EAAE,qBAAqB,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAwCnF,UAAU,IAAI,IAAI;IAiBlB;;;OAGG;IACH,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAStC;;;;OAIG;IACH,WAAW,IAAI,SAAS,EAAE;IAI1B;;;;;;;;;;;;;;;OAeG;IACH,eAAe,IAAI,SAAS,EAAE;IA0B9B;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAepB;;;;;;;;;;;;;;;;;;OAkBG;IACH,cAAc,IAAI,SAAS,EAAE;IAsD7B;;;;;;;;;OASG;IACH,cAAc,CAAC,GAAG,GAAE,MAAoB,GAAG,IAAI;IAc/C;;;;;OAKG;IACH,eAAe,IAAI,IAAI;IAUvB;;;;;;;OAOG;IACH,sBAAsB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,MAAoB,GAAG,IAAI;IAc7F;;;;;OAKG;IACH,4BAA4B,IAAI;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAuBnF;;;;OAIG;IACH,uBAAuB,IAAI,IAAI;IAY/B;;;;;;;;;OASG;IACH,qBAAqB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,MAAoB,GAAG,IAAI;IAiB5F;;;;;OAKG;IACH,uBAAuB,CAAC,GAAG,GAAE,MAAoB,GAAG,IAAI;IASxD;;;;;;OAMG;IACH,kBAAkB,IAAI,KAAK,CAAC;QAC1B,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;IAuCF;;;;;;;;OAQG;IACH,oBAAoB,IAAI,MAAM;IAiC9B;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,eAAe,CAAC,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG;QACtD,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,EAAE,MAAM,CAAC;KACzB;IAmGD;;;;;;;;;;;;;;;OAeG;IACH,gBAAgB,CACd,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,EACrC,cAAc,EAAE,MAAM,GACrB;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,uBAAuB,EAAE,MAAM,CAAA;KAAE;IAuF1F;;;;;OAKG;IACH,iCAAiC,IAAI,GAAG,CAAC,MAAM,CAAC;IAyBhD;;;;;;OAMG;IACH,kBAAkB,IAAI,MAAM;IAmC5B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,mBAAmB,IAAI,MAAM;IAkG7B,OAAO,CAAC,SAAS;IAuCjB,uEAAuE;IACvE,aAAa,IAAI,MAAM;IAIvB,oEAAoE;IACpE,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAavC;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE;CA0D/C"}
|