@amodalai/runtime 0.1.25 → 0.1.26

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 (71) hide show
  1. package/dist/src/__tests__/providers.test.d.ts +6 -0
  2. package/dist/src/__tests__/providers.test.js +209 -0
  3. package/dist/src/__tests__/providers.test.js.map +1 -0
  4. package/dist/src/__tests__/sse-contract.test.d.ts +6 -0
  5. package/dist/src/__tests__/sse-contract.test.js +464 -0
  6. package/dist/src/__tests__/sse-contract.test.js.map +1 -0
  7. package/dist/src/__tests__/tools.test.d.ts +6 -0
  8. package/dist/src/__tests__/tools.test.js +583 -0
  9. package/dist/src/__tests__/tools.test.js.map +1 -0
  10. package/dist/src/agent/agent-types.d.ts +2 -2
  11. package/dist/src/agent/config-watcher.test.js +18 -14
  12. package/dist/src/agent/config-watcher.test.js.map +1 -1
  13. package/dist/src/agent/local-server.test.js +17 -13
  14. package/dist/src/agent/local-server.test.js.map +1 -1
  15. package/dist/src/agent/proactive/proactive-runner.js +6 -1
  16. package/dist/src/agent/proactive/proactive-runner.js.map +1 -1
  17. package/dist/src/agent/routes/admin-chat.js +1 -0
  18. package/dist/src/agent/routes/admin-chat.js.map +1 -1
  19. package/dist/src/agent/routes/automations.js +2 -0
  20. package/dist/src/agent/routes/automations.js.map +1 -1
  21. package/dist/src/agent/routes/evals.js +1 -0
  22. package/dist/src/agent/routes/evals.js.map +1 -1
  23. package/dist/src/agent/routes/files.js +3 -0
  24. package/dist/src/agent/routes/files.js.map +1 -1
  25. package/dist/src/agent/routes/inspect.js +4 -1
  26. package/dist/src/agent/routes/inspect.js.map +1 -1
  27. package/dist/src/agent/routes/stores.js +4 -0
  28. package/dist/src/agent/routes/stores.js.map +1 -1
  29. package/dist/src/agent/routes/task.js +1 -0
  30. package/dist/src/agent/routes/task.js.map +1 -1
  31. package/dist/src/agent/routes/webhooks.js +1 -0
  32. package/dist/src/agent/routes/webhooks.js.map +1 -1
  33. package/dist/src/config.d.ts +96 -0
  34. package/dist/src/config.js +221 -0
  35. package/dist/src/config.js.map +1 -0
  36. package/dist/src/config.test.d.ts +6 -0
  37. package/dist/src/config.test.js +235 -0
  38. package/dist/src/config.test.js.map +1 -0
  39. package/dist/src/errors.d.ts +145 -0
  40. package/dist/src/errors.js +218 -0
  41. package/dist/src/errors.js.map +1 -0
  42. package/dist/src/errors.test.d.ts +6 -0
  43. package/dist/src/errors.test.js +203 -0
  44. package/dist/src/errors.test.js.map +1 -0
  45. package/dist/src/index.d.ts +6 -1
  46. package/dist/src/index.js +5 -1
  47. package/dist/src/index.js.map +1 -1
  48. package/dist/src/logger.d.ts +15 -31
  49. package/dist/src/logger.js +19 -78
  50. package/dist/src/logger.js.map +1 -1
  51. package/dist/src/logger.test.d.ts +6 -0
  52. package/dist/src/logger.test.js +198 -0
  53. package/dist/src/logger.test.js.map +1 -0
  54. package/dist/src/routes/ai-stream.js +4 -1
  55. package/dist/src/routes/ai-stream.js.map +1 -1
  56. package/dist/src/routes/chat-stream.js +3 -1
  57. package/dist/src/routes/chat-stream.js.map +1 -1
  58. package/dist/src/routes/chat.js +1 -0
  59. package/dist/src/routes/chat.js.map +1 -1
  60. package/dist/src/routes/webhooks.js +3 -1
  61. package/dist/src/routes/webhooks.js.map +1 -1
  62. package/dist/src/server.test.js +66 -62
  63. package/dist/src/server.test.js.map +1 -1
  64. package/dist/src/session/session-manager.test.js +28 -24
  65. package/dist/src/session/session-manager.test.js.map +1 -1
  66. package/dist/src/session/session-runner.test.js +22 -18
  67. package/dist/src/session/session-runner.test.js.map +1 -1
  68. package/dist/src/stores/pglite-store-backend.js +6 -0
  69. package/dist/src/stores/pglite-store-backend.js.map +1 -1
  70. package/dist/tsconfig.tsbuildinfo +1 -1
  71. package/package.json +3 -2
@@ -0,0 +1,583 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ /**
7
+ * Phase 0.6 — Tool Execution Integration Tests
8
+ *
9
+ * Parity tests that verify tool execution end-to-end through the current
10
+ * gemini-cli-core system. If a future SDK swap breaks tool behaviour,
11
+ * these tests catch it immediately.
12
+ *
13
+ * Scenarios:
14
+ * 1. Store write → read back → verify data
15
+ * 2. Store batch write → query → verify all items
16
+ * 3. Store query with filter → verify filtered result
17
+ * 4. Custom tool (handler) → verify execution and structured return
18
+ * 5. Connection request tool → verify API call with auth headers
19
+ */
20
+ import { describe, it, expect, vi, beforeAll, afterAll, beforeEach } from 'vitest';
21
+ import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from 'node:fs';
22
+ import { join } from 'node:path';
23
+ import { tmpdir } from 'node:os';
24
+ import { createServer } from 'node:http';
25
+ import { loadRepo } from '@amodalai/core';
26
+ import { SSEEventType } from '../types.js';
27
+ // ── Mock the LLM provider ──────────────────────────────────────────────────
28
+ const { mockChat, mockFailoverCtor } = vi.hoisted(() => {
29
+ const chat = vi.fn();
30
+ const ctor = vi.fn().mockImplementation(() => ({ chat }));
31
+ return { mockChat: chat, mockFailoverCtor: ctor };
32
+ });
33
+ vi.mock('@amodalai/core', async (importOriginal) => {
34
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion -- needed when core is not pre-built
35
+ const actual = (await importOriginal());
36
+ return {
37
+ ...actual,
38
+ FailoverProvider: mockFailoverCtor,
39
+ };
40
+ });
41
+ // ── Fixture: amodal.json ────────────────────────────────────────────────────
42
+ const AMODAL_CONFIG = JSON.stringify({
43
+ name: 'tool-integration-test',
44
+ version: '1.0.0',
45
+ models: {
46
+ main: { provider: 'anthropic', model: 'claude-sonnet-4-20250514' },
47
+ },
48
+ });
49
+ // ── Fixture: store definition ───────────────────────────────────────────────
50
+ const INCIDENTS_STORE = JSON.stringify({
51
+ name: 'incidents',
52
+ entity: {
53
+ name: 'Incident',
54
+ key: '{incident_id}',
55
+ schema: {
56
+ incident_id: { type: 'string' },
57
+ severity: { type: 'enum', values: ['P1', 'P2', 'P3', 'P4'] },
58
+ service: { type: 'string' },
59
+ status: { type: 'enum', values: ['open', 'investigating', 'resolved'] },
60
+ summary: { type: 'string' },
61
+ },
62
+ },
63
+ history: { versions: 3 },
64
+ });
65
+ // ── Helpers ─────────────────────────────────────────────────────────────────
66
+ function createFixtureRepo(opts) {
67
+ const dir = mkdtempSync(join(tmpdir(), 'tools-int-'));
68
+ writeFileSync(join(dir, 'amodal.json'), AMODAL_CONFIG);
69
+ // Stores
70
+ mkdirSync(join(dir, 'stores'), { recursive: true });
71
+ writeFileSync(join(dir, 'stores', 'incidents.json'), INCIDENTS_STORE);
72
+ // .amodal dir for PGLite data
73
+ mkdirSync(join(dir, '.amodal'), { recursive: true });
74
+ // Connections
75
+ if (opts?.connections) {
76
+ const configWithConns = {
77
+ ...JSON.parse(AMODAL_CONFIG),
78
+ connections: opts.connections,
79
+ };
80
+ writeFileSync(join(dir, 'amodal.json'), JSON.stringify(configWithConns));
81
+ }
82
+ // Custom tools
83
+ if (opts?.customTools) {
84
+ for (const [name, files] of Object.entries(opts.customTools)) {
85
+ const toolDir = join(dir, 'tools', name);
86
+ mkdirSync(toolDir, { recursive: true });
87
+ for (const [filename, content] of Object.entries(files)) {
88
+ writeFileSync(join(toolDir, filename), content);
89
+ }
90
+ }
91
+ }
92
+ return dir;
93
+ }
94
+ async function collectEvents(gen) {
95
+ const events = [];
96
+ for await (const event of gen) {
97
+ events.push(event);
98
+ }
99
+ return events;
100
+ }
101
+ async function buildSession(repoDir, extraOpts) {
102
+ const repo = await loadRepo({ localPath: repoDir });
103
+ const { setupSession, PlanModeManager, prepareExploreConfig } = await import('@amodalai/core');
104
+ const { createPGLiteStoreBackend } = await import('../stores/pglite-store-backend.js');
105
+ const storeBackend = await createPGLiteStoreBackend(repo.stores);
106
+ const runtime = setupSession({
107
+ repo,
108
+ userId: 'integration-test-user',
109
+ userRoles: [],
110
+ isDelegated: false,
111
+ });
112
+ const session = {
113
+ id: 'tools-int-session',
114
+ runtime: {
115
+ ...runtime,
116
+ connectionsMap: extraOpts?.connectionsMap ?? {},
117
+ },
118
+ appId: 'int-test-tenant',
119
+ conversationHistory: [],
120
+ createdAt: Date.now(),
121
+ lastAccessedAt: Date.now(),
122
+ planModeManager: new PlanModeManager(),
123
+ exploreConfig: prepareExploreConfig(runtime),
124
+ storeBackend: storeBackend,
125
+ };
126
+ return { session, repo, storeBackend };
127
+ }
128
+ // ── Tests ───────────────────────────────────────────────────────────────────
129
+ describe('Tool Execution Integration Tests', () => {
130
+ let repoDir;
131
+ beforeAll(() => {
132
+ repoDir = createFixtureRepo();
133
+ });
134
+ afterAll(() => {
135
+ rmSync(repoDir, { recursive: true, force: true });
136
+ });
137
+ beforeEach(() => {
138
+ mockChat.mockReset();
139
+ mockFailoverCtor.mockReset();
140
+ mockFailoverCtor.mockImplementation(() => ({ chat: mockChat }));
141
+ });
142
+ // ────────────────────────────────────────────────────────────────────────
143
+ // 1. Store write → read back → verify data
144
+ // ────────────────────────────────────────────────────────────────────────
145
+ describe('1. Store write → read back → verify data', () => {
146
+ it('writes a document via store tool, reads it back via query_store, and verifies all fields', async () => {
147
+ const { session, storeBackend } = await buildSession(repoDir);
148
+ const { runAgentTurn } = await import('../agent/agent-runner.js');
149
+ const incidentPayload = {
150
+ incident_id: 'inc_001',
151
+ severity: 'P1',
152
+ service: 'payment-api',
153
+ status: 'open',
154
+ summary: 'Latency spike after deploy v2.3.1',
155
+ };
156
+ // Turn 1: LLM calls store_incidents to write
157
+ mockChat
158
+ .mockResolvedValueOnce({
159
+ content: [{
160
+ type: 'tool_use',
161
+ id: 'tc_write_001',
162
+ name: 'store_incidents',
163
+ input: incidentPayload,
164
+ }],
165
+ stopReason: 'tool_use',
166
+ usage: { inputTokens: 100, outputTokens: 50 },
167
+ })
168
+ // Turn 2: LLM calls query_store to read back
169
+ .mockResolvedValueOnce({
170
+ content: [{
171
+ type: 'tool_use',
172
+ id: 'tc_read_001',
173
+ name: 'query_store',
174
+ input: { store: 'incidents', key: 'inc_001' },
175
+ }],
176
+ stopReason: 'tool_use',
177
+ usage: { inputTokens: 150, outputTokens: 40 },
178
+ })
179
+ // Turn 3: Text response
180
+ .mockResolvedValueOnce({
181
+ content: [{ type: 'text', text: 'Incident inc_001 stored and verified.' }],
182
+ stopReason: 'end_turn',
183
+ usage: { inputTokens: 200, outputTokens: 20 },
184
+ });
185
+ const events = await collectEvents(runAgentTurn(session, 'Store this incident and read it back', AbortSignal.timeout(30000)));
186
+ // Verify tool call events
187
+ const toolResults = events.filter((e) => e.type === SSEEventType.ToolCallResult);
188
+ expect(toolResults).toHaveLength(2);
189
+ // Write result
190
+ if (toolResults[0].type === SSEEventType.ToolCallResult) {
191
+ expect(toolResults[0].status).toBe('success');
192
+ const writeResult = JSON.parse(toolResults[0].result ?? '{}');
193
+ expect(writeResult['stored']).toBe(true);
194
+ expect(writeResult['key']).toBe('inc_001');
195
+ expect(writeResult['version']).toBe(1);
196
+ }
197
+ // Read result — verify all fields preserved
198
+ if (toolResults[1].type === SSEEventType.ToolCallResult) {
199
+ expect(toolResults[1].status).toBe('success');
200
+ const readResult = JSON.parse(toolResults[1].result ?? '{}');
201
+ expect(readResult['found']).toBe(true);
202
+ const payload = readResult['payload'];
203
+ expect(payload['incident_id']).toBe('inc_001');
204
+ expect(payload['severity']).toBe('P1');
205
+ expect(payload['service']).toBe('payment-api');
206
+ expect(payload['status']).toBe('open');
207
+ expect(payload['summary']).toBe('Latency spike after deploy v2.3.1');
208
+ }
209
+ // Verify direct PGLite persistence
210
+ const doc = await storeBackend.get('int-test-tenant', 'incidents', 'inc_001');
211
+ expect(doc).not.toBeNull();
212
+ expect(doc.payload['severity']).toBe('P1');
213
+ expect(doc.payload['service']).toBe('payment-api');
214
+ expect(doc.version).toBe(1);
215
+ await storeBackend.close();
216
+ }, 30000);
217
+ });
218
+ // ────────────────────────────────────────────────────────────────────────
219
+ // 2. Store batch write → query → verify all items
220
+ // ────────────────────────────────────────────────────────────────────────
221
+ describe('2. Store batch write → query → verify all items', () => {
222
+ it('writes multiple documents then lists them all via query_store', async () => {
223
+ const { session, storeBackend } = await buildSession(repoDir);
224
+ const { runAgentTurn } = await import('../agent/agent-runner.js');
225
+ const incidents = [
226
+ { incident_id: 'inc_batch_1', severity: 'P1', service: 'auth', status: 'open', summary: 'Auth down' },
227
+ { incident_id: 'inc_batch_2', severity: 'P3', service: 'cdn', status: 'investigating', summary: 'Cache miss' },
228
+ { incident_id: 'inc_batch_3', severity: 'P2', service: 'payments', status: 'open', summary: 'Slow txns' },
229
+ ];
230
+ // Turn 1-3: LLM writes each incident
231
+ // Turn 4: LLM queries all incidents
232
+ // Turn 5: Text response
233
+ for (const incident of incidents) {
234
+ mockChat.mockResolvedValueOnce({
235
+ content: [{
236
+ type: 'tool_use',
237
+ id: `tc_batch_${incident.incident_id}`,
238
+ name: 'store_incidents',
239
+ input: incident,
240
+ }],
241
+ stopReason: 'tool_use',
242
+ usage: { inputTokens: 100, outputTokens: 50 },
243
+ });
244
+ }
245
+ mockChat
246
+ .mockResolvedValueOnce({
247
+ content: [{
248
+ type: 'tool_use',
249
+ id: 'tc_list_all',
250
+ name: 'query_store',
251
+ input: { store: 'incidents' },
252
+ }],
253
+ stopReason: 'tool_use',
254
+ usage: { inputTokens: 200, outputTokens: 40 },
255
+ })
256
+ .mockResolvedValueOnce({
257
+ content: [{ type: 'text', text: 'All incidents stored and listed.' }],
258
+ stopReason: 'end_turn',
259
+ usage: { inputTokens: 300, outputTokens: 20 },
260
+ });
261
+ const events = await collectEvents(runAgentTurn(session, 'Store these three incidents then list them all', AbortSignal.timeout(30000)));
262
+ // Should have 4 tool results (3 writes + 1 list)
263
+ const toolResults = events.filter((e) => e.type === SSEEventType.ToolCallResult);
264
+ expect(toolResults).toHaveLength(4);
265
+ // All writes should succeed
266
+ for (let i = 0; i < 3; i++) {
267
+ if (toolResults[i].type === SSEEventType.ToolCallResult) {
268
+ expect(toolResults[i].status).toBe('success');
269
+ const r = JSON.parse(toolResults[i].result ?? '{}');
270
+ expect(r['stored']).toBe(true);
271
+ }
272
+ }
273
+ // List result should contain all 3 documents
274
+ if (toolResults[3].type === SSEEventType.ToolCallResult) {
275
+ expect(toolResults[3].status).toBe('success');
276
+ const listResult = JSON.parse(toolResults[3].result ?? '{}');
277
+ const docs = listResult['documents'];
278
+ expect(docs).toHaveLength(3);
279
+ const ids = docs.map((d) => d['payload']['incident_id']).sort();
280
+ expect(ids).toEqual(['inc_batch_1', 'inc_batch_2', 'inc_batch_3']);
281
+ }
282
+ // Verify direct backend has all 3
283
+ const backendList = await storeBackend.list('int-test-tenant', 'incidents', {});
284
+ expect(backendList.documents).toHaveLength(3);
285
+ await storeBackend.close();
286
+ }, 30000);
287
+ });
288
+ // ────────────────────────────────────────────────────────────────────────
289
+ // 3. Store query with filter → verify filtered result
290
+ // ────────────────────────────────────────────────────────────────────────
291
+ describe('3. Store query with filter → verify filtered result', () => {
292
+ it('writes documents with different severities, queries with filter, only matching items returned', async () => {
293
+ const { session, storeBackend } = await buildSession(repoDir);
294
+ const { runAgentTurn } = await import('../agent/agent-runner.js');
295
+ const incidents = [
296
+ { incident_id: 'inc_f1', severity: 'P1', service: 'api', status: 'open', summary: 'Critical' },
297
+ { incident_id: 'inc_f2', severity: 'P3', service: 'web', status: 'resolved', summary: 'Minor' },
298
+ { incident_id: 'inc_f3', severity: 'P1', service: 'db', status: 'investigating', summary: 'DB down' },
299
+ { incident_id: 'inc_f4', severity: 'P4', service: 'docs', status: 'open', summary: 'Typo' },
300
+ ];
301
+ // Write all 4 incidents
302
+ for (const incident of incidents) {
303
+ mockChat.mockResolvedValueOnce({
304
+ content: [{
305
+ type: 'tool_use',
306
+ id: `tc_f_${incident.incident_id}`,
307
+ name: 'store_incidents',
308
+ input: incident,
309
+ }],
310
+ stopReason: 'tool_use',
311
+ usage: { inputTokens: 100, outputTokens: 50 },
312
+ });
313
+ }
314
+ // Query with severity filter
315
+ mockChat
316
+ .mockResolvedValueOnce({
317
+ content: [{
318
+ type: 'tool_use',
319
+ id: 'tc_filter_query',
320
+ name: 'query_store',
321
+ input: { store: 'incidents', filter: { severity: 'P1' } },
322
+ }],
323
+ stopReason: 'tool_use',
324
+ usage: { inputTokens: 200, outputTokens: 40 },
325
+ })
326
+ .mockResolvedValueOnce({
327
+ content: [{ type: 'text', text: 'Found 2 P1 incidents.' }],
328
+ stopReason: 'end_turn',
329
+ usage: { inputTokens: 250, outputTokens: 15 },
330
+ });
331
+ const events = await collectEvents(runAgentTurn(session, 'Store these incidents and show me only P1s', AbortSignal.timeout(30000)));
332
+ // 4 writes + 1 filtered query
333
+ const toolResults = events.filter((e) => e.type === SSEEventType.ToolCallResult);
334
+ expect(toolResults).toHaveLength(5);
335
+ // Filter result should only contain P1 incidents
336
+ if (toolResults[4].type === SSEEventType.ToolCallResult) {
337
+ expect(toolResults[4].status).toBe('success');
338
+ const filterResult = JSON.parse(toolResults[4].result ?? '{}');
339
+ const docs = filterResult['documents'];
340
+ expect(docs).toHaveLength(2);
341
+ const ids = docs.map((d) => d['payload']['incident_id']).sort();
342
+ expect(ids).toEqual(['inc_f1', 'inc_f3']);
343
+ // All returned docs should be P1
344
+ for (const doc of docs) {
345
+ expect(doc['payload']['severity']).toBe('P1');
346
+ }
347
+ }
348
+ await storeBackend.close();
349
+ }, 30000);
350
+ });
351
+ // ────────────────────────────────────────────────────────────────────────
352
+ // 4. Custom tool → verify execution and structured return
353
+ // ────────────────────────────────────────────────────────────────────────
354
+ describe('4. Custom tool execution → structured return', () => {
355
+ it('executes a custom tool handler and returns structured data through the agent loop', async () => {
356
+ const customRepoDir = createFixtureRepo({
357
+ customTools: {
358
+ risk_scorer: {
359
+ 'tool.json': JSON.stringify({
360
+ description: 'Score risk for a deal',
361
+ parameters: {
362
+ type: 'object',
363
+ properties: {
364
+ deal_id: { type: 'string' },
365
+ revenue: { type: 'number' },
366
+ days_stale: { type: 'number' },
367
+ },
368
+ required: ['deal_id', 'revenue', 'days_stale'],
369
+ },
370
+ }),
371
+ 'handler.mjs': `
372
+ export default async (params) => {
373
+ const score = params.days_stale > 30 ? 'at_risk' : params.revenue > 100000 ? 'healthy' : 'attention';
374
+ return {
375
+ deal_id: params.deal_id,
376
+ risk_score: score,
377
+ factors: {
378
+ days_stale: params.days_stale,
379
+ revenue: params.revenue,
380
+ },
381
+ };
382
+ };
383
+ `,
384
+ // loader needs handler.ts to detect the tool
385
+ 'handler.ts': 'placeholder',
386
+ },
387
+ },
388
+ });
389
+ try {
390
+ const repo = await loadRepo({ localPath: customRepoDir });
391
+ // Swap handler path to .mjs for dynamic import
392
+ const mjsPath = join(customRepoDir, 'tools', 'risk_scorer', 'handler.mjs');
393
+ for (const tool of repo.tools) {
394
+ if (tool.name === 'risk_scorer') {
395
+ tool.handlerPath = mjsPath;
396
+ }
397
+ }
398
+ const { setupSession, PlanModeManager, prepareExploreConfig } = await import('@amodalai/core');
399
+ const { runAgentTurn } = await import('../agent/agent-runner.js');
400
+ const runtime = setupSession({
401
+ repo,
402
+ userId: 'test',
403
+ userRoles: [],
404
+ isDelegated: false,
405
+ });
406
+ const session = {
407
+ id: 'custom-tool-int-session',
408
+ runtime,
409
+ appId: 'int-test',
410
+ conversationHistory: [],
411
+ createdAt: Date.now(),
412
+ lastAccessedAt: Date.now(),
413
+ planModeManager: new PlanModeManager(),
414
+ exploreConfig: prepareExploreConfig(runtime),
415
+ };
416
+ // LLM calls risk_scorer tool
417
+ mockChat
418
+ .mockResolvedValueOnce({
419
+ content: [{
420
+ type: 'tool_use',
421
+ id: 'tc_risk_001',
422
+ name: 'risk_scorer',
423
+ input: { deal_id: 'deal_42', revenue: 250000, days_stale: 5 },
424
+ }],
425
+ stopReason: 'tool_use',
426
+ usage: { inputTokens: 100, outputTokens: 60 },
427
+ })
428
+ .mockResolvedValueOnce({
429
+ content: [{ type: 'text', text: 'Deal deal_42 scored as healthy.' }],
430
+ stopReason: 'end_turn',
431
+ usage: { inputTokens: 200, outputTokens: 20 },
432
+ });
433
+ const events = await collectEvents(runAgentTurn(session, 'Score deal_42', AbortSignal.timeout(30000)));
434
+ // Verify tool call start
435
+ const toolStarts = events.filter((e) => e.type === SSEEventType.ToolCallStart);
436
+ expect(toolStarts).toHaveLength(1);
437
+ if (toolStarts[0].type === SSEEventType.ToolCallStart) {
438
+ expect(toolStarts[0].tool_name).toBe('risk_scorer');
439
+ }
440
+ // Verify tool result
441
+ const toolResults = events.filter((e) => e.type === SSEEventType.ToolCallResult);
442
+ expect(toolResults).toHaveLength(1);
443
+ if (toolResults[0].type === SSEEventType.ToolCallResult) {
444
+ expect(toolResults[0].status).toBe('success');
445
+ // executeCustomTool returns {output: JSON.stringify(handlerResult)}
446
+ // The SSE event's result field is that output string directly.
447
+ const payload = JSON.parse(toolResults[0].result ?? '{}');
448
+ expect(payload).toEqual({
449
+ deal_id: 'deal_42',
450
+ risk_score: 'healthy',
451
+ factors: { days_stale: 5, revenue: 250000 },
452
+ });
453
+ }
454
+ // Verify text response and done event
455
+ const textEvents = events.filter((e) => e.type === SSEEventType.TextDelta);
456
+ expect(textEvents.length).toBeGreaterThan(0);
457
+ expect(events[events.length - 1].type).toBe(SSEEventType.Done);
458
+ }
459
+ finally {
460
+ rmSync(customRepoDir, { recursive: true, force: true });
461
+ }
462
+ }, 30000);
463
+ });
464
+ // ────────────────────────────────────────────────────────────────────────
465
+ // 5. Connection request tool → verify API call with auth headers
466
+ // ────────────────────────────────────────────────────────────────────────
467
+ describe('5. Connection request tool → auth headers', () => {
468
+ let mockServer;
469
+ let mockPort;
470
+ let capturedHeaders;
471
+ let capturedPath;
472
+ let capturedMethod;
473
+ beforeAll(async () => {
474
+ // Start a local HTTP server that captures request details
475
+ await new Promise((resolve) => {
476
+ mockServer = createServer((req, res) => {
477
+ capturedHeaders = req.headers;
478
+ capturedPath = req.url ?? '';
479
+ capturedMethod = req.method ?? '';
480
+ res.writeHead(200, { 'Content-Type': 'application/json' });
481
+ res.end(JSON.stringify({ deals: [{ id: 'deal_1', name: 'Acme Corp' }] }));
482
+ });
483
+ mockServer.listen(0, '127.0.0.1', () => {
484
+ const addr = mockServer.address();
485
+ if (addr && typeof addr === 'object') {
486
+ mockPort = addr.port;
487
+ }
488
+ resolve();
489
+ });
490
+ });
491
+ });
492
+ afterAll(() => {
493
+ mockServer.close();
494
+ });
495
+ it('makes an HTTP request through a connection with correct auth headers', async () => {
496
+ const connRepoDir = createFixtureRepo();
497
+ try {
498
+ const repo = await loadRepo({ localPath: connRepoDir });
499
+ const { setupSession, PlanModeManager, prepareExploreConfig } = await import('@amodalai/core');
500
+ const { runAgentTurn } = await import('../agent/agent-runner.js');
501
+ const runtime = setupSession({
502
+ repo,
503
+ userId: 'test',
504
+ userRoles: [],
505
+ isDelegated: false,
506
+ });
507
+ // Set up connection with auth headers pointing to our mock server
508
+ const connectionsMap = {
509
+ crm: {
510
+ base_url: `http://127.0.0.1:${mockPort}`,
511
+ _request_config: {
512
+ auth: [
513
+ { header: 'Authorization', value_template: 'Bearer test-api-token-123' },
514
+ { header: 'X-Custom-Header', value_template: 'custom-value' },
515
+ ],
516
+ },
517
+ },
518
+ };
519
+ const session = {
520
+ id: 'conn-int-session',
521
+ runtime: { ...runtime, connectionsMap },
522
+ appId: 'int-test',
523
+ conversationHistory: [],
524
+ createdAt: Date.now(),
525
+ lastAccessedAt: Date.now(),
526
+ planModeManager: new PlanModeManager(),
527
+ exploreConfig: prepareExploreConfig(runtime),
528
+ };
529
+ // LLM calls request tool
530
+ mockChat
531
+ .mockResolvedValueOnce({
532
+ content: [{
533
+ type: 'tool_use',
534
+ id: 'tc_req_001',
535
+ name: 'request',
536
+ input: {
537
+ connection: 'crm',
538
+ method: 'GET',
539
+ endpoint: '/api/deals',
540
+ intent: 'read',
541
+ params: { status: 'active' },
542
+ },
543
+ }],
544
+ stopReason: 'tool_use',
545
+ usage: { inputTokens: 100, outputTokens: 60 },
546
+ })
547
+ .mockResolvedValueOnce({
548
+ content: [{ type: 'text', text: 'Found 1 deal.' }],
549
+ stopReason: 'end_turn',
550
+ usage: { inputTokens: 200, outputTokens: 15 },
551
+ });
552
+ const events = await collectEvents(runAgentTurn(session, 'List active deals from CRM', AbortSignal.timeout(30000)));
553
+ // Verify tool execution
554
+ const toolStarts = events.filter((e) => e.type === SSEEventType.ToolCallStart);
555
+ expect(toolStarts).toHaveLength(1);
556
+ if (toolStarts[0].type === SSEEventType.ToolCallStart) {
557
+ expect(toolStarts[0].tool_name).toBe('request');
558
+ }
559
+ const toolResults = events.filter((e) => e.type === SSEEventType.ToolCallResult);
560
+ expect(toolResults).toHaveLength(1);
561
+ if (toolResults[0].type === SSEEventType.ToolCallResult) {
562
+ expect(toolResults[0].status).toBe('success');
563
+ const result = JSON.parse(toolResults[0].result ?? '{}');
564
+ const deals = result['deals'];
565
+ expect(deals).toHaveLength(1);
566
+ expect(deals[0]['id']).toBe('deal_1');
567
+ }
568
+ // Verify the mock server received correct auth headers
569
+ expect(capturedMethod).toBe('GET');
570
+ expect(capturedPath).toBe('/api/deals?status=active');
571
+ expect(capturedHeaders['authorization']).toBe('Bearer test-api-token-123');
572
+ expect(capturedHeaders['x-custom-header']).toBe('custom-value');
573
+ expect(capturedHeaders['content-type']).toBe('application/json');
574
+ // Verify text + done
575
+ expect(events[events.length - 1].type).toBe(SSEEventType.Done);
576
+ }
577
+ finally {
578
+ rmSync(connRepoDir, { recursive: true, force: true });
579
+ }
580
+ }, 30000);
581
+ });
582
+ });
583
+ //# sourceMappingURL=tools.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.test.js","sourceRoot":"","sources":["../../../src/__tests__/tools.test.ts"],"names":[],"mappings":"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"}
@@ -13,12 +13,12 @@ export declare const AgentChatRequestSchema: z.ZodObject<{
13
13
  context: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
14
14
  }, "strip", z.ZodTypeAny, {
15
15
  message: string;
16
- session_id?: string | undefined;
17
16
  context?: Record<string, unknown> | undefined;
17
+ session_id?: string | undefined;
18
18
  }, {
19
19
  message: string;
20
- session_id?: string | undefined;
21
20
  context?: Record<string, unknown> | undefined;
21
+ session_id?: string | undefined;
22
22
  }>;
23
23
  export type AgentChatRequest = z.infer<typeof AgentChatRequestSchema>;
24
24
  export interface LocalServerConfig {