@agentlensai/mcp 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.
Files changed (51) hide show
  1. package/dist/__tests__/context.test.d.ts +5 -0
  2. package/dist/__tests__/context.test.d.ts.map +1 -0
  3. package/dist/__tests__/context.test.js +203 -0
  4. package/dist/__tests__/context.test.js.map +1 -0
  5. package/dist/__tests__/learn.test.d.ts +2 -0
  6. package/dist/__tests__/learn.test.d.ts.map +1 -0
  7. package/dist/__tests__/learn.test.js +381 -0
  8. package/dist/__tests__/learn.test.js.map +1 -0
  9. package/dist/__tests__/llm-call.test.d.ts +2 -0
  10. package/dist/__tests__/llm-call.test.d.ts.map +1 -0
  11. package/dist/__tests__/llm-call.test.js +218 -0
  12. package/dist/__tests__/llm-call.test.js.map +1 -0
  13. package/dist/__tests__/recall.test.d.ts +2 -0
  14. package/dist/__tests__/recall.test.d.ts.map +1 -0
  15. package/dist/__tests__/recall.test.js +193 -0
  16. package/dist/__tests__/recall.test.js.map +1 -0
  17. package/dist/__tests__/reflect.test.d.ts +5 -0
  18. package/dist/__tests__/reflect.test.d.ts.map +1 -0
  19. package/dist/__tests__/reflect.test.js +165 -0
  20. package/dist/__tests__/reflect.test.js.map +1 -0
  21. package/dist/index.d.ts +1 -1
  22. package/dist/index.js +1 -1
  23. package/dist/server.test.js +7 -2
  24. package/dist/server.test.js.map +1 -1
  25. package/dist/tools/context.d.ts +10 -0
  26. package/dist/tools/context.d.ts.map +1 -0
  27. package/dist/tools/context.js +93 -0
  28. package/dist/tools/context.js.map +1 -0
  29. package/dist/tools/learn.d.ts +10 -0
  30. package/dist/tools/learn.d.ts.map +1 -0
  31. package/dist/tools/learn.js +277 -0
  32. package/dist/tools/learn.js.map +1 -0
  33. package/dist/tools/recall.d.ts +10 -0
  34. package/dist/tools/recall.d.ts.map +1 -0
  35. package/dist/tools/recall.js +90 -0
  36. package/dist/tools/recall.js.map +1 -0
  37. package/dist/tools/reflect.d.ts +10 -0
  38. package/dist/tools/reflect.d.ts.map +1 -0
  39. package/dist/tools/reflect.js +61 -0
  40. package/dist/tools/reflect.js.map +1 -0
  41. package/dist/tools.d.ts.map +1 -1
  42. package/dist/tools.js +154 -2
  43. package/dist/tools.js.map +1 -1
  44. package/dist/tools.test.js +6 -1
  45. package/dist/tools.test.js.map +1 -1
  46. package/dist/transport.d.ts +55 -1
  47. package/dist/transport.d.ts.map +1 -1
  48. package/dist/transport.js +134 -1
  49. package/dist/transport.js.map +1 -1
  50. package/package.json +7 -7
  51. package/LICENSE +0 -21
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for agentlens_context MCP tool (Story 5.3)
3
+ */
4
+ export {};
5
+ //# 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":"AAAA;;GAEG"}
@@ -0,0 +1,203 @@
1
+ /**
2
+ * Tests for agentlens_context MCP tool (Story 5.3)
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
+ const mockFetch = vi.fn();
11
+ beforeEach(() => {
12
+ vi.stubGlobal('fetch', mockFetch);
13
+ mockFetch.mockReset();
14
+ });
15
+ afterEach(() => {
16
+ vi.unstubAllGlobals();
17
+ });
18
+ function okResponse(data = {}) {
19
+ return new Response(JSON.stringify(data), {
20
+ status: 200,
21
+ headers: { 'Content-Type': 'application/json' },
22
+ });
23
+ }
24
+ function errorResponse(status, body) {
25
+ return new Response(body, { status });
26
+ }
27
+ async function createTestSetup() {
28
+ const transport = new AgentLensTransport({
29
+ baseUrl: 'http://localhost:3400',
30
+ apiKey: 'test-key',
31
+ });
32
+ const server = new McpServer({ name: 'agentlens-test', version: '0.0.0' }, { capabilities: { tools: {} } });
33
+ registerTools(server, transport);
34
+ const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
35
+ const client = new Client({ name: 'test-client', version: '1.0.0' });
36
+ await server.connect(serverTransport);
37
+ await client.connect(clientTransport);
38
+ return { server, client, transport };
39
+ }
40
+ describe('agentlens_context', () => {
41
+ it('calls the context API with correct parameters', async () => {
42
+ const contextResult = {
43
+ topic: 'deployment',
44
+ sessions: [
45
+ {
46
+ sessionId: 'ses-1',
47
+ agentId: 'agent-1',
48
+ summary: 'Agent deployed to production',
49
+ relevanceScore: 0.85,
50
+ startedAt: '2024-01-01T00:00:00Z',
51
+ endedAt: '2024-01-01T01:00:00Z',
52
+ keyEvents: [
53
+ { id: 'ev-1', eventType: 'tool_call', summary: 'tool_call: deploy()', timestamp: '2024-01-01T00:30:00Z' },
54
+ ],
55
+ },
56
+ ],
57
+ lessons: [
58
+ {
59
+ id: 'les-1',
60
+ title: 'Always verify deploy',
61
+ content: 'Check health endpoint after deploying',
62
+ category: 'operations',
63
+ importance: 'high',
64
+ relevanceScore: 0.78,
65
+ },
66
+ ],
67
+ totalSessions: 1,
68
+ };
69
+ mockFetch.mockResolvedValueOnce(okResponse(contextResult));
70
+ const { client } = await createTestSetup();
71
+ const result = await client.callTool({
72
+ name: 'agentlens_context',
73
+ arguments: {
74
+ topic: 'deployment',
75
+ agentId: 'my-agent',
76
+ limit: 5,
77
+ },
78
+ });
79
+ // Verify the fetch was called with the right URL
80
+ expect(mockFetch).toHaveBeenCalledWith(expect.stringContaining('/api/context?'), expect.objectContaining({
81
+ method: 'GET',
82
+ headers: expect.objectContaining({
83
+ Authorization: 'Bearer test-key',
84
+ }),
85
+ }));
86
+ const fetchUrl = mockFetch.mock.calls[0][0];
87
+ expect(fetchUrl).toContain('topic=deployment');
88
+ expect(fetchUrl).toContain('agentId=my-agent');
89
+ expect(fetchUrl).toContain('limit=5');
90
+ // Verify the result contains formatted data
91
+ expect(result.isError).toBeUndefined();
92
+ const content = result.content;
93
+ expect(content[0].text).toContain('ses-1');
94
+ expect(content[0].text).toContain('deployed to production');
95
+ expect(content[0].text).toContain('Always verify deploy');
96
+ });
97
+ it('handles empty results gracefully', async () => {
98
+ mockFetch.mockResolvedValueOnce(okResponse({
99
+ topic: 'nonexistent',
100
+ sessions: [],
101
+ lessons: [],
102
+ totalSessions: 0,
103
+ }));
104
+ const { client } = await createTestSetup();
105
+ const result = await client.callTool({
106
+ name: 'agentlens_context',
107
+ arguments: { topic: 'nonexistent' },
108
+ });
109
+ expect(result.isError).toBeUndefined();
110
+ const content = result.content;
111
+ expect(content[0].text).toContain('No relevant context found');
112
+ });
113
+ it('returns error on API failure', async () => {
114
+ mockFetch.mockResolvedValueOnce(errorResponse(500, 'Internal Server Error'));
115
+ const { client } = await createTestSetup();
116
+ const result = await client.callTool({
117
+ name: 'agentlens_context',
118
+ arguments: { topic: 'test' },
119
+ });
120
+ expect(result.isError).toBe(true);
121
+ const content = result.content;
122
+ expect(content[0].text).toContain('Error retrieving context');
123
+ });
124
+ it('returns error on network failure', async () => {
125
+ mockFetch.mockRejectedValueOnce(new Error('Connection refused'));
126
+ const { client } = await createTestSetup();
127
+ const result = await client.callTool({
128
+ name: 'agentlens_context',
129
+ arguments: { topic: 'test' },
130
+ });
131
+ expect(result.isError).toBe(true);
132
+ const content = result.content;
133
+ expect(content[0].text).toContain('Connection refused');
134
+ });
135
+ it('handles sessions-only results (no lessons)', async () => {
136
+ mockFetch.mockResolvedValueOnce(okResponse({
137
+ topic: 'file operations',
138
+ sessions: [
139
+ {
140
+ sessionId: 'ses-1',
141
+ agentId: 'agent-1',
142
+ summary: 'Agent ran file operations',
143
+ relevanceScore: 0.9,
144
+ startedAt: '2024-01-01T00:00:00Z',
145
+ keyEvents: [],
146
+ },
147
+ ],
148
+ lessons: [],
149
+ totalSessions: 1,
150
+ }));
151
+ const { client } = await createTestSetup();
152
+ const result = await client.callTool({
153
+ name: 'agentlens_context',
154
+ arguments: { topic: 'file operations' },
155
+ });
156
+ expect(result.isError).toBeUndefined();
157
+ const content = result.content;
158
+ expect(content[0].text).toContain('Related Sessions (1)');
159
+ expect(content[0].text).toContain('file operations');
160
+ });
161
+ it('handles lessons-only results (no sessions)', async () => {
162
+ mockFetch.mockResolvedValueOnce(okResponse({
163
+ topic: 'database',
164
+ sessions: [],
165
+ lessons: [
166
+ {
167
+ id: 'les-1',
168
+ title: 'Database tips',
169
+ content: 'Always index your queries',
170
+ category: 'performance',
171
+ importance: 'normal',
172
+ relevanceScore: 0.75,
173
+ },
174
+ ],
175
+ totalSessions: 0,
176
+ }));
177
+ const { client } = await createTestSetup();
178
+ const result = await client.callTool({
179
+ name: 'agentlens_context',
180
+ arguments: { topic: 'database' },
181
+ });
182
+ expect(result.isError).toBeUndefined();
183
+ const content = result.content;
184
+ expect(content[0].text).toContain('Database tips');
185
+ expect(content[0].text).toContain('Related Lessons (1)');
186
+ });
187
+ it('sends optional userId parameter', async () => {
188
+ mockFetch.mockResolvedValueOnce(okResponse({
189
+ topic: 'test',
190
+ sessions: [],
191
+ lessons: [],
192
+ totalSessions: 0,
193
+ }));
194
+ const { client } = await createTestSetup();
195
+ await client.callTool({
196
+ name: 'agentlens_context',
197
+ arguments: { topic: 'test', userId: 'user-123' },
198
+ });
199
+ const fetchUrl = mockFetch.mock.calls[0][0];
200
+ expect(fetchUrl).toContain('userId=user-123');
201
+ });
202
+ });
203
+ //# 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=learn.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learn.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/learn.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,381 @@
1
+ /**
2
+ * Tests for agentlens_learn MCP tool (Story 3.3)
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
+ // Mock global fetch
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 createdResponse(data) {
26
+ return new Response(JSON.stringify(data), {
27
+ status: 201,
28
+ headers: { 'Content-Type': 'application/json' },
29
+ });
30
+ }
31
+ function errorResponse(status, body) {
32
+ return new Response(body, { status });
33
+ }
34
+ async function createTestSetup() {
35
+ const transport = new AgentLensTransport({
36
+ baseUrl: 'http://localhost:3400',
37
+ apiKey: 'test-key',
38
+ });
39
+ const server = new McpServer({ name: 'agentlens-test', version: '0.0.0' }, { capabilities: { tools: {} } });
40
+ registerTools(server, transport);
41
+ const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
42
+ const client = new Client({ name: 'test-client', version: '1.0.0' });
43
+ await server.connect(serverTransport);
44
+ await client.connect(clientTransport);
45
+ return { server, client, transport };
46
+ }
47
+ describe('agentlens_learn registration', () => {
48
+ it('registers the tool', async () => {
49
+ const { client } = await createTestSetup();
50
+ const result = await client.listTools();
51
+ const toolNames = result.tools.map((t) => t.name);
52
+ expect(toolNames).toContain('agentlens_learn');
53
+ });
54
+ it('registers 9 tools total', async () => {
55
+ const { client } = await createTestSetup();
56
+ const result = await client.listTools();
57
+ expect(result.tools).toHaveLength(9);
58
+ });
59
+ it('has a description', async () => {
60
+ const { client } = await createTestSetup();
61
+ const result = await client.listTools();
62
+ const tool = result.tools.find((t) => t.name === 'agentlens_learn');
63
+ expect(tool).toBeDefined();
64
+ expect(tool.description).toBeTruthy();
65
+ expect(tool.description).toContain('lesson');
66
+ });
67
+ it('has action as required field', async () => {
68
+ const { client } = await createTestSetup();
69
+ const result = await client.listTools();
70
+ const tool = result.tools.find((t) => t.name === 'agentlens_learn');
71
+ expect(tool).toBeDefined();
72
+ expect(tool.inputSchema.required).toContain('action');
73
+ });
74
+ });
75
+ describe('agentlens_learn save', () => {
76
+ it('creates a lesson and returns it', async () => {
77
+ const lessonData = {
78
+ id: 'les_123',
79
+ title: 'Always validate',
80
+ content: 'Validate inputs at API boundary.',
81
+ category: 'general',
82
+ importance: 'normal',
83
+ };
84
+ mockFetch.mockResolvedValue(createdResponse(lessonData));
85
+ const { client } = await createTestSetup();
86
+ const result = await client.callTool({
87
+ name: 'agentlens_learn',
88
+ arguments: {
89
+ action: 'save',
90
+ title: 'Always validate',
91
+ content: 'Validate inputs at API boundary.',
92
+ },
93
+ });
94
+ expect(result.isError).toBeFalsy();
95
+ const content = result.content;
96
+ const parsed = JSON.parse(content[0].text);
97
+ expect(parsed.id).toBe('les_123');
98
+ expect(parsed.title).toBe('Always validate');
99
+ });
100
+ it('sends POST to /api/lessons', async () => {
101
+ mockFetch.mockResolvedValue(createdResponse({ id: 'les_1' }));
102
+ const { client } = await createTestSetup();
103
+ await client.callTool({
104
+ name: 'agentlens_learn',
105
+ arguments: {
106
+ action: 'save',
107
+ title: 'Test',
108
+ content: 'Content',
109
+ category: 'arch',
110
+ importance: 'high',
111
+ },
112
+ });
113
+ expect(mockFetch).toHaveBeenCalledWith('http://localhost:3400/api/lessons', expect.objectContaining({ method: 'POST' }));
114
+ const body = JSON.parse(mockFetch.mock.calls[0][1].body);
115
+ expect(body.title).toBe('Test');
116
+ expect(body.content).toBe('Content');
117
+ expect(body.category).toBe('arch');
118
+ expect(body.importance).toBe('high');
119
+ });
120
+ it('returns error when title is missing', async () => {
121
+ const { client } = await createTestSetup();
122
+ const result = await client.callTool({
123
+ name: 'agentlens_learn',
124
+ arguments: { action: 'save', content: 'Content' },
125
+ });
126
+ expect(result.isError).toBe(true);
127
+ const content = result.content;
128
+ expect(content[0].text).toContain('title is required');
129
+ });
130
+ it('returns error when content is missing', async () => {
131
+ const { client } = await createTestSetup();
132
+ const result = await client.callTool({
133
+ name: 'agentlens_learn',
134
+ arguments: { action: 'save', title: 'Title' },
135
+ });
136
+ expect(result.isError).toBe(true);
137
+ const content = result.content;
138
+ expect(content[0].text).toContain('content is required');
139
+ });
140
+ it('returns error when server fails', async () => {
141
+ mockFetch.mockResolvedValue(errorResponse(500, 'Server error'));
142
+ const { client } = await createTestSetup();
143
+ const result = await client.callTool({
144
+ name: 'agentlens_learn',
145
+ arguments: { action: 'save', title: 'T', content: 'C' },
146
+ });
147
+ expect(result.isError).toBe(true);
148
+ const content = result.content;
149
+ expect(content[0].text).toContain('500');
150
+ });
151
+ });
152
+ describe('agentlens_learn list', () => {
153
+ it('lists lessons', async () => {
154
+ const data = {
155
+ lessons: [
156
+ { id: 'l1', title: 'Lesson 1', category: 'general', importance: 'normal' },
157
+ { id: 'l2', title: 'Lesson 2', category: 'arch', importance: 'high' },
158
+ ],
159
+ total: 2,
160
+ };
161
+ mockFetch.mockResolvedValue(okResponse(data));
162
+ const { client } = await createTestSetup();
163
+ const result = await client.callTool({
164
+ name: 'agentlens_learn',
165
+ arguments: { action: 'list' },
166
+ });
167
+ expect(result.isError).toBeFalsy();
168
+ const content = result.content;
169
+ expect(content[0].text).toContain('Found 2 lesson(s)');
170
+ expect(content[0].text).toContain('Lesson 1');
171
+ expect(content[0].text).toContain('Lesson 2');
172
+ });
173
+ it('passes filter params to API', async () => {
174
+ mockFetch.mockResolvedValue(okResponse({ lessons: [], total: 0 }));
175
+ const { client } = await createTestSetup();
176
+ await client.callTool({
177
+ name: 'agentlens_learn',
178
+ arguments: { action: 'list', category: 'arch', importance: 'high', limit: 5 },
179
+ });
180
+ const url = mockFetch.mock.calls[0][0];
181
+ expect(url).toContain('category=arch');
182
+ expect(url).toContain('importance=high');
183
+ expect(url).toContain('limit=5');
184
+ });
185
+ it('returns message when no lessons found', async () => {
186
+ mockFetch.mockResolvedValue(okResponse({ lessons: [], total: 0 }));
187
+ const { client } = await createTestSetup();
188
+ const result = await client.callTool({
189
+ name: 'agentlens_learn',
190
+ arguments: { action: 'list' },
191
+ });
192
+ const content = result.content;
193
+ expect(content[0].text).toContain('No lessons found');
194
+ });
195
+ });
196
+ describe('agentlens_learn get', () => {
197
+ it('gets a lesson by ID', async () => {
198
+ const lesson = { id: 'l1', title: 'Test', content: 'Content', accessCount: 1 };
199
+ mockFetch.mockResolvedValue(okResponse(lesson));
200
+ const { client } = await createTestSetup();
201
+ const result = await client.callTool({
202
+ name: 'agentlens_learn',
203
+ arguments: { action: 'get', id: 'l1' },
204
+ });
205
+ expect(result.isError).toBeFalsy();
206
+ const content = result.content;
207
+ const parsed = JSON.parse(content[0].text);
208
+ expect(parsed.id).toBe('l1');
209
+ });
210
+ it('returns error when id is missing', async () => {
211
+ const { client } = await createTestSetup();
212
+ const result = await client.callTool({
213
+ name: 'agentlens_learn',
214
+ arguments: { action: 'get' },
215
+ });
216
+ expect(result.isError).toBe(true);
217
+ const content = result.content;
218
+ expect(content[0].text).toContain('id is required');
219
+ });
220
+ it('handles 404', async () => {
221
+ mockFetch.mockResolvedValue(errorResponse(404, 'Not found'));
222
+ const { client } = await createTestSetup();
223
+ const result = await client.callTool({
224
+ name: 'agentlens_learn',
225
+ arguments: { action: 'get', id: 'nonexistent' },
226
+ });
227
+ expect(result.isError).toBe(true);
228
+ const content = result.content;
229
+ expect(content[0].text).toContain('not found');
230
+ });
231
+ });
232
+ describe('agentlens_learn update', () => {
233
+ it('updates a lesson', async () => {
234
+ const updated = { id: 'l1', title: 'Updated', content: 'Content' };
235
+ mockFetch.mockResolvedValue(okResponse(updated));
236
+ const { client } = await createTestSetup();
237
+ const result = await client.callTool({
238
+ name: 'agentlens_learn',
239
+ arguments: { action: 'update', id: 'l1', title: 'Updated' },
240
+ });
241
+ expect(result.isError).toBeFalsy();
242
+ const content = result.content;
243
+ const parsed = JSON.parse(content[0].text);
244
+ expect(parsed.title).toBe('Updated');
245
+ });
246
+ it('sends PUT to /api/lessons/:id', async () => {
247
+ mockFetch.mockResolvedValue(okResponse({ id: 'l1' }));
248
+ const { client } = await createTestSetup();
249
+ await client.callTool({
250
+ name: 'agentlens_learn',
251
+ arguments: { action: 'update', id: 'l1', title: 'Updated', importance: 'high' },
252
+ });
253
+ const url = mockFetch.mock.calls[0][0];
254
+ expect(url).toContain('/api/lessons/l1');
255
+ expect(mockFetch.mock.calls[0][1].method).toBe('PUT');
256
+ });
257
+ it('returns error when id is missing', async () => {
258
+ const { client } = await createTestSetup();
259
+ const result = await client.callTool({
260
+ name: 'agentlens_learn',
261
+ arguments: { action: 'update', title: 'Updated' },
262
+ });
263
+ expect(result.isError).toBe(true);
264
+ });
265
+ it('handles 404', async () => {
266
+ mockFetch.mockResolvedValue(errorResponse(404, 'Not found'));
267
+ const { client } = await createTestSetup();
268
+ const result = await client.callTool({
269
+ name: 'agentlens_learn',
270
+ arguments: { action: 'update', id: 'nonexistent', title: 'X' },
271
+ });
272
+ expect(result.isError).toBe(true);
273
+ const content = result.content;
274
+ expect(content[0].text).toContain('not found');
275
+ });
276
+ });
277
+ describe('agentlens_learn delete', () => {
278
+ it('archives a lesson', async () => {
279
+ mockFetch.mockResolvedValue(okResponse({ id: 'l1', archived: true }));
280
+ const { client } = await createTestSetup();
281
+ const result = await client.callTool({
282
+ name: 'agentlens_learn',
283
+ arguments: { action: 'delete', id: 'l1' },
284
+ });
285
+ expect(result.isError).toBeFalsy();
286
+ const content = result.content;
287
+ expect(content[0].text).toContain('archived successfully');
288
+ });
289
+ it('sends DELETE to /api/lessons/:id', async () => {
290
+ mockFetch.mockResolvedValue(okResponse({ id: 'l1', archived: true }));
291
+ const { client } = await createTestSetup();
292
+ await client.callTool({
293
+ name: 'agentlens_learn',
294
+ arguments: { action: 'delete', id: 'l1' },
295
+ });
296
+ const url = mockFetch.mock.calls[0][0];
297
+ expect(url).toContain('/api/lessons/l1');
298
+ expect(mockFetch.mock.calls[0][1].method).toBe('DELETE');
299
+ });
300
+ it('returns error when id is missing', async () => {
301
+ const { client } = await createTestSetup();
302
+ const result = await client.callTool({
303
+ name: 'agentlens_learn',
304
+ arguments: { action: 'delete' },
305
+ });
306
+ expect(result.isError).toBe(true);
307
+ });
308
+ it('handles 404', async () => {
309
+ mockFetch.mockResolvedValue(errorResponse(404, 'Not found'));
310
+ const { client } = await createTestSetup();
311
+ const result = await client.callTool({
312
+ name: 'agentlens_learn',
313
+ arguments: { action: 'delete', id: 'nonexistent' },
314
+ });
315
+ expect(result.isError).toBe(true);
316
+ });
317
+ });
318
+ describe('agentlens_learn search', () => {
319
+ it('searches lessons by text', async () => {
320
+ const data = {
321
+ lessons: [
322
+ { id: 'l1', title: 'Rate limiting', category: 'api', importance: 'high', content: 'Use rate limiting on all public endpoints' },
323
+ ],
324
+ total: 1,
325
+ };
326
+ mockFetch.mockResolvedValue(okResponse(data));
327
+ const { client } = await createTestSetup();
328
+ const result = await client.callTool({
329
+ name: 'agentlens_learn',
330
+ arguments: { action: 'search', search: 'rate limiting' },
331
+ });
332
+ expect(result.isError).toBeFalsy();
333
+ const content = result.content;
334
+ expect(content[0].text).toContain('Found 1 lesson(s)');
335
+ expect(content[0].text).toContain('Rate limiting');
336
+ });
337
+ it('passes search param to API', async () => {
338
+ mockFetch.mockResolvedValue(okResponse({ lessons: [], total: 0 }));
339
+ const { client } = await createTestSetup();
340
+ await client.callTool({
341
+ name: 'agentlens_learn',
342
+ arguments: { action: 'search', search: 'test query' },
343
+ });
344
+ const url = mockFetch.mock.calls[0][0];
345
+ expect(url).toContain('search=test+query');
346
+ });
347
+ it('returns error when search text is missing', async () => {
348
+ const { client } = await createTestSetup();
349
+ const result = await client.callTool({
350
+ name: 'agentlens_learn',
351
+ arguments: { action: 'search' },
352
+ });
353
+ expect(result.isError).toBe(true);
354
+ const content = result.content;
355
+ expect(content[0].text).toContain('search is required');
356
+ });
357
+ it('returns message when no results', async () => {
358
+ mockFetch.mockResolvedValue(okResponse({ lessons: [], total: 0 }));
359
+ const { client } = await createTestSetup();
360
+ const result = await client.callTool({
361
+ name: 'agentlens_learn',
362
+ arguments: { action: 'search', search: 'nonexistent' },
363
+ });
364
+ const content = result.content;
365
+ expect(content[0].text).toContain('No lessons found');
366
+ });
367
+ });
368
+ describe('error handling', () => {
369
+ it('handles network errors gracefully', async () => {
370
+ mockFetch.mockRejectedValue(new Error('Connection refused'));
371
+ const { client } = await createTestSetup();
372
+ const result = await client.callTool({
373
+ name: 'agentlens_learn',
374
+ arguments: { action: 'save', title: 'T', content: 'C' },
375
+ });
376
+ expect(result.isError).toBe(true);
377
+ const content = result.content;
378
+ expect(content[0].text).toContain('Connection refused');
379
+ });
380
+ });
381
+ //# sourceMappingURL=learn.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learn.test.js","sourceRoot":"","sources":["../../src/__tests__/learn.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,oBAAoB;AACpB,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAE1B,UAAU,CAAC,GAAG,EAAE;IACd,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAClC,SAAS,CAAC,SAAS,EAAE,CAAC;AACxB,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,GAAG,EAAE;IACb,EAAE,CAAC,gBAAgB,EAAE,CAAC;AACxB,CAAC,CAAC,CAAC;AAEH,SAAS,UAAU,CAAC,OAAgB,EAAE;IACpC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;QACxC,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CAAC,IAAa;IACpC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;QACxC,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,MAAc,EAAE,IAAY;IACjD,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,KAAK,UAAU,eAAe;IAC5B,MAAM,SAAS,GAAG,IAAI,kBAAkB,CAAC;QACvC,OAAO,EAAE,uBAAuB;QAChC,MAAM,EAAE,UAAU;KACnB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,EAC5C,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChC,CAAC;IAEF,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAEjC,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC,GAAG,iBAAiB,CAAC,gBAAgB,EAAE,CAAC;IAChF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAErE,MAAM,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACtC,MAAM,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAEtC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AACvC,CAAC;AAED,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;QACxC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACjC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAK,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAC;QACvC,MAAM,CAAC,IAAK,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,UAAU,GAAG;YACjB,EAAE,EAAE,SAAS;YACb,KAAK,EAAE,iBAAiB;YACxB,OAAO,EAAE,kCAAkC;YAC3C,QAAQ,EAAE,SAAS;YACnB,UAAU,EAAE,QAAQ;SACrB,CAAC;QACF,SAAS,CAAC,iBAAiB,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;QACzD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YACnC,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE;gBACT,MAAM,EAAE,MAAM;gBACd,KAAK,EAAE,iBAAiB;gBACxB,OAAO,EAAE,kCAAkC;aAC5C;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAgD,CAAC;QACxE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,SAAS,CAAC,iBAAiB,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAC9D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE3C,MAAM,MAAM,CAAC,QAAQ,CAAC;YACpB,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE;gBACT,MAAM,EAAE,MAAM;gBACd,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,SAAS;gBAClB,QAAQ,EAAE,MAAM;gBAChB,UAAU,EAAE,MAAM;aACnB;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CACpC,mCAAmC,EACnC,MAAM,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAC5C,CAAC;QAEF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAc,CAAC,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YACnC,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;SAClD,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAgD,CAAC;QACxE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YACnC,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE;SAC9C,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAgD,CAAC;QACxE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,SAAS,CAAC,iBAAiB,CAAC,aAAa,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC;QAChE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YACnC,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE;SACxD,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAgD,CAAC;QACxE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;QAC7B,MAAM,IAAI,GAAG;YACX,OAAO,EAAE;gBACP,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE;gBAC1E,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE;aACtE;YACD,KAAK,EAAE,CAAC;SACT,CAAC;QACF,SAAS,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YACnC,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;SAC9B,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAgD,CAAC;QACxE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QACvD,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,SAAS,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACnE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE3C,MAAM,MAAM,CAAC,QAAQ,CAAC;YACpB,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE;SAC9E,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAW,CAAC;QACjD,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,SAAS,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,SAAS,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACnE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YACnC,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;SAC9B,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,CAAC,OAAgD,CAAC;QACxE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;QACnC,MAAM,MAAM,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;QAC/E,SAAS,CAAC,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAChD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YACnC,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE;SACvC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAgD,CAAC;QACxE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YACnC,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;SAC7B,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAgD,CAAC;QACxE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;QAC3B,SAAS,CAAC,iBAAiB,CAAC,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;QAC7D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YACnC,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,aAAa,EAAE;SAChD,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAgD,CAAC;QACxE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QAChC,MAAM,OAAO,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QACnE,SAAS,CAAC,iBAAiB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QACjD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YACnC,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;SAC5D,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAgD,CAAC;QACxE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,SAAS,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACtD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE3C,MAAM,MAAM,CAAC,QAAQ,CAAC;YACpB,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE;SAChF,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAW,CAAC;QACjD,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACzC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YACnC,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE;SAClD,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;QAC3B,SAAS,CAAC,iBAAiB,CAAC,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;QAC7D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YACnC,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE;SAC/D,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAgD,CAAC;QACxE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACjC,SAAS,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACtE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YACnC,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE;SAC1C,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAgD,CAAC;QACxE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,SAAS,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACtE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE3C,MAAM,MAAM,CAAC,QAAQ,CAAC;YACpB,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE;SAC1C,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAW,CAAC;QACjD,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACzC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YACnC,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;SAChC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;QAC3B,SAAS,CAAC,iBAAiB,CAAC,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;QAC7D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YACnC,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE;SACnD,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,IAAI,GAAG;YACX,OAAO,EAAE;gBACP,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,2CAA2C,EAAE;aAChI;YACD,KAAK,EAAE,CAAC;SACT,CAAC;QACF,SAAS,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YACnC,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE;SACzD,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAgD,CAAC;QACxE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QACvD,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,SAAS,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACnE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE3C,MAAM,MAAM,CAAC,QAAQ,CAAC;YACpB,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE;SACtD,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAW,CAAC;QACjD,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YACnC,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;SAChC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAgD,CAAC;QACxE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,SAAS,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACnE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YACnC,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE;SACvD,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,CAAC,OAAgD,CAAC;QACxE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,SAAS,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC7D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YACnC,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE;SACxD,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAgD,CAAC;QACxE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -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":""}