@@ -6,6 +6,7 @@ import { createGoogleGenerativeAI } from "@ai-sdk/google";
6
6
import { createOpenAI } from "@ai-sdk/openai" ;
7
7
import { createXai } from "@ai-sdk/xai" ;
8
8
import { spawn } from "child_process" ;
9
+ import { randomUUID } from "crypto" ;
9
10
import {
10
11
createAnthropicProxy ,
11
12
type CreateAnthropicProxyOptions ,
@@ -42,28 +43,47 @@ if (process.env.ANTHROPIC_API_KEY) {
42
43
} ) ;
43
44
}
44
45
46
+ // Authentication token for the proxy. If the user already provided an
47
+ // ANTHROPIC_AUTH_TOKEN or ANTHROPIC_API_KEY, reuse it so Claude sends it as
48
+ // Authorization: Bearer / X-Api-Key. Otherwise generate an ephemeral token and
49
+ // inject it only into the spawned Claude process.
50
+ const proxyAuthToken =
51
+ process . env . ANTHROPIC_AUTH_TOKEN ??
52
+ process . env . ANTHROPIC_API_KEY ??
53
+ randomUUID ( ) ;
54
+
55
+ const proxyAuthHeaderName = process . env . ANYCLAUDE_AUTH_HEADER ?? "X-AnyClaude-Token" ;
56
+
45
57
const proxyURL = createAnthropicProxy ( {
46
58
providers,
59
+ host : "127.0.0.1" ,
60
+ authToken : proxyAuthToken ,
61
+ authHeaderName : proxyAuthHeaderName ,
47
62
} ) ;
48
63
49
64
if ( process . env . PROXY_ONLY === "true" ) {
50
- console . log ( "Proxy only mode: " + proxyURL ) ;
65
+ console . log ( "Proxy only mode: " + proxyURL ) ;
51
66
} else {
52
67
const claudeArgs = process . argv . slice ( 2 ) ;
53
68
const proc = spawn ( "claude" , claudeArgs , {
54
69
env : {
55
70
...process . env ,
56
71
ANTHROPIC_BASE_URL : proxyURL ,
72
+ // Ensure the Claude CLI includes our custom header via ANTHROPIC_CUSTOM_HEADERS
73
+ ANTHROPIC_CUSTOM_HEADERS : ( ( ) => {
74
+ const existing = process . env . ANTHROPIC_CUSTOM_HEADERS ;
75
+ const line = `${ proxyAuthHeaderName } : ${ proxyAuthToken } ` ;
76
+ return existing ? `${ existing } \n${ line } ` : line ;
77
+ } ) ( ) ,
57
78
} ,
58
79
stdio : "inherit" ,
59
80
} ) ;
60
81
proc . on ( "exit" , ( code ) => {
61
82
if ( claudeArgs [ 0 ] === "-h" || claudeArgs [ 0 ] === "--help" ) {
62
83
console . log ( "\nCustom Models:" )
63
- console . log ( " --model <provider>/<model> e.g. openai/o3 " ) ;
84
+ console . log ( " --model <provider>/<model> e.g. openai/gpt-5-mini " ) ;
64
85
}
65
86
66
87
process . exit ( code ) ;
67
88
} ) ;
68
89
}
69
-
0 commit comments