@google/gemini-cli-a2a-server 0.10.0-nightly.20251014.49b66733

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 (62) hide show
  1. package/README.md +5 -0
  2. package/dist/.last_build +0 -0
  3. package/dist/a2a-server.mjs +354316 -0
  4. package/dist/index.d.ts +6 -0
  5. package/dist/index.js +7 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/src/agent/executor.d.ts +40 -0
  8. package/dist/src/agent/executor.js +406 -0
  9. package/dist/src/agent/executor.js.map +1 -0
  10. package/dist/src/agent/task.d.ts +54 -0
  11. package/dist/src/agent/task.js +652 -0
  12. package/dist/src/agent/task.js.map +1 -0
  13. package/dist/src/agent/task.test.d.ts +6 -0
  14. package/dist/src/agent/task.test.js +44 -0
  15. package/dist/src/agent/task.test.js.map +1 -0
  16. package/dist/src/config/config.d.ts +14 -0
  17. package/dist/src/config/config.js +150 -0
  18. package/dist/src/config/config.js.map +1 -0
  19. package/dist/src/config/extension.d.ts +11 -0
  20. package/dist/src/config/extension.js +104 -0
  21. package/dist/src/config/extension.js.map +1 -0
  22. package/dist/src/config/settings.d.ts +38 -0
  23. package/dist/src/config/settings.js +102 -0
  24. package/dist/src/config/settings.js.map +1 -0
  25. package/dist/src/http/app.d.ts +8 -0
  26. package/dist/src/http/app.js +170 -0
  27. package/dist/src/http/app.js.map +1 -0
  28. package/dist/src/http/app.test.d.ts +6 -0
  29. package/dist/src/http/app.test.js +520 -0
  30. package/dist/src/http/app.test.js.map +1 -0
  31. package/dist/src/http/endpoints.test.d.ts +6 -0
  32. package/dist/src/http/endpoints.test.js +138 -0
  33. package/dist/src/http/endpoints.test.js.map +1 -0
  34. package/dist/src/http/requestStorage.d.ts +10 -0
  35. package/dist/src/http/requestStorage.js +8 -0
  36. package/dist/src/http/requestStorage.js.map +1 -0
  37. package/dist/src/http/server.d.ts +7 -0
  38. package/dist/src/http/server.js +26 -0
  39. package/dist/src/http/server.js.map +1 -0
  40. package/dist/src/index.d.ts +8 -0
  41. package/dist/src/index.js +9 -0
  42. package/dist/src/index.js.map +1 -0
  43. package/dist/src/persistence/gcs.d.ts +24 -0
  44. package/dist/src/persistence/gcs.js +238 -0
  45. package/dist/src/persistence/gcs.js.map +1 -0
  46. package/dist/src/persistence/gcs.test.d.ts +6 -0
  47. package/dist/src/persistence/gcs.test.js +265 -0
  48. package/dist/src/persistence/gcs.test.js.map +1 -0
  49. package/dist/src/types.d.ts +91 -0
  50. package/dist/src/types.js +44 -0
  51. package/dist/src/types.js.map +1 -0
  52. package/dist/src/utils/executor_utils.d.ts +7 -0
  53. package/dist/src/utils/executor_utils.js +41 -0
  54. package/dist/src/utils/executor_utils.js.map +1 -0
  55. package/dist/src/utils/logger.d.ts +8 -0
  56. package/dist/src/utils/logger.js +23 -0
  57. package/dist/src/utils/logger.js.map +1 -0
  58. package/dist/src/utils/testing_utils.d.ts +33 -0
  59. package/dist/src/utils/testing_utils.js +91 -0
  60. package/dist/src/utils/testing_utils.js.map +1 -0
  61. package/dist/tsconfig.tsbuildinfo +1 -0
  62. package/package.json +50 -0
@@ -0,0 +1,520 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { GeminiEventType, ApprovalMode, } from '@google/gemini-cli-core';
7
+ import request from 'supertest';
8
+ import { afterAll, afterEach, beforeEach, beforeAll, describe, expect, it, vi, } from 'vitest';
9
+ import { createApp } from './app.js';
10
+ import { assertUniqueFinalEventIsLast, assertTaskCreationAndWorkingStatus, createStreamMessageRequest, createMockConfig, } from '../utils/testing_utils.js';
11
+ import { MockTool } from '@google/gemini-cli-core';
12
+ const mockToolConfirmationFn = async () => ({});
13
+ const streamToSSEEvents = (stream) => stream
14
+ .split('\n\n')
15
+ .filter(Boolean) // Remove empty strings from trailing newlines
16
+ .map((chunk) => {
17
+ const dataLine = chunk
18
+ .split('\n')
19
+ .find((line) => line.startsWith('data: '));
20
+ if (!dataLine) {
21
+ throw new Error(`Invalid SSE chunk found: "${chunk}"`);
22
+ }
23
+ return JSON.parse(dataLine.substring(6));
24
+ });
25
+ // Mock the logger to avoid polluting test output
26
+ // Comment out to debug tests
27
+ vi.mock('../utils/logger.js', () => ({
28
+ logger: { info: vi.fn(), warn: vi.fn(), error: vi.fn() },
29
+ }));
30
+ let config;
31
+ const getToolRegistrySpy = vi.fn().mockReturnValue(ApprovalMode.DEFAULT);
32
+ const getApprovalModeSpy = vi.fn();
33
+ const getShellExecutionConfigSpy = vi.fn();
34
+ vi.mock('../config/config.js', async () => {
35
+ const actual = await vi.importActual('../config/config.js');
36
+ return {
37
+ ...actual,
38
+ loadConfig: vi.fn().mockImplementation(async () => {
39
+ const mockConfig = createMockConfig({
40
+ getToolRegistry: getToolRegistrySpy,
41
+ getApprovalMode: getApprovalModeSpy,
42
+ getShellExecutionConfig: getShellExecutionConfigSpy,
43
+ });
44
+ config = mockConfig;
45
+ return config;
46
+ }),
47
+ };
48
+ });
49
+ // Mock the GeminiClient to avoid actual API calls
50
+ const sendMessageStreamSpy = vi.fn();
51
+ vi.mock('@google/gemini-cli-core', async () => {
52
+ const actual = await vi.importActual('@google/gemini-cli-core');
53
+ return {
54
+ ...actual,
55
+ GeminiClient: vi.fn().mockImplementation(() => ({
56
+ sendMessageStream: sendMessageStreamSpy,
57
+ getUserTier: vi.fn().mockReturnValue('free'),
58
+ initialize: vi.fn(),
59
+ })),
60
+ };
61
+ });
62
+ describe('E2E Tests', () => {
63
+ let app;
64
+ let server;
65
+ beforeAll(async () => {
66
+ app = await createApp();
67
+ server = app.listen(0); // Listen on a random available port
68
+ });
69
+ beforeEach(() => {
70
+ getApprovalModeSpy.mockReturnValue(ApprovalMode.DEFAULT);
71
+ });
72
+ afterAll(() => new Promise((resolve) => {
73
+ server.close(() => {
74
+ resolve();
75
+ });
76
+ }));
77
+ afterEach(() => {
78
+ vi.clearAllMocks();
79
+ });
80
+ it('should create a new task and stream status updates (text-content) via POST /', async () => {
81
+ sendMessageStreamSpy.mockImplementation(async function* () {
82
+ yield* [{ type: 'content', value: 'Hello how are you?' }];
83
+ });
84
+ const agent = request.agent(app);
85
+ const res = await agent
86
+ .post('/')
87
+ .send(createStreamMessageRequest('hello', 'a2a-test-message'))
88
+ .set('Content-Type', 'application/json')
89
+ .expect(200);
90
+ const events = streamToSSEEvents(res.text);
91
+ assertTaskCreationAndWorkingStatus(events);
92
+ // Status update: text-content
93
+ const textContentEvent = events[2].result;
94
+ expect(textContentEvent.kind).toBe('status-update');
95
+ expect(textContentEvent.status.state).toBe('working');
96
+ expect(textContentEvent.metadata?.['coderAgent']).toMatchObject({
97
+ kind: 'text-content',
98
+ });
99
+ expect(textContentEvent.status.message?.parts).toMatchObject([
100
+ { kind: 'text', text: 'Hello how are you?' },
101
+ ]);
102
+ // Status update: input-required (final)
103
+ const finalEvent = events[3].result;
104
+ expect(finalEvent.kind).toBe('status-update');
105
+ expect(finalEvent.status?.state).toBe('input-required');
106
+ expect(finalEvent.final).toBe(true);
107
+ assertUniqueFinalEventIsLast(events);
108
+ expect(events.length).toBe(4);
109
+ });
110
+ it('should create a new task, schedule a tool call, and wait for approval', async () => {
111
+ // First call yields the tool request
112
+ sendMessageStreamSpy.mockImplementationOnce(async function* () {
113
+ yield* [
114
+ {
115
+ type: GeminiEventType.ToolCallRequest,
116
+ value: {
117
+ callId: 'test-call-id',
118
+ name: 'test-tool',
119
+ args: {},
120
+ },
121
+ },
122
+ ];
123
+ });
124
+ // Subsequent calls yield nothing
125
+ sendMessageStreamSpy.mockImplementation(async function* () {
126
+ yield* [];
127
+ });
128
+ const mockTool = new MockTool({
129
+ name: 'test-tool',
130
+ shouldConfirmExecute: vi.fn(mockToolConfirmationFn),
131
+ });
132
+ getToolRegistrySpy.mockReturnValue({
133
+ getAllTools: vi.fn().mockReturnValue([mockTool]),
134
+ getToolsByServer: vi.fn().mockReturnValue([]),
135
+ getTool: vi.fn().mockReturnValue(mockTool),
136
+ });
137
+ const agent = request.agent(app);
138
+ const res = await agent
139
+ .post('/')
140
+ .send(createStreamMessageRequest('run a tool', 'a2a-tool-test-message'))
141
+ .set('Content-Type', 'application/json')
142
+ .expect(200);
143
+ const events = streamToSSEEvents(res.text);
144
+ assertTaskCreationAndWorkingStatus(events);
145
+ // Status update: working
146
+ const workingEvent2 = events[2].result;
147
+ expect(workingEvent2.kind).toBe('status-update');
148
+ expect(workingEvent2.status.state).toBe('working');
149
+ expect(workingEvent2.metadata?.['coderAgent']).toMatchObject({
150
+ kind: 'state-change',
151
+ });
152
+ // Status update: tool-call-update
153
+ const toolCallUpdateEvent = events[3].result;
154
+ expect(toolCallUpdateEvent.kind).toBe('status-update');
155
+ expect(toolCallUpdateEvent.status.state).toBe('working');
156
+ expect(toolCallUpdateEvent.metadata?.['coderAgent']).toMatchObject({
157
+ kind: 'tool-call-update',
158
+ });
159
+ expect(toolCallUpdateEvent.status.message?.parts).toMatchObject([
160
+ {
161
+ data: {
162
+ status: 'validating',
163
+ request: { callId: 'test-call-id' },
164
+ },
165
+ },
166
+ ]);
167
+ // State update: awaiting_approval update
168
+ const toolCallConfirmationEvent = events[4].result;
169
+ expect(toolCallConfirmationEvent.kind).toBe('status-update');
170
+ expect(toolCallConfirmationEvent.metadata?.['coderAgent']).toMatchObject({
171
+ kind: 'tool-call-confirmation',
172
+ });
173
+ expect(toolCallConfirmationEvent.status.message?.parts).toMatchObject([
174
+ {
175
+ data: {
176
+ status: 'awaiting_approval',
177
+ request: { callId: 'test-call-id' },
178
+ },
179
+ },
180
+ ]);
181
+ expect(toolCallConfirmationEvent.status?.state).toBe('working');
182
+ assertUniqueFinalEventIsLast(events);
183
+ expect(events.length).toBe(6);
184
+ });
185
+ it('should handle multiple tool calls in a single turn', async () => {
186
+ // First call yields the tool request
187
+ sendMessageStreamSpy.mockImplementationOnce(async function* () {
188
+ yield* [
189
+ {
190
+ type: GeminiEventType.ToolCallRequest,
191
+ value: {
192
+ callId: 'test-call-id-1',
193
+ name: 'test-tool-1',
194
+ args: {},
195
+ },
196
+ },
197
+ {
198
+ type: GeminiEventType.ToolCallRequest,
199
+ value: {
200
+ callId: 'test-call-id-2',
201
+ name: 'test-tool-2',
202
+ args: {},
203
+ },
204
+ },
205
+ ];
206
+ });
207
+ // Subsequent calls yield nothing
208
+ sendMessageStreamSpy.mockImplementation(async function* () {
209
+ yield* [];
210
+ });
211
+ const mockTool1 = new MockTool({
212
+ name: 'test-tool-1',
213
+ displayName: 'Test Tool 1',
214
+ shouldConfirmExecute: vi.fn(mockToolConfirmationFn),
215
+ });
216
+ const mockTool2 = new MockTool({
217
+ name: 'test-tool-2',
218
+ displayName: 'Test Tool 2',
219
+ shouldConfirmExecute: vi.fn(mockToolConfirmationFn),
220
+ });
221
+ getToolRegistrySpy.mockReturnValue({
222
+ getAllTools: vi.fn().mockReturnValue([mockTool1, mockTool2]),
223
+ getToolsByServer: vi.fn().mockReturnValue([]),
224
+ getTool: vi.fn().mockImplementation((name) => {
225
+ if (name === 'test-tool-1')
226
+ return mockTool1;
227
+ if (name === 'test-tool-2')
228
+ return mockTool2;
229
+ return undefined;
230
+ }),
231
+ });
232
+ const agent = request.agent(app);
233
+ const res = await agent
234
+ .post('/')
235
+ .send(createStreamMessageRequest('run two tools', 'a2a-multi-tool-test-message'))
236
+ .set('Content-Type', 'application/json')
237
+ .expect(200);
238
+ const events = streamToSSEEvents(res.text);
239
+ assertTaskCreationAndWorkingStatus(events);
240
+ // Second working update
241
+ const workingEvent = events[2].result;
242
+ expect(workingEvent.kind).toBe('status-update');
243
+ expect(workingEvent.status.state).toBe('working');
244
+ // State Update: Validate each tool call
245
+ const toolCallValidateEvent1 = events[3].result;
246
+ expect(toolCallValidateEvent1.metadata?.['coderAgent']).toMatchObject({
247
+ kind: 'tool-call-update',
248
+ });
249
+ expect(toolCallValidateEvent1.status.message?.parts).toMatchObject([
250
+ {
251
+ data: {
252
+ status: 'validating',
253
+ request: { callId: 'test-call-id-1' },
254
+ },
255
+ },
256
+ ]);
257
+ const toolCallValidateEvent2 = events[4].result;
258
+ expect(toolCallValidateEvent2.metadata?.['coderAgent']).toMatchObject({
259
+ kind: 'tool-call-update',
260
+ });
261
+ expect(toolCallValidateEvent2.status.message?.parts).toMatchObject([
262
+ {
263
+ data: {
264
+ status: 'validating',
265
+ request: { callId: 'test-call-id-2' },
266
+ },
267
+ },
268
+ ]);
269
+ // State Update: Set each tool call to awaiting
270
+ const toolCallAwaitEvent1 = events[5].result;
271
+ expect(toolCallAwaitEvent1.metadata?.['coderAgent']).toMatchObject({
272
+ kind: 'tool-call-confirmation',
273
+ });
274
+ expect(toolCallAwaitEvent1.status.message?.parts).toMatchObject([
275
+ {
276
+ data: {
277
+ status: 'awaiting_approval',
278
+ request: { callId: 'test-call-id-1' },
279
+ },
280
+ },
281
+ ]);
282
+ const toolCallAwaitEvent2 = events[6].result;
283
+ expect(toolCallAwaitEvent2.metadata?.['coderAgent']).toMatchObject({
284
+ kind: 'tool-call-confirmation',
285
+ });
286
+ expect(toolCallAwaitEvent2.status.message?.parts).toMatchObject([
287
+ {
288
+ data: {
289
+ status: 'awaiting_approval',
290
+ request: { callId: 'test-call-id-2' },
291
+ },
292
+ },
293
+ ]);
294
+ assertUniqueFinalEventIsLast(events);
295
+ expect(events.length).toBe(8);
296
+ });
297
+ it('should handle tool calls that do not require approval', async () => {
298
+ // First call yields the tool request
299
+ sendMessageStreamSpy.mockImplementationOnce(async function* () {
300
+ yield* [
301
+ {
302
+ type: GeminiEventType.ToolCallRequest,
303
+ value: {
304
+ callId: 'test-call-id-no-approval',
305
+ name: 'test-tool-no-approval',
306
+ args: {},
307
+ },
308
+ },
309
+ ];
310
+ });
311
+ // Second call, after the tool runs, yields the final text
312
+ sendMessageStreamSpy.mockImplementationOnce(async function* () {
313
+ yield* [{ type: 'content', value: 'Tool executed successfully.' }];
314
+ });
315
+ const mockTool = new MockTool({
316
+ name: 'test-tool-no-approval',
317
+ displayName: 'Test Tool No Approval',
318
+ execute: vi.fn().mockResolvedValue({
319
+ llmContent: 'Tool executed successfully.',
320
+ returnDisplay: 'Tool executed successfully.',
321
+ }),
322
+ });
323
+ getToolRegistrySpy.mockReturnValue({
324
+ getAllTools: vi.fn().mockReturnValue([mockTool]),
325
+ getToolsByServer: vi.fn().mockReturnValue([]),
326
+ getTool: vi.fn().mockReturnValue(mockTool),
327
+ });
328
+ const agent = request.agent(app);
329
+ const res = await agent
330
+ .post('/')
331
+ .send(createStreamMessageRequest('run a tool without approval', 'a2a-no-approval-test-message'))
332
+ .set('Content-Type', 'application/json')
333
+ .expect(200);
334
+ const events = streamToSSEEvents(res.text);
335
+ assertTaskCreationAndWorkingStatus(events);
336
+ // Status update: working
337
+ const workingEvent2 = events[2].result;
338
+ expect(workingEvent2.kind).toBe('status-update');
339
+ expect(workingEvent2.status.state).toBe('working');
340
+ // Status update: tool-call-update (validating)
341
+ const validatingEvent = events[3].result;
342
+ expect(validatingEvent.metadata?.['coderAgent']).toMatchObject({
343
+ kind: 'tool-call-update',
344
+ });
345
+ expect(validatingEvent.status.message?.parts).toMatchObject([
346
+ {
347
+ data: {
348
+ status: 'validating',
349
+ request: { callId: 'test-call-id-no-approval' },
350
+ },
351
+ },
352
+ ]);
353
+ // Status update: tool-call-update (scheduled)
354
+ const scheduledEvent = events[4].result;
355
+ expect(scheduledEvent.metadata?.['coderAgent']).toMatchObject({
356
+ kind: 'tool-call-update',
357
+ });
358
+ expect(scheduledEvent.status.message?.parts).toMatchObject([
359
+ {
360
+ data: {
361
+ status: 'scheduled',
362
+ request: { callId: 'test-call-id-no-approval' },
363
+ },
364
+ },
365
+ ]);
366
+ // Status update: tool-call-update (executing)
367
+ const executingEvent = events[5].result;
368
+ expect(executingEvent.metadata?.['coderAgent']).toMatchObject({
369
+ kind: 'tool-call-update',
370
+ });
371
+ expect(executingEvent.status.message?.parts).toMatchObject([
372
+ {
373
+ data: {
374
+ status: 'executing',
375
+ request: { callId: 'test-call-id-no-approval' },
376
+ },
377
+ },
378
+ ]);
379
+ // Status update: tool-call-update (success)
380
+ const successEvent = events[6].result;
381
+ expect(successEvent.metadata?.['coderAgent']).toMatchObject({
382
+ kind: 'tool-call-update',
383
+ });
384
+ expect(successEvent.status.message?.parts).toMatchObject([
385
+ {
386
+ data: {
387
+ status: 'success',
388
+ request: { callId: 'test-call-id-no-approval' },
389
+ },
390
+ },
391
+ ]);
392
+ // Status update: working (before sending tool result to LLM)
393
+ const workingEvent3 = events[7].result;
394
+ expect(workingEvent3.kind).toBe('status-update');
395
+ expect(workingEvent3.status.state).toBe('working');
396
+ // Status update: text-content (final LLM response)
397
+ const textContentEvent = events[8].result;
398
+ expect(textContentEvent.metadata?.['coderAgent']).toMatchObject({
399
+ kind: 'text-content',
400
+ });
401
+ expect(textContentEvent.status.message?.parts).toMatchObject([
402
+ { text: 'Tool executed successfully.' },
403
+ ]);
404
+ assertUniqueFinalEventIsLast(events);
405
+ expect(events.length).toBe(10);
406
+ });
407
+ it('should bypass tool approval in YOLO mode', async () => {
408
+ // First call yields the tool request
409
+ sendMessageStreamSpy.mockImplementationOnce(async function* () {
410
+ yield* [
411
+ {
412
+ type: GeminiEventType.ToolCallRequest,
413
+ value: {
414
+ callId: 'test-call-id-yolo',
415
+ name: 'test-tool-yolo',
416
+ args: {},
417
+ },
418
+ },
419
+ ];
420
+ });
421
+ // Second call, after the tool runs, yields the final text
422
+ sendMessageStreamSpy.mockImplementationOnce(async function* () {
423
+ yield* [{ type: 'content', value: 'Tool executed successfully.' }];
424
+ });
425
+ // Set approval mode to yolo
426
+ getApprovalModeSpy.mockReturnValue(ApprovalMode.YOLO);
427
+ const mockTool = new MockTool({
428
+ name: 'test-tool-yolo',
429
+ displayName: 'Test Tool YOLO',
430
+ execute: vi.fn().mockResolvedValue({
431
+ llmContent: 'Tool executed successfully.',
432
+ returnDisplay: 'Tool executed successfully.',
433
+ }),
434
+ });
435
+ getToolRegistrySpy.mockReturnValue({
436
+ getAllTools: vi.fn().mockReturnValue([mockTool]),
437
+ getToolsByServer: vi.fn().mockReturnValue([]),
438
+ getTool: vi.fn().mockReturnValue(mockTool),
439
+ });
440
+ const agent = request.agent(app);
441
+ const res = await agent
442
+ .post('/')
443
+ .send(createStreamMessageRequest('run a tool in yolo mode', 'a2a-yolo-mode-test-message'))
444
+ .set('Content-Type', 'application/json')
445
+ .expect(200);
446
+ const events = streamToSSEEvents(res.text);
447
+ assertTaskCreationAndWorkingStatus(events);
448
+ // Status update: working
449
+ const workingEvent2 = events[2].result;
450
+ expect(workingEvent2.kind).toBe('status-update');
451
+ expect(workingEvent2.status.state).toBe('working');
452
+ // Status update: tool-call-update (validating)
453
+ const validatingEvent = events[3].result;
454
+ expect(validatingEvent.metadata?.['coderAgent']).toMatchObject({
455
+ kind: 'tool-call-update',
456
+ });
457
+ expect(validatingEvent.status.message?.parts).toMatchObject([
458
+ {
459
+ data: {
460
+ status: 'validating',
461
+ request: { callId: 'test-call-id-yolo' },
462
+ },
463
+ },
464
+ ]);
465
+ // Status update: tool-call-update (scheduled)
466
+ const awaitingEvent = events[4].result;
467
+ expect(awaitingEvent.metadata?.['coderAgent']).toMatchObject({
468
+ kind: 'tool-call-update',
469
+ });
470
+ expect(awaitingEvent.status.message?.parts).toMatchObject([
471
+ {
472
+ data: {
473
+ status: 'scheduled',
474
+ request: { callId: 'test-call-id-yolo' },
475
+ },
476
+ },
477
+ ]);
478
+ // Status update: tool-call-update (executing)
479
+ const executingEvent = events[5].result;
480
+ expect(executingEvent.metadata?.['coderAgent']).toMatchObject({
481
+ kind: 'tool-call-update',
482
+ });
483
+ expect(executingEvent.status.message?.parts).toMatchObject([
484
+ {
485
+ data: {
486
+ status: 'executing',
487
+ request: { callId: 'test-call-id-yolo' },
488
+ },
489
+ },
490
+ ]);
491
+ // Status update: tool-call-update (success)
492
+ const successEvent = events[6].result;
493
+ expect(successEvent.metadata?.['coderAgent']).toMatchObject({
494
+ kind: 'tool-call-update',
495
+ });
496
+ expect(successEvent.status.message?.parts).toMatchObject([
497
+ {
498
+ data: {
499
+ status: 'success',
500
+ request: { callId: 'test-call-id-yolo' },
501
+ },
502
+ },
503
+ ]);
504
+ // Status update: working (before sending tool result to LLM)
505
+ const workingEvent3 = events[7].result;
506
+ expect(workingEvent3.kind).toBe('status-update');
507
+ expect(workingEvent3.status.state).toBe('working');
508
+ // Status update: text-content (final LLM response)
509
+ const textContentEvent = events[8].result;
510
+ expect(textContentEvent.metadata?.['coderAgent']).toMatchObject({
511
+ kind: 'text-content',
512
+ });
513
+ expect(textContentEvent.status.message?.parts).toMatchObject([
514
+ { text: 'Tool executed successfully.' },
515
+ ]);
516
+ assertUniqueFinalEventIsLast(events);
517
+ expect(events.length).toBe(10);
518
+ });
519
+ });
520
+ //# sourceMappingURL=app.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.test.js","sourceRoot":"","sources":["../../../src/http/app.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,eAAe,EACf,YAAY,GAEb,MAAM,yBAAyB,CAAC;AAOjC,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,SAAS,EACT,QAAQ,EACR,MAAM,EACN,EAAE,EACF,EAAE,GACH,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EACL,4BAA4B,EAC5B,kCAAkC,EAClC,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,MAAM,sBAAsB,GAAG,KAAK,IAAI,EAAE,CACxC,CAAC,EAAE,CAA2C,CAAC;AAEjD,MAAM,iBAAiB,GAAG,CACxB,MAAc,EACyB,EAAE,CACzC,MAAM;KACH,KAAK,CAAC,MAAM,CAAC;KACb,MAAM,CAAC,OAAO,CAAC,CAAC,8CAA8C;KAC9D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;IACb,MAAM,QAAQ,GAAG,KAAK;SACnB,KAAK,CAAC,IAAI,CAAC;SACX,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,GAAG,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC;AAEP,iDAAiD;AACjD,6BAA6B;AAC7B,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC;IACnC,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;CACzD,CAAC,CAAC,CAAC;AAEJ,IAAI,MAAc,CAAC;AACnB,MAAM,kBAAkB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AACzE,MAAM,kBAAkB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AACnC,MAAM,0BAA0B,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAC3C,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;IACxC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC;IAC5D,OAAO;QACL,GAAG,MAAM;QACT,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAAE;YAChD,MAAM,UAAU,GAAG,gBAAgB,CAAC;gBAClC,eAAe,EAAE,kBAAkB;gBACnC,eAAe,EAAE,kBAAkB;gBACnC,uBAAuB,EAAE,0BAA0B;aACpD,CAAC,CAAC;YACH,MAAM,GAAG,UAAoB,CAAC;YAC9B,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;KACH,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,kDAAkD;AAClD,MAAM,oBAAoB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AACrC,EAAE,CAAC,IAAI,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;IAC5C,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC;IAChE,OAAO;QACL,GAAG,MAAM;QACT,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC;YAC9C,iBAAiB,EAAE,oBAAoB;YACvC,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC;YAC5C,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE;SACpB,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,IAAI,GAAoB,CAAC;IACzB,IAAI,MAAc,CAAC;IAEnB,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,oCAAoC;IAC9D,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,GAAG,EAAE;QACd,kBAAkB,CAAC,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,QAAQ,CACN,GAAG,EAAE,CACH,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAC5B,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;YAChB,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CACL,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC5F,oBAAoB,CAAC,kBAAkB,CAAC,KAAK,SAAS,CAAC;YACrD,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,MAAM,KAAK;aACpB,IAAI,CAAC,GAAG,CAAC;aACT,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;aAC7D,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC;aACvC,MAAM,CAAC,GAAG,CAAC,CAAC;QAEf,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE3C,kCAAkC,CAAC,MAAM,CAAC,CAAC;QAE3C,8BAA8B;QAC9B,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAA+B,CAAC;QACnE,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACpD,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;YAC9D,IAAI,EAAE,cAAc;SACrB,CAAC,CAAC;QACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC;YAC3D,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE;SAC7C,CAAC,CAAC;QAEH,wCAAwC;QACxC,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAA+B,CAAC;QAC7D,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC9C,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACxD,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEpC,4BAA4B,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,qCAAqC;QACrC,oBAAoB,CAAC,sBAAsB,CAAC,KAAK,SAAS,CAAC;YACzD,KAAK,CAAC,CAAC;gBACL;oBACE,IAAI,EAAE,eAAe,CAAC,eAAe;oBACrC,KAAK,EAAE;wBACL,MAAM,EAAE,cAAc;wBACtB,IAAI,EAAE,WAAW;wBACjB,IAAI,EAAE,EAAE;qBACT;iBACF;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,iCAAiC;QACjC,oBAAoB,CAAC,kBAAkB,CAAC,KAAK,SAAS,CAAC;YACrD,KAAK,CAAC,CAAC,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC;YAC5B,IAAI,EAAE,WAAW;YACjB,oBAAoB,EAAE,EAAE,CAAC,EAAE,CAAC,sBAAsB,CAAC;SACpD,CAAC,CAAC;QAEH,kBAAkB,CAAC,eAAe,CAAC;YACjC,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC;YAChD,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;YAC7C,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC;SAC3C,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,MAAM,KAAK;aACpB,IAAI,CAAC,GAAG,CAAC;aACT,IAAI,CAAC,0BAA0B,CAAC,YAAY,EAAE,uBAAuB,CAAC,CAAC;aACvE,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC;aACvC,MAAM,CAAC,GAAG,CAAC,CAAC;QAEf,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,kCAAkC,CAAC,MAAM,CAAC,CAAC;QAE3C,yBAAyB;QACzB,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAA+B,CAAC;QAChE,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACjD,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;YAC3D,IAAI,EAAE,cAAc;SACrB,CAAC,CAAC;QAEH,kCAAkC;QAClC,MAAM,mBAAmB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAA+B,CAAC;QACtE,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACvD,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzD,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;YACjE,IAAI,EAAE,kBAAkB;SACzB,CAAC,CAAC;QACH,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC;YAC9D;gBACE,IAAI,EAAE;oBACJ,MAAM,EAAE,YAAY;oBACpB,OAAO,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE;iBACpC;aACF;SACF,CAAC,CAAC;QAEH,yCAAyC;QACzC,MAAM,yBAAyB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAA+B,CAAC;QAC5E,MAAM,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC7D,MAAM,CAAC,yBAAyB,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;YACvE,IAAI,EAAE,wBAAwB;SAC/B,CAAC,CAAC;QACH,MAAM,CAAC,yBAAyB,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC;YACpE;gBACE,IAAI,EAAE;oBACJ,MAAM,EAAE,mBAAmB;oBAC3B,OAAO,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE;iBACpC;aACF;SACF,CAAC,CAAC;QACH,MAAM,CAAC,yBAAyB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEhE,4BAA4B,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,qCAAqC;QACrC,oBAAoB,CAAC,sBAAsB,CAAC,KAAK,SAAS,CAAC;YACzD,KAAK,CAAC,CAAC;gBACL;oBACE,IAAI,EAAE,eAAe,CAAC,eAAe;oBACrC,KAAK,EAAE;wBACL,MAAM,EAAE,gBAAgB;wBACxB,IAAI,EAAE,aAAa;wBACnB,IAAI,EAAE,EAAE;qBACT;iBACF;gBACD;oBACE,IAAI,EAAE,eAAe,CAAC,eAAe;oBACrC,KAAK,EAAE;wBACL,MAAM,EAAE,gBAAgB;wBACxB,IAAI,EAAE,aAAa;wBACnB,IAAI,EAAE,EAAE;qBACT;iBACF;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,iCAAiC;QACjC,oBAAoB,CAAC,kBAAkB,CAAC,KAAK,SAAS,CAAC;YACrD,KAAK,CAAC,CAAC,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,IAAI,QAAQ,CAAC;YAC7B,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,aAAa;YAC1B,oBAAoB,EAAE,EAAE,CAAC,EAAE,CAAC,sBAAsB,CAAC;SACpD,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,QAAQ,CAAC;YAC7B,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,aAAa;YAC1B,oBAAoB,EAAE,EAAE,CAAC,EAAE,CAAC,sBAAsB,CAAC;SACpD,CAAC,CAAC;QAEH,kBAAkB,CAAC,eAAe,CAAC;YACjC,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC5D,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;YAC7C,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,IAAY,EAAE,EAAE;gBACnD,IAAI,IAAI,KAAK,aAAa;oBAAE,OAAO,SAAS,CAAC;gBAC7C,IAAI,IAAI,KAAK,aAAa;oBAAE,OAAO,SAAS,CAAC;gBAC7C,OAAO,SAAS,CAAC;YACnB,CAAC,CAAC;SACH,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,MAAM,KAAK;aACpB,IAAI,CAAC,GAAG,CAAC;aACT,IAAI,CACH,0BAA0B,CACxB,eAAe,EACf,6BAA6B,CAC9B,CACF;aACA,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC;aACvC,MAAM,CAAC,GAAG,CAAC,CAAC;QAEf,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,kCAAkC,CAAC,MAAM,CAAC,CAAC;QAE3C,wBAAwB;QACxB,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAA+B,CAAC;QAC/D,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAChD,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAElD,wCAAwC;QACxC,MAAM,sBAAsB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAA+B,CAAC;QACzE,MAAM,CAAC,sBAAsB,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;YACpE,IAAI,EAAE,kBAAkB;SACzB,CAAC,CAAC;QACH,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC;YACjE;gBACE,IAAI,EAAE;oBACJ,MAAM,EAAE,YAAY;oBACpB,OAAO,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE;iBACtC;aACF;SACF,CAAC,CAAC;QACH,MAAM,sBAAsB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAA+B,CAAC;QACzE,MAAM,CAAC,sBAAsB,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;YACpE,IAAI,EAAE,kBAAkB;SACzB,CAAC,CAAC;QACH,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC;YACjE;gBACE,IAAI,EAAE;oBACJ,MAAM,EAAE,YAAY;oBACpB,OAAO,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE;iBACtC;aACF;SACF,CAAC,CAAC;QAEH,+CAA+C;QAC/C,MAAM,mBAAmB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAA+B,CAAC;QACtE,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;YACjE,IAAI,EAAE,wBAAwB;SAC/B,CAAC,CAAC;QACH,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC;YAC9D;gBACE,IAAI,EAAE;oBACJ,MAAM,EAAE,mBAAmB;oBAC3B,OAAO,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE;iBACtC;aACF;SACF,CAAC,CAAC;QACH,MAAM,mBAAmB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAA+B,CAAC;QACtE,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;YACjE,IAAI,EAAE,wBAAwB;SAC/B,CAAC,CAAC;QACH,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC;YAC9D;gBACE,IAAI,EAAE;oBACJ,MAAM,EAAE,mBAAmB;oBAC3B,OAAO,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE;iBACtC;aACF;SACF,CAAC,CAAC;QAEH,4BAA4B,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,qCAAqC;QACrC,oBAAoB,CAAC,sBAAsB,CAAC,KAAK,SAAS,CAAC;YACzD,KAAK,CAAC,CAAC;gBACL;oBACE,IAAI,EAAE,eAAe,CAAC,eAAe;oBACrC,KAAK,EAAE;wBACL,MAAM,EAAE,0BAA0B;wBAClC,IAAI,EAAE,uBAAuB;wBAC7B,IAAI,EAAE,EAAE;qBACT;iBACF;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,0DAA0D;QAC1D,oBAAoB,CAAC,sBAAsB,CAAC,KAAK,SAAS,CAAC;YACzD,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC;YAC5B,IAAI,EAAE,uBAAuB;YAC7B,WAAW,EAAE,uBAAuB;YACpC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;gBACjC,UAAU,EAAE,6BAA6B;gBACzC,aAAa,EAAE,6BAA6B;aAC7C,CAAC;SACH,CAAC,CAAC;QAEH,kBAAkB,CAAC,eAAe,CAAC;YACjC,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC;YAChD,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;YAC7C,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC;SAC3C,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,MAAM,KAAK;aACpB,IAAI,CAAC,GAAG,CAAC;aACT,IAAI,CACH,0BAA0B,CACxB,6BAA6B,EAC7B,8BAA8B,CAC/B,CACF;aACA,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC;aACvC,MAAM,CAAC,GAAG,CAAC,CAAC;QAEf,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,kCAAkC,CAAC,MAAM,CAAC,CAAC;QAE3C,yBAAyB;QACzB,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAA+B,CAAC;QAChE,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACjD,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEnD,+CAA+C;QAC/C,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAA+B,CAAC;QAClE,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;YAC7D,IAAI,EAAE,kBAAkB;SACzB,CAAC,CAAC;QACH,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC;YAC1D;gBACE,IAAI,EAAE;oBACJ,MAAM,EAAE,YAAY;oBACpB,OAAO,EAAE,EAAE,MAAM,EAAE,0BAA0B,EAAE;iBAChD;aACF;SACF,CAAC,CAAC;QAEH,8CAA8C;QAC9C,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAA+B,CAAC;QACjE,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;YAC5D,IAAI,EAAE,kBAAkB;SACzB,CAAC,CAAC;QACH,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC;YACzD;gBACE,IAAI,EAAE;oBACJ,MAAM,EAAE,WAAW;oBACnB,OAAO,EAAE,EAAE,MAAM,EAAE,0BAA0B,EAAE;iBAChD;aACF;SACF,CAAC,CAAC;QAEH,8CAA8C;QAC9C,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAA+B,CAAC;QACjE,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;YAC5D,IAAI,EAAE,kBAAkB;SACzB,CAAC,CAAC;QACH,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC;YACzD;gBACE,IAAI,EAAE;oBACJ,MAAM,EAAE,WAAW;oBACnB,OAAO,EAAE,EAAE,MAAM,EAAE,0BAA0B,EAAE;iBAChD;aACF;SACF,CAAC,CAAC;QAEH,4CAA4C;QAC5C,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAA+B,CAAC;QAC/D,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;YAC1D,IAAI,EAAE,kBAAkB;SACzB,CAAC,CAAC;QACH,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC;YACvD;gBACE,IAAI,EAAE;oBACJ,MAAM,EAAE,SAAS;oBACjB,OAAO,EAAE,EAAE,MAAM,EAAE,0BAA0B,EAAE;iBAChD;aACF;SACF,CAAC,CAAC;QAEH,6DAA6D;QAC7D,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAA+B,CAAC;QAChE,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACjD,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEnD,mDAAmD;QACnD,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAA+B,CAAC;QACnE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;YAC9D,IAAI,EAAE,cAAc;SACrB,CAAC,CAAC;QACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC;YAC3D,EAAE,IAAI,EAAE,6BAA6B,EAAE;SACxC,CAAC,CAAC;QAEH,4BAA4B,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,qCAAqC;QACrC,oBAAoB,CAAC,sBAAsB,CAAC,KAAK,SAAS,CAAC;YACzD,KAAK,CAAC,CAAC;gBACL;oBACE,IAAI,EAAE,eAAe,CAAC,eAAe;oBACrC,KAAK,EAAE;wBACL,MAAM,EAAE,mBAAmB;wBAC3B,IAAI,EAAE,gBAAgB;wBACtB,IAAI,EAAE,EAAE;qBACT;iBACF;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,0DAA0D;QAC1D,oBAAoB,CAAC,sBAAsB,CAAC,KAAK,SAAS,CAAC;YACzD,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,4BAA4B;QAC5B,kBAAkB,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAEtD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC;YAC5B,IAAI,EAAE,gBAAgB;YACtB,WAAW,EAAE,gBAAgB;YAC7B,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;gBACjC,UAAU,EAAE,6BAA6B;gBACzC,aAAa,EAAE,6BAA6B;aAC7C,CAAC;SACH,CAAC,CAAC;QAEH,kBAAkB,CAAC,eAAe,CAAC;YACjC,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC;YAChD,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;YAC7C,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC;SAC3C,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,MAAM,KAAK;aACpB,IAAI,CAAC,GAAG,CAAC;aACT,IAAI,CACH,0BAA0B,CACxB,yBAAyB,EACzB,4BAA4B,CAC7B,CACF;aACA,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC;aACvC,MAAM,CAAC,GAAG,CAAC,CAAC;QAEf,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,kCAAkC,CAAC,MAAM,CAAC,CAAC;QAE3C,yBAAyB;QACzB,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAA+B,CAAC;QAChE,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACjD,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEnD,+CAA+C;QAC/C,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAA+B,CAAC;QAClE,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;YAC7D,IAAI,EAAE,kBAAkB;SACzB,CAAC,CAAC;QACH,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC;YAC1D;gBACE,IAAI,EAAE;oBACJ,MAAM,EAAE,YAAY;oBACpB,OAAO,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE;iBACzC;aACF;SACF,CAAC,CAAC;QAEH,8CAA8C;QAC9C,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAA+B,CAAC;QAChE,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;YAC3D,IAAI,EAAE,kBAAkB;SACzB,CAAC,CAAC;QACH,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC;YACxD;gBACE,IAAI,EAAE;oBACJ,MAAM,EAAE,WAAW;oBACnB,OAAO,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE;iBACzC;aACF;SACF,CAAC,CAAC;QAEH,8CAA8C;QAC9C,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAA+B,CAAC;QACjE,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;YAC5D,IAAI,EAAE,kBAAkB;SACzB,CAAC,CAAC;QACH,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC;YACzD;gBACE,IAAI,EAAE;oBACJ,MAAM,EAAE,WAAW;oBACnB,OAAO,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE;iBACzC;aACF;SACF,CAAC,CAAC;QAEH,4CAA4C;QAC5C,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAA+B,CAAC;QAC/D,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;YAC1D,IAAI,EAAE,kBAAkB;SACzB,CAAC,CAAC;QACH,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC;YACvD;gBACE,IAAI,EAAE;oBACJ,MAAM,EAAE,SAAS;oBACjB,OAAO,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE;iBACzC;aACF;SACF,CAAC,CAAC;QAEH,6DAA6D;QAC7D,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAA+B,CAAC;QAChE,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACjD,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEnD,mDAAmD;QACnD,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAA+B,CAAC;QACnE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;YAC9D,IAAI,EAAE,cAAc;SACrB,CAAC,CAAC;QACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC;YAC3D,EAAE,IAAI,EAAE,6BAA6B,EAAE;SACxC,CAAC,CAAC;QAEH,4BAA4B,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};