@agentlensai/mcp 0.6.0 → 0.8.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 (49) hide show
  1. package/dist/__tests__/benchmark.test.d.ts +5 -0
  2. package/dist/__tests__/benchmark.test.d.ts.map +1 -0
  3. package/dist/__tests__/benchmark.test.js +387 -0
  4. package/dist/__tests__/benchmark.test.js.map +1 -0
  5. package/dist/__tests__/health.test.d.ts +5 -0
  6. package/dist/__tests__/health.test.js +2 -2
  7. package/dist/__tests__/learn.test.js +2 -2
  8. package/dist/__tests__/llm-call.test.js +2 -2
  9. package/dist/__tests__/optimize.test.js +2 -2
  10. package/dist/__tests__/optimize.test.js.map +1 -1
  11. package/dist/__tests__/recall.test.js +2 -2
  12. package/dist/__tests__/replay.test.d.ts +5 -0
  13. package/dist/__tests__/replay.test.d.ts.map +1 -0
  14. package/dist/__tests__/replay.test.js +245 -0
  15. package/dist/__tests__/replay.test.js.map +1 -0
  16. package/dist/server.test.d.ts +2 -0
  17. package/dist/server.test.js +5 -2
  18. package/dist/server.test.js.map +1 -1
  19. package/dist/tools/__tests__/guardrails.test.d.ts +5 -0
  20. package/dist/tools/__tests__/guardrails.test.d.ts.map +1 -0
  21. package/dist/tools/__tests__/guardrails.test.js +63 -0
  22. package/dist/tools/__tests__/guardrails.test.js.map +1 -0
  23. package/dist/tools/benchmark.d.ts +69 -0
  24. package/dist/tools/benchmark.d.ts.map +1 -0
  25. package/dist/tools/benchmark.js +378 -0
  26. package/dist/tools/benchmark.js.map +1 -0
  27. package/dist/tools/guardrails-format.d.ts +30 -0
  28. package/dist/tools/guardrails-format.d.ts.map +1 -0
  29. package/dist/tools/guardrails-format.js +30 -0
  30. package/dist/tools/guardrails-format.js.map +1 -0
  31. package/dist/tools/guardrails.d.ts +10 -0
  32. package/dist/tools/guardrails.d.ts.map +1 -0
  33. package/dist/tools/guardrails.js +87 -0
  34. package/dist/tools/guardrails.js.map +1 -0
  35. package/dist/tools/replay.d.ts +45 -0
  36. package/dist/tools/replay.d.ts.map +1 -0
  37. package/dist/tools/replay.js +183 -0
  38. package/dist/tools/replay.js.map +1 -0
  39. package/dist/tools.d.ts.map +1 -1
  40. package/dist/tools.js +6 -0
  41. package/dist/tools.js.map +1 -1
  42. package/dist/tools.test.d.ts +2 -0
  43. package/dist/tools.test.js +4 -1
  44. package/dist/tools.test.js.map +1 -1
  45. package/dist/transport.d.ts +30 -0
  46. package/dist/transport.d.ts.map +1 -1
  47. package/dist/transport.js +135 -0
  48. package/dist/transport.js.map +1 -1
  49. package/package.json +2 -2
@@ -0,0 +1,245 @@
1
+ /**
2
+ * Tests for agentlens_replay MCP tool (Story 4.1)
3
+ */
4
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
5
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
6
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
7
+ import { InMemoryTransport } from '@modelcontextprotocol/sdk/inMemory.js';
8
+ import { registerTools } from '../tools.js';
9
+ import { AgentLensTransport } from '../transport.js';
10
+ import { formatReplay, formatReplayHeader, formatReplayStep, } from '../tools/replay.js';
11
+ const mockFetch = vi.fn();
12
+ beforeEach(() => {
13
+ vi.stubGlobal('fetch', mockFetch);
14
+ mockFetch.mockReset();
15
+ });
16
+ afterEach(() => {
17
+ vi.unstubAllGlobals();
18
+ });
19
+ function okResponse(data = {}) {
20
+ return new Response(JSON.stringify(data), {
21
+ status: 200,
22
+ headers: { 'Content-Type': 'application/json' },
23
+ });
24
+ }
25
+ function errorResponse(status, body) {
26
+ return new Response(body, { status });
27
+ }
28
+ const MOCK_REPLAY = {
29
+ sessionId: 'ses_abc123',
30
+ agentId: 'test-agent',
31
+ status: 'completed',
32
+ startedAt: '2026-02-08T10:00:00.000Z',
33
+ endedAt: '2026-02-08T10:05:30.000Z',
34
+ durationMs: 330000,
35
+ totalCostUsd: 0.0452,
36
+ eventCounts: {
37
+ llm_call: 3,
38
+ tool_call: 2,
39
+ llm_response: 3,
40
+ tool_response: 2,
41
+ },
42
+ steps: [
43
+ {
44
+ index: 1,
45
+ timestamp: '2026-02-08T10:00:01.000Z',
46
+ eventType: 'llm_call',
47
+ severity: 'info',
48
+ summary: 'Called claude-3.5-sonnet with 3 messages',
49
+ durationMs: 1200,
50
+ costUsd: 0.012,
51
+ },
52
+ {
53
+ index: 2,
54
+ timestamp: '2026-02-08T10:00:02.200Z',
55
+ eventType: 'llm_response',
56
+ severity: 'info',
57
+ summary: 'Response: 245 tokens, finish_reason: tool_use',
58
+ paired: true,
59
+ },
60
+ {
61
+ index: 3,
62
+ timestamp: '2026-02-08T10:00:03.000Z',
63
+ eventType: 'tool_call',
64
+ severity: 'info',
65
+ summary: 'search_files({ query: "error handler" })',
66
+ durationMs: 800,
67
+ },
68
+ {
69
+ index: 4,
70
+ timestamp: '2026-02-08T10:00:03.800Z',
71
+ eventType: 'tool_response',
72
+ severity: 'info',
73
+ summary: 'Returned 5 results',
74
+ paired: true,
75
+ },
76
+ {
77
+ index: 5,
78
+ timestamp: '2026-02-08T10:05:00.000Z',
79
+ eventType: 'llm_call',
80
+ severity: 'error',
81
+ summary: 'Called gpt-4o with 8 messages',
82
+ error: 'Rate limit exceeded',
83
+ costUsd: 0.033,
84
+ },
85
+ ],
86
+ };
87
+ async function createTestSetup() {
88
+ const transport = new AgentLensTransport({
89
+ baseUrl: 'http://localhost:3400',
90
+ apiKey: 'test-key',
91
+ });
92
+ const server = new McpServer({ name: 'agentlens-test', version: '0.0.0' }, { capabilities: { tools: {} } });
93
+ registerTools(server, transport);
94
+ const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
95
+ const client = new Client({ name: 'test-client', version: '1.0.0' });
96
+ await server.connect(serverTransport);
97
+ await client.connect(clientTransport);
98
+ return { server, client, transport };
99
+ }
100
+ describe('agentlens_replay', () => {
101
+ it('tool is registered with correct schema', async () => {
102
+ const { client } = await createTestSetup();
103
+ const result = await client.listTools();
104
+ const tool = result.tools.find((t) => t.name === 'agentlens_replay');
105
+ expect(tool).toBeDefined();
106
+ expect(tool.description).toContain('Replay');
107
+ const schema = tool.inputSchema;
108
+ expect(schema.properties).toHaveProperty('sessionId');
109
+ expect(schema.properties).toHaveProperty('fromStep');
110
+ expect(schema.properties).toHaveProperty('toStep');
111
+ expect(schema.properties).toHaveProperty('eventTypes');
112
+ expect(schema.properties).toHaveProperty('summaryOnly');
113
+ expect(schema.required).toContain('sessionId');
114
+ });
115
+ it('returns formatted replay with steps', async () => {
116
+ mockFetch.mockResolvedValueOnce(okResponse(MOCK_REPLAY));
117
+ const { client } = await createTestSetup();
118
+ const result = await client.callTool({
119
+ name: 'agentlens_replay',
120
+ arguments: { sessionId: 'ses_abc123' },
121
+ });
122
+ expect(result.isError).toBeUndefined();
123
+ const content = result.content;
124
+ const text = content[0].text;
125
+ // Header checks
126
+ expect(text).toContain('📼 Session Replay: ses_abc123');
127
+ expect(text).toContain('Agent: test-agent');
128
+ expect(text).toContain('Status: completed');
129
+ expect(text).toContain('Duration: 5m 30s');
130
+ expect(text).toContain('Total Cost: $0.0452');
131
+ // Step checks
132
+ expect(text).toContain('🤖 llm_call');
133
+ expect(text).toContain('🔧 tool_call');
134
+ expect(text).toContain('⚠️ Error: Rate limit exceeded');
135
+ });
136
+ it('returns summary only when summaryOnly=true', async () => {
137
+ mockFetch.mockResolvedValueOnce(okResponse(MOCK_REPLAY));
138
+ const { client } = await createTestSetup();
139
+ const result = await client.callTool({
140
+ name: 'agentlens_replay',
141
+ arguments: { sessionId: 'ses_abc123', summaryOnly: true },
142
+ });
143
+ expect(result.isError).toBeUndefined();
144
+ const content = result.content;
145
+ const text = content[0].text;
146
+ // Header present
147
+ expect(text).toContain('📼 Session Replay: ses_abc123');
148
+ expect(text).toContain('Agent: test-agent');
149
+ // Steps absent
150
+ expect(text).not.toContain('🤖 llm_call');
151
+ expect(text).not.toContain('search_files');
152
+ });
153
+ it('passes step range as offset/limit', async () => {
154
+ mockFetch.mockResolvedValueOnce(okResponse(MOCK_REPLAY));
155
+ const { client } = await createTestSetup();
156
+ await client.callTool({
157
+ name: 'agentlens_replay',
158
+ arguments: { sessionId: 'ses_abc123', fromStep: 2, toStep: 4 },
159
+ });
160
+ const fetchUrl = mockFetch.mock.calls[0][0];
161
+ expect(fetchUrl).toContain('offset=2');
162
+ expect(fetchUrl).toContain('limit=3');
163
+ });
164
+ it('passes eventTypes filter', async () => {
165
+ mockFetch.mockResolvedValueOnce(okResponse(MOCK_REPLAY));
166
+ const { client } = await createTestSetup();
167
+ await client.callTool({
168
+ name: 'agentlens_replay',
169
+ arguments: { sessionId: 'ses_abc123', eventTypes: 'llm_call,tool_call' },
170
+ });
171
+ const fetchUrl = mockFetch.mock.calls[0][0];
172
+ expect(fetchUrl).toContain('eventTypes=llm_call%2Ctool_call');
173
+ });
174
+ it('returns error for invalid session (404)', async () => {
175
+ mockFetch.mockResolvedValueOnce(errorResponse(404, '{"error":"Not found"}'));
176
+ const { client } = await createTestSetup();
177
+ const result = await client.callTool({
178
+ name: 'agentlens_replay',
179
+ arguments: { sessionId: 'nonexistent' },
180
+ });
181
+ expect(result.isError).toBe(true);
182
+ const content = result.content;
183
+ expect(content[0].text).toContain('Session not found: nonexistent');
184
+ });
185
+ it('handles network errors', async () => {
186
+ mockFetch.mockRejectedValueOnce(new Error('Connection refused'));
187
+ const { client } = await createTestSetup();
188
+ const result = await client.callTool({
189
+ name: 'agentlens_replay',
190
+ arguments: { sessionId: 'ses_abc123' },
191
+ });
192
+ expect(result.isError).toBe(true);
193
+ const content = result.content;
194
+ expect(content[0].text).toContain('Connection refused');
195
+ });
196
+ });
197
+ describe('formatReplay', () => {
198
+ it('formats header correctly', () => {
199
+ const header = formatReplayHeader(MOCK_REPLAY);
200
+ expect(header).toContain('📼 Session Replay: ses_abc123');
201
+ expect(header).toContain('Agent: test-agent');
202
+ expect(header).toContain('Status: completed');
203
+ expect(header).toContain('Duration: 5m 30s');
204
+ expect(header).toContain('Total Cost: $0.0452');
205
+ expect(header).toContain('llm_call: 3');
206
+ });
207
+ it('formats step with icon and summary', () => {
208
+ const step = formatReplayStep(MOCK_REPLAY.steps[0]);
209
+ expect(step).toContain('🤖 llm_call');
210
+ expect(step).toContain('Called claude-3.5-sonnet with 3 messages');
211
+ expect(step).toContain('1.2s');
212
+ expect(step).toContain('$0.0120');
213
+ });
214
+ it('formats error step with warning icon', () => {
215
+ const step = formatReplayStep(MOCK_REPLAY.steps[4]);
216
+ expect(step).toContain('⚠️');
217
+ expect(step).toContain('Rate limit exceeded');
218
+ });
219
+ it('includes context annotations (cost-so-far, error count)', () => {
220
+ const step = formatReplayStep(MOCK_REPLAY.steps[4], 0.045, 1);
221
+ expect(step).toContain('cost-so-far: $0.0450');
222
+ expect(step).toContain('errors: 1');
223
+ });
224
+ it('summary only returns just the header', () => {
225
+ const text = formatReplay(MOCK_REPLAY, true);
226
+ expect(text).toContain('📼 Session Replay');
227
+ expect(text).not.toContain('🤖');
228
+ });
229
+ it('full replay includes header and steps', () => {
230
+ const text = formatReplay(MOCK_REPLAY, false);
231
+ expect(text).toContain('📼 Session Replay');
232
+ expect(text).toContain('🤖 llm_call');
233
+ expect(text).toContain('🔧 tool_call');
234
+ expect(text).toContain('⚠️');
235
+ });
236
+ it('shows "(No steps to display)" for empty steps', () => {
237
+ const empty = {
238
+ ...MOCK_REPLAY,
239
+ steps: [],
240
+ };
241
+ const text = formatReplay(empty, false);
242
+ expect(text).toContain('(No steps to display)');
243
+ });
244
+ });
245
+ //# sourceMappingURL=replay.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.test.js","sourceRoot":"","sources":["../../src/__tests__/replay.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=server.test.d.ts.map
@@ -24,17 +24,19 @@ describe('MCP Server Entrypoint (Story 5.1)', () => {
24
24
  const { transport } = createServer();
25
25
  expect(transport).toBeDefined();
26
26
  });
27
- it('lists all 11 tools via MCP protocol', async () => {
27
+ it('lists all 14 tools via MCP protocol', async () => {
28
28
  const { mcpServer } = createServer();
29
29
  const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
30
30
  const client = new Client({ name: 'test-client', version: '1.0.0' });
31
31
  await mcpServer.connect(serverTransport);
32
32
  await client.connect(clientTransport);
33
33
  const result = await client.listTools();
34
- expect(result.tools).toHaveLength(11);
34
+ expect(result.tools).toHaveLength(14);
35
35
  const names = result.tools.map((t) => t.name).sort();
36
36
  expect(names).toEqual([
37
+ 'agentlens_benchmark',
37
38
  'agentlens_context',
39
+ 'agentlens_guardrails',
38
40
  'agentlens_health',
39
41
  'agentlens_learn',
40
42
  'agentlens_log_event',
@@ -43,6 +45,7 @@ describe('MCP Server Entrypoint (Story 5.1)', () => {
43
45
  'agentlens_query_events',
44
46
  'agentlens_recall',
45
47
  'agentlens_reflect',
48
+ 'agentlens_replay',
46
49
  'agentlens_session_end',
47
50
  'agentlens_session_start',
48
51
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"server.test.js","sourceRoot":"","sources":["../src/server.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.test.js","sourceRoot":"","sources":["../src/server.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for agentlens_guardrails MCP Tool (v0.8.0 — Story 3.1)
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=guardrails.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardrails.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/guardrails.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Tests for agentlens_guardrails MCP Tool (v0.8.0 — Story 3.1)
3
+ */
4
+ import { describe, it, expect, vi } from 'vitest';
5
+ import { formatGuardrailStatus } from '../guardrails-format.js';
6
+ // Since the MCP tool requires a full server setup, we test the formatting logic
7
+ describe('Guardrail MCP Tool Formatting', () => {
8
+ it('should format empty rules list', () => {
9
+ const result = formatGuardrailStatus([], []);
10
+ expect(result).toContain('No guardrail rules configured');
11
+ });
12
+ it('should format active rules', () => {
13
+ const rules = [
14
+ { id: 'r1', name: 'Error Guard', enabled: true, conditionType: 'error_rate_threshold', actionType: 'pause_agent', cooldownMinutes: 15, dryRun: false },
15
+ ];
16
+ const statuses = [
17
+ { rule: rules[0], state: { triggerCount: 3, lastTriggeredAt: '2026-01-01T00:00:00Z' }, recentTriggers: [] },
18
+ ];
19
+ const result = formatGuardrailStatus(rules, statuses);
20
+ expect(result).toContain('Error Guard');
21
+ expect(result).toContain('Enabled');
22
+ expect(result).toContain('Triggers: 3');
23
+ });
24
+ it('should show dry run badge', () => {
25
+ const rules = [
26
+ { id: 'r1', name: 'Test Guard', enabled: true, conditionType: 'cost_limit', actionType: 'notify_webhook', cooldownMinutes: 15, dryRun: true },
27
+ ];
28
+ const statuses = [
29
+ { rule: rules[0], state: null, recentTriggers: [] },
30
+ ];
31
+ const result = formatGuardrailStatus(rules, statuses);
32
+ expect(result).toContain('DRY RUN');
33
+ });
34
+ it('should show disabled rules', () => {
35
+ const rules = [
36
+ { id: 'r1', name: 'Disabled Guard', enabled: false, conditionType: 'error_rate_threshold', actionType: 'pause_agent', cooldownMinutes: 15, dryRun: false },
37
+ ];
38
+ const statuses = [
39
+ { rule: rules[0], state: null, recentTriggers: [] },
40
+ ];
41
+ const result = formatGuardrailStatus(rules, statuses);
42
+ expect(result).toContain('Disabled');
43
+ });
44
+ it('should show recent triggers', () => {
45
+ const rules = [
46
+ { id: 'r1', name: 'Test', enabled: true, conditionType: 'error_rate_threshold', actionType: 'pause_agent', cooldownMinutes: 15, dryRun: false },
47
+ ];
48
+ const statuses = [
49
+ {
50
+ rule: rules[0],
51
+ state: { triggerCount: 1 },
52
+ recentTriggers: [
53
+ { triggeredAt: '2026-01-01T12:00:00Z', conditionValue: 45, conditionThreshold: 30, actionResult: 'success' },
54
+ ],
55
+ },
56
+ ];
57
+ const result = formatGuardrailStatus(rules, statuses);
58
+ expect(result).toContain('Recent:');
59
+ expect(result).toContain('value=45');
60
+ expect(result).toContain('success');
61
+ });
62
+ });
63
+ //# sourceMappingURL=guardrails.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardrails.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/guardrails.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * agentlens_benchmark MCP Tool (Stories 4.2, 4.3)
3
+ *
4
+ * Create, list, manage, and analyze A/B benchmarks.
5
+ * Actions: create, list, status, results, start, complete.
6
+ */
7
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
8
+ import type { AgentLensTransport } from '../transport.js';
9
+ export interface BenchmarkVariant {
10
+ name: string;
11
+ tag: string;
12
+ description?: string;
13
+ sessionCount?: number;
14
+ }
15
+ export interface BenchmarkSummary {
16
+ id: string;
17
+ name: string;
18
+ status: string;
19
+ variants: BenchmarkVariant[];
20
+ createdAt: string;
21
+ description?: string;
22
+ }
23
+ export interface BenchmarkDetail extends BenchmarkSummary {
24
+ metrics: string[];
25
+ minSessions: number;
26
+ agentId?: string;
27
+ startedAt?: string;
28
+ completedAt?: string;
29
+ }
30
+ export interface MetricResult {
31
+ metric: string;
32
+ variants: Array<{
33
+ name: string;
34
+ mean: number;
35
+ stddev: number;
36
+ n: number;
37
+ }>;
38
+ pValue?: number;
39
+ significant: boolean;
40
+ winner?: string;
41
+ difference?: number;
42
+ differencePercent?: number;
43
+ confidence?: string;
44
+ }
45
+ export interface BenchmarkResults {
46
+ benchmarkId: string;
47
+ name: string;
48
+ status: string;
49
+ metrics: MetricResult[];
50
+ summary: string;
51
+ }
52
+ /**
53
+ * Format a benchmark list.
54
+ */
55
+ export declare function formatBenchmarkList(benchmarks: BenchmarkSummary[]): string;
56
+ /**
57
+ * Format a created benchmark confirmation.
58
+ */
59
+ export declare function formatBenchmarkCreated(benchmark: BenchmarkDetail): string;
60
+ /**
61
+ * Format benchmark status/detail.
62
+ */
63
+ export declare function formatBenchmarkStatus(benchmark: BenchmarkDetail): string;
64
+ /**
65
+ * Format benchmark results as an ASCII table.
66
+ */
67
+ export declare function formatBenchmarkResults(results: BenchmarkResults): string;
68
+ export declare function registerBenchmarkTool(server: McpServer, transport: AgentLensTransport): void;
69
+ //# sourceMappingURL=benchmark.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark.d.ts","sourceRoot":"","sources":["../../src/tools/benchmark.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAI1D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IACvD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,CAAC,EAAE,MAAM,CAAC;KACX,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAkCD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAsB1E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,eAAe,GAAG,MAAM,CAsBzE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,eAAe,GAAG,MAAM,CAkCxE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAqExE;AAUD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,GAAG,IAAI,CAuG5F"}