@auxiora/providers 1.0.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 (88) hide show
  1. package/LICENSE +191 -0
  2. package/dist/anthropic.d.ts +82 -0
  3. package/dist/anthropic.d.ts.map +1 -0
  4. package/dist/anthropic.js +618 -0
  5. package/dist/anthropic.js.map +1 -0
  6. package/dist/claude-code-tools.d.ts +29 -0
  7. package/dist/claude-code-tools.d.ts.map +1 -0
  8. package/dist/claude-code-tools.js +221 -0
  9. package/dist/claude-code-tools.js.map +1 -0
  10. package/dist/claude-oauth.d.ts +86 -0
  11. package/dist/claude-oauth.d.ts.map +1 -0
  12. package/dist/claude-oauth.js +318 -0
  13. package/dist/claude-oauth.js.map +1 -0
  14. package/dist/cohere.d.ts +18 -0
  15. package/dist/cohere.d.ts.map +1 -0
  16. package/dist/cohere.js +163 -0
  17. package/dist/cohere.js.map +1 -0
  18. package/dist/deepseek.d.ts +18 -0
  19. package/dist/deepseek.d.ts.map +1 -0
  20. package/dist/deepseek.js +164 -0
  21. package/dist/deepseek.js.map +1 -0
  22. package/dist/factory.d.ts +19 -0
  23. package/dist/factory.d.ts.map +1 -0
  24. package/dist/factory.js +108 -0
  25. package/dist/factory.js.map +1 -0
  26. package/dist/google.d.ts +18 -0
  27. package/dist/google.d.ts.map +1 -0
  28. package/dist/google.js +141 -0
  29. package/dist/google.js.map +1 -0
  30. package/dist/groq.d.ts +18 -0
  31. package/dist/groq.d.ts.map +1 -0
  32. package/dist/groq.js +186 -0
  33. package/dist/groq.js.map +1 -0
  34. package/dist/index.d.ts +15 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +14 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/ollama.d.ts +18 -0
  39. package/dist/ollama.d.ts.map +1 -0
  40. package/dist/ollama.js +141 -0
  41. package/dist/ollama.js.map +1 -0
  42. package/dist/openai-compatible.d.ts +20 -0
  43. package/dist/openai-compatible.d.ts.map +1 -0
  44. package/dist/openai-compatible.js +112 -0
  45. package/dist/openai-compatible.js.map +1 -0
  46. package/dist/openai.d.ts +20 -0
  47. package/dist/openai.d.ts.map +1 -0
  48. package/dist/openai.js +259 -0
  49. package/dist/openai.js.map +1 -0
  50. package/dist/replicate.d.ts +20 -0
  51. package/dist/replicate.d.ts.map +1 -0
  52. package/dist/replicate.js +186 -0
  53. package/dist/replicate.js.map +1 -0
  54. package/dist/thinking-levels.d.ts +16 -0
  55. package/dist/thinking-levels.d.ts.map +1 -0
  56. package/dist/thinking-levels.js +34 -0
  57. package/dist/thinking-levels.js.map +1 -0
  58. package/dist/types.d.ts +157 -0
  59. package/dist/types.d.ts.map +1 -0
  60. package/dist/types.js +2 -0
  61. package/dist/types.js.map +1 -0
  62. package/dist/xai.d.ts +18 -0
  63. package/dist/xai.d.ts.map +1 -0
  64. package/dist/xai.js +164 -0
  65. package/dist/xai.js.map +1 -0
  66. package/package.json +30 -0
  67. package/src/anthropic.ts +691 -0
  68. package/src/claude-code-tools.ts +233 -0
  69. package/src/claude-oauth.ts +410 -0
  70. package/src/cohere.ts +242 -0
  71. package/src/deepseek.ts +241 -0
  72. package/src/factory.ts +142 -0
  73. package/src/google.ts +176 -0
  74. package/src/groq.ts +263 -0
  75. package/src/index.ts +44 -0
  76. package/src/ollama.ts +194 -0
  77. package/src/openai-compatible.ts +154 -0
  78. package/src/openai.ts +307 -0
  79. package/src/replicate.ts +247 -0
  80. package/src/thinking-levels.ts +37 -0
  81. package/src/types.ts +171 -0
  82. package/src/xai.ts +241 -0
  83. package/tests/adapters.test.ts +185 -0
  84. package/tests/claude-oauth.test.ts +45 -0
  85. package/tests/new-providers.test.ts +732 -0
  86. package/tests/thinking-levels.test.ts +82 -0
  87. package/tsconfig.json +8 -0
  88. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,618 @@
1
+ import Anthropic from '@anthropic-ai/sdk';
2
+ import { createHash } from 'node:crypto';
3
+ import { execFileSync } from 'node:child_process';
4
+ import { getLogger } from '@auxiora/logger';
5
+ const logger = getLogger('providers:anthropic');
6
+ import { resolveAnthropicApiKey, isSetupToken, readClaudeCliCredentials, getValidAccessToken, } from './claude-oauth.js';
7
+ import { CLAUDE_CODE_TOOLS } from './claude-code-tools.js';
8
+ import { getAnthropicThinkingBudget } from './thinking-levels.js';
9
+ const DEFAULT_MODEL = 'claude-sonnet-4-20250514';
10
+ const DEFAULT_MAX_TOKENS = 4096;
11
+ // Fallback version if detection fails (keep in sync with real Claude Code)
12
+ const CLAUDE_CODE_VERSION_FALLBACK = '2.1.41';
13
+ // Salt for attribution SHA computation (from Claude Code binary)
14
+ const ATTRIBUTION_SALT = '59cf53e54c78';
15
+ // Required system prompt for OAuth tokens
16
+ const CLAUDE_CODE_SYSTEM_PROMPT = 'You are Claude Code, Anthropic\'s official CLI for Claude.';
17
+ /**
18
+ * Detect the installed Claude Code version from the CLI.
19
+ * Falls back to hardcoded version if detection fails.
20
+ */
21
+ function detectClaudeCodeVersion() {
22
+ try {
23
+ const output = execFileSync('claude', ['--version'], {
24
+ encoding: 'utf-8',
25
+ timeout: 3000,
26
+ stdio: ['pipe', 'pipe', 'pipe'],
27
+ }).trim();
28
+ // Output format: "2.1.41 (Claude Code)" — extract version number
29
+ const match = output.match(/^(\d+\.\d+\.\d+)/);
30
+ if (match) {
31
+ return match[1];
32
+ }
33
+ }
34
+ catch {
35
+ // Claude CLI not installed or not accessible
36
+ }
37
+ return CLAUDE_CODE_VERSION_FALLBACK;
38
+ }
39
+ /**
40
+ * Compute the attribution SHA matching Claude Code's algorithm.
41
+ * Uses chars at positions 4, 7, 20 from the first user message + salt + version.
42
+ */
43
+ function computeAttributionSha(firstUserMessage, version) {
44
+ const chars = [4, 7, 20].map(i => firstUserMessage[i] || '0').join('');
45
+ return createHash('sha256')
46
+ .update(`${ATTRIBUTION_SALT}${chars}${version}`)
47
+ .digest('hex')
48
+ .slice(0, 3);
49
+ }
50
+ // Cache the detected version
51
+ let cachedVersion;
52
+ export class AnthropicProvider {
53
+ name = 'anthropic';
54
+ metadata = {
55
+ name: 'anthropic',
56
+ displayName: 'Anthropic Claude',
57
+ models: {
58
+ 'claude-opus-4-6': {
59
+ maxContextTokens: 200000,
60
+ supportsVision: true,
61
+ supportsTools: true,
62
+ supportsStreaming: true,
63
+ supportsImageGen: false,
64
+ costPer1kInput: 0.015,
65
+ costPer1kOutput: 0.075,
66
+ strengths: ['reasoning', 'code', 'long-context', 'creative'],
67
+ isLocal: false,
68
+ },
69
+ 'claude-sonnet-4-5-20250929': {
70
+ maxContextTokens: 200000,
71
+ supportsVision: true,
72
+ supportsTools: true,
73
+ supportsStreaming: true,
74
+ supportsImageGen: false,
75
+ costPer1kInput: 0.003,
76
+ costPer1kOutput: 0.015,
77
+ strengths: ['reasoning', 'code', 'long-context', 'creative'],
78
+ isLocal: false,
79
+ },
80
+ 'claude-opus-4-20250514': {
81
+ maxContextTokens: 200000,
82
+ supportsVision: true,
83
+ supportsTools: true,
84
+ supportsStreaming: true,
85
+ supportsImageGen: false,
86
+ costPer1kInput: 0.015,
87
+ costPer1kOutput: 0.075,
88
+ strengths: ['reasoning', 'code', 'long-context', 'creative'],
89
+ isLocal: false,
90
+ },
91
+ 'claude-sonnet-4-20250514': {
92
+ maxContextTokens: 200000,
93
+ supportsVision: true,
94
+ supportsTools: true,
95
+ supportsStreaming: true,
96
+ supportsImageGen: false,
97
+ costPer1kInput: 0.003,
98
+ costPer1kOutput: 0.015,
99
+ strengths: ['reasoning', 'code', 'long-context', 'creative'],
100
+ isLocal: false,
101
+ },
102
+ 'claude-haiku-4-5-20251001': {
103
+ maxContextTokens: 200000,
104
+ supportsVision: true,
105
+ supportsTools: true,
106
+ supportsStreaming: true,
107
+ supportsImageGen: false,
108
+ costPer1kInput: 0.0008,
109
+ costPer1kOutput: 0.004,
110
+ strengths: ['fast', 'code', 'vision'],
111
+ isLocal: false,
112
+ },
113
+ 'claude-3-opus-20240229': {
114
+ maxContextTokens: 200000,
115
+ supportsVision: true,
116
+ supportsTools: true,
117
+ supportsStreaming: true,
118
+ supportsImageGen: false,
119
+ costPer1kInput: 0.015,
120
+ costPer1kOutput: 0.075,
121
+ strengths: ['reasoning', 'creative'],
122
+ isLocal: false,
123
+ },
124
+ 'claude-3-5-haiku-20241022': {
125
+ maxContextTokens: 200000,
126
+ supportsVision: true,
127
+ supportsTools: true,
128
+ supportsStreaming: true,
129
+ supportsImageGen: false,
130
+ costPer1kInput: 0.0008,
131
+ costPer1kOutput: 0.004,
132
+ strengths: ['fast', 'code'],
133
+ isLocal: false,
134
+ },
135
+ },
136
+ isAvailable: async () => {
137
+ try {
138
+ // Check if we have valid credentials
139
+ return this.client !== undefined;
140
+ }
141
+ catch {
142
+ return false;
143
+ }
144
+ },
145
+ };
146
+ client;
147
+ defaultModel;
148
+ defaultMaxTokens;
149
+ authMode;
150
+ oauthToken;
151
+ useCliCredentials;
152
+ onTokenRefresh;
153
+ tokenExpiresAt;
154
+ /**
155
+ * Create an Anthropic provider.
156
+ *
157
+ * Authentication modes:
158
+ * 1. Setup token (sk-ant-oat01-*) - OAuth token, uses authToken parameter
159
+ * 2. OAuth access token - Uses authToken parameter
160
+ * 3. Claude CLI credentials - Read from ~/.claude/.credentials.json
161
+ * 4. Regular API key (sk-ant-api03-*) - Standard API key
162
+ */
163
+ constructor(options) {
164
+ this.defaultModel = options.model || DEFAULT_MODEL;
165
+ this.defaultMaxTokens = options.maxTokens || DEFAULT_MAX_TOKENS;
166
+ this.oauthToken = options.oauthToken;
167
+ this.useCliCredentials = options.useCliCredentials ?? true;
168
+ this.onTokenRefresh = options.onTokenRefresh;
169
+ this.tokenExpiresAt = options.tokenExpiresAt;
170
+ // Determine auth mode and initialize client
171
+ if (options.oauthToken) {
172
+ if (isSetupToken(options.oauthToken)) {
173
+ // Setup tokens (sk-ant-oat01-*) use authToken, not apiKey
174
+ this.authMode = 'setup-token';
175
+ this.client = this.createOAuthClient(options.oauthToken);
176
+ logger.info('Using setup-token auth mode (Claude Code emulation enabled)');
177
+ }
178
+ else {
179
+ // Other OAuth tokens (access tokens)
180
+ this.authMode = 'oauth';
181
+ this.client = this.createOAuthClient(options.oauthToken);
182
+ logger.info('Using oauth auth mode (Claude Code emulation enabled)');
183
+ }
184
+ }
185
+ else if (options.apiKey) {
186
+ this.authMode = 'api-key';
187
+ this.client = new Anthropic({ apiKey: options.apiKey });
188
+ }
189
+ else if (options.useCliCredentials !== false) {
190
+ // Try Claude CLI credentials
191
+ const cliCreds = readClaudeCliCredentials();
192
+ if (cliCreds) {
193
+ this.authMode = cliCreds.type === 'oauth' ? 'oauth' : 'setup-token';
194
+ this.client = this.createOAuthClient(cliCreds.accessToken);
195
+ logger.info(`Using CLI credentials, auth mode: ${this.authMode} (Claude Code emulation enabled)`);
196
+ }
197
+ else {
198
+ throw new Error('No credentials found. Provide apiKey, oauthToken, or authenticate with `claude setup-token`.');
199
+ }
200
+ }
201
+ else {
202
+ throw new Error('Either apiKey or oauthToken must be provided');
203
+ }
204
+ }
205
+ /**
206
+ * Get the Claude Code version (detected or cached).
207
+ */
208
+ getVersion() {
209
+ if (!cachedVersion) {
210
+ cachedVersion = detectClaudeCodeVersion();
211
+ logger.info(`Detected Claude Code version: ${cachedVersion}`);
212
+ }
213
+ return cachedVersion;
214
+ }
215
+ /**
216
+ * Create an Anthropic client configured for OAuth tokens.
217
+ * OAuth tokens require authToken parameter and Claude Code headers.
218
+ * We mimic Claude Code exactly to satisfy the API restriction.
219
+ */
220
+ createOAuthClient(token) {
221
+ const version = this.getVersion();
222
+ return new Anthropic({
223
+ apiKey: null,
224
+ authToken: token,
225
+ baseURL: 'https://api.anthropic.com',
226
+ defaultHeaders: {
227
+ 'anthropic-beta': 'claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,prompt-caching-scope-2026-01-05',
228
+ 'user-agent': `claude-code/${version}`,
229
+ },
230
+ });
231
+ }
232
+ /**
233
+ * Build the attribution billing header for a specific request.
234
+ * The SHA is computed per-request from the first user message content.
235
+ */
236
+ buildBillingHeader(messages) {
237
+ const version = this.getVersion();
238
+ // Extract first user message text for SHA computation
239
+ let firstUserText = '';
240
+ for (const msg of messages) {
241
+ if (msg.role === 'user') {
242
+ if (typeof msg.content === 'string') {
243
+ firstUserText = msg.content;
244
+ }
245
+ else if (Array.isArray(msg.content)) {
246
+ const textBlock = msg.content.find(b => b.type === 'text');
247
+ if (textBlock && 'text' in textBlock) {
248
+ firstUserText = textBlock.text;
249
+ }
250
+ }
251
+ break;
252
+ }
253
+ }
254
+ const sha = computeAttributionSha(firstUserText, version);
255
+ const entrypoint = process.env.CLAUDE_CODE_ENTRYPOINT ?? 'cli';
256
+ return `cc_version=${version}.${sha}; cc_entrypoint=${entrypoint}; cch=00000;`;
257
+ }
258
+ /**
259
+ * Check if OAuth mode requires Claude Code tool emulation.
260
+ */
261
+ requiresClaudeCodeEmulation() {
262
+ return this.authMode === 'setup-token' || this.authMode === 'oauth';
263
+ }
264
+ /**
265
+ * Create provider asynchronously with token refresh support.
266
+ */
267
+ static async create(options) {
268
+ const resolved = await resolveAnthropicApiKey({
269
+ apiKey: options.apiKey,
270
+ oauthToken: options.oauthToken,
271
+ useCliCredentials: options.useCliCredentials,
272
+ });
273
+ return new AnthropicProvider({
274
+ ...options,
275
+ apiKey: resolved.apiKey,
276
+ oauthToken: undefined, // Already resolved
277
+ useCliCredentials: false, // Already resolved
278
+ });
279
+ }
280
+ /**
281
+ * Check if the current OAuth token is near expiry (within 5 minutes).
282
+ */
283
+ isTokenExpiringSoon() {
284
+ if (!this.tokenExpiresAt)
285
+ return false;
286
+ return Date.now() >= this.tokenExpiresAt - 5 * 60 * 1000;
287
+ }
288
+ /**
289
+ * Refresh credentials if using OAuth/setup-token and tokens are expired or expiring soon.
290
+ * Both 'oauth' and 'setup-token' modes use OAuth tokens that expire.
291
+ */
292
+ async ensureValidCredentials() {
293
+ // API keys don't expire
294
+ if (this.authMode === 'api-key')
295
+ return;
296
+ // If we know the expiry time and it's not close, skip refresh
297
+ if (this.tokenExpiresAt && !this.isTokenExpiringSoon())
298
+ return;
299
+ // Try Claude CLI credentials for refresh (host environment)
300
+ const cliCreds = readClaudeCliCredentials();
301
+ if (cliCreds && cliCreds.type === 'oauth') {
302
+ try {
303
+ const token = await getValidAccessToken(cliCreds);
304
+ this.client = this.createOAuthClient(token);
305
+ this.tokenExpiresAt = cliCreds.expiresAt;
306
+ return;
307
+ }
308
+ catch (err) {
309
+ logger.warn('CLI credential refresh failed, trying vault callback', { error: err instanceof Error ? err : new Error(String(err)) });
310
+ }
311
+ }
312
+ // Fallback: use vault-based refresh callback (e.g. in Docker)
313
+ if (this.onTokenRefresh) {
314
+ const newToken = await this.onTokenRefresh();
315
+ if (newToken) {
316
+ this.client = this.createOAuthClient(newToken);
317
+ // Token was just refreshed; assume ~1 hour validity
318
+ this.tokenExpiresAt = Date.now() + 3600 * 1000;
319
+ logger.info('OAuth token refreshed via callback');
320
+ }
321
+ }
322
+ }
323
+ /**
324
+ * Refresh the token after a 401 error and return true if successful.
325
+ */
326
+ async handleAuthError() {
327
+ if (this.authMode === 'api-key')
328
+ return false;
329
+ logger.warn('Got 401 from API, attempting token refresh');
330
+ // Force refresh by clearing expiry so ensureValidCredentials doesn't skip
331
+ this.tokenExpiresAt = 0;
332
+ try {
333
+ await this.ensureValidCredentials();
334
+ return true;
335
+ }
336
+ catch (err) {
337
+ logger.error('Token refresh after 401 failed', { error: err instanceof Error ? err : new Error(String(err)) });
338
+ return false;
339
+ }
340
+ }
341
+ /**
342
+ * Check if an error is a 401 authentication error.
343
+ */
344
+ isAuthError(error) {
345
+ if (error instanceof Anthropic.AuthenticationError)
346
+ return true;
347
+ if (error instanceof Error && error.message.includes('401'))
348
+ return true;
349
+ return false;
350
+ }
351
+ async complete(messages, options) {
352
+ // Refresh credentials if needed
353
+ await this.ensureValidCredentials();
354
+ try {
355
+ return await this.doComplete(messages, options);
356
+ }
357
+ catch (error) {
358
+ // On 401, refresh token and retry once
359
+ if (this.isAuthError(error) && await this.handleAuthError()) {
360
+ return await this.doComplete(messages, options);
361
+ }
362
+ throw error;
363
+ }
364
+ }
365
+ async doComplete(messages, options) {
366
+ const { systemPrompt, anthropicMessages } = this.prepareMessages(messages, options);
367
+ // Build request parameters
368
+ const params = {
369
+ model: options?.model || this.defaultModel,
370
+ max_tokens: options?.maxTokens || this.defaultMaxTokens,
371
+ messages: anthropicMessages,
372
+ };
373
+ // Add thinking budget if requested
374
+ const thinkingBudget = options?.thinkingLevel
375
+ ? getAnthropicThinkingBudget(options.thinkingLevel)
376
+ : undefined;
377
+ if (thinkingBudget) {
378
+ params.thinking = { type: 'enabled', budget_tokens: thinkingBudget };
379
+ }
380
+ // For OAuth tokens, include Claude Code emulation (tools + system prompt)
381
+ if (this.requiresClaudeCodeEmulation()) {
382
+ // Claude Code tools MUST be included for the API to accept OAuth tokens
383
+ const callerTools = (options?.tools ?? []);
384
+ params.tools = [...CLAUDE_CODE_TOOLS, ...callerTools];
385
+ // Claude Code identity MUST be first in system prompt (array format with cache_control)
386
+ const systemBlocks = [
387
+ {
388
+ type: 'text',
389
+ text: CLAUDE_CODE_SYSTEM_PROMPT,
390
+ cache_control: { type: 'ephemeral' },
391
+ },
392
+ ];
393
+ if (systemPrompt) {
394
+ systemBlocks.push({
395
+ type: 'text',
396
+ text: systemPrompt,
397
+ cache_control: { type: 'ephemeral' },
398
+ });
399
+ }
400
+ params.system = systemBlocks;
401
+ }
402
+ else {
403
+ if (options?.tools && options.tools.length > 0) {
404
+ params.tools = options.tools;
405
+ }
406
+ params.system = systemPrompt;
407
+ }
408
+ // Set per-request billing header for OAuth mode
409
+ const requestOptions = this.requiresClaudeCodeEmulation()
410
+ ? { headers: { 'x-anthropic-billing-header': this.buildBillingHeader(anthropicMessages) } }
411
+ : undefined;
412
+ const response = await this.client.messages.create(params, requestOptions);
413
+ // Extract text content, filtering out tool calls for Claude Code tools
414
+ const content = response.content
415
+ .filter((block) => block.type === 'text')
416
+ .map((block) => block.text)
417
+ .join('');
418
+ return {
419
+ content,
420
+ usage: {
421
+ inputTokens: response.usage.input_tokens,
422
+ outputTokens: response.usage.output_tokens,
423
+ },
424
+ model: response.model,
425
+ finishReason: response.stop_reason || 'unknown',
426
+ };
427
+ }
428
+ async *stream(messages, options) {
429
+ // Refresh credentials if needed
430
+ await this.ensureValidCredentials();
431
+ try {
432
+ yield* this.doStream(messages, options);
433
+ }
434
+ catch (error) {
435
+ // On 401 before any chunks were yielded, refresh and retry
436
+ if (this.isAuthError(error) && await this.handleAuthError()) {
437
+ yield* this.doStream(messages, options);
438
+ }
439
+ else {
440
+ yield {
441
+ type: 'error',
442
+ error: error instanceof Error ? error.message : 'Unknown error',
443
+ };
444
+ }
445
+ }
446
+ }
447
+ async *doStream(messages, options) {
448
+ const { systemPrompt, anthropicMessages } = this.prepareMessages(messages, options);
449
+ // Build request parameters
450
+ const params = {
451
+ model: options?.model || this.defaultModel,
452
+ max_tokens: options?.maxTokens || this.defaultMaxTokens,
453
+ messages: anthropicMessages,
454
+ };
455
+ // Add thinking budget if requested
456
+ const thinkingBudget = options?.thinkingLevel
457
+ ? getAnthropicThinkingBudget(options.thinkingLevel)
458
+ : undefined;
459
+ if (thinkingBudget) {
460
+ params.thinking = { type: 'enabled', budget_tokens: thinkingBudget };
461
+ }
462
+ // For OAuth tokens, include Claude Code emulation (tools + system prompt)
463
+ if (this.requiresClaudeCodeEmulation()) {
464
+ const callerTools = (options?.tools ?? []);
465
+ params.tools = [...CLAUDE_CODE_TOOLS, ...callerTools];
466
+ const systemBlocks = [
467
+ {
468
+ type: 'text',
469
+ text: CLAUDE_CODE_SYSTEM_PROMPT,
470
+ cache_control: { type: 'ephemeral' },
471
+ },
472
+ ];
473
+ if (systemPrompt) {
474
+ systemBlocks.push({
475
+ type: 'text',
476
+ text: systemPrompt,
477
+ cache_control: { type: 'ephemeral' },
478
+ });
479
+ }
480
+ params.system = systemBlocks;
481
+ }
482
+ else {
483
+ if (options?.tools && options.tools.length > 0) {
484
+ params.tools = options.tools;
485
+ }
486
+ params.system = systemPrompt;
487
+ }
488
+ // Track Claude Code tool names to filter them from output (unless passthrough enabled)
489
+ const filterCCTools = !options?.passThroughAllTools;
490
+ const ccToolNames = new Set(CLAUDE_CODE_TOOLS.map(t => t.name));
491
+ // Set per-request billing header for OAuth mode
492
+ const requestOptions = this.requiresClaudeCodeEmulation()
493
+ ? { headers: { 'x-anthropic-billing-header': this.buildBillingHeader(anthropicMessages) } }
494
+ : undefined;
495
+ const stream = this.client.messages.stream(params, requestOptions);
496
+ let currentToolUse = null;
497
+ let inThinkingBlock = false;
498
+ for await (const event of stream) {
499
+ if (event.type === 'content_block_start') {
500
+ const block = event.content_block;
501
+ if (block.type === 'tool_use') {
502
+ // Start collecting tool use
503
+ currentToolUse = {
504
+ id: block.id,
505
+ name: block.name,
506
+ input: '',
507
+ };
508
+ inThinkingBlock = false;
509
+ }
510
+ else if (block.type === 'thinking') {
511
+ inThinkingBlock = true;
512
+ }
513
+ else {
514
+ inThinkingBlock = false;
515
+ }
516
+ }
517
+ else if (event.type === 'content_block_delta') {
518
+ const delta = event.delta;
519
+ if ('text' in delta) {
520
+ yield { type: 'text', content: delta.text };
521
+ }
522
+ else if (delta.thinking && inThinkingBlock) {
523
+ yield { type: 'thinking', content: delta.thinking };
524
+ }
525
+ else if ('partial_json' in delta && currentToolUse) {
526
+ // Accumulate tool input
527
+ currentToolUse.input += delta.partial_json;
528
+ }
529
+ }
530
+ else if (event.type === 'content_block_stop' && currentToolUse) {
531
+ // Skip Claude Code emulation tools unless passthrough is enabled
532
+ if (filterCCTools && ccToolNames.has(currentToolUse.name)) {
533
+ currentToolUse = null;
534
+ }
535
+ else {
536
+ // Tool use complete - parse and yield
537
+ try {
538
+ const input = currentToolUse.input ? JSON.parse(currentToolUse.input) : {};
539
+ yield {
540
+ type: 'tool_use',
541
+ toolUse: {
542
+ id: currentToolUse.id,
543
+ name: currentToolUse.name,
544
+ input,
545
+ },
546
+ };
547
+ }
548
+ catch {
549
+ // Log but don't propagate as a stream error — skip this tool call
550
+ yield {
551
+ type: 'tool_use',
552
+ toolUse: {
553
+ id: currentToolUse.id,
554
+ name: currentToolUse.name,
555
+ input: {},
556
+ },
557
+ };
558
+ }
559
+ currentToolUse = null;
560
+ }
561
+ }
562
+ else if (event.type === 'message_stop') {
563
+ const finalMessage = await stream.finalMessage();
564
+ yield {
565
+ type: 'done',
566
+ usage: {
567
+ inputTokens: finalMessage.usage.input_tokens,
568
+ outputTokens: finalMessage.usage.output_tokens,
569
+ },
570
+ };
571
+ }
572
+ }
573
+ }
574
+ prepareMessages(messages, options) {
575
+ let systemPrompt = options?.systemPrompt;
576
+ const anthropicMessages = [];
577
+ for (const msg of messages) {
578
+ if (msg.role === 'system') {
579
+ // Anthropic uses system as a separate parameter
580
+ systemPrompt = systemPrompt ? `${systemPrompt}\n\n${msg.content}` : msg.content;
581
+ }
582
+ else if (msg.content) {
583
+ // Skip messages with empty content — Anthropic API rejects them
584
+ anthropicMessages.push({
585
+ role: msg.role,
586
+ content: msg.content,
587
+ });
588
+ }
589
+ }
590
+ // Ensure message alternation (Anthropic requirement)
591
+ const fixed = this.fixMessageAlternation(anthropicMessages);
592
+ return { systemPrompt, anthropicMessages: fixed };
593
+ }
594
+ fixMessageAlternation(messages) {
595
+ if (messages.length === 0)
596
+ return messages;
597
+ const fixed = [];
598
+ for (const msg of messages) {
599
+ const lastRole = fixed.length > 0 ? fixed[fixed.length - 1].role : null;
600
+ if (lastRole === msg.role) {
601
+ // Merge consecutive messages of same role
602
+ const last = fixed[fixed.length - 1];
603
+ if (typeof last.content === 'string' && typeof msg.content === 'string') {
604
+ last.content = `${last.content}\n\n${msg.content}`;
605
+ }
606
+ }
607
+ else {
608
+ fixed.push({ ...msg });
609
+ }
610
+ }
611
+ // Ensure first message is from user
612
+ if (fixed.length > 0 && fixed[0].role !== 'user') {
613
+ fixed.unshift({ role: 'user', content: '(Starting conversation)' });
614
+ }
615
+ return fixed;
616
+ }
617
+ }
618
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../src/anthropic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Claude Code tool definitions for OAuth token compatibility.
3
+ *
4
+ * OAuth tokens from Claude Pro/Max are restricted to Claude Code usage.
5
+ * By sending Claude Code's tools with requests, we can use these tokens.
6
+ */
7
+ export interface ClaudeCodeTool {
8
+ name: string;
9
+ description: string;
10
+ input_schema: {
11
+ type: 'object';
12
+ properties: Record<string, unknown>;
13
+ required?: string[];
14
+ };
15
+ }
16
+ /**
17
+ * Claude Code tool names in canonical casing.
18
+ */
19
+ export declare const CLAUDE_CODE_TOOL_NAMES: readonly ["Read", "Write", "Edit", "Bash", "Grep", "Glob", "AskUserQuestion", "EnterPlanMode", "ExitPlanMode", "NotebookEdit", "Skill", "Task", "TaskOutput", "WebFetch", "WebSearch"];
20
+ /**
21
+ * Minimal Claude Code tool definitions.
22
+ * These are simplified versions - just enough for the API to accept the request.
23
+ */
24
+ export declare const CLAUDE_CODE_TOOLS: ClaudeCodeTool[];
25
+ /**
26
+ * Convert a tool name to Claude Code canonical casing.
27
+ */
28
+ export declare function toClaudeCodeToolName(name: string): string;
29
+ //# sourceMappingURL=claude-code-tools.d.ts.map