@opencontextprotocol/agent 0.1.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 (76) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +198 -0
  3. package/dist/src/agent.d.ts +112 -0
  4. package/dist/src/agent.d.ts.map +1 -0
  5. package/dist/src/agent.js +358 -0
  6. package/dist/src/agent.js.map +1 -0
  7. package/dist/src/context.d.ts +108 -0
  8. package/dist/src/context.d.ts.map +1 -0
  9. package/dist/src/context.js +196 -0
  10. package/dist/src/context.js.map +1 -0
  11. package/dist/src/errors.d.ts +40 -0
  12. package/dist/src/errors.d.ts.map +1 -0
  13. package/dist/src/errors.js +63 -0
  14. package/dist/src/errors.js.map +1 -0
  15. package/dist/src/headers.d.ts +63 -0
  16. package/dist/src/headers.d.ts.map +1 -0
  17. package/dist/src/headers.js +238 -0
  18. package/dist/src/headers.js.map +1 -0
  19. package/dist/src/http_client.d.ts +82 -0
  20. package/dist/src/http_client.d.ts.map +1 -0
  21. package/dist/src/http_client.js +181 -0
  22. package/dist/src/http_client.js.map +1 -0
  23. package/dist/src/index.d.ts +25 -0
  24. package/dist/src/index.d.ts.map +1 -0
  25. package/dist/src/index.js +35 -0
  26. package/dist/src/index.js.map +1 -0
  27. package/dist/src/registry.d.ts +52 -0
  28. package/dist/src/registry.d.ts.map +1 -0
  29. package/dist/src/registry.js +164 -0
  30. package/dist/src/registry.js.map +1 -0
  31. package/dist/src/schema_discovery.d.ts +149 -0
  32. package/dist/src/schema_discovery.d.ts.map +1 -0
  33. package/dist/src/schema_discovery.js +707 -0
  34. package/dist/src/schema_discovery.js.map +1 -0
  35. package/dist/src/schemas/ocp-context.json +138 -0
  36. package/dist/src/storage.d.ts +110 -0
  37. package/dist/src/storage.d.ts.map +1 -0
  38. package/dist/src/storage.js +399 -0
  39. package/dist/src/storage.js.map +1 -0
  40. package/dist/src/validation.d.ts +169 -0
  41. package/dist/src/validation.d.ts.map +1 -0
  42. package/dist/src/validation.js +92 -0
  43. package/dist/src/validation.js.map +1 -0
  44. package/dist/tests/agent.test.d.ts +5 -0
  45. package/dist/tests/agent.test.d.ts.map +1 -0
  46. package/dist/tests/agent.test.js +536 -0
  47. package/dist/tests/agent.test.js.map +1 -0
  48. package/dist/tests/context.test.d.ts +5 -0
  49. package/dist/tests/context.test.d.ts.map +1 -0
  50. package/dist/tests/context.test.js +285 -0
  51. package/dist/tests/context.test.js.map +1 -0
  52. package/dist/tests/headers.test.d.ts +5 -0
  53. package/dist/tests/headers.test.d.ts.map +1 -0
  54. package/dist/tests/headers.test.js +356 -0
  55. package/dist/tests/headers.test.js.map +1 -0
  56. package/dist/tests/http_client.test.d.ts +5 -0
  57. package/dist/tests/http_client.test.d.ts.map +1 -0
  58. package/dist/tests/http_client.test.js +373 -0
  59. package/dist/tests/http_client.test.js.map +1 -0
  60. package/dist/tests/registry.test.d.ts +5 -0
  61. package/dist/tests/registry.test.d.ts.map +1 -0
  62. package/dist/tests/registry.test.js +232 -0
  63. package/dist/tests/registry.test.js.map +1 -0
  64. package/dist/tests/schema_discovery.test.d.ts +5 -0
  65. package/dist/tests/schema_discovery.test.d.ts.map +1 -0
  66. package/dist/tests/schema_discovery.test.js +1074 -0
  67. package/dist/tests/schema_discovery.test.js.map +1 -0
  68. package/dist/tests/storage.test.d.ts +5 -0
  69. package/dist/tests/storage.test.d.ts.map +1 -0
  70. package/dist/tests/storage.test.js +414 -0
  71. package/dist/tests/storage.test.js.map +1 -0
  72. package/dist/tests/validation.test.d.ts +5 -0
  73. package/dist/tests/validation.test.d.ts.map +1 -0
  74. package/dist/tests/validation.test.js +254 -0
  75. package/dist/tests/validation.test.js.map +1 -0
  76. package/package.json +51 -0
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for OCP Agent functionality.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=agent.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.test.d.ts","sourceRoot":"","sources":["../../tests/agent.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,536 @@
1
+ /**
2
+ * Tests for OCP Agent functionality.
3
+ */
4
+ import { describe, test, expect, beforeEach, jest } from '@jest/globals';
5
+ import { OCPAgent } from '../src/agent.js';
6
+ // Mock fetch globally
7
+ global.fetch = jest.fn();
8
+ describe('OCP Agent', () => {
9
+ let agent;
10
+ const sampleApiSpec = {
11
+ title: 'Test API',
12
+ version: '1.0.0',
13
+ base_url: 'https://api.test.com',
14
+ description: 'A test API for testing purposes',
15
+ tools: [
16
+ {
17
+ name: 'get_items',
18
+ description: 'List all items',
19
+ method: 'GET',
20
+ path: '/items',
21
+ parameters: {
22
+ limit: {
23
+ type: 'integer',
24
+ required: false,
25
+ location: 'query',
26
+ },
27
+ },
28
+ response_schema: {},
29
+ operation_id: undefined,
30
+ tags: [],
31
+ },
32
+ {
33
+ name: 'post_items',
34
+ description: 'Create a new item',
35
+ method: 'POST',
36
+ path: '/items',
37
+ parameters: {
38
+ name: {
39
+ type: 'string',
40
+ required: true,
41
+ location: 'body',
42
+ },
43
+ description: {
44
+ type: 'string',
45
+ required: false,
46
+ location: 'body',
47
+ },
48
+ },
49
+ response_schema: {},
50
+ operation_id: undefined,
51
+ tags: [],
52
+ },
53
+ {
54
+ name: 'get_items_id',
55
+ description: 'Get a specific item',
56
+ method: 'GET',
57
+ path: '/items/{id}',
58
+ parameters: {
59
+ id: {
60
+ type: 'string',
61
+ required: true,
62
+ location: 'path',
63
+ },
64
+ },
65
+ response_schema: {},
66
+ operation_id: undefined,
67
+ tags: [],
68
+ },
69
+ ],
70
+ raw_spec: {},
71
+ };
72
+ beforeEach(() => {
73
+ jest.clearAllMocks();
74
+ agent = new OCPAgent('test_agent', 'test_user', 'test_workspace', 'test goal', undefined, false);
75
+ });
76
+ describe('Agent Creation', () => {
77
+ test('agent creation', () => {
78
+ expect(agent.context.agent_type).toBe('test_agent');
79
+ expect(agent.context.user).toBe('test_user');
80
+ expect(agent.context.workspace).toBe('test_workspace');
81
+ expect(agent.context.current_goal).toBe('test goal');
82
+ expect(agent.knownApis.size).toBe(0);
83
+ expect(agent['discovery']).toBeDefined();
84
+ expect(agent['httpClient']).toBeDefined();
85
+ });
86
+ });
87
+ describe('Register API', () => {
88
+ test('register api', async () => {
89
+ // Mock discovery
90
+ const mockDiscoverApi = jest.fn().mockResolvedValue(sampleApiSpec);
91
+ agent['discovery'].discoverApi = mockDiscoverApi;
92
+ const result = await agent.registerApi('test_api', 'https://api.test.com/openapi.json');
93
+ expect(result).toEqual(sampleApiSpec);
94
+ expect(agent.knownApis.get('test_api')).toEqual(sampleApiSpec);
95
+ expect(agent.context.api_specs['test_api']).toBeDefined();
96
+ expect(agent.context.history.length).toBeGreaterThanOrEqual(1);
97
+ expect(agent.context.history[0].action).toBe('api_registered');
98
+ expect(mockDiscoverApi).toHaveBeenCalledWith('https://api.test.com/openapi.json', undefined);
99
+ });
100
+ test('register api with base url', async () => {
101
+ const mockDiscoverApi = jest.fn().mockResolvedValue(sampleApiSpec);
102
+ agent['discovery'].discoverApi = mockDiscoverApi;
103
+ await agent.registerApi('test_api', 'https://api.test.com/openapi.json', 'https://custom.test.com');
104
+ expect(mockDiscoverApi).toHaveBeenCalledWith('https://api.test.com/openapi.json', 'https://custom.test.com');
105
+ });
106
+ test('register api normalizes names', async () => {
107
+ const mockGetApiSpec = jest.spyOn(agent['registry'], 'getApiSpec');
108
+ mockGetApiSpec.mockResolvedValue(sampleApiSpec);
109
+ // Register with mixed case
110
+ const apiSpec = await agent.registerApi('GitHuB');
111
+ expect(agent.knownApis.has('github')).toBe(true);
112
+ expect(apiSpec.name).toBe('github');
113
+ // Can retrieve with any casing
114
+ expect(agent.listTools('GITHUB')).toEqual(agent.listTools('github'));
115
+ expect(agent.getTool('get_items', 'GitHub')).toBeDefined();
116
+ expect(agent.searchTools('items', 'gitHUB').length).toBeGreaterThan(0);
117
+ // Whitespace is stripped
118
+ await agent.registerApi(' stripe ');
119
+ expect(agent.knownApis.has('stripe')).toBe(true);
120
+ expect(agent.knownApis.has(' stripe ')).toBe(false);
121
+ mockGetApiSpec.mockRestore();
122
+ });
123
+ });
124
+ describe('List Tools', () => {
125
+ test('list tools no apis', () => {
126
+ const tools = agent.listTools();
127
+ expect(tools).toEqual([]);
128
+ });
129
+ test('list tools with api', () => {
130
+ agent.knownApis.set('test_api', sampleApiSpec);
131
+ // List all tools
132
+ const allTools = agent.listTools();
133
+ expect(allTools.length).toBe(3);
134
+ expect(allTools.every((tool) => ['get_items', 'post_items', 'get_items_id'].includes(tool.name))).toBe(true);
135
+ // List tools for specific API
136
+ const apiTools = agent.listTools('test_api');
137
+ expect(apiTools.length).toBe(3);
138
+ expect(apiTools).toEqual(sampleApiSpec.tools);
139
+ });
140
+ test('list tools unknown api', () => {
141
+ expect(() => agent.listTools('unknown_api')).toThrow('Unknown API: unknown_api');
142
+ });
143
+ });
144
+ describe('Get Tool', () => {
145
+ test('get tool', () => {
146
+ agent.knownApis.set('test_api', sampleApiSpec);
147
+ // Get existing tool
148
+ const tool = agent.getTool('get_items');
149
+ expect(tool).toBeDefined();
150
+ expect(tool.name).toBe('get_items');
151
+ expect(tool.method).toBe('GET');
152
+ // Get tool from specific API
153
+ const tool2 = agent.getTool('post_items', 'test_api');
154
+ expect(tool2).toBeDefined();
155
+ expect(tool2.name).toBe('post_items');
156
+ // Get non-existent tool
157
+ const tool3 = agent.getTool('nonexistent');
158
+ expect(tool3).toBeUndefined();
159
+ });
160
+ });
161
+ describe('Search Tools', () => {
162
+ test('search tools', () => {
163
+ agent.knownApis.set('test_api', sampleApiSpec);
164
+ // Mock search implementation
165
+ const mockSearch = jest.fn().mockReturnValue([sampleApiSpec.tools[0]]);
166
+ agent['discovery'].searchTools = mockSearch;
167
+ // Search all APIs
168
+ const results = agent.searchTools('list');
169
+ expect(results.length).toBe(1);
170
+ expect(mockSearch).toHaveBeenCalledWith(sampleApiSpec, 'list');
171
+ // Search specific API
172
+ mockSearch.mockClear();
173
+ const results2 = agent.searchTools('list', 'test_api');
174
+ expect(results2.length).toBe(1);
175
+ expect(mockSearch).toHaveBeenCalledWith(sampleApiSpec, 'list');
176
+ // Search unknown API
177
+ const results3 = agent.searchTools('list', 'unknown_api');
178
+ expect(results3).toEqual([]);
179
+ });
180
+ });
181
+ describe('Parameter Validation', () => {
182
+ test('validate parameters', () => {
183
+ const postTool = sampleApiSpec.tools[1]; // post_items tool
184
+ // Valid parameters
185
+ const errors1 = agent._validateParameters(postTool, { name: 'test' });
186
+ expect(errors1).toEqual([]);
187
+ // Missing required parameter
188
+ const errors2 = agent._validateParameters(postTool, {});
189
+ expect(errors2.length).toBe(1);
190
+ expect(errors2[0]).toContain('Missing required parameter: name');
191
+ // Wrong parameter type (basic validation doesn't catch this)
192
+ const errors3 = agent._validateParameters(postTool, { name: 123 });
193
+ expect(errors3).toEqual([]);
194
+ });
195
+ });
196
+ describe('Build Request', () => {
197
+ test('build request', () => {
198
+ // Test query parameters
199
+ const getTool = sampleApiSpec.tools[0]; // get_items tool
200
+ const [url1, params1] = agent._buildRequest(sampleApiSpec, getTool, { limit: 10 });
201
+ expect(url1).toBe('https://api.test.com/items');
202
+ expect(params1.params.limit).toBe(10);
203
+ expect(params1.timeout).toBe(30000);
204
+ // Test path parameters
205
+ const getTool2 = sampleApiSpec.tools[2]; // get_items_id tool
206
+ const [url2, params2] = agent._buildRequest(sampleApiSpec, getTool2, { id: '123' });
207
+ expect(url2).toBe('https://api.test.com/items/123');
208
+ expect(!params2.params || Object.keys(params2.params).length === 0).toBe(true);
209
+ // Test body parameters
210
+ const postTool = sampleApiSpec.tools[1]; // post_items tool
211
+ const [url3, params3] = agent._buildRequest(sampleApiSpec, postTool, {
212
+ name: 'test item',
213
+ description: 'test desc',
214
+ });
215
+ expect(url3).toBe('https://api.test.com/items');
216
+ expect(params3.json.name).toBe('test item');
217
+ expect(params3.json.description).toBe('test desc');
218
+ });
219
+ });
220
+ describe('Call Tool', () => {
221
+ test('call tool success', async () => {
222
+ agent.knownApis.set('test_api', sampleApiSpec);
223
+ // Mock successful response
224
+ const mockResponse = {
225
+ status: 200,
226
+ statusText: 'OK',
227
+ ok: true,
228
+ data: { success: true },
229
+ text: '{"success": true}',
230
+ headers: new Headers(),
231
+ json: async () => ({ success: true }),
232
+ };
233
+ const mockRequest = jest.fn().mockResolvedValue(mockResponse);
234
+ agent['httpClient'].request = mockRequest;
235
+ const response = await agent.callTool('get_items', { limit: 5 });
236
+ expect(response).toEqual(mockResponse);
237
+ expect(agent.context.history.length).toBeGreaterThanOrEqual(2);
238
+ // Check that the request was made correctly
239
+ expect(mockRequest).toHaveBeenCalledTimes(1);
240
+ const callArgs = mockRequest.mock.calls[0];
241
+ expect(callArgs[0]).toBe('GET'); // method
242
+ expect(callArgs[1]).toBe('https://api.test.com/items'); // url
243
+ expect(callArgs[2].params.limit).toBe(5);
244
+ });
245
+ test('call tool not found', async () => {
246
+ agent.knownApis.set('test_api', sampleApiSpec);
247
+ await expect(agent.callTool('nonexistent')).rejects.toThrow("Tool 'nonexistent' not found");
248
+ });
249
+ test('call tool validation error', async () => {
250
+ agent.knownApis.set('test_api', sampleApiSpec);
251
+ await expect(agent.callTool('post_items', {})).rejects.toThrow('Parameter validation failed');
252
+ });
253
+ });
254
+ describe('Tool Documentation', () => {
255
+ test('get tool documentation', () => {
256
+ agent.knownApis.set('test_api', sampleApiSpec);
257
+ const mockGenerateDoc = jest.fn().mockReturnValue('Tool documentation');
258
+ agent['discovery'].generateToolDocumentation = mockGenerateDoc;
259
+ const doc = agent.getToolDocumentation('get_items');
260
+ expect(doc).toBe('Tool documentation');
261
+ expect(mockGenerateDoc).toHaveBeenCalledWith(sampleApiSpec.tools[0]);
262
+ // Test non-existent tool
263
+ const doc2 = agent.getToolDocumentation('nonexistent');
264
+ expect(doc2.toLowerCase()).toContain('not found');
265
+ });
266
+ });
267
+ describe('Update Goal', () => {
268
+ test('update goal', () => {
269
+ const initialInteractions = agent.context.history.length;
270
+ agent.updateGoal('new goal', 'goal summary');
271
+ expect(agent.context.current_goal).toBe('new goal');
272
+ expect(agent.context.context_summary).toBe('goal summary');
273
+ });
274
+ });
275
+ describe('Registry Integration', () => {
276
+ test('register api from registry', async () => {
277
+ // Mock registry
278
+ const mockGetApiSpec = jest.fn().mockResolvedValue(sampleApiSpec);
279
+ const mockRegistry = {
280
+ getApiSpec: mockGetApiSpec,
281
+ registryUrl: 'https://test-registry.com',
282
+ };
283
+ // Create agent with custom registry
284
+ const agentWithRegistry = new OCPAgent('test_agent', undefined, undefined, undefined, 'https://test-registry.com', false);
285
+ agentWithRegistry['registry'] = mockRegistry;
286
+ // Register API from registry
287
+ const result = await agentWithRegistry.registerApi('test_api');
288
+ // Verify registry was called correctly
289
+ expect(mockGetApiSpec).toHaveBeenCalledWith('test_api', undefined);
290
+ // Verify API was registered
291
+ expect(result).toEqual(sampleApiSpec);
292
+ expect(agentWithRegistry.knownApis.get('test_api')).toEqual(sampleApiSpec);
293
+ // Verify context tracking
294
+ expect(agentWithRegistry.context.api_specs['test_api']).toBe('registry:test_api');
295
+ // Verify interaction logging
296
+ expect(agentWithRegistry.context.history.length).toBeGreaterThanOrEqual(1);
297
+ const interaction = agentWithRegistry.context.history[0];
298
+ expect(interaction.action).toBe('api_registered');
299
+ expect(interaction.api_endpoint).toBe('registry:test_api');
300
+ expect(interaction.metadata.source).toBe('registry');
301
+ });
302
+ test('register api from openapi url', async () => {
303
+ const mockDiscoverApi = jest.fn().mockResolvedValue(sampleApiSpec);
304
+ agent['discovery'].discoverApi = mockDiscoverApi;
305
+ // Register API with URL
306
+ const result = await agent.registerApi('test_api', 'https://api.test.com/openapi.json');
307
+ // Verify discovery was called
308
+ expect(mockDiscoverApi).toHaveBeenCalled();
309
+ // Verify API was registered
310
+ expect(result).toEqual(sampleApiSpec);
311
+ expect(agent.knownApis.get('test_api')).toBeDefined();
312
+ // Verify context tracking
313
+ expect(agent.context.api_specs['test_api']).toBe('https://api.test.com/openapi.json');
314
+ // Verify metadata indicates OpenAPI source
315
+ const interaction = agent.context.history[0];
316
+ expect(interaction.metadata.source).toBe('openapi');
317
+ });
318
+ test('register api with base url override', async () => {
319
+ const mockGetApiSpec = jest.fn().mockResolvedValue(sampleApiSpec);
320
+ const mockRegistry = {
321
+ getApiSpec: mockGetApiSpec,
322
+ registryUrl: 'https://registry.ocp.dev',
323
+ };
324
+ const agentWithRegistry = new OCPAgent('test_agent', undefined, undefined, undefined, undefined, false);
325
+ agentWithRegistry['registry'] = mockRegistry;
326
+ // Register with base URL override
327
+ await agentWithRegistry.registerApi('test_api', undefined, 'https://custom.test.com');
328
+ // Verify base_url was passed to registry
329
+ expect(mockGetApiSpec).toHaveBeenCalled();
330
+ });
331
+ test('agent initialization with registry url', () => {
332
+ const agentWithRegistry = new OCPAgent('test_agent', undefined, undefined, undefined, 'https://custom-registry.com', false);
333
+ expect(agentWithRegistry['registry'].registryUrl).toBe('https://custom-registry.com');
334
+ });
335
+ });
336
+ describe('Agent Authentication', () => {
337
+ // Helper to create fresh API spec for each test
338
+ const createAuthApiSpec = () => ({
339
+ title: 'Auth API',
340
+ version: '1.0.0',
341
+ base_url: 'https://api.auth-test.com',
342
+ description: 'API requiring authentication',
343
+ tools: [
344
+ {
345
+ name: 'get_user',
346
+ description: 'Get user info',
347
+ method: 'GET',
348
+ path: '/user',
349
+ parameters: {},
350
+ response_schema: {},
351
+ },
352
+ ],
353
+ raw_spec: {},
354
+ });
355
+ const mockFetchResponse = () => {
356
+ const mockResponse = {
357
+ status: 200,
358
+ statusText: 'OK',
359
+ ok: true,
360
+ headers: new Headers(),
361
+ text: async () => '{}',
362
+ };
363
+ global.fetch.mockResolvedValue(mockResponse);
364
+ };
365
+ test('register api with headers', async () => {
366
+ const sampleApiSpec = createAuthApiSpec();
367
+ const mockGetApiSpec = jest.fn().mockResolvedValue(sampleApiSpec);
368
+ const mockRegistry = { getApiSpec: mockGetApiSpec };
369
+ agent['registry'] = mockRegistry;
370
+ // Register API with headers
371
+ const headers = { Authorization: 'Bearer token123' };
372
+ const result = await agent.registerApi('auth_api', undefined, undefined, headers);
373
+ // Verify wrapped client was stored
374
+ expect(agent.apiClients.has('auth_api')).toBe(true);
375
+ // Verify API spec was registered
376
+ expect(result).toEqual(sampleApiSpec);
377
+ expect(agent.knownApis.has('auth_api')).toBe(true);
378
+ // Verify name was set on spec
379
+ expect(result.name).toBe('auth_api');
380
+ });
381
+ test('register api without headers', async () => {
382
+ const sampleApiSpec = createAuthApiSpec();
383
+ const mockGetApiSpec = jest.fn().mockResolvedValue(sampleApiSpec);
384
+ const mockRegistry = { getApiSpec: mockGetApiSpec };
385
+ agent['registry'] = mockRegistry;
386
+ // Register API without headers
387
+ const result = await agent.registerApi('public_api');
388
+ // Verify no wrapped client was created
389
+ expect(agent.apiClients.has('public_api')).toBe(false);
390
+ expect(agent.apiClients.size).toBe(0);
391
+ // Verify API was still registered
392
+ expect(result).toEqual(sampleApiSpec);
393
+ expect(agent.knownApis.has('public_api')).toBe(true);
394
+ });
395
+ test('call tool with registered headers', async () => {
396
+ const sampleApiSpec = createAuthApiSpec();
397
+ const specWithName = { ...sampleApiSpec, name: 'auth_api' };
398
+ agent.knownApis.set('auth_api', specWithName);
399
+ // Create mock wrapped client
400
+ const mockWrappedClient = {
401
+ request: jest.fn().mockResolvedValue({
402
+ status: 200,
403
+ statusText: 'OK',
404
+ ok: true,
405
+ text: '{"user":"test"}',
406
+ json: async () => ({ user: 'test' }),
407
+ }),
408
+ };
409
+ agent.apiClients.set('auth_api', mockWrappedClient);
410
+ // Spy on default http client
411
+ const defaultRequestSpy = jest.spyOn(agent['httpClient'], 'request');
412
+ // Call tool
413
+ const response = await agent.callTool('get_user');
414
+ // Verify wrapped client was used (not default http_client)
415
+ expect(mockWrappedClient.request).toHaveBeenCalled();
416
+ expect(defaultRequestSpy).not.toHaveBeenCalled();
417
+ expect(response.status).toBe(200);
418
+ });
419
+ test('call tool without registered headers', async () => {
420
+ const sampleApiSpec = createAuthApiSpec();
421
+ const specWithName = { ...sampleApiSpec, name: 'public_api' };
422
+ agent.knownApis.set('public_api', specWithName);
423
+ // Mock default http client
424
+ const mockResponse = {
425
+ status: 200,
426
+ statusText: 'OK',
427
+ ok: true,
428
+ text: '{"data":"test"}',
429
+ json: async () => ({ data: 'test' }),
430
+ };
431
+ const defaultRequestSpy = jest.spyOn(agent['httpClient'], 'request').mockResolvedValue(mockResponse);
432
+ // Call tool
433
+ const response = await agent.callTool('get_user');
434
+ // Verify default http_client was used
435
+ expect(defaultRequestSpy).toHaveBeenCalled();
436
+ expect(response.status).toBe(200);
437
+ });
438
+ test('call tool with headers parameter', async () => {
439
+ const sampleApiSpec = createAuthApiSpec();
440
+ const specWithName = { ...sampleApiSpec, name: 'api' };
441
+ agent.knownApis.set('api', specWithName);
442
+ // Setup registered client
443
+ const registeredClient = {
444
+ request: jest.fn().mockResolvedValue({
445
+ status: 200,
446
+ statusText: 'OK',
447
+ ok: true,
448
+ text: async () => '{}',
449
+ }),
450
+ };
451
+ agent.apiClients.set('api', registeredClient);
452
+ // Mock fetch for per-call headers
453
+ mockFetchResponse();
454
+ // Call tool with per-call headers
455
+ const callHeaders = { Authorization: 'Bearer different_token' };
456
+ const response = await agent.callTool('get_user', {}, undefined, callHeaders);
457
+ // Verify registered client was NOT used (per-call headers take priority)
458
+ expect(registeredClient.request).not.toHaveBeenCalled();
459
+ expect(response.status).toBe(200);
460
+ });
461
+ test('call tool client priority', async () => {
462
+ const sampleApiSpec = createAuthApiSpec();
463
+ const specWithName = { ...sampleApiSpec, name: 'api' };
464
+ agent.knownApis.set('api', specWithName);
465
+ // Setup registered client
466
+ const registeredClient = {
467
+ request: jest.fn().mockResolvedValue({
468
+ status: 200,
469
+ statusText: 'OK',
470
+ ok: true,
471
+ text: async () => '{}',
472
+ }),
473
+ };
474
+ agent.apiClients.set('api', registeredClient);
475
+ const defaultRequestSpy = jest.spyOn(agent['httpClient'], 'request').mockResolvedValue({
476
+ status: 200,
477
+ statusText: 'OK',
478
+ ok: true,
479
+ text: async () => '{}',
480
+ });
481
+ // Mock fetch for per-call headers
482
+ mockFetchResponse();
483
+ // Test 1: With call_tool headers (highest priority)
484
+ await agent.callTool('get_user', {}, undefined, { Authorization: 'Bearer call' });
485
+ expect(registeredClient.request).not.toHaveBeenCalled();
486
+ expect(defaultRequestSpy).not.toHaveBeenCalled();
487
+ // Test 2: Without call_tool headers, with registered headers (medium priority)
488
+ await agent.callTool('get_user');
489
+ expect(registeredClient.request).toHaveBeenCalled();
490
+ expect(defaultRequestSpy).not.toHaveBeenCalled();
491
+ registeredClient.request.mockClear();
492
+ defaultRequestSpy.mockClear();
493
+ // Test 3: Without any headers (default client, lowest priority)
494
+ agent.apiClients.delete('api');
495
+ await agent.callTool('get_user');
496
+ expect(registeredClient.request).not.toHaveBeenCalled();
497
+ expect(defaultRequestSpy).toHaveBeenCalled();
498
+ });
499
+ test('api spec name field set', async () => {
500
+ const sampleApiSpec = createAuthApiSpec();
501
+ const mockGetApiSpec = jest.fn().mockResolvedValue(sampleApiSpec);
502
+ const mockRegistry = { getApiSpec: mockGetApiSpec };
503
+ agent['registry'] = mockRegistry;
504
+ // Initially spec has no name
505
+ expect(sampleApiSpec.name).toBeUndefined();
506
+ // Register API
507
+ const result = await agent.registerApi('my_api');
508
+ // Verify name was set
509
+ expect(result.name).toBe('my_api');
510
+ expect(agent.knownApis.get('my_api')?.name).toBe('my_api');
511
+ });
512
+ test('register api with different auth types', async () => {
513
+ const mockGetApiSpec = jest.fn()
514
+ .mockImplementation(() => Promise.resolve(createAuthApiSpec()));
515
+ const mockRegistry = { getApiSpec: mockGetApiSpec };
516
+ agent['registry'] = mockRegistry;
517
+ // Test Bearer token
518
+ await agent.registerApi('api1', undefined, undefined, { Authorization: 'Bearer jwt_token' });
519
+ expect(agent.apiClients.has('api1')).toBe(true);
520
+ // Test API key
521
+ await agent.registerApi('api2', undefined, undefined, { 'X-API-Key': 'secret_key' });
522
+ expect(agent.apiClients.has('api2')).toBe(true);
523
+ // Test Basic auth
524
+ await agent.registerApi('api3', undefined, undefined, { Authorization: 'Basic dXNlcjpwYXNz' });
525
+ expect(agent.apiClients.has('api3')).toBe(true);
526
+ // Test multiple headers
527
+ const multiHeaders = {
528
+ Authorization: 'Bearer token',
529
+ 'X-Custom-Header': 'value',
530
+ };
531
+ await agent.registerApi('api4', undefined, undefined, multiHeaders);
532
+ expect(agent.apiClients.has('api4')).toBe(true);
533
+ });
534
+ });
535
+ });
536
+ //# sourceMappingURL=agent.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.test.js","sourceRoot":"","sources":["../../tests/agent.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for AgentContext class functionality.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=context.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.test.d.ts","sourceRoot":"","sources":["../../tests/context.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}