@winstonsayno/mcp-gateway 8.2.0 → 8.4.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-advisor.js","sourceRoot":"","sources":["../../src/features/cost-advisor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,209 @@
1
+ /**
2
+ * Live collaborative debugging (8.3): shared debug sessions in which several operators watch matching tool calls
3
+ * live, pause them at breakpoints, edit arguments, resume or abort them, annotate, and replay captured calls.
4
+ *
5
+ * ```yaml
6
+ * debugSessions:
7
+ * maxSessions: 10
8
+ * holdTimeoutSeconds: 60 # a paused call is aborted (-32020) when nobody resumes it in time
9
+ * maxEvents: 500 # events kept per session
10
+ * ```
11
+ *
12
+ * Sessions are created at runtime (operators):
13
+ * - `POST /admin/debug-sessions` `{ name?, match?: { servers?, tools?, clients? }, breakpoints?: [{ tool, when? }] }`
14
+ * → session (`id`); the creator joins as `owner` (header `x-debug-user`, default the client id).
15
+ * - `POST /admin/debug-sessions/:id/join` `{ user }`, `GET /admin/debug-sessions/:id` (participants, paused calls,
16
+ * events since `?after=<seq>`), `GET /admin/debug-sessions/:id/events` (Server-Sent Events, live).
17
+ * - `POST /admin/debug-sessions/:id/calls/:callId/resume` `{ arguments?, user? }` / `…/abort` `{ reason?, user? }`.
18
+ * - `POST /admin/debug-sessions/:id/breakpoints` `{ tool, when? }`, `DELETE /admin/debug-sessions/:id/breakpoints/:n`.
19
+ * - `POST /admin/debug-sessions/:id/notes` `{ text, callId?, user? }`, `POST /admin/debug-sessions/:id/replay/:callId`.
20
+ * - `DELETE /admin/debug-sessions/:id` — closes the session and resumes every paused call unchanged.
21
+ *
22
+ * Arguments and results are redacted (secrets, tokens) in events. Paused calls hold their caller's request; aborted
23
+ * or timed-out calls fail with JSON-RPC **-32020**.
24
+ *
25
+ * @module features/debug-sessions
26
+ */
27
+ import { z } from 'zod';
28
+ /** JSON-RPC error: a call paused at a debug breakpoint was aborted or timed out (8.3). */
29
+ export declare const ERR_DEBUG_ABORTED = -32020;
30
+ export declare const DebugSessionsSchema: z.ZodObject<{
31
+ enabled: z.ZodDefault<z.ZodBoolean>;
32
+ maxSessions: z.ZodDefault<z.ZodNumber>;
33
+ holdTimeoutSeconds: z.ZodDefault<z.ZodNumber>;
34
+ maxEvents: z.ZodDefault<z.ZodNumber>;
35
+ }, "strict", z.ZodTypeAny, {
36
+ enabled: boolean;
37
+ maxSessions: number;
38
+ holdTimeoutSeconds: number;
39
+ maxEvents: number;
40
+ }, {
41
+ enabled?: boolean | undefined;
42
+ maxSessions?: number | undefined;
43
+ holdTimeoutSeconds?: number | undefined;
44
+ maxEvents?: number | undefined;
45
+ }>;
46
+ export type DebugSessionsConfig = z.input<typeof DebugSessionsSchema>;
47
+ type Cfg = z.output<typeof DebugSessionsSchema>;
48
+ declare const Match: z.ZodObject<{
49
+ servers: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
50
+ tools: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
51
+ clients: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
52
+ }, "strict", z.ZodTypeAny, {
53
+ servers?: string[] | undefined;
54
+ tools?: string[] | undefined;
55
+ clients?: string[] | undefined;
56
+ }, {
57
+ servers?: string[] | undefined;
58
+ tools?: string[] | undefined;
59
+ clients?: string[] | undefined;
60
+ }>;
61
+ declare const Breakpoint: z.ZodObject<{
62
+ tool: z.ZodString;
63
+ when: z.ZodOptional<z.ZodObject<{
64
+ path: z.ZodString;
65
+ equals: z.ZodUnknown;
66
+ }, "strict", z.ZodTypeAny, {
67
+ path: string;
68
+ equals?: unknown;
69
+ }, {
70
+ path: string;
71
+ equals?: unknown;
72
+ }>>;
73
+ }, "strict", z.ZodTypeAny, {
74
+ tool: string;
75
+ when?: {
76
+ path: string;
77
+ equals?: unknown;
78
+ } | undefined;
79
+ }, {
80
+ tool: string;
81
+ when?: {
82
+ path: string;
83
+ equals?: unknown;
84
+ } | undefined;
85
+ }>;
86
+ declare const CreateBody: z.ZodObject<{
87
+ name: z.ZodOptional<z.ZodString>;
88
+ match: z.ZodOptional<z.ZodObject<{
89
+ servers: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
90
+ tools: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
91
+ clients: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
92
+ }, "strict", z.ZodTypeAny, {
93
+ servers?: string[] | undefined;
94
+ tools?: string[] | undefined;
95
+ clients?: string[] | undefined;
96
+ }, {
97
+ servers?: string[] | undefined;
98
+ tools?: string[] | undefined;
99
+ clients?: string[] | undefined;
100
+ }>>;
101
+ breakpoints: z.ZodOptional<z.ZodArray<z.ZodObject<{
102
+ tool: z.ZodString;
103
+ when: z.ZodOptional<z.ZodObject<{
104
+ path: z.ZodString;
105
+ equals: z.ZodUnknown;
106
+ }, "strict", z.ZodTypeAny, {
107
+ path: string;
108
+ equals?: unknown;
109
+ }, {
110
+ path: string;
111
+ equals?: unknown;
112
+ }>>;
113
+ }, "strict", z.ZodTypeAny, {
114
+ tool: string;
115
+ when?: {
116
+ path: string;
117
+ equals?: unknown;
118
+ } | undefined;
119
+ }, {
120
+ tool: string;
121
+ when?: {
122
+ path: string;
123
+ equals?: unknown;
124
+ } | undefined;
125
+ }>, "many">>;
126
+ }, "strict", z.ZodTypeAny, {
127
+ match?: {
128
+ servers?: string[] | undefined;
129
+ tools?: string[] | undefined;
130
+ clients?: string[] | undefined;
131
+ } | undefined;
132
+ name?: string | undefined;
133
+ breakpoints?: {
134
+ tool: string;
135
+ when?: {
136
+ path: string;
137
+ equals?: unknown;
138
+ } | undefined;
139
+ }[] | undefined;
140
+ }, {
141
+ match?: {
142
+ servers?: string[] | undefined;
143
+ tools?: string[] | undefined;
144
+ clients?: string[] | undefined;
145
+ } | undefined;
146
+ name?: string | undefined;
147
+ breakpoints?: {
148
+ tool: string;
149
+ when?: {
150
+ path: string;
151
+ equals?: unknown;
152
+ } | undefined;
153
+ }[] | undefined;
154
+ }>;
155
+ export type DebugBreakpoint = z.infer<typeof Breakpoint>;
156
+ export interface DebugEvent {
157
+ seq: number;
158
+ at: string;
159
+ type: 'call' | 'paused' | 'resumed' | 'aborted' | 'result' | 'note' | 'join' | 'breakpoint' | 'replay';
160
+ callId?: string;
161
+ user?: string;
162
+ data?: Record<string, unknown>;
163
+ }
164
+ interface Paused {
165
+ callId: string;
166
+ tool: string;
167
+ client?: string;
168
+ args: Record<string, unknown>;
169
+ since: number;
170
+ resolve: (v: {
171
+ args?: Record<string, unknown>;
172
+ abort?: string;
173
+ }) => void;
174
+ timer: NodeJS.Timeout;
175
+ }
176
+ export interface DebugSession {
177
+ id: string;
178
+ name: string;
179
+ createdAt: string;
180
+ owner: string;
181
+ participants: Set<string>;
182
+ match: z.infer<typeof Match>;
183
+ breakpoints: DebugBreakpoint[];
184
+ events: DebugEvent[];
185
+ seq: number;
186
+ paused: Map<string, Paused>;
187
+ captured: Map<string, {
188
+ serverId: string;
189
+ tool: string;
190
+ args: Record<string, unknown>;
191
+ }>;
192
+ listeners: Set<(e: DebugEvent) => void>;
193
+ }
194
+ /** Runtime state; exported for tests. */
195
+ export declare const debugState: {
196
+ sessions: Map<string, DebugSession>;
197
+ pending: WeakMap<object, {
198
+ session: DebugSession;
199
+ callId: string;
200
+ started: number;
201
+ }[]>;
202
+ reset(): void;
203
+ };
204
+ export declare function createSession(c: Cfg, owner: string, body: z.infer<typeof CreateBody>): DebugSession;
205
+ export declare function closeSession(s: DebugSession): void;
206
+ /** Does a breakpoint stop this call? */
207
+ export declare function hits(b: DebugBreakpoint, name: string, args: Record<string, unknown>): boolean;
208
+ export {};
209
+ //# sourceMappingURL=debug-sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-sessions.d.ts","sourceRoot":"","sources":["../../src/features/debug-sessions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,346 @@
1
+ /**
2
+ * Live collaborative debugging (8.3): shared debug sessions in which several operators watch matching tool calls
3
+ * live, pause them at breakpoints, edit arguments, resume or abort them, annotate, and replay captured calls.
4
+ *
5
+ * ```yaml
6
+ * debugSessions:
7
+ * maxSessions: 10
8
+ * holdTimeoutSeconds: 60 # a paused call is aborted (-32020) when nobody resumes it in time
9
+ * maxEvents: 500 # events kept per session
10
+ * ```
11
+ *
12
+ * Sessions are created at runtime (operators):
13
+ * - `POST /admin/debug-sessions` `{ name?, match?: { servers?, tools?, clients? }, breakpoints?: [{ tool, when? }] }`
14
+ * → session (`id`); the creator joins as `owner` (header `x-debug-user`, default the client id).
15
+ * - `POST /admin/debug-sessions/:id/join` `{ user }`, `GET /admin/debug-sessions/:id` (participants, paused calls,
16
+ * events since `?after=<seq>`), `GET /admin/debug-sessions/:id/events` (Server-Sent Events, live).
17
+ * - `POST /admin/debug-sessions/:id/calls/:callId/resume` `{ arguments?, user? }` / `…/abort` `{ reason?, user? }`.
18
+ * - `POST /admin/debug-sessions/:id/breakpoints` `{ tool, when? }`, `DELETE /admin/debug-sessions/:id/breakpoints/:n`.
19
+ * - `POST /admin/debug-sessions/:id/notes` `{ text, callId?, user? }`, `POST /admin/debug-sessions/:id/replay/:callId`.
20
+ * - `DELETE /admin/debug-sessions/:id` — closes the session and resumes every paused call unchanged.
21
+ *
22
+ * Arguments and results are redacted (secrets, tokens) in events. Paused calls hold their caller's request; aborted
23
+ * or timed-out calls fail with JSON-RPC **-32020**.
24
+ *
25
+ * @module features/debug-sessions
26
+ */
27
+ import { randomUUID } from 'node:crypto';
28
+ import { z } from 'zod';
29
+ import { registerFeature, objectBody, badRequest, clientIdOf } from '../gateway/features.js';
30
+ import { registerCallHook } from '../gateway/hooks.js';
31
+ import { globToRegExp } from '../utils/tool-filter.js';
32
+ import { redactValue } from '../security/redact.js';
33
+ /** JSON-RPC error: a call paused at a debug breakpoint was aborted or timed out (8.3). */
34
+ export const ERR_DEBUG_ABORTED = -32020;
35
+ export const DebugSessionsSchema = z
36
+ .object({
37
+ enabled: z.boolean().default(true),
38
+ maxSessions: z.number().int().min(1).max(100).default(10),
39
+ holdTimeoutSeconds: z.number().int().min(1).max(3600).default(60),
40
+ maxEvents: z.number().int().min(10).max(10_000).default(500),
41
+ })
42
+ .strict();
43
+ const Match = z.object({ servers: z.array(z.string()).optional(), tools: z.array(z.string()).optional(), clients: z.array(z.string()).optional() }).strict();
44
+ const Breakpoint = z.object({ tool: z.string().min(1), when: z.object({ path: z.string().min(1), equals: z.unknown() }).strict().optional() }).strict();
45
+ const CreateBody = z.object({ name: z.string().max(200).optional(), match: Match.optional(), breakpoints: z.array(Breakpoint).max(50).optional() }).strict();
46
+ const settings = (cfg) => {
47
+ if (!cfg.debugSessions)
48
+ return undefined;
49
+ const c = DebugSessionsSchema.parse(cfg.debugSessions);
50
+ return c.enabled ? c : undefined;
51
+ };
52
+ const any = (globs, s) => !globs?.length || (s !== undefined && globs.some((g) => globToRegExp(g).test(s)));
53
+ const at = (obj, path) => path.split('.').reduce((o, k) => (o && typeof o === 'object' ? o[k] : undefined), obj);
54
+ /** Runtime state; exported for tests. */
55
+ export const debugState = {
56
+ sessions: new Map(),
57
+ pending: new WeakMap(),
58
+ reset() {
59
+ for (const s of this.sessions.values())
60
+ closeSession(s);
61
+ this.sessions.clear();
62
+ },
63
+ };
64
+ function emit(s, max, e) {
65
+ const ev = { seq: ++s.seq, at: new Date().toISOString(), ...e };
66
+ s.events.push(ev);
67
+ if (s.events.length > max)
68
+ s.events.splice(0, s.events.length - max);
69
+ for (const l of s.listeners)
70
+ l(ev);
71
+ return ev;
72
+ }
73
+ export function createSession(c, owner, body) {
74
+ if (debugState.sessions.size >= c.maxSessions)
75
+ throw new Error(`at most ${c.maxSessions} debug sessions (debugSessions.maxSessions)`);
76
+ const s = {
77
+ id: randomUUID().slice(0, 8),
78
+ name: body.name ?? 'debug session',
79
+ createdAt: new Date().toISOString(),
80
+ owner,
81
+ participants: new Set([owner]),
82
+ match: body.match ?? {},
83
+ breakpoints: body.breakpoints ?? [],
84
+ events: [],
85
+ seq: 0,
86
+ paused: new Map(),
87
+ captured: new Map(),
88
+ listeners: new Set(),
89
+ };
90
+ debugState.sessions.set(s.id, s);
91
+ emit(s, c.maxEvents, { type: 'join', user: owner, data: { role: 'owner' } });
92
+ return s;
93
+ }
94
+ export function closeSession(s) {
95
+ for (const p of s.paused.values()) {
96
+ clearTimeout(p.timer);
97
+ p.resolve({});
98
+ }
99
+ s.paused.clear();
100
+ for (const l of s.listeners)
101
+ l({ seq: s.seq + 1, at: new Date().toISOString(), type: 'aborted', data: { closed: true } });
102
+ s.listeners.clear();
103
+ }
104
+ /** Does a breakpoint stop this call? */
105
+ export function hits(b, name, args) {
106
+ if (!globToRegExp(b.tool).test(name))
107
+ return false;
108
+ if (!b.when)
109
+ return true;
110
+ return JSON.stringify(at(args, b.when.path)) === JSON.stringify(b.when.equals);
111
+ }
112
+ const view = (s) => ({
113
+ id: s.id,
114
+ name: s.name,
115
+ createdAt: s.createdAt,
116
+ owner: s.owner,
117
+ participants: [...s.participants],
118
+ match: s.match,
119
+ breakpoints: s.breakpoints,
120
+ paused: [...s.paused.values()].map((p) => ({ callId: p.callId, tool: p.tool, client: p.client, arguments: redactValue(p.args), pausedForMs: Date.now() - p.since })),
121
+ lastSeq: s.seq,
122
+ });
123
+ registerCallHook({
124
+ id: 'debug-sessions',
125
+ async before(call, cfg) {
126
+ const c = settings(cfg);
127
+ if (!c || !debugState.sessions.size)
128
+ return;
129
+ const name = `${call.serverId}/${call.tool}`;
130
+ let args = call.args;
131
+ const tracked = [];
132
+ for (const s of debugState.sessions.values()) {
133
+ if (!any(s.match.servers, call.serverId) || !any(s.match.tools, name) || !any(s.match.clients, call.clientId))
134
+ continue;
135
+ const callId = randomUUID().slice(0, 8);
136
+ s.captured.set(callId, { serverId: call.serverId, tool: call.tool, args });
137
+ if (s.captured.size > c.maxEvents)
138
+ s.captured.delete(s.captured.keys().next().value);
139
+ emit(s, c.maxEvents, { type: 'call', callId, data: { tool: name, client: call.clientId, arguments: redactValue(args) } });
140
+ const bp = s.breakpoints.find((b) => hits(b, name, args));
141
+ if (bp) {
142
+ emit(s, c.maxEvents, { type: 'paused', callId, data: { tool: name, breakpoint: bp.tool } });
143
+ const decision = await new Promise((resolve) => {
144
+ const timer = setTimeout(() => {
145
+ s.paused.delete(callId);
146
+ emit(s, c.maxEvents, { type: 'aborted', callId, data: { reason: `not resumed within ${c.holdTimeoutSeconds}s` } });
147
+ resolve({ abort: `Paused at a debug breakpoint and not resumed within ${c.holdTimeoutSeconds}s` });
148
+ }, c.holdTimeoutSeconds * 1000);
149
+ timer.unref();
150
+ s.paused.set(callId, { callId, tool: name, client: call.clientId, args, since: Date.now(), resolve, timer });
151
+ });
152
+ if (decision.abort !== undefined)
153
+ return { refuse: { code: ERR_DEBUG_ABORTED, message: decision.abort, data: { session: s.id, callId } } };
154
+ if (decision.args)
155
+ args = decision.args;
156
+ }
157
+ tracked.push({ session: s, callId, started: Date.now() });
158
+ }
159
+ if (!tracked.length)
160
+ return;
161
+ if (args === call.args)
162
+ args = { ...args }; // fresh object: the after hook finds its calls by identity
163
+ debugState.pending.set(args, tracked);
164
+ return { args };
165
+ },
166
+ after(call, result, cfg) {
167
+ const c = settings(cfg);
168
+ const tracked = debugState.pending.get(call.args);
169
+ if (!c || !tracked)
170
+ return;
171
+ debugState.pending.delete(call.args);
172
+ for (const t of tracked) {
173
+ if (!debugState.sessions.has(t.session.id))
174
+ continue;
175
+ emit(t.session, c.maxEvents, { type: 'result', callId: t.callId, data: { success: result.success, durationMs: Date.now() - t.started, ...(result.success ? { result: redactValue(result.result) } : { error: result.error }) } });
176
+ }
177
+ },
178
+ });
179
+ const userOf = (req, b) => (typeof b?.user === 'string' && b.user) || req.get('x-debug-user') || clientIdOf(req) || 'operator';
180
+ registerFeature({
181
+ id: 'debug-sessions',
182
+ since: '8.3.0',
183
+ summary: 'Live collaborative debugging: shared sessions, live call stream (SSE), breakpoints, edit/resume/abort, notes, replay',
184
+ mount(router, ctx) {
185
+ ctx.onStop?.(() => debugState.reset());
186
+ const cfgOr404 = (res) => {
187
+ const c = settings(ctx.config());
188
+ if (!c)
189
+ res.status(404).json({ error: 'Not Found', message: 'debugSessions is not configured' });
190
+ return c;
191
+ };
192
+ const sessionOr404 = (req, res) => {
193
+ const s = debugState.sessions.get(String(req.params.id));
194
+ if (!s)
195
+ res.status(404).json({ error: 'Not Found', message: `no debug session "${req.params.id}"` });
196
+ return s;
197
+ };
198
+ router.get('/', (_req, res) => {
199
+ const c = settings(ctx.config());
200
+ res.json({ enabled: !!c, sessions: [...debugState.sessions.values()].map(view) });
201
+ });
202
+ router.post('/', (req, res) => {
203
+ const c = cfgOr404(res);
204
+ if (!c)
205
+ return;
206
+ const b = objectBody(req, res);
207
+ if (!b)
208
+ return;
209
+ const { user: _u, ...rest } = b;
210
+ const parsed = CreateBody.safeParse(rest);
211
+ if (!parsed.success)
212
+ return badRequest(res, parsed.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`).join('; '));
213
+ try {
214
+ res.status(201).json(view(createSession(c, userOf(req, b), parsed.data)));
215
+ }
216
+ catch (err) {
217
+ res.status(409).json({ error: 'Conflict', message: err.message });
218
+ }
219
+ });
220
+ router.get('/:id', (req, res) => {
221
+ const s = sessionOr404(req, res);
222
+ if (!s)
223
+ return;
224
+ const after = Number(req.query.after ?? 0) || 0;
225
+ res.json({ ...view(s), events: s.events.filter((e) => e.seq > after) });
226
+ });
227
+ router.get('/:id/events', (req, res) => {
228
+ const s = sessionOr404(req, res);
229
+ if (!s)
230
+ return;
231
+ res.writeHead(200, { 'content-type': 'text/event-stream', 'cache-control': 'no-cache', connection: 'keep-alive' });
232
+ const send = (e) => res.write(`id: ${e.seq}\nevent: ${e.type}\ndata: ${JSON.stringify(e)}\n\n`);
233
+ const after = Number(req.get('last-event-id') ?? req.query.after ?? 0) || 0;
234
+ for (const e of s.events)
235
+ if (e.seq > after)
236
+ send(e);
237
+ s.listeners.add(send);
238
+ req.on('close', () => s.listeners.delete(send));
239
+ });
240
+ router.delete('/:id', (req, res) => {
241
+ const s = sessionOr404(req, res);
242
+ if (!s)
243
+ return;
244
+ closeSession(s);
245
+ debugState.sessions.delete(s.id);
246
+ res.json({ closed: s.id });
247
+ });
248
+ router.post('/:id/join', (req, res) => {
249
+ const c = cfgOr404(res);
250
+ const s = c && sessionOr404(req, res);
251
+ if (!c || !s)
252
+ return;
253
+ const b = objectBody(req, res);
254
+ if (!b)
255
+ return;
256
+ const user = userOf(req, b);
257
+ s.participants.add(user);
258
+ emit(s, c.maxEvents, { type: 'join', user });
259
+ res.json(view(s));
260
+ });
261
+ const decide = (abort) => (req, res) => {
262
+ const c = cfgOr404(res);
263
+ const s = c && sessionOr404(req, res);
264
+ if (!c || !s)
265
+ return;
266
+ const b = objectBody(req, res);
267
+ if (!b)
268
+ return;
269
+ const p = s.paused.get(String(req.params.callId));
270
+ if (!p)
271
+ return void res.status(404).json({ error: 'Not Found', message: `call "${req.params.callId}" is not paused in this session` });
272
+ if (!abort && b.arguments !== undefined && (!b.arguments || typeof b.arguments !== 'object' || Array.isArray(b.arguments)))
273
+ return badRequest(res, '"arguments" must be an object');
274
+ clearTimeout(p.timer);
275
+ s.paused.delete(p.callId);
276
+ const user = userOf(req, b);
277
+ if (abort) {
278
+ const reason = typeof b.reason === 'string' && b.reason ? b.reason : 'aborted from a debug session';
279
+ emit(s, c.maxEvents, { type: 'aborted', callId: p.callId, user, data: { reason } });
280
+ p.resolve({ abort: `Aborted at a debug breakpoint by ${user}: ${reason}` });
281
+ }
282
+ else {
283
+ const edited = b.arguments;
284
+ emit(s, c.maxEvents, { type: 'resumed', callId: p.callId, user, data: edited ? { arguments: redactValue(edited), edited: true } : { edited: false } });
285
+ p.resolve({ args: edited });
286
+ }
287
+ res.json({ callId: p.callId, action: abort ? 'aborted' : 'resumed' });
288
+ };
289
+ router.post('/:id/calls/:callId/resume', decide(false));
290
+ router.post('/:id/calls/:callId/abort', decide(true));
291
+ router.post('/:id/breakpoints', (req, res) => {
292
+ const c = cfgOr404(res);
293
+ const s = c && sessionOr404(req, res);
294
+ if (!c || !s)
295
+ return;
296
+ const b = objectBody(req, res);
297
+ if (!b)
298
+ return;
299
+ const { user: _u, ...rest } = b;
300
+ const bp = Breakpoint.safeParse(rest);
301
+ if (!bp.success)
302
+ return badRequest(res, 'Body must be { "tool": "<server/tool glob>", "when"?: { "path", "equals" } }');
303
+ s.breakpoints.push(bp.data);
304
+ emit(s, c.maxEvents, { type: 'breakpoint', user: userOf(req, b), data: { added: bp.data } });
305
+ res.status(201).json({ breakpoints: s.breakpoints });
306
+ });
307
+ router.delete('/:id/breakpoints/:n', (req, res) => {
308
+ const c = cfgOr404(res);
309
+ const s = c && sessionOr404(req, res);
310
+ if (!c || !s)
311
+ return;
312
+ const n = Number(req.params.n);
313
+ if (!Number.isInteger(n) || n < 0 || n >= s.breakpoints.length)
314
+ return void res.status(404).json({ error: 'Not Found', message: `no breakpoint ${req.params.n}` });
315
+ const [removed] = s.breakpoints.splice(n, 1);
316
+ emit(s, c.maxEvents, { type: 'breakpoint', user: userOf(req), data: { removed } });
317
+ res.json({ breakpoints: s.breakpoints });
318
+ });
319
+ router.post('/:id/notes', (req, res) => {
320
+ const c = cfgOr404(res);
321
+ const s = c && sessionOr404(req, res);
322
+ if (!c || !s)
323
+ return;
324
+ const b = objectBody(req, res);
325
+ if (!b)
326
+ return;
327
+ if (typeof b.text !== 'string' || !b.text.trim() || b.text.length > 4000)
328
+ return badRequest(res, 'Body must be { "text": "<1-4000 chars>", "callId"? }');
329
+ res.status(201).json(emit(s, c.maxEvents, { type: 'note', user: userOf(req, b), callId: typeof b.callId === 'string' ? b.callId : undefined, data: { text: b.text } }));
330
+ });
331
+ router.post('/:id/replay/:callId', async (req, res) => {
332
+ const c = cfgOr404(res);
333
+ const s = c && sessionOr404(req, res);
334
+ if (!c || !s)
335
+ return;
336
+ const cap = s.captured.get(String(req.params.callId));
337
+ if (!cap)
338
+ return void res.status(404).json({ error: 'Not Found', message: `call "${req.params.callId}" was not captured by this session` });
339
+ const user = userOf(req);
340
+ emit(s, c.maxEvents, { type: 'replay', callId: String(req.params.callId), user, data: { tool: `${cap.serverId}/${cap.tool}` } });
341
+ const r = await ctx.invoke(cap.serverId, cap.tool, cap.args, `debug:${s.id}`);
342
+ res.json({ replayOf: req.params.callId, ...r });
343
+ });
344
+ },
345
+ });
346
+ //# sourceMappingURL=debug-sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-sessions.js","sourceRoot":"","sources":["../../src/features/debug-sessions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD,0FAA0F;AAC1F,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAK,CAAC;AAExC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAClC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACzD,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACjE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;CAC7D,CAAC;KACD,MAAM,EAAE,CAAC;AAIZ,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAC7J,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AACxJ,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAqC7J,MAAM,QAAQ,GAAG,CAAC,GAAkB,EAAmB,EAAE;IACvD,IAAI,CAAC,GAAG,CAAC,aAAa;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACvD,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACnC,CAAC,CAAC;AACF,MAAM,GAAG,GAAG,CAAC,KAA2B,EAAE,CAAqB,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtJ,MAAM,EAAE,GAAG,CAAC,GAAY,EAAE,IAAY,EAAW,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAU,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,CAA6B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;AAEjL,yCAAyC;AACzC,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,QAAQ,EAAE,IAAI,GAAG,EAAwB;IACzC,OAAO,EAAE,IAAI,OAAO,EAA6E;IACjG,KAAK;QACH,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAAE,YAAY,CAAC,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;CACF,CAAC;AAEF,SAAS,IAAI,CAAC,CAAe,EAAE,GAAW,EAAE,CAAiC;IAC3E,MAAM,EAAE,GAAe,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;IAC5E,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG;QAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;IACrE,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS;QAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACnC,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,CAAM,EAAE,KAAa,EAAE,IAAgC;IACnF,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,WAAW,6CAA6C,CAAC,CAAC;IACtI,MAAM,CAAC,GAAiB;QACtB,EAAE,EAAE,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,eAAe;QAClC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,KAAK;QACL,YAAY,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9B,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;QACvB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;QACnC,MAAM,EAAE,EAAE;QACV,GAAG,EAAE,CAAC;QACN,MAAM,EAAE,IAAI,GAAG,EAAE;QACjB,QAAQ,EAAE,IAAI,GAAG,EAAE;QACnB,SAAS,EAAE,IAAI,GAAG,EAAE;KACrB,CAAC;IACF,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACjC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAC7E,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAe;IAC1C,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QAClC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;IACD,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS;QAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAC1H,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACtB,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,IAAI,CAAC,CAAkB,EAAE,IAAY,EAAE,IAA6B;IAClF,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACnD,IAAI,CAAC,CAAC,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,CAAe,EAAE,EAAE,CAAC,CAAC;IACjC,EAAE,EAAE,CAAC,CAAC,EAAE;IACR,IAAI,EAAE,CAAC,CAAC,IAAI;IACZ,SAAS,EAAE,CAAC,CAAC,SAAS;IACtB,KAAK,EAAE,CAAC,CAAC,KAAK;IACd,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC;IACjC,KAAK,EAAE,CAAC,CAAC,KAAK;IACd,WAAW,EAAE,CAAC,CAAC,WAAW;IAC1B,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IACpK,OAAO,EAAE,CAAC,CAAC,GAAG;CACf,CAAC,CAAC;AAEH,gBAAgB,CAAC;IACf,EAAE,EAAE,gBAAgB;IACpB,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG;QACpB,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI;YAAE,OAAO;QAC5C,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAC7C,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrB,MAAM,OAAO,GAAsE,EAAE,CAAC;QACtF,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACxH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3E,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS;gBAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAM,CAAC,CAAC;YACtF,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1H,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1D,IAAI,EAAE,EAAE,CAAC;gBACP,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC5F,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAqD,CAAC,OAAO,EAAE,EAAE;oBACjG,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;wBAC5B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;wBACxB,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,sBAAsB,CAAC,CAAC,kBAAkB,GAAG,EAAE,EAAE,CAAC,CAAC;wBACnH,OAAO,CAAC,EAAE,KAAK,EAAE,uDAAuD,CAAC,CAAC,kBAAkB,GAAG,EAAE,CAAC,CAAC;oBACrG,CAAC,EAAE,CAAC,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;oBAChC,KAAK,CAAC,KAAK,EAAE,CAAC;oBACd,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC/G,CAAC,CAAC,CAAC;gBACH,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS;oBAAE,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;gBAC3I,IAAI,QAAQ,CAAC,IAAI;oBAAE,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC1C,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO;QAC5B,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI;YAAE,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,2DAA2D;QACvG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACtC,OAAO,EAAE,IAAI,EAAE,CAAC;IAClB,CAAC;IACD,KAAK,CAAC,IAAI,EAAE,MAAqB,EAAE,GAAG;QACpC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC3B,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;gBAAE,SAAS;YACrD,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACpO,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,CAAC,GAAY,EAAE,CAA2B,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC;AAElK,eAAe,CAAC;IACd,EAAE,EAAE,gBAAgB;IACpB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,sHAAsH;IAC/H,KAAK,CAAC,MAAM,EAAE,GAAG;QACf,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,CAAC,GAAa,EAAE,EAAE;YACjC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YACjC,IAAI,CAAC,CAAC;gBAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,iCAAiC,EAAE,CAAC,CAAC;YACjG,OAAO,CAAC,CAAC;QACX,CAAC,CAAC;QACF,MAAM,YAAY,GAAG,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;YACnD,MAAM,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YACzD,IAAI,CAAC,CAAC;gBAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,qBAAqB,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YACrG,OAAO,CAAC,CAAC;QACX,CAAC,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YAC5B,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YACjC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpF,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC5B,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YACxB,IAAI,CAAC,CAAC;gBAAE,OAAO;YACf,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC/B,IAAI,CAAC,CAAC;gBAAE,OAAO;YACf,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAO,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5H,IAAI,CAAC;gBACH,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5E,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC9B,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACjC,IAAI,CAAC,CAAC;gBAAE,OAAO;YACf,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YAChD,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACrC,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACjC,IAAI,CAAC,CAAC;gBAAE,OAAO;YACf,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,mBAAmB,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;YACnH,MAAM,IAAI,GAAG,CAAC,CAAa,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,WAAW,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC5G,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YAC5E,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM;gBAAE,IAAI,CAAC,CAAC,GAAG,GAAG,KAAK;oBAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YACrD,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACjC,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACjC,IAAI,CAAC,CAAC;gBAAE,OAAO;YACf,YAAY,CAAC,CAAC,CAAC,CAAC;YAChB,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACjC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACpC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACtC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;gBAAE,OAAO;YACrB,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC/B,IAAI,CAAC,CAAC;gBAAE,OAAO;YACf,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC5B,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7C,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;YACjE,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACtC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;gBAAE,OAAO;YACrB,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC/B,IAAI,CAAC,CAAC;gBAAE,OAAO;YACf,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAClD,IAAI,CAAC,CAAC;gBAAE,OAAO,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,GAAG,CAAC,MAAM,CAAC,MAAM,iCAAiC,EAAE,CAAC,CAAC;YACvI,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBAAE,OAAO,UAAU,CAAC,GAAG,EAAE,+BAA+B,CAAC,CAAC;YACpL,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC5B,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,8BAA8B,CAAC;gBACpG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;gBACpF,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,oCAAoC,IAAI,KAAK,MAAM,EAAE,EAAE,CAAC,CAAC;YAC9E,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,CAAC,CAAC,SAAgD,CAAC;gBAClE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;gBACvJ,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YAC9B,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QACxE,CAAC,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC3C,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACtC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;gBAAE,OAAO;YACrB,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC/B,IAAI,CAAC,CAAC;gBAAE,OAAO;YACf,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;YAChC,MAAM,EAAE,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,CAAC,EAAE,CAAC,OAAO;gBAAE,OAAO,UAAU,CAAC,GAAG,EAAE,8EAA8E,CAAC,CAAC;YACxH,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC7F,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAChD,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACtC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;gBAAE,OAAO;YACrB,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM;gBAAE,OAAO,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnK,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;YACnF,GAAG,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACrC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACtC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;gBAAE,OAAO;YACrB,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC/B,IAAI,CAAC,CAAC;gBAAE,OAAO;YACf,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI;gBAAE,OAAO,UAAU,CAAC,GAAG,EAAE,sDAAsD,CAAC,CAAC;YACzJ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1K,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YACpD,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACtC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;gBAAE,OAAO;YACrB,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACtD,IAAI,CAAC,GAAG;gBAAE,OAAO,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,GAAG,CAAC,MAAM,CAAC,MAAM,oCAAoC,EAAE,CAAC,CAAC;YAC5I,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACzB,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACjI,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9E,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC"}
@@ -29,5 +29,7 @@ import './approval-flows.js';
29
29
  import './compliance-reports.js';
30
30
  import './agent-identity.js';
31
31
  import './a2a-federation.js';
32
+ import './debug-sessions.js';
33
+ import './cost-advisor.js';
32
34
  export { listFeatures, registerFeature, createFeatureRouter } from '../gateway/features.js';
33
35
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/features/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,cAAc,CAAC;AACtB,OAAO,iBAAiB,CAAC;AACzB,OAAO,kBAAkB,CAAC;AAC1B,OAAO,eAAe,CAAC;AACvB,OAAO,UAAU,CAAC;AAClB,OAAO,eAAe,CAAC;AACvB,OAAO,oBAAoB,CAAC;AAC5B,OAAO,gBAAgB,CAAC;AACxB,OAAO,iBAAiB,CAAC;AACzB,OAAO,eAAe,CAAC;AACvB,OAAO,iBAAiB,CAAC;AACzB,OAAO,cAAc,CAAC;AACtB,OAAO,cAAc,CAAC;AACtB,OAAO,UAAU,CAAC;AAClB,OAAO,gBAAgB,CAAC;AACxB,OAAO,cAAc,CAAC;AACtB,OAAO,eAAe,CAAC;AACvB,OAAO,qBAAqB,CAAC;AAC7B,OAAO,eAAe,CAAC;AACvB,OAAO,cAAc,CAAC;AACtB,OAAO,qBAAqB,CAAC;AAC7B,OAAO,yBAAyB,CAAC;AACjC,OAAO,qBAAqB,CAAC;AAC7B,OAAO,qBAAqB,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/features/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,cAAc,CAAC;AACtB,OAAO,iBAAiB,CAAC;AACzB,OAAO,kBAAkB,CAAC;AAC1B,OAAO,eAAe,CAAC;AACvB,OAAO,UAAU,CAAC;AAClB,OAAO,eAAe,CAAC;AACvB,OAAO,oBAAoB,CAAC;AAC5B,OAAO,gBAAgB,CAAC;AACxB,OAAO,iBAAiB,CAAC;AACzB,OAAO,eAAe,CAAC;AACvB,OAAO,iBAAiB,CAAC;AACzB,OAAO,cAAc,CAAC;AACtB,OAAO,cAAc,CAAC;AACtB,OAAO,UAAU,CAAC;AAClB,OAAO,gBAAgB,CAAC;AACxB,OAAO,cAAc,CAAC;AACtB,OAAO,eAAe,CAAC;AACvB,OAAO,qBAAqB,CAAC;AAC7B,OAAO,eAAe,CAAC;AACvB,OAAO,cAAc,CAAC;AACtB,OAAO,qBAAqB,CAAC;AAC7B,OAAO,yBAAyB,CAAC;AACjC,OAAO,qBAAqB,CAAC;AAC7B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,mBAAmB,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -29,5 +29,7 @@ import './approval-flows.js';
29
29
  import './compliance-reports.js';
30
30
  import './agent-identity.js';
31
31
  import './a2a-federation.js';
32
+ import './debug-sessions.js';
33
+ import './cost-advisor.js';
32
34
  export { listFeatures, registerFeature, createFeatureRouter } from '../gateway/features.js';
33
35
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/features/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,cAAc,CAAC;AACtB,OAAO,iBAAiB,CAAC;AACzB,OAAO,kBAAkB,CAAC;AAC1B,OAAO,eAAe,CAAC;AACvB,OAAO,UAAU,CAAC;AAClB,OAAO,eAAe,CAAC;AACvB,OAAO,oBAAoB,CAAC;AAC5B,OAAO,gBAAgB,CAAC;AACxB,OAAO,iBAAiB,CAAC;AACzB,OAAO,eAAe,CAAC;AACvB,OAAO,iBAAiB,CAAC;AACzB,OAAO,cAAc,CAAC;AACtB,OAAO,cAAc,CAAC;AACtB,OAAO,UAAU,CAAC;AAClB,OAAO,gBAAgB,CAAC;AACxB,OAAO,cAAc,CAAC;AACtB,OAAO,eAAe,CAAC;AACvB,OAAO,qBAAqB,CAAC;AAC7B,OAAO,eAAe,CAAC;AACvB,OAAO,cAAc,CAAC;AACtB,OAAO,qBAAqB,CAAC;AAC7B,OAAO,yBAAyB,CAAC;AACjC,OAAO,qBAAqB,CAAC;AAC7B,OAAO,qBAAqB,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/features/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,cAAc,CAAC;AACtB,OAAO,iBAAiB,CAAC;AACzB,OAAO,kBAAkB,CAAC;AAC1B,OAAO,eAAe,CAAC;AACvB,OAAO,UAAU,CAAC;AAClB,OAAO,eAAe,CAAC;AACvB,OAAO,oBAAoB,CAAC;AAC5B,OAAO,gBAAgB,CAAC;AACxB,OAAO,iBAAiB,CAAC;AACzB,OAAO,eAAe,CAAC;AACvB,OAAO,iBAAiB,CAAC;AACzB,OAAO,cAAc,CAAC;AACtB,OAAO,cAAc,CAAC;AACtB,OAAO,UAAU,CAAC;AAClB,OAAO,gBAAgB,CAAC;AACxB,OAAO,cAAc,CAAC;AACtB,OAAO,eAAe,CAAC;AACvB,OAAO,qBAAqB,CAAC;AAC7B,OAAO,eAAe,CAAC;AACvB,OAAO,cAAc,CAAC;AACtB,OAAO,qBAAqB,CAAC;AAC7B,OAAO,yBAAyB,CAAC;AACjC,OAAO,qBAAqB,CAAC;AAC7B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,mBAAmB,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC"}