@openrouter/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 (98) hide show
  1. package/README.md +367 -0
  2. package/esm/api-shape-helpers/claude-message.d.ts +218 -0
  3. package/esm/api-shape-helpers/claude-message.d.ts.map +1 -0
  4. package/esm/api-shape-helpers/claude-message.js +6 -0
  5. package/esm/api-shape-helpers/claude-message.js.map +1 -0
  6. package/esm/index.d.ts +22 -0
  7. package/esm/index.d.ts.map +1 -0
  8. package/esm/index.js +27 -0
  9. package/esm/index.js.map +1 -0
  10. package/esm/inner-loop/call-model.d.ts +67 -0
  11. package/esm/inner-loop/call-model.d.ts.map +1 -0
  12. package/esm/inner-loop/call-model.js +116 -0
  13. package/esm/inner-loop/call-model.js.map +1 -0
  14. package/esm/lib/anthropic-compat.d.ts +51 -0
  15. package/esm/lib/anthropic-compat.d.ts.map +1 -0
  16. package/esm/lib/anthropic-compat.js +216 -0
  17. package/esm/lib/anthropic-compat.js.map +1 -0
  18. package/esm/lib/anthropic-compat.test.d.ts +2 -0
  19. package/esm/lib/anthropic-compat.test.d.ts.map +1 -0
  20. package/esm/lib/anthropic-compat.test.js +668 -0
  21. package/esm/lib/anthropic-compat.test.js.map +1 -0
  22. package/esm/lib/async-params.d.ts +107 -0
  23. package/esm/lib/async-params.d.ts.map +1 -0
  24. package/esm/lib/async-params.js +94 -0
  25. package/esm/lib/async-params.js.map +1 -0
  26. package/esm/lib/chat-compat.d.ts +46 -0
  27. package/esm/lib/chat-compat.d.ts.map +1 -0
  28. package/esm/lib/chat-compat.js +111 -0
  29. package/esm/lib/chat-compat.js.map +1 -0
  30. package/esm/lib/chat-compat.test.d.ts +2 -0
  31. package/esm/lib/chat-compat.test.d.ts.map +1 -0
  32. package/esm/lib/chat-compat.test.js +405 -0
  33. package/esm/lib/chat-compat.test.js.map +1 -0
  34. package/esm/lib/claude-constants.d.ts +22 -0
  35. package/esm/lib/claude-constants.d.ts.map +1 -0
  36. package/esm/lib/claude-constants.js +20 -0
  37. package/esm/lib/claude-constants.js.map +1 -0
  38. package/esm/lib/claude-type-guards.d.ts +10 -0
  39. package/esm/lib/claude-type-guards.d.ts.map +1 -0
  40. package/esm/lib/claude-type-guards.js +68 -0
  41. package/esm/lib/claude-type-guards.js.map +1 -0
  42. package/esm/lib/conversation-state.d.ts +61 -0
  43. package/esm/lib/conversation-state.d.ts.map +1 -0
  44. package/esm/lib/conversation-state.js +230 -0
  45. package/esm/lib/conversation-state.js.map +1 -0
  46. package/esm/lib/model-result.d.ts +370 -0
  47. package/esm/lib/model-result.d.ts.map +1 -0
  48. package/esm/lib/model-result.js +1483 -0
  49. package/esm/lib/model-result.js.map +1 -0
  50. package/esm/lib/next-turn-params.d.ts +30 -0
  51. package/esm/lib/next-turn-params.d.ts.map +1 -0
  52. package/esm/lib/next-turn-params.js +129 -0
  53. package/esm/lib/next-turn-params.js.map +1 -0
  54. package/esm/lib/reusable-stream.d.ts +39 -0
  55. package/esm/lib/reusable-stream.d.ts.map +1 -0
  56. package/esm/lib/reusable-stream.js +192 -0
  57. package/esm/lib/reusable-stream.js.map +1 -0
  58. package/esm/lib/stop-conditions.d.ts +80 -0
  59. package/esm/lib/stop-conditions.d.ts.map +1 -0
  60. package/esm/lib/stop-conditions.js +104 -0
  61. package/esm/lib/stop-conditions.js.map +1 -0
  62. package/esm/lib/stream-transformers.d.ts +109 -0
  63. package/esm/lib/stream-transformers.d.ts.map +1 -0
  64. package/esm/lib/stream-transformers.js +856 -0
  65. package/esm/lib/stream-transformers.js.map +1 -0
  66. package/esm/lib/stream-type-guards.d.ts +29 -0
  67. package/esm/lib/stream-type-guards.d.ts.map +1 -0
  68. package/esm/lib/stream-type-guards.js +85 -0
  69. package/esm/lib/stream-type-guards.js.map +1 -0
  70. package/esm/lib/tool-context.d.ts +68 -0
  71. package/esm/lib/tool-context.d.ts.map +1 -0
  72. package/esm/lib/tool-context.js +188 -0
  73. package/esm/lib/tool-context.js.map +1 -0
  74. package/esm/lib/tool-event-broadcaster.d.ts +44 -0
  75. package/esm/lib/tool-event-broadcaster.d.ts.map +1 -0
  76. package/esm/lib/tool-event-broadcaster.js +162 -0
  77. package/esm/lib/tool-event-broadcaster.js.map +1 -0
  78. package/esm/lib/tool-executor.d.ts +73 -0
  79. package/esm/lib/tool-executor.d.ts.map +1 -0
  80. package/esm/lib/tool-executor.js +267 -0
  81. package/esm/lib/tool-executor.js.map +1 -0
  82. package/esm/lib/tool-orchestrator.d.ts +50 -0
  83. package/esm/lib/tool-orchestrator.d.ts.map +1 -0
  84. package/esm/lib/tool-orchestrator.js +180 -0
  85. package/esm/lib/tool-orchestrator.js.map +1 -0
  86. package/esm/lib/tool-types.d.ts +572 -0
  87. package/esm/lib/tool-types.d.ts.map +1 -0
  88. package/esm/lib/tool-types.js +80 -0
  89. package/esm/lib/tool-types.js.map +1 -0
  90. package/esm/lib/tool.d.ts +108 -0
  91. package/esm/lib/tool.d.ts.map +1 -0
  92. package/esm/lib/tool.js +84 -0
  93. package/esm/lib/tool.js.map +1 -0
  94. package/esm/lib/turn-context.d.ts +50 -0
  95. package/esm/lib/turn-context.d.ts.map +1 -0
  96. package/esm/lib/turn-context.js +61 -0
  97. package/esm/lib/turn-context.js.map +1 -0
  98. package/package.json +125 -0
@@ -0,0 +1,668 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { fromClaudeMessages, toClaudeMessage } from './anthropic-compat.js';
3
+ /**
4
+ * Creates a properly typed mock OpenResponsesResult for testing.
5
+ * This factory provides all required fields with sensible defaults.
6
+ */
7
+ function createMockResponse(overrides) {
8
+ return {
9
+ id: 'resp_test',
10
+ object: 'response',
11
+ createdAt: Date.now(),
12
+ completedAt: Date.now(),
13
+ model: 'openai/gpt-4',
14
+ status: 'completed',
15
+ error: null,
16
+ incompleteDetails: null,
17
+ temperature: null,
18
+ topP: null,
19
+ presencePenalty: null,
20
+ frequencyPenalty: null,
21
+ metadata: null,
22
+ tools: [],
23
+ toolChoice: 'auto',
24
+ parallelToolCalls: false,
25
+ ...overrides,
26
+ };
27
+ }
28
+ describe('fromClaudeMessages', () => {
29
+ describe('basic message conversion', () => {
30
+ it('converts user message with string content', () => {
31
+ const claudeMessages = [
32
+ {
33
+ role: 'user',
34
+ content: 'Hello, how are you?',
35
+ },
36
+ ];
37
+ const result = fromClaudeMessages(claudeMessages);
38
+ expect(result).toEqual([
39
+ {
40
+ role: 'user',
41
+ content: 'Hello, how are you?',
42
+ },
43
+ ]);
44
+ });
45
+ it('converts assistant message with string content', () => {
46
+ const claudeMessages = [
47
+ {
48
+ role: 'assistant',
49
+ content: 'I am doing well, thank you!',
50
+ },
51
+ ];
52
+ const result = fromClaudeMessages(claudeMessages);
53
+ expect(result).toEqual([
54
+ {
55
+ role: 'assistant',
56
+ content: 'I am doing well, thank you!',
57
+ },
58
+ ]);
59
+ });
60
+ it('converts multiple messages in conversation', () => {
61
+ const claudeMessages = [
62
+ {
63
+ role: 'user',
64
+ content: 'Hi',
65
+ },
66
+ {
67
+ role: 'assistant',
68
+ content: 'Hello!',
69
+ },
70
+ {
71
+ role: 'user',
72
+ content: 'How are you?',
73
+ },
74
+ ];
75
+ const result = fromClaudeMessages(claudeMessages);
76
+ expect(result).toEqual([
77
+ {
78
+ role: 'user',
79
+ content: 'Hi',
80
+ },
81
+ {
82
+ role: 'assistant',
83
+ content: 'Hello!',
84
+ },
85
+ {
86
+ role: 'user',
87
+ content: 'How are you?',
88
+ },
89
+ ]);
90
+ });
91
+ });
92
+ describe('text block content conversion', () => {
93
+ it('converts user message with text block array', () => {
94
+ const claudeMessages = [
95
+ {
96
+ role: 'user',
97
+ content: [
98
+ {
99
+ type: 'text',
100
+ text: 'Hello from text block',
101
+ },
102
+ ],
103
+ },
104
+ ];
105
+ const result = fromClaudeMessages(claudeMessages);
106
+ expect(result).toEqual([
107
+ {
108
+ role: 'user',
109
+ content: 'Hello from text block',
110
+ },
111
+ ]);
112
+ });
113
+ it('combines multiple text blocks into single content string', () => {
114
+ const claudeMessages = [
115
+ {
116
+ role: 'user',
117
+ content: [
118
+ {
119
+ type: 'text',
120
+ text: 'First part. ',
121
+ },
122
+ {
123
+ type: 'text',
124
+ text: 'Second part.',
125
+ },
126
+ ],
127
+ },
128
+ ];
129
+ const result = fromClaudeMessages(claudeMessages);
130
+ expect(result).toEqual([
131
+ {
132
+ role: 'user',
133
+ content: 'First part. Second part.',
134
+ },
135
+ ]);
136
+ });
137
+ });
138
+ describe('tool_result block conversion', () => {
139
+ it('converts tool_result with string content to function_call_output', () => {
140
+ const claudeMessages = [
141
+ {
142
+ role: 'user',
143
+ content: [
144
+ {
145
+ type: 'tool_result',
146
+ tool_use_id: 'tool_123',
147
+ content: 'Tool execution result',
148
+ },
149
+ ],
150
+ },
151
+ ];
152
+ const result = fromClaudeMessages(claudeMessages);
153
+ expect(result).toEqual([
154
+ {
155
+ type: 'function_call_output',
156
+ callId: 'tool_123',
157
+ output: 'Tool execution result',
158
+ },
159
+ ]);
160
+ });
161
+ it('converts tool_result with text block array to function_call_output', () => {
162
+ const claudeMessages = [
163
+ {
164
+ role: 'user',
165
+ content: [
166
+ {
167
+ type: 'tool_result',
168
+ tool_use_id: 'tool_456',
169
+ content: [
170
+ {
171
+ type: 'text',
172
+ text: 'Result part 1. ',
173
+ },
174
+ {
175
+ type: 'text',
176
+ text: 'Result part 2.',
177
+ },
178
+ ],
179
+ },
180
+ ],
181
+ },
182
+ ];
183
+ const result = fromClaudeMessages(claudeMessages);
184
+ expect(result).toEqual([
185
+ {
186
+ type: 'function_call_output',
187
+ callId: 'tool_456',
188
+ output: 'Result part 1. Result part 2.',
189
+ },
190
+ ]);
191
+ });
192
+ it('handles mixed text and tool_result blocks', () => {
193
+ const claudeMessages = [
194
+ {
195
+ role: 'user',
196
+ content: [
197
+ {
198
+ type: 'text',
199
+ text: 'Here is some context. ',
200
+ },
201
+ {
202
+ type: 'tool_result',
203
+ tool_use_id: 'tool_789',
204
+ content: 'Tool output',
205
+ },
206
+ {
207
+ type: 'text',
208
+ text: 'And some more text.',
209
+ },
210
+ ],
211
+ },
212
+ ];
213
+ const result = fromClaudeMessages(claudeMessages);
214
+ // Should produce both the text message and the function_call_output
215
+ expect(result).toEqual([
216
+ {
217
+ type: 'function_call_output',
218
+ callId: 'tool_789',
219
+ output: 'Tool output',
220
+ },
221
+ {
222
+ role: 'user',
223
+ content: 'Here is some context. And some more text.',
224
+ },
225
+ ]);
226
+ });
227
+ });
228
+ describe('tool_use blocks', () => {
229
+ it('converts tool_use blocks to function_call items', () => {
230
+ const claudeMessages = [
231
+ {
232
+ role: 'assistant',
233
+ content: [
234
+ {
235
+ type: 'text',
236
+ text: 'Let me help you with that.',
237
+ },
238
+ {
239
+ type: 'tool_use',
240
+ id: 'tool_abc',
241
+ name: 'get_weather',
242
+ input: {
243
+ location: 'SF',
244
+ },
245
+ },
246
+ ],
247
+ },
248
+ ];
249
+ const result = fromClaudeMessages(claudeMessages);
250
+ expect(result).toEqual([
251
+ {
252
+ type: 'function_call',
253
+ callId: 'tool_abc',
254
+ name: 'get_weather',
255
+ arguments: '{"location":"SF"}',
256
+ id: 'tool_abc',
257
+ status: 'completed',
258
+ },
259
+ {
260
+ role: 'assistant',
261
+ content: 'Let me help you with that.',
262
+ },
263
+ ]);
264
+ });
265
+ });
266
+ describe('image blocks', () => {
267
+ it('converts user image blocks to EasyInputMessage with array content', () => {
268
+ const claudeMessages = [
269
+ {
270
+ role: 'user',
271
+ content: [
272
+ {
273
+ type: 'text',
274
+ text: 'Look at this image:',
275
+ },
276
+ {
277
+ type: 'image',
278
+ source: {
279
+ type: 'base64',
280
+ media_type: 'image/png',
281
+ data: 'base64data...',
282
+ },
283
+ },
284
+ ],
285
+ },
286
+ ];
287
+ const result = fromClaudeMessages(claudeMessages);
288
+ expect(result).toEqual([
289
+ {
290
+ role: 'user',
291
+ content: [
292
+ {
293
+ type: 'input_text',
294
+ text: 'Look at this image:',
295
+ },
296
+ {
297
+ type: 'input_image',
298
+ imageUrl: 'data:image/png;base64,base64data...',
299
+ detail: 'auto',
300
+ },
301
+ ],
302
+ },
303
+ ]);
304
+ });
305
+ it('preserves assistant role for messages with images', () => {
306
+ const claudeMessages = [
307
+ {
308
+ role: 'assistant',
309
+ content: [
310
+ {
311
+ type: 'text',
312
+ text: 'Here is an image I generated:',
313
+ },
314
+ {
315
+ type: 'image',
316
+ source: {
317
+ type: 'url',
318
+ url: 'https://example.com/image.png',
319
+ },
320
+ },
321
+ ],
322
+ },
323
+ ];
324
+ const result = fromClaudeMessages(claudeMessages);
325
+ expect(result).toEqual([
326
+ {
327
+ role: 'assistant',
328
+ content: [
329
+ {
330
+ type: 'input_text',
331
+ text: 'Here is an image I generated:',
332
+ },
333
+ {
334
+ type: 'input_image',
335
+ imageUrl: 'https://example.com/image.png',
336
+ detail: 'auto',
337
+ },
338
+ ],
339
+ },
340
+ ]);
341
+ });
342
+ });
343
+ describe('empty and edge cases', () => {
344
+ it('handles empty messages array', () => {
345
+ const result = fromClaudeMessages([]);
346
+ expect(result).toEqual([]);
347
+ });
348
+ it('handles message with empty string content', () => {
349
+ const claudeMessages = [
350
+ {
351
+ role: 'user',
352
+ content: '',
353
+ },
354
+ ];
355
+ const result = fromClaudeMessages(claudeMessages);
356
+ expect(result).toEqual([
357
+ {
358
+ role: 'user',
359
+ content: '',
360
+ },
361
+ ]);
362
+ });
363
+ it('handles message with empty content array', () => {
364
+ const claudeMessages = [
365
+ {
366
+ role: 'user',
367
+ content: [],
368
+ },
369
+ ];
370
+ const result = fromClaudeMessages(claudeMessages);
371
+ // Should produce empty array since no text and no tool_results
372
+ expect(result).toEqual([]);
373
+ });
374
+ });
375
+ });
376
+ describe('toClaudeMessage', () => {
377
+ describe('basic message conversion', () => {
378
+ it('converts response with text output to ClaudeMessage', () => {
379
+ const response = createMockResponse({
380
+ id: 'resp_123',
381
+ output: [
382
+ {
383
+ id: 'msg_1',
384
+ type: 'message',
385
+ role: 'assistant',
386
+ status: 'completed',
387
+ content: [
388
+ {
389
+ type: 'output_text',
390
+ text: 'Hello! How can I help you?',
391
+ annotations: [],
392
+ },
393
+ ],
394
+ },
395
+ ],
396
+ usage: {
397
+ inputTokens: 10,
398
+ outputTokens: 20,
399
+ totalTokens: 30,
400
+ inputTokensDetails: {
401
+ cachedTokens: 0,
402
+ },
403
+ outputTokensDetails: {
404
+ reasoningTokens: 0,
405
+ },
406
+ },
407
+ });
408
+ const result = toClaudeMessage(response);
409
+ expect(result).toEqual({
410
+ id: 'resp_123',
411
+ type: 'message',
412
+ role: 'assistant',
413
+ model: 'openai/gpt-4',
414
+ content: [
415
+ {
416
+ type: 'text',
417
+ text: 'Hello! How can I help you?',
418
+ },
419
+ ],
420
+ stop_reason: 'end_turn',
421
+ stop_sequence: null,
422
+ usage: {
423
+ input_tokens: 10,
424
+ output_tokens: 20,
425
+ cache_creation_input_tokens: 0,
426
+ cache_read_input_tokens: 0,
427
+ },
428
+ });
429
+ });
430
+ });
431
+ describe('function call conversion', () => {
432
+ it('converts function_call output to tool_use block', () => {
433
+ const response = createMockResponse({
434
+ id: 'resp_456',
435
+ output: [
436
+ {
437
+ type: 'function_call',
438
+ callId: 'call_abc',
439
+ name: 'get_weather',
440
+ arguments: '{"location":"San Francisco"}',
441
+ id: 'fc_1',
442
+ status: 'completed',
443
+ },
444
+ ],
445
+ usage: {
446
+ inputTokens: 15,
447
+ outputTokens: 25,
448
+ totalTokens: 40,
449
+ inputTokensDetails: {
450
+ cachedTokens: 0,
451
+ },
452
+ outputTokensDetails: {
453
+ reasoningTokens: 0,
454
+ },
455
+ },
456
+ });
457
+ const result = toClaudeMessage(response);
458
+ expect(result.content).toEqual([
459
+ {
460
+ type: 'tool_use',
461
+ id: 'call_abc',
462
+ name: 'get_weather',
463
+ input: {
464
+ location: 'San Francisco',
465
+ },
466
+ },
467
+ ]);
468
+ expect(result.stop_reason).toBe('tool_use');
469
+ });
470
+ });
471
+ describe('reasoning conversion', () => {
472
+ it('converts reasoning output to thinking block', () => {
473
+ const response = createMockResponse({
474
+ id: 'resp_789',
475
+ model: 'openai/o1',
476
+ output: [
477
+ {
478
+ type: 'reasoning',
479
+ id: 'reason_1',
480
+ summary: [
481
+ {
482
+ type: 'summary_text',
483
+ text: 'I need to think about this carefully...',
484
+ },
485
+ ],
486
+ },
487
+ {
488
+ id: 'msg_2',
489
+ type: 'message',
490
+ role: 'assistant',
491
+ status: 'completed',
492
+ content: [
493
+ {
494
+ type: 'output_text',
495
+ text: 'Here is my answer.',
496
+ annotations: [],
497
+ },
498
+ ],
499
+ },
500
+ ],
501
+ usage: {
502
+ inputTokens: 20,
503
+ outputTokens: 100,
504
+ totalTokens: 120,
505
+ inputTokensDetails: {
506
+ cachedTokens: 0,
507
+ },
508
+ outputTokensDetails: {
509
+ reasoningTokens: 0,
510
+ },
511
+ },
512
+ });
513
+ const result = toClaudeMessage(response);
514
+ expect(result.content).toEqual([
515
+ {
516
+ type: 'thinking',
517
+ thinking: 'I need to think about this carefully...',
518
+ signature: '',
519
+ },
520
+ {
521
+ type: 'text',
522
+ text: 'Here is my answer.',
523
+ },
524
+ ]);
525
+ });
526
+ });
527
+ describe('stop reason mapping', () => {
528
+ it('maps completed status to end_turn', () => {
529
+ const response = createMockResponse({
530
+ id: 'resp_1',
531
+ output: [
532
+ {
533
+ id: 'msg_1',
534
+ type: 'message',
535
+ role: 'assistant',
536
+ status: 'completed',
537
+ content: [
538
+ {
539
+ type: 'output_text',
540
+ text: 'Done',
541
+ annotations: [],
542
+ },
543
+ ],
544
+ },
545
+ ],
546
+ usage: {
547
+ inputTokens: 5,
548
+ outputTokens: 5,
549
+ totalTokens: 10,
550
+ inputTokensDetails: {
551
+ cachedTokens: 0,
552
+ },
553
+ outputTokensDetails: {
554
+ reasoningTokens: 0,
555
+ },
556
+ },
557
+ });
558
+ const result = toClaudeMessage(response);
559
+ expect(result.stop_reason).toBe('end_turn');
560
+ });
561
+ it('maps incomplete with max_output_tokens to max_tokens', () => {
562
+ const response = createMockResponse({
563
+ id: 'resp_2',
564
+ status: 'incomplete',
565
+ incompleteDetails: {
566
+ reason: 'max_output_tokens',
567
+ },
568
+ output: [
569
+ {
570
+ id: 'msg_1',
571
+ type: 'message',
572
+ role: 'assistant',
573
+ status: 'incomplete',
574
+ content: [
575
+ {
576
+ type: 'output_text',
577
+ text: 'Partial...',
578
+ annotations: [],
579
+ },
580
+ ],
581
+ },
582
+ ],
583
+ usage: {
584
+ inputTokens: 5,
585
+ outputTokens: 100,
586
+ totalTokens: 105,
587
+ inputTokensDetails: {
588
+ cachedTokens: 0,
589
+ },
590
+ outputTokensDetails: {
591
+ reasoningTokens: 0,
592
+ },
593
+ },
594
+ });
595
+ const result = toClaudeMessage(response);
596
+ expect(result.stop_reason).toBe('max_tokens');
597
+ });
598
+ it('maps response with function calls to tool_use', () => {
599
+ const response = createMockResponse({
600
+ id: 'resp_3',
601
+ output: [
602
+ {
603
+ type: 'function_call',
604
+ callId: 'call_1',
605
+ name: 'test_tool',
606
+ arguments: '{}',
607
+ id: 'fc_1',
608
+ status: 'completed',
609
+ },
610
+ ],
611
+ usage: {
612
+ inputTokens: 5,
613
+ outputTokens: 10,
614
+ totalTokens: 15,
615
+ inputTokensDetails: {
616
+ cachedTokens: 0,
617
+ },
618
+ outputTokensDetails: {
619
+ reasoningTokens: 0,
620
+ },
621
+ },
622
+ });
623
+ const result = toClaudeMessage(response);
624
+ expect(result.stop_reason).toBe('tool_use');
625
+ });
626
+ });
627
+ describe('usage mapping', () => {
628
+ it('maps usage with cached tokens', () => {
629
+ const response = createMockResponse({
630
+ id: 'resp_1',
631
+ output: [
632
+ {
633
+ id: 'msg_1',
634
+ type: 'message',
635
+ role: 'assistant',
636
+ status: 'completed',
637
+ content: [
638
+ {
639
+ type: 'output_text',
640
+ text: 'OK',
641
+ annotations: [],
642
+ },
643
+ ],
644
+ },
645
+ ],
646
+ usage: {
647
+ inputTokens: 100,
648
+ outputTokens: 50,
649
+ totalTokens: 150,
650
+ inputTokensDetails: {
651
+ cachedTokens: 80,
652
+ },
653
+ outputTokensDetails: {
654
+ reasoningTokens: 0,
655
+ },
656
+ },
657
+ });
658
+ const result = toClaudeMessage(response);
659
+ expect(result.usage).toEqual({
660
+ input_tokens: 100,
661
+ output_tokens: 50,
662
+ cache_creation_input_tokens: 80,
663
+ cache_read_input_tokens: 0,
664
+ });
665
+ });
666
+ });
667
+ });
668
+ //# sourceMappingURL=anthropic-compat.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-compat.test.js","sourceRoot":"","sources":["../../src/lib/anthropic-compat.test.ts"],"names":[],"mappings":"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"}