@agentlensai/sdk 0.2.0 → 0.5.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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=context.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/context.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Tests for AgentLensClient.getContext() (Story 6.1)
3
+ */
4
+ import { describe, it, expect, vi } from 'vitest';
5
+ import { AgentLensClient } from '../client.js';
6
+ function mockFetch(status, body) {
7
+ return vi.fn().mockResolvedValue({
8
+ ok: status >= 200 && status < 300,
9
+ status,
10
+ text: () => Promise.resolve(JSON.stringify(body)),
11
+ json: () => Promise.resolve(body),
12
+ });
13
+ }
14
+ function createClient(fetchFn) {
15
+ return new AgentLensClient({
16
+ url: 'http://localhost:3400',
17
+ apiKey: 'als_test123',
18
+ fetch: fetchFn,
19
+ });
20
+ }
21
+ const sampleContextResult = {
22
+ topic: 'deployment process',
23
+ sessions: [
24
+ {
25
+ sessionId: 'ses_001',
26
+ agentId: 'agent-1',
27
+ startedAt: '2025-01-01T00:00:00Z',
28
+ endedAt: '2025-01-01T01:00:00Z',
29
+ summary: 'Deployed v2.0',
30
+ relevanceScore: 0.92,
31
+ keyEvents: [
32
+ {
33
+ id: 'ev_001',
34
+ eventType: 'tool_call',
35
+ summary: 'Called deploy tool',
36
+ timestamp: '2025-01-01T00:30:00Z',
37
+ },
38
+ ],
39
+ },
40
+ ],
41
+ lessons: [
42
+ {
43
+ id: 'les_001',
44
+ title: 'Always run tests before deploy',
45
+ content: 'Run the full test suite before deploying.',
46
+ category: 'deployment',
47
+ importance: 'high',
48
+ relevanceScore: 0.88,
49
+ },
50
+ ],
51
+ summary: 'Context related to deployment process',
52
+ };
53
+ describe('AgentLensClient.getContext', () => {
54
+ it('sends topic as URL param', async () => {
55
+ const fn = mockFetch(200, sampleContextResult);
56
+ const client = createClient(fn);
57
+ await client.getContext({ topic: 'deployment process' });
58
+ const url = fn.mock.calls[0][0];
59
+ expect(url).toContain('/api/context');
60
+ expect(url).toContain('topic=deployment+process');
61
+ });
62
+ it('sends optional params when provided', async () => {
63
+ const fn = mockFetch(200, sampleContextResult);
64
+ const client = createClient(fn);
65
+ await client.getContext({
66
+ topic: 'test',
67
+ userId: 'user-1',
68
+ agentId: 'agent-1',
69
+ limit: 5,
70
+ });
71
+ const url = fn.mock.calls[0][0];
72
+ expect(url).toContain('userId=user-1');
73
+ expect(url).toContain('agentId=agent-1');
74
+ expect(url).toContain('limit=5');
75
+ });
76
+ it('returns typed ContextResult', async () => {
77
+ const fn = mockFetch(200, sampleContextResult);
78
+ const client = createClient(fn);
79
+ const result = await client.getContext({ topic: 'deployment process' });
80
+ expect(result.topic).toBe('deployment process');
81
+ expect(result.sessions).toHaveLength(1);
82
+ expect(result.sessions[0].relevanceScore).toBe(0.92);
83
+ expect(result.sessions[0].keyEvents).toHaveLength(1);
84
+ expect(result.lessons).toHaveLength(1);
85
+ expect(result.lessons[0].relevanceScore).toBe(0.88);
86
+ expect(result.summary).toBe('Context related to deployment process');
87
+ });
88
+ it('sends Authorization header', async () => {
89
+ const fn = mockFetch(200, sampleContextResult);
90
+ const client = createClient(fn);
91
+ await client.getContext({ topic: 'test' });
92
+ const opts = fn.mock.calls[0][1];
93
+ expect(opts.headers['Authorization']).toBe('Bearer als_test123');
94
+ });
95
+ });
96
+ //# sourceMappingURL=context.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.test.js","sourceRoot":"","sources":["../../src/__tests__/context.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=lessons.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lessons.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/lessons.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Tests for AgentLensClient lesson methods (Story 6.1)
3
+ */
4
+ import { describe, it, expect, vi } from 'vitest';
5
+ import { AgentLensClient } from '../client.js';
6
+ function mockFetch(status, body) {
7
+ return vi.fn().mockResolvedValue({
8
+ ok: status >= 200 && status < 300,
9
+ status,
10
+ text: () => Promise.resolve(JSON.stringify(body)),
11
+ json: () => Promise.resolve(body),
12
+ });
13
+ }
14
+ function createClient(fetchFn) {
15
+ return new AgentLensClient({
16
+ url: 'http://localhost:3400',
17
+ apiKey: 'als_test123',
18
+ fetch: fetchFn,
19
+ });
20
+ }
21
+ const sampleLesson = {
22
+ id: 'les_001',
23
+ tenantId: 'tenant_1',
24
+ agentId: 'agent_1',
25
+ category: 'error-handling',
26
+ title: 'Always retry on timeout',
27
+ content: 'When a tool call times out, retry once before failing.',
28
+ context: {},
29
+ importance: 'high',
30
+ accessCount: 3,
31
+ createdAt: '2025-01-01T00:00:00Z',
32
+ updatedAt: '2025-01-01T00:00:00Z',
33
+ };
34
+ describe('AgentLensClient.createLesson', () => {
35
+ it('sends POST to /api/lessons', async () => {
36
+ const fn = mockFetch(200, sampleLesson);
37
+ const client = createClient(fn);
38
+ await client.createLesson({
39
+ title: 'Always retry on timeout',
40
+ content: 'When a tool call times out, retry once before failing.',
41
+ category: 'error-handling',
42
+ importance: 'high',
43
+ });
44
+ const [url, opts] = fn.mock.calls[0];
45
+ expect(url).toContain('/api/lessons');
46
+ expect(opts.method).toBe('POST');
47
+ const body = JSON.parse(opts.body);
48
+ expect(body.title).toBe('Always retry on timeout');
49
+ expect(body.importance).toBe('high');
50
+ });
51
+ it('returns the created Lesson', async () => {
52
+ const fn = mockFetch(200, sampleLesson);
53
+ const client = createClient(fn);
54
+ const result = await client.createLesson({
55
+ title: 'Always retry on timeout',
56
+ content: 'Content',
57
+ });
58
+ expect(result.id).toBe('les_001');
59
+ expect(result.importance).toBe('high');
60
+ });
61
+ });
62
+ describe('AgentLensClient.getLessons', () => {
63
+ it('sends GET to /api/lessons with no params by default', async () => {
64
+ const fn = mockFetch(200, { lessons: [], total: 0 });
65
+ const client = createClient(fn);
66
+ await client.getLessons();
67
+ const url = fn.mock.calls[0][0];
68
+ expect(url).toContain('/api/lessons');
69
+ });
70
+ it('sends filter params when provided', async () => {
71
+ const fn = mockFetch(200, { lessons: [], total: 0 });
72
+ const client = createClient(fn);
73
+ await client.getLessons({
74
+ category: 'error-handling',
75
+ importance: 'high',
76
+ search: 'timeout',
77
+ limit: 10,
78
+ offset: 5,
79
+ includeArchived: true,
80
+ });
81
+ const url = fn.mock.calls[0][0];
82
+ expect(url).toContain('category=error-handling');
83
+ expect(url).toContain('importance=high');
84
+ expect(url).toContain('search=timeout');
85
+ expect(url).toContain('limit=10');
86
+ expect(url).toContain('offset=5');
87
+ expect(url).toContain('includeArchived=true');
88
+ });
89
+ it('returns lessons and total', async () => {
90
+ const fn = mockFetch(200, { lessons: [sampleLesson], total: 1 });
91
+ const client = createClient(fn);
92
+ const result = await client.getLessons();
93
+ expect(result.total).toBe(1);
94
+ expect(result.lessons).toHaveLength(1);
95
+ expect(result.lessons[0].id).toBe('les_001');
96
+ });
97
+ });
98
+ describe('AgentLensClient.getLesson', () => {
99
+ it('sends GET to /api/lessons/:id', async () => {
100
+ const fn = mockFetch(200, sampleLesson);
101
+ const client = createClient(fn);
102
+ const result = await client.getLesson('les_001');
103
+ const url = fn.mock.calls[0][0];
104
+ expect(url).toContain('/api/lessons/les_001');
105
+ expect(result.id).toBe('les_001');
106
+ });
107
+ });
108
+ describe('AgentLensClient.updateLesson', () => {
109
+ it('sends PUT to /api/lessons/:id', async () => {
110
+ const updated = { ...sampleLesson, title: 'Updated title' };
111
+ const fn = mockFetch(200, updated);
112
+ const client = createClient(fn);
113
+ await client.updateLesson('les_001', { title: 'Updated title' });
114
+ const [url, opts] = fn.mock.calls[0];
115
+ expect(url).toContain('/api/lessons/les_001');
116
+ expect(opts.method).toBe('PUT');
117
+ const body = JSON.parse(opts.body);
118
+ expect(body.title).toBe('Updated title');
119
+ });
120
+ });
121
+ describe('AgentLensClient.deleteLesson', () => {
122
+ it('sends DELETE to /api/lessons/:id', async () => {
123
+ const fn = mockFetch(200, { id: 'les_001', archived: true });
124
+ const client = createClient(fn);
125
+ const result = await client.deleteLesson('les_001');
126
+ const [url, opts] = fn.mock.calls[0];
127
+ expect(url).toContain('/api/lessons/les_001');
128
+ expect(opts.method).toBe('DELETE');
129
+ expect(result.archived).toBe(true);
130
+ });
131
+ });
132
+ //# sourceMappingURL=lessons.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lessons.test.js","sourceRoot":"","sources":["../../src/__tests__/lessons.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=llm-call.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-call.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/llm-call.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,260 @@
1
+ /**
2
+ * Tests for SDK LLM call tracking methods (Story 3.2 / 3.3)
3
+ */
4
+ import { describe, it, expect, vi } from 'vitest';
5
+ import { AgentLensClient } from '../client.js';
6
+ // ─── Helpers ────────────────────────────────────────────────────────
7
+ function mockFetch(status, body) {
8
+ return vi.fn().mockResolvedValue({
9
+ ok: status >= 200 && status < 300,
10
+ status,
11
+ text: () => Promise.resolve(JSON.stringify(body)),
12
+ json: () => Promise.resolve(body),
13
+ });
14
+ }
15
+ function createClient(fetchFn) {
16
+ return new AgentLensClient({
17
+ url: 'http://localhost:3400',
18
+ apiKey: 'als_test123',
19
+ fetch: fetchFn,
20
+ });
21
+ }
22
+ const baseParams = {
23
+ provider: 'anthropic',
24
+ model: 'claude-opus-4-6',
25
+ messages: [
26
+ { role: 'user', content: 'What is 2+2?' },
27
+ ],
28
+ completion: 'The answer is 4.',
29
+ finishReason: 'stop',
30
+ usage: { inputTokens: 10, outputTokens: 8, totalTokens: 18 },
31
+ costUsd: 0.003,
32
+ latencyMs: 850,
33
+ };
34
+ // ─── logLlmCall Tests ───────────────────────────────────────────────
35
+ describe('AgentLensClient.logLlmCall', () => {
36
+ it('returns a callId', async () => {
37
+ const fn = mockFetch(200, { processed: 2 });
38
+ const client = createClient(fn);
39
+ const result = await client.logLlmCall('ses_abc', 'agent-1', baseParams);
40
+ expect(result.callId).toBeTruthy();
41
+ expect(typeof result.callId).toBe('string');
42
+ });
43
+ it('sends a single batch POST with two events', async () => {
44
+ const fn = mockFetch(200, { processed: 2 });
45
+ const client = createClient(fn);
46
+ await client.logLlmCall('ses_abc', 'agent-1', baseParams);
47
+ // Should make exactly one fetch call (batch)
48
+ expect(fn).toHaveBeenCalledTimes(1);
49
+ const [url, opts] = fn.mock.calls[0];
50
+ expect(url).toBe('http://localhost:3400/api/events');
51
+ expect(opts.method).toBe('POST');
52
+ const body = JSON.parse(opts.body);
53
+ expect(body.events).toHaveLength(2);
54
+ expect(body.events[0].eventType).toBe('llm_call');
55
+ expect(body.events[1].eventType).toBe('llm_response');
56
+ expect(body.events[0].sessionId).toBe('ses_abc');
57
+ expect(body.events[1].sessionId).toBe('ses_abc');
58
+ expect(body.events[0].agentId).toBe('agent-1');
59
+ expect(body.events[1].agentId).toBe('agent-1');
60
+ });
61
+ it('both events share the same callId', async () => {
62
+ const fn = mockFetch(200, { processed: 2 });
63
+ const client = createClient(fn);
64
+ const result = await client.logLlmCall('ses_abc', 'agent-1', baseParams);
65
+ const body = JSON.parse(fn.mock.calls[0][1].body);
66
+ expect(body.events[0].payload.callId).toBe(result.callId);
67
+ expect(body.events[1].payload.callId).toBe(result.callId);
68
+ });
69
+ it('llm_call event contains request details', async () => {
70
+ const fn = mockFetch(200, { processed: 2 });
71
+ const client = createClient(fn);
72
+ await client.logLlmCall('ses_abc', 'agent-1', {
73
+ ...baseParams,
74
+ systemPrompt: 'You are helpful.',
75
+ parameters: { temperature: 0.5 },
76
+ tools: [{ name: 'calc', description: 'Calculator' }],
77
+ });
78
+ const body = JSON.parse(fn.mock.calls[0][1].body);
79
+ const callPayload = body.events[0].payload;
80
+ expect(callPayload.provider).toBe('anthropic');
81
+ expect(callPayload.model).toBe('claude-opus-4-6');
82
+ expect(callPayload.messages).toEqual([{ role: 'user', content: 'What is 2+2?' }]);
83
+ expect(callPayload.systemPrompt).toBe('You are helpful.');
84
+ expect(callPayload.parameters).toEqual({ temperature: 0.5 });
85
+ expect(callPayload.tools).toEqual([{ name: 'calc', description: 'Calculator' }]);
86
+ });
87
+ it('llm_response event contains response details', async () => {
88
+ const fn = mockFetch(200, { processed: 2 });
89
+ const client = createClient(fn);
90
+ await client.logLlmCall('ses_abc', 'agent-1', {
91
+ ...baseParams,
92
+ toolCalls: [{ id: 'tc1', name: 'calc', arguments: { expr: '2+2' } }],
93
+ });
94
+ const body = JSON.parse(fn.mock.calls[0][1].body);
95
+ const respPayload = body.events[1].payload;
96
+ expect(respPayload.completion).toBe('The answer is 4.');
97
+ expect(respPayload.finishReason).toBe('stop');
98
+ expect(respPayload.usage).toEqual({ inputTokens: 10, outputTokens: 8, totalTokens: 18 });
99
+ expect(respPayload.costUsd).toBe(0.003);
100
+ expect(respPayload.latencyMs).toBe(850);
101
+ expect(respPayload.toolCalls).toEqual([{ id: 'tc1', name: 'calc', arguments: { expr: '2+2' } }]);
102
+ });
103
+ it('handles null completion', async () => {
104
+ const fn = mockFetch(200, { processed: 2 });
105
+ const client = createClient(fn);
106
+ await client.logLlmCall('ses_abc', 'agent-1', {
107
+ ...baseParams,
108
+ completion: null,
109
+ });
110
+ const body = JSON.parse(fn.mock.calls[0][1].body);
111
+ expect(body.events[1].payload.completion).toBeNull();
112
+ });
113
+ it('sends Authorization header', async () => {
114
+ const fn = mockFetch(200, { processed: 2 });
115
+ const client = createClient(fn);
116
+ await client.logLlmCall('ses_abc', 'agent-1', baseParams);
117
+ const opts = fn.mock.calls[0][1];
118
+ expect(opts.headers['Authorization']).toBe('Bearer als_test123');
119
+ });
120
+ });
121
+ // ─── Redaction Tests ────────────────────────────────────────────────
122
+ describe('AgentLensClient.logLlmCall redaction', () => {
123
+ it('strips message content when redact=true', async () => {
124
+ const fn = mockFetch(200, { processed: 2 });
125
+ const client = createClient(fn);
126
+ await client.logLlmCall('ses_abc', 'agent-1', {
127
+ ...baseParams,
128
+ messages: [
129
+ { role: 'user', content: 'Tell me a secret' },
130
+ { role: 'assistant', content: 'Here is the secret...' },
131
+ ],
132
+ redact: true,
133
+ });
134
+ const body = JSON.parse(fn.mock.calls[0][1].body);
135
+ const callPayload = body.events[0].payload;
136
+ const messages = callPayload.messages;
137
+ expect(messages[0].content).toBe('[REDACTED]');
138
+ expect(messages[1].content).toBe('[REDACTED]');
139
+ // Roles are preserved
140
+ expect(messages[0].role).toBe('user');
141
+ expect(messages[1].role).toBe('assistant');
142
+ });
143
+ it('strips completion content when redact=true', async () => {
144
+ const fn = mockFetch(200, { processed: 2 });
145
+ const client = createClient(fn);
146
+ await client.logLlmCall('ses_abc', 'agent-1', {
147
+ ...baseParams,
148
+ redact: true,
149
+ });
150
+ const body = JSON.parse(fn.mock.calls[0][1].body);
151
+ expect(body.events[1].payload.completion).toBe('[REDACTED]');
152
+ });
153
+ it('strips systemPrompt when redact=true', async () => {
154
+ const fn = mockFetch(200, { processed: 2 });
155
+ const client = createClient(fn);
156
+ await client.logLlmCall('ses_abc', 'agent-1', {
157
+ ...baseParams,
158
+ systemPrompt: 'You are a secret agent',
159
+ redact: true,
160
+ });
161
+ const body = JSON.parse(fn.mock.calls[0][1].body);
162
+ expect(body.events[0].payload.systemPrompt).toBe('[REDACTED]');
163
+ });
164
+ it('sets redacted=true flag on both payloads when redact=true', async () => {
165
+ const fn = mockFetch(200, { processed: 2 });
166
+ const client = createClient(fn);
167
+ await client.logLlmCall('ses_abc', 'agent-1', {
168
+ ...baseParams,
169
+ redact: true,
170
+ });
171
+ const body = JSON.parse(fn.mock.calls[0][1].body);
172
+ expect(body.events[0].payload.redacted).toBe(true);
173
+ expect(body.events[1].payload.redacted).toBe(true);
174
+ });
175
+ it('preserves metadata (model, provider, usage, cost) when redacted', async () => {
176
+ const fn = mockFetch(200, { processed: 2 });
177
+ const client = createClient(fn);
178
+ await client.logLlmCall('ses_abc', 'agent-1', {
179
+ ...baseParams,
180
+ redact: true,
181
+ });
182
+ const body = JSON.parse(fn.mock.calls[0][1].body);
183
+ // llm_call preserves model/provider
184
+ expect(body.events[0].payload.provider).toBe('anthropic');
185
+ expect(body.events[0].payload.model).toBe('claude-opus-4-6');
186
+ // llm_response preserves usage, cost, latency
187
+ expect(body.events[1].payload.usage).toEqual({ inputTokens: 10, outputTokens: 8, totalTokens: 18 });
188
+ expect(body.events[1].payload.costUsd).toBe(0.003);
189
+ expect(body.events[1].payload.latencyMs).toBe(850);
190
+ expect(body.events[1].payload.provider).toBe('anthropic');
191
+ expect(body.events[1].payload.model).toBe('claude-opus-4-6');
192
+ });
193
+ it('does NOT set redacted flag when redact=false (default)', async () => {
194
+ const fn = mockFetch(200, { processed: 2 });
195
+ const client = createClient(fn);
196
+ await client.logLlmCall('ses_abc', 'agent-1', baseParams);
197
+ const body = JSON.parse(fn.mock.calls[0][1].body);
198
+ expect(body.events[0].payload.redacted).toBeUndefined();
199
+ expect(body.events[1].payload.redacted).toBeUndefined();
200
+ });
201
+ });
202
+ // ─── getLlmAnalytics Tests ──────────────────────────────────────────
203
+ describe('AgentLensClient.getLlmAnalytics', () => {
204
+ it('calls GET /api/analytics/llm', async () => {
205
+ const analyticsResponse = {
206
+ summary: {
207
+ totalCalls: 10,
208
+ totalCostUsd: 1.5,
209
+ totalInputTokens: 5000,
210
+ totalOutputTokens: 2000,
211
+ avgLatencyMs: 900,
212
+ avgCostPerCall: 0.15,
213
+ },
214
+ byModel: [],
215
+ byTime: [],
216
+ };
217
+ const fn = mockFetch(200, analyticsResponse);
218
+ const client = createClient(fn);
219
+ const result = await client.getLlmAnalytics();
220
+ expect(result).toEqual(analyticsResponse);
221
+ const url = fn.mock.calls[0][0];
222
+ expect(url).toBe('http://localhost:3400/api/analytics/llm');
223
+ });
224
+ it('passes query params', async () => {
225
+ const fn = mockFetch(200, { summary: {}, byModel: [], byTime: [] });
226
+ const client = createClient(fn);
227
+ await client.getLlmAnalytics({
228
+ from: '2026-01-01',
229
+ to: '2026-02-01',
230
+ agentId: 'agent-1',
231
+ model: 'claude-opus-4-6',
232
+ provider: 'anthropic',
233
+ granularity: 'day',
234
+ });
235
+ const url = fn.mock.calls[0][0];
236
+ expect(url).toContain('from=2026-01-01');
237
+ expect(url).toContain('to=2026-02-01');
238
+ expect(url).toContain('agentId=agent-1');
239
+ expect(url).toContain('model=claude-opus-4-6');
240
+ expect(url).toContain('provider=anthropic');
241
+ expect(url).toContain('granularity=day');
242
+ });
243
+ it('omits empty params', async () => {
244
+ const fn = mockFetch(200, { summary: {}, byModel: [], byTime: [] });
245
+ const client = createClient(fn);
246
+ await client.getLlmAnalytics({ from: '2026-01-01' });
247
+ const url = fn.mock.calls[0][0];
248
+ expect(url).toContain('from=2026-01-01');
249
+ expect(url).not.toContain('agentId');
250
+ expect(url).not.toContain('model');
251
+ });
252
+ it('sends Authorization header', async () => {
253
+ const fn = mockFetch(200, { summary: {}, byModel: [], byTime: [] });
254
+ const client = createClient(fn);
255
+ await client.getLlmAnalytics();
256
+ const opts = fn.mock.calls[0][1];
257
+ expect(opts.headers['Authorization']).toBe('Bearer als_test123');
258
+ });
259
+ });
260
+ //# sourceMappingURL=llm-call.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-call.test.js","sourceRoot":"","sources":["../../src/__tests__/llm-call.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG/C,uEAAuE;AAEvE,SAAS,SAAS,CAAC,MAAc,EAAE,IAAa;IAC9C,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;QAC/B,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;QACjC,MAAM;QACN,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;KACtB,CAAC,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CAAC,OAAgC;IACpD,OAAO,IAAI,eAAe,CAAC;QACzB,GAAG,EAAE,uBAAuB;QAC5B,MAAM,EAAE,aAAa;QACrB,KAAK,EAAE,OAAO;KACf,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,GAAqB;IACnC,QAAQ,EAAE,WAAW;IACrB,KAAK,EAAE,iBAAiB;IACxB,QAAQ,EAAE;QACR,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE;KAC1C;IACD,UAAU,EAAE,kBAAkB;IAC9B,YAAY,EAAE,MAAM;IACpB,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE;IAC5D,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,GAAG;CACf,CAAC;AAEF,uEAAuE;AAEvE,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QAChC,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAEhC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QACzE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC;QACnC,MAAM,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAEhC,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAE1D,6CAA6C;QAC7C,MAAM,CAAC,EAAE,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAEpC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAI,EAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAEhC,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAEhC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAEzE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAE,EAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAE7E,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAEhC,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE;YAC5C,GAAG,UAAU;YACb,YAAY,EAAE,kBAAkB;YAChC,UAAU,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE;YAChC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;SACrD,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAE,EAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAE7E,CAAC;QACF,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAC3C,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAClD,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;QAClF,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC1D,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAEhC,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE;YAC5C,GAAG,UAAU;YACb,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;SACrE,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAE,EAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAE7E,CAAC;QACF,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAC3C,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;QACzF,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IACnG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAEhC,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE;YAC5C,GAAG,UAAU;YACb,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAE,EAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAE7E,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAEhC,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAE1D,MAAM,IAAI,GAAI,EAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAgB,CAAC;QAC9E,MAAM,CAAE,IAAI,CAAC,OAAkC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,uEAAuE;AAEvE,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAEhC,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE;YAC5C,GAAG,UAAU;YACb,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE;gBAC7C,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,uBAAuB,EAAE;aACxD;YACD,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAE,EAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAE7E,CAAC;QACF,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAC3C,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAoD,CAAC;QAClF,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/C,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/C,sBAAsB;QACtB,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAEhC,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE;YAC5C,GAAG,UAAU;YACb,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAE,EAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAE7E,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAEhC,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE;YAC5C,GAAG,UAAU;YACb,YAAY,EAAE,wBAAwB;YACtC,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAE,EAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAE7E,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAEhC,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE;YAC5C,GAAG,UAAU;YACb,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAE,EAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAE7E,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAEhC,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE;YAC5C,GAAG,UAAU;YACb,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAE,EAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAE7E,CAAC;QACF,oCAAoC;QACpC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAE7D,8CAA8C;QAC9C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;QACpG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAEhC,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAE1D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAE,EAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAE7E,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,aAAa,EAAE,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,aAAa,EAAE,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,uEAAuE;AAEvE,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,iBAAiB,GAAG;YACxB,OAAO,EAAE;gBACP,UAAU,EAAE,EAAE;gBACd,YAAY,EAAE,GAAG;gBACjB,gBAAgB,EAAE,IAAI;gBACtB,iBAAiB,EAAE,IAAI;gBACvB,YAAY,EAAE,GAAG;gBACjB,cAAc,EAAE,IAAI;aACrB;YACD,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,EAAE;SACX,CAAC;QACF,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAEhC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,CAAC;QAE9C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAI,EAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAW,CAAC;QACxE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;QACnC,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAEhC,MAAM,MAAM,CAAC,eAAe,CAAC;YAC3B,IAAI,EAAE,YAAY;YAClB,EAAE,EAAE,YAAY;YAChB,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,iBAAiB;YACxB,QAAQ,EAAE,WAAW;YACrB,WAAW,EAAE,KAAK;SACnB,CAAC,CAAC;QAEH,MAAM,GAAG,GAAI,EAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAW,CAAC;QACxE,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAEhC,MAAM,MAAM,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QAErD,MAAM,GAAG,GAAI,EAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAW,CAAC;QACxE,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAEhC,MAAM,MAAM,CAAC,eAAe,EAAE,CAAC;QAE/B,MAAM,IAAI,GAAI,EAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAgB,CAAC;QAC9E,MAAM,CAAE,IAAI,CAAC,OAAkC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=recall.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recall.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/recall.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Tests for AgentLensClient.recall() (Story 6.1)
3
+ */
4
+ import { describe, it, expect, vi } from 'vitest';
5
+ import { AgentLensClient } from '../client.js';
6
+ function mockFetch(status, body) {
7
+ return vi.fn().mockResolvedValue({
8
+ ok: status >= 200 && status < 300,
9
+ status,
10
+ text: () => Promise.resolve(JSON.stringify(body)),
11
+ json: () => Promise.resolve(body),
12
+ });
13
+ }
14
+ function createClient(fetchFn) {
15
+ return new AgentLensClient({
16
+ url: 'http://localhost:3400',
17
+ apiKey: 'als_test123',
18
+ fetch: fetchFn,
19
+ });
20
+ }
21
+ describe('AgentLensClient.recall', () => {
22
+ it('sends query as URL param', async () => {
23
+ const fn = mockFetch(200, { results: [], query: 'test', totalResults: 0 });
24
+ const client = createClient(fn);
25
+ await client.recall({ query: 'test search' });
26
+ const url = fn.mock.calls[0][0];
27
+ expect(url).toContain('/api/recall');
28
+ expect(url).toContain('query=test+search');
29
+ });
30
+ it('sends optional params when provided', async () => {
31
+ const fn = mockFetch(200, { results: [], query: 'test', totalResults: 0 });
32
+ const client = createClient(fn);
33
+ await client.recall({
34
+ query: 'test',
35
+ scope: 'lesson',
36
+ agentId: 'agent-1',
37
+ limit: 5,
38
+ minScore: 0.7,
39
+ from: '2025-01-01',
40
+ to: '2025-01-31',
41
+ });
42
+ const url = fn.mock.calls[0][0];
43
+ expect(url).toContain('scope=lesson');
44
+ expect(url).toContain('agentId=agent-1');
45
+ expect(url).toContain('limit=5');
46
+ expect(url).toContain('minScore=0.7');
47
+ expect(url).toContain('from=2025-01-01');
48
+ expect(url).toContain('to=2025-01-31');
49
+ });
50
+ it('returns typed RecallResult', async () => {
51
+ const expected = {
52
+ results: [
53
+ { sourceType: 'event', sourceId: 'ev_1', score: 0.95, text: 'hello' },
54
+ ],
55
+ query: 'hello',
56
+ totalResults: 1,
57
+ };
58
+ const fn = mockFetch(200, expected);
59
+ const client = createClient(fn);
60
+ const result = await client.recall({ query: 'hello' });
61
+ expect(result.totalResults).toBe(1);
62
+ expect(result.results[0].score).toBe(0.95);
63
+ expect(result.query).toBe('hello');
64
+ });
65
+ it('sends Authorization header', async () => {
66
+ const fn = mockFetch(200, { results: [], query: 'test', totalResults: 0 });
67
+ const client = createClient(fn);
68
+ await client.recall({ query: 'test' });
69
+ const opts = fn.mock.calls[0][1];
70
+ expect(opts.headers['Authorization']).toBe('Bearer als_test123');
71
+ });
72
+ });
73
+ //# sourceMappingURL=recall.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recall.test.js","sourceRoot":"","sources":["../../src/__tests__/recall.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,SAAS,SAAS,CAAC,MAAc,EAAE,IAAa;IAC9C,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;QAC/B,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;QACjC,MAAM;QACN,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;KACtB,CAAC,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CAAC,OAAgC;IACpD,OAAO,IAAI,eAAe,CAAC;QACzB,GAAG,EAAE,uBAAuB;QAC5B,MAAM,EAAE,aAAa;QACrB,KAAK,EAAE,OAAO;KACf,CAAC,CAAC;AACL,CAAC;AAED,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAEhC,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;QAE9C,MAAM,GAAG,GAAI,EAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAW,CAAC;QACzE,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAEhC,MAAM,MAAM,CAAC,MAAM,CAAC;YAClB,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,CAAC;YACR,QAAQ,EAAE,GAAG;YACb,IAAI,EAAE,YAAY;YAClB,EAAE,EAAE,YAAY;SACjB,CAAC,CAAC;QAEH,MAAM,GAAG,GAAI,EAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAW,CAAC;QACzE,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,QAAQ,GAAG;YACf,OAAO,EAAE;gBACP,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;aACtE;YACD,KAAK,EAAE,OAAO;YACd,YAAY,EAAE,CAAC;SAChB,CAAC;QACF,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAEhC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAEhC,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAEvC,MAAM,IAAI,GAAI,EAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAgB,CAAC;QAC/E,MAAM,CAAE,IAAI,CAAC,OAAkC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=reflect.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reflect.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/reflect.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Tests for AgentLensClient.reflect() (Story 6.1)
3
+ */
4
+ import { describe, it, expect, vi } from 'vitest';
5
+ import { AgentLensClient } from '../client.js';
6
+ function mockFetch(status, body) {
7
+ return vi.fn().mockResolvedValue({
8
+ ok: status >= 200 && status < 300,
9
+ status,
10
+ text: () => Promise.resolve(JSON.stringify(body)),
11
+ json: () => Promise.resolve(body),
12
+ });
13
+ }
14
+ function createClient(fetchFn) {
15
+ return new AgentLensClient({
16
+ url: 'http://localhost:3400',
17
+ apiKey: 'als_test123',
18
+ fetch: fetchFn,
19
+ });
20
+ }
21
+ const sampleReflectResult = {
22
+ analysis: 'error_patterns',
23
+ insights: [
24
+ {
25
+ type: 'error_pattern',
26
+ summary: 'Timeout errors spike on Mondays',
27
+ data: { count: 42, pattern: 'TIMEOUT' },
28
+ confidence: 0.85,
29
+ },
30
+ ],
31
+ metadata: {
32
+ sessionsAnalyzed: 100,
33
+ eventsAnalyzed: 5000,
34
+ timeRange: { from: '2025-01-01', to: '2025-01-31' },
35
+ },
36
+ };
37
+ describe('AgentLensClient.reflect', () => {
38
+ it('sends analysis type as URL param', async () => {
39
+ const fn = mockFetch(200, sampleReflectResult);
40
+ const client = createClient(fn);
41
+ await client.reflect({ analysis: 'error_patterns' });
42
+ const url = fn.mock.calls[0][0];
43
+ expect(url).toContain('/api/reflect');
44
+ expect(url).toContain('analysis=error_patterns');
45
+ });
46
+ it('sends optional params when provided', async () => {
47
+ const fn = mockFetch(200, sampleReflectResult);
48
+ const client = createClient(fn);
49
+ await client.reflect({
50
+ analysis: 'cost_analysis',
51
+ agentId: 'agent-1',
52
+ from: '2025-01-01',
53
+ to: '2025-01-31',
54
+ limit: 50,
55
+ });
56
+ const url = fn.mock.calls[0][0];
57
+ expect(url).toContain('analysis=cost_analysis');
58
+ expect(url).toContain('agentId=agent-1');
59
+ expect(url).toContain('from=2025-01-01');
60
+ expect(url).toContain('to=2025-01-31');
61
+ expect(url).toContain('limit=50');
62
+ });
63
+ it('returns typed ReflectResult', async () => {
64
+ const fn = mockFetch(200, sampleReflectResult);
65
+ const client = createClient(fn);
66
+ const result = await client.reflect({ analysis: 'error_patterns' });
67
+ expect(result.analysis).toBe('error_patterns');
68
+ expect(result.insights).toHaveLength(1);
69
+ expect(result.insights[0].confidence).toBe(0.85);
70
+ expect(result.metadata.sessionsAnalyzed).toBe(100);
71
+ });
72
+ it('sends Authorization header', async () => {
73
+ const fn = mockFetch(200, sampleReflectResult);
74
+ const client = createClient(fn);
75
+ await client.reflect({ analysis: 'tool_sequences' });
76
+ const opts = fn.mock.calls[0][1];
77
+ expect(opts.headers['Authorization']).toBe('Bearer als_test123');
78
+ });
79
+ });
80
+ //# sourceMappingURL=reflect.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reflect.test.js","sourceRoot":"","sources":["../../src/__tests__/reflect.test.ts"],"names":[],"mappings":"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"}
package/dist/client.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  /**
2
- * @agentlens/sdk — AgentLensClient
2
+ * @agentlensai/sdk — AgentLensClient
3
3
  *
4
4
  * Typed HTTP client for the AgentLens REST API.
5
5
  * Uses native fetch — works in Node.js ≥ 18 and browsers.
6
6
  */
7
- import type { EventQuery, EventQueryResult, AgentLensEvent, Session, SessionQuery } from '@agentlens/core';
7
+ import type { EventQuery, EventQueryResult, AgentLensEvent, Session, SessionQuery, LlmMessage, RecallQuery, RecallResult, Lesson, LessonQuery, CreateLessonInput, ReflectQuery, ReflectResult, ContextQuery, ContextResult } from '@agentlensai/core';
8
8
  export interface AgentLensClientOptions {
9
9
  /** Base URL of the AgentLens server (e.g. "http://localhost:3400") */
10
10
  url: string;
@@ -26,6 +26,73 @@ export interface HealthResult {
26
26
  status: string;
27
27
  version: string;
28
28
  }
29
+ export interface LogLlmCallParams {
30
+ provider: string;
31
+ model: string;
32
+ messages: LlmMessage[];
33
+ systemPrompt?: string;
34
+ completion: string | null;
35
+ toolCalls?: Array<{
36
+ id: string;
37
+ name: string;
38
+ arguments: Record<string, unknown>;
39
+ }>;
40
+ finishReason: string;
41
+ usage: {
42
+ inputTokens: number;
43
+ outputTokens: number;
44
+ totalTokens: number;
45
+ thinkingTokens?: number;
46
+ };
47
+ costUsd: number;
48
+ latencyMs: number;
49
+ parameters?: Record<string, unknown>;
50
+ tools?: Array<{
51
+ name: string;
52
+ description?: string;
53
+ parameters?: Record<string, unknown>;
54
+ }>;
55
+ /** If true, prompt/completion content is stripped (redacted) before sending */
56
+ redact?: boolean;
57
+ }
58
+ export interface LlmAnalyticsParams {
59
+ from?: string;
60
+ to?: string;
61
+ agentId?: string;
62
+ model?: string;
63
+ provider?: string;
64
+ granularity?: 'hour' | 'day' | 'week';
65
+ }
66
+ export interface LlmAnalyticsSummary {
67
+ totalCalls: number;
68
+ totalCostUsd: number;
69
+ totalInputTokens: number;
70
+ totalOutputTokens: number;
71
+ avgLatencyMs: number;
72
+ avgCostPerCall: number;
73
+ }
74
+ export interface LlmAnalyticsByModel {
75
+ provider: string;
76
+ model: string;
77
+ calls: number;
78
+ costUsd: number;
79
+ inputTokens: number;
80
+ outputTokens: number;
81
+ avgLatencyMs: number;
82
+ }
83
+ export interface LlmAnalyticsByTime {
84
+ bucket: string;
85
+ calls: number;
86
+ costUsd: number;
87
+ inputTokens: number;
88
+ outputTokens: number;
89
+ avgLatencyMs: number;
90
+ }
91
+ export interface LlmAnalyticsResult {
92
+ summary: LlmAnalyticsSummary;
93
+ byModel: LlmAnalyticsByModel[];
94
+ byTime: LlmAnalyticsByTime[];
95
+ }
29
96
  export declare class AgentLensClient {
30
97
  private readonly baseUrl;
31
98
  private readonly apiKey?;
@@ -51,6 +118,55 @@ export declare class AgentLensClient {
51
118
  * Get the full timeline of events for a session, with hash chain verification.
52
119
  */
53
120
  getSessionTimeline(sessionId: string): Promise<TimelineResult>;
121
+ /**
122
+ * Log a complete LLM call (request + response) by sending paired events via batch ingest.
123
+ * Auto-generates a callId. Supports redaction of prompt/completion content.
124
+ */
125
+ logLlmCall(sessionId: string, agentId: string, params: LogLlmCallParams): Promise<{
126
+ callId: string;
127
+ }>;
128
+ /**
129
+ * Get LLM analytics (aggregate metrics by model, time, etc.).
130
+ */
131
+ getLlmAnalytics(params?: LlmAnalyticsParams): Promise<LlmAnalyticsResult>;
132
+ /**
133
+ * Semantic search over embeddings.
134
+ */
135
+ recall(query: RecallQuery): Promise<RecallResult>;
136
+ /**
137
+ * Create a new lesson.
138
+ */
139
+ createLesson(lesson: CreateLessonInput): Promise<Lesson>;
140
+ /**
141
+ * List lessons with optional filters.
142
+ */
143
+ getLessons(query?: LessonQuery): Promise<{
144
+ lessons: Lesson[];
145
+ total: number;
146
+ }>;
147
+ /**
148
+ * Get a single lesson by ID.
149
+ */
150
+ getLesson(id: string): Promise<Lesson>;
151
+ /**
152
+ * Update a lesson.
153
+ */
154
+ updateLesson(id: string, updates: Partial<CreateLessonInput>): Promise<Lesson>;
155
+ /**
156
+ * Delete (archive) a lesson.
157
+ */
158
+ deleteLesson(id: string): Promise<{
159
+ id: string;
160
+ archived: boolean;
161
+ }>;
162
+ /**
163
+ * Analyze patterns across sessions.
164
+ */
165
+ reflect(query: ReflectQuery): Promise<ReflectResult>;
166
+ /**
167
+ * Get cross-session context for a topic.
168
+ */
169
+ getContext(query: ContextQuery): Promise<ContextResult>;
54
170
  /**
55
171
  * Check server health (no auth required).
56
172
  */
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,OAAO,EACP,YAAY,EACb,MAAM,iBAAiB,CAAC;AAWzB,MAAM,WAAW,sBAAsB;IACrC,sEAAsE;IACtE,GAAG,EAAE,MAAM,CAAC;IACZ,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;gBAErC,OAAO,EAAE,sBAAsB;IAS3C;;OAEG;IACG,WAAW,CAAC,KAAK,GAAE,UAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAoBpE;;OAEG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAMnD;;OAEG;IACG,WAAW,CAAC,KAAK,GAAE,YAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAexE;;OAEG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI9C;;OAEG;IACG,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAQpE;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;YAMvB,OAAO;CAwDtB"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js CHANGED
@@ -1,9 +1,10 @@
1
1
  /**
2
- * @agentlens/sdk — AgentLensClient
2
+ * @agentlensai/sdk — AgentLensClient
3
3
  *
4
4
  * Typed HTTP client for the AgentLens REST API.
5
5
  * Uses native fetch — works in Node.js ≥ 18 and browsers.
6
6
  */
7
+ import { randomUUID } from 'node:crypto';
7
8
  import { AgentLensError, AuthenticationError, NotFoundError, ValidationError, ConnectionError, } from './errors.js';
8
9
  // ─── Client ─────────────────────────────────────────────────────────
9
10
  export class AgentLensClient {
@@ -87,6 +88,198 @@ export class AgentLensClient {
87
88
  async getSessionTimeline(sessionId) {
88
89
  return this.request(`/api/sessions/${encodeURIComponent(sessionId)}/timeline`);
89
90
  }
91
+ // ─── LLM Call Tracking ────────────────────────────────────
92
+ /**
93
+ * Log a complete LLM call (request + response) by sending paired events via batch ingest.
94
+ * Auto-generates a callId. Supports redaction of prompt/completion content.
95
+ */
96
+ async logLlmCall(sessionId, agentId, params) {
97
+ const callId = randomUUID();
98
+ const timestamp = new Date().toISOString();
99
+ const redacted = params.redact === true;
100
+ // Build llm_call payload
101
+ const llmCallPayload = {
102
+ callId,
103
+ provider: params.provider,
104
+ model: params.model,
105
+ messages: redacted
106
+ ? params.messages.map((m) => ({ role: m.role, content: '[REDACTED]' }))
107
+ : params.messages,
108
+ ...(params.systemPrompt !== undefined
109
+ ? { systemPrompt: redacted ? '[REDACTED]' : params.systemPrompt }
110
+ : {}),
111
+ ...(params.parameters !== undefined ? { parameters: params.parameters } : {}),
112
+ ...(params.tools !== undefined ? { tools: params.tools } : {}),
113
+ ...(redacted ? { redacted: true } : {}),
114
+ };
115
+ // Build llm_response payload
116
+ const llmResponsePayload = {
117
+ callId,
118
+ provider: params.provider,
119
+ model: params.model,
120
+ completion: redacted ? '[REDACTED]' : params.completion,
121
+ ...(params.toolCalls !== undefined ? { toolCalls: params.toolCalls } : {}),
122
+ finishReason: params.finishReason,
123
+ usage: params.usage,
124
+ costUsd: params.costUsd,
125
+ latencyMs: params.latencyMs,
126
+ ...(redacted ? { redacted: true } : {}),
127
+ };
128
+ // Send both events in a single batch request
129
+ await this.request('/api/events', {
130
+ method: 'POST',
131
+ body: {
132
+ events: [
133
+ {
134
+ sessionId,
135
+ agentId,
136
+ eventType: 'llm_call',
137
+ severity: 'info',
138
+ payload: llmCallPayload,
139
+ metadata: {},
140
+ timestamp,
141
+ },
142
+ {
143
+ sessionId,
144
+ agentId,
145
+ eventType: 'llm_response',
146
+ severity: 'info',
147
+ payload: llmResponsePayload,
148
+ metadata: {},
149
+ timestamp,
150
+ },
151
+ ],
152
+ },
153
+ });
154
+ return { callId };
155
+ }
156
+ /**
157
+ * Get LLM analytics (aggregate metrics by model, time, etc.).
158
+ */
159
+ async getLlmAnalytics(params = {}) {
160
+ const searchParams = new URLSearchParams();
161
+ if (params.from)
162
+ searchParams.set('from', params.from);
163
+ if (params.to)
164
+ searchParams.set('to', params.to);
165
+ if (params.agentId)
166
+ searchParams.set('agentId', params.agentId);
167
+ if (params.model)
168
+ searchParams.set('model', params.model);
169
+ if (params.provider)
170
+ searchParams.set('provider', params.provider);
171
+ if (params.granularity)
172
+ searchParams.set('granularity', params.granularity);
173
+ const qs = searchParams.toString();
174
+ const path = qs ? `/api/analytics/llm?${qs}` : '/api/analytics/llm';
175
+ return this.request(path);
176
+ }
177
+ // ─── Recall (Semantic Search) ──────────────────────────
178
+ /**
179
+ * Semantic search over embeddings.
180
+ */
181
+ async recall(query) {
182
+ const params = new URLSearchParams();
183
+ params.set('query', query.query);
184
+ if (query.scope)
185
+ params.set('scope', query.scope);
186
+ if (query.agentId)
187
+ params.set('agentId', query.agentId);
188
+ if (query.from)
189
+ params.set('from', query.from);
190
+ if (query.to)
191
+ params.set('to', query.to);
192
+ if (query.limit != null)
193
+ params.set('limit', String(query.limit));
194
+ if (query.minScore != null)
195
+ params.set('minScore', String(query.minScore));
196
+ return this.request(`/api/recall?${params.toString()}`);
197
+ }
198
+ // ─── Lessons ─────────────────────────────────────────────
199
+ /**
200
+ * Create a new lesson.
201
+ */
202
+ async createLesson(lesson) {
203
+ return this.request('/api/lessons', {
204
+ method: 'POST',
205
+ body: lesson,
206
+ });
207
+ }
208
+ /**
209
+ * List lessons with optional filters.
210
+ */
211
+ async getLessons(query) {
212
+ const params = new URLSearchParams();
213
+ if (query?.agentId)
214
+ params.set('agentId', query.agentId);
215
+ if (query?.category)
216
+ params.set('category', query.category);
217
+ if (query?.importance)
218
+ params.set('importance', query.importance);
219
+ if (query?.search)
220
+ params.set('search', query.search);
221
+ if (query?.limit != null)
222
+ params.set('limit', String(query.limit));
223
+ if (query?.offset != null)
224
+ params.set('offset', String(query.offset));
225
+ if (query?.includeArchived != null)
226
+ params.set('includeArchived', String(query.includeArchived));
227
+ const qs = params.toString();
228
+ return this.request(qs ? `/api/lessons?${qs}` : '/api/lessons');
229
+ }
230
+ /**
231
+ * Get a single lesson by ID.
232
+ */
233
+ async getLesson(id) {
234
+ return this.request(`/api/lessons/${encodeURIComponent(id)}`);
235
+ }
236
+ /**
237
+ * Update a lesson.
238
+ */
239
+ async updateLesson(id, updates) {
240
+ return this.request(`/api/lessons/${encodeURIComponent(id)}`, {
241
+ method: 'PUT',
242
+ body: updates,
243
+ });
244
+ }
245
+ /**
246
+ * Delete (archive) a lesson.
247
+ */
248
+ async deleteLesson(id) {
249
+ return this.request(`/api/lessons/${encodeURIComponent(id)}`, { method: 'DELETE' });
250
+ }
251
+ // ─── Reflect (Pattern Analysis) ──────────────────────────
252
+ /**
253
+ * Analyze patterns across sessions.
254
+ */
255
+ async reflect(query) {
256
+ const params = new URLSearchParams();
257
+ params.set('analysis', query.analysis);
258
+ if (query.agentId)
259
+ params.set('agentId', query.agentId);
260
+ if (query.from)
261
+ params.set('from', query.from);
262
+ if (query.to)
263
+ params.set('to', query.to);
264
+ if (query.limit != null)
265
+ params.set('limit', String(query.limit));
266
+ return this.request(`/api/reflect?${params.toString()}`);
267
+ }
268
+ // ─── Context (Cross-Session) ─────────────────────────────
269
+ /**
270
+ * Get cross-session context for a topic.
271
+ */
272
+ async getContext(query) {
273
+ const params = new URLSearchParams();
274
+ params.set('topic', query.topic);
275
+ if (query.userId)
276
+ params.set('userId', query.userId);
277
+ if (query.agentId)
278
+ params.set('agentId', query.agentId);
279
+ if (query.limit != null)
280
+ params.set('limit', String(query.limit));
281
+ return this.request(`/api/context?${params.toString()}`);
282
+ }
90
283
  // ─── Health ──────────────────────────────────────────────
91
284
  /**
92
285
  * Check server health (no auth required).
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/errors.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @agentlens/sdk — Typed Errors
2
+ * @agentlensai/sdk — Typed Errors
3
3
  */
4
4
  /**
5
5
  * Base error class for all AgentLens SDK errors.
package/dist/errors.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @agentlens/sdk — Typed Errors
2
+ * @agentlensai/sdk — Typed Errors
3
3
  */
4
4
  /**
5
5
  * Base error class for all AgentLens SDK errors.
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
- * @agentlens/sdk — Programmatic client for the AgentLens API
2
+ * @agentlensai/sdk — Programmatic client for the AgentLens API
3
3
  */
4
4
  export { AgentLensClient } from './client.js';
5
- export type { AgentLensClientOptions, SessionQueryResult, TimelineResult, HealthResult, } from './client.js';
5
+ export type { AgentLensClientOptions, SessionQueryResult, TimelineResult, HealthResult, LogLlmCallParams, LlmAnalyticsParams, LlmAnalyticsResult, LlmAnalyticsSummary, LlmAnalyticsByModel, LlmAnalyticsByTime, } from './client.js';
6
6
  export { AgentLensError, AuthenticationError, NotFoundError, ValidationError, ConnectionError, } from './errors.js';
7
- export type { AgentLensEvent, EventQuery, EventQueryResult, EventType, EventSeverity, Session, SessionQuery, SessionStatus, Agent, } from '@agentlens/core';
7
+ export type { AgentLensEvent, EventQuery, EventQueryResult, EventType, EventSeverity, Session, SessionQuery, SessionStatus, Agent, LlmMessage, LlmCallPayload, LlmResponsePayload, RecallQuery, RecallResult, Lesson, LessonQuery, LessonImportance, CreateLessonInput, ReflectQuery, ReflectResult, ReflectAnalysis, ReflectInsight, ContextQuery, ContextResult, ContextSession, ContextKeyEvent, ContextLesson, } from '@agentlensai/core';
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EACV,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACd,YAAY,GACb,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,OAAO,EACP,YAAY,EACZ,aAAa,EACb,KAAK,GACN,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EACV,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,OAAO,EACP,YAAY,EACZ,aAAa,EACb,KAAK,EACL,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,MAAM,EACN,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,cAAc,EACd,YAAY,EACZ,aAAa,EACb,cAAc,EACd,eAAe,EACf,aAAa,GACd,MAAM,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @agentlens/sdk — Programmatic client for the AgentLens API
2
+ * @agentlensai/sdk — Programmatic client for the AgentLens API
3
3
  */
4
4
  // Client
5
5
  export { AgentLensClient } from './client.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,SAAS;AACT,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAQ9C,SAAS;AACT,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,SAAS;AACT,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAc9C,SAAS;AACT,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentlensai/sdk",
3
- "version": "0.2.0",
3
+ "version": "0.5.0",
4
4
  "description": "TypeScript SDK for the AgentLens API — programmatic access to agent observability data",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -34,14 +34,14 @@
34
34
  "files": [
35
35
  "dist"
36
36
  ],
37
- "dependencies": {
38
- "@agentlensai/core": "0.2.0"
39
- },
40
37
  "scripts": {
41
38
  "build": "tsc -b",
42
39
  "dev": "tsc -b --watch",
43
40
  "typecheck": "tsc --noEmit",
44
41
  "test": "vitest run",
45
42
  "test:watch": "vitest"
43
+ },
44
+ "dependencies": {
45
+ "@agentlensai/core": "workspace:*"
46
46
  }
47
- }
47
+ }
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Amit Paz
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.