@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.
- package/LICENSE +191 -0
- package/dist/anthropic.d.ts +82 -0
- package/dist/anthropic.d.ts.map +1 -0
- package/dist/anthropic.js +618 -0
- package/dist/anthropic.js.map +1 -0
- package/dist/claude-code-tools.d.ts +29 -0
- package/dist/claude-code-tools.d.ts.map +1 -0
- package/dist/claude-code-tools.js +221 -0
- package/dist/claude-code-tools.js.map +1 -0
- package/dist/claude-oauth.d.ts +86 -0
- package/dist/claude-oauth.d.ts.map +1 -0
- package/dist/claude-oauth.js +318 -0
- package/dist/claude-oauth.js.map +1 -0
- package/dist/cohere.d.ts +18 -0
- package/dist/cohere.d.ts.map +1 -0
- package/dist/cohere.js +163 -0
- package/dist/cohere.js.map +1 -0
- package/dist/deepseek.d.ts +18 -0
- package/dist/deepseek.d.ts.map +1 -0
- package/dist/deepseek.js +164 -0
- package/dist/deepseek.js.map +1 -0
- package/dist/factory.d.ts +19 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/factory.js +108 -0
- package/dist/factory.js.map +1 -0
- package/dist/google.d.ts +18 -0
- package/dist/google.d.ts.map +1 -0
- package/dist/google.js +141 -0
- package/dist/google.js.map +1 -0
- package/dist/groq.d.ts +18 -0
- package/dist/groq.d.ts.map +1 -0
- package/dist/groq.js +186 -0
- package/dist/groq.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/ollama.d.ts +18 -0
- package/dist/ollama.d.ts.map +1 -0
- package/dist/ollama.js +141 -0
- package/dist/ollama.js.map +1 -0
- package/dist/openai-compatible.d.ts +20 -0
- package/dist/openai-compatible.d.ts.map +1 -0
- package/dist/openai-compatible.js +112 -0
- package/dist/openai-compatible.js.map +1 -0
- package/dist/openai.d.ts +20 -0
- package/dist/openai.d.ts.map +1 -0
- package/dist/openai.js +259 -0
- package/dist/openai.js.map +1 -0
- package/dist/replicate.d.ts +20 -0
- package/dist/replicate.d.ts.map +1 -0
- package/dist/replicate.js +186 -0
- package/dist/replicate.js.map +1 -0
- package/dist/thinking-levels.d.ts +16 -0
- package/dist/thinking-levels.d.ts.map +1 -0
- package/dist/thinking-levels.js +34 -0
- package/dist/thinking-levels.js.map +1 -0
- package/dist/types.d.ts +157 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/xai.d.ts +18 -0
- package/dist/xai.d.ts.map +1 -0
- package/dist/xai.js +164 -0
- package/dist/xai.js.map +1 -0
- package/package.json +30 -0
- package/src/anthropic.ts +691 -0
- package/src/claude-code-tools.ts +233 -0
- package/src/claude-oauth.ts +410 -0
- package/src/cohere.ts +242 -0
- package/src/deepseek.ts +241 -0
- package/src/factory.ts +142 -0
- package/src/google.ts +176 -0
- package/src/groq.ts +263 -0
- package/src/index.ts +44 -0
- package/src/ollama.ts +194 -0
- package/src/openai-compatible.ts +154 -0
- package/src/openai.ts +307 -0
- package/src/replicate.ts +247 -0
- package/src/thinking-levels.ts +37 -0
- package/src/types.ts +171 -0
- package/src/xai.ts +241 -0
- package/tests/adapters.test.ts +185 -0
- package/tests/claude-oauth.test.ts +45 -0
- package/tests/new-providers.test.ts +732 -0
- package/tests/thinking-levels.test.ts +82 -0
- package/tsconfig.json +8 -0
- 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
|