feat: support ANTHROPIC_BASE_URL in EnvManager (#1627)

* feat: add custom OpenRouter base URL support

Allow users to configure a custom base URL for OpenRouter API calls
through settings UI and environment management.

Generated with AI

Co-Authored-By: AI Partner

* refactor: remove OpenRouter base URL customization, keep Claude URL changes

Only retain ANTHROPIC_BASE_URL and ANTHROPIC_AUTH_TOKEN support in
EnvManager for custom Claude API endpoint configuration.

Generated with AI

Co-Authored-By: AI Partner

* chore: revert build artifacts to match main

Generated with AI

Co-Authored-By: AI Partner

* fix: remove ANTHROPIC_AUTH_TOKEN, add ANTHROPIC_BASE_URL persistence

- Remove unnecessary ANTHROPIC_AUTH_TOKEN (inherited from parent process)
- Add ANTHROPIC_BASE_URL to saveClaudeMemEnv() to fix config persistence
- Keep only ANTHROPIC_BASE_URL support for custom API endpoint

Generated with AI

Co-Authored-By: AI Partner
This commit is contained in:
WuTao
2026-04-09 07:17:06 +08:00
committed by GitHub
parent f7fd2221c8
commit 07be61cf91
+15
View File
@@ -40,6 +40,7 @@ export const MANAGED_CREDENTIAL_KEYS = [
export interface ClaudeMemEnv {
// Credentials (optional - empty means use CLI billing for Claude)
ANTHROPIC_API_KEY?: string;
ANTHROPIC_BASE_URL?: string;
GEMINI_API_KEY?: string;
OPENROUTER_API_KEY?: string;
}
@@ -115,6 +116,7 @@ export function loadClaudeMemEnv(): ClaudeMemEnv {
// Only return managed credential keys
const result: ClaudeMemEnv = {};
if (parsed.ANTHROPIC_API_KEY) result.ANTHROPIC_API_KEY = parsed.ANTHROPIC_API_KEY;
if (parsed.ANTHROPIC_BASE_URL) result.ANTHROPIC_BASE_URL = parsed.ANTHROPIC_BASE_URL;
if (parsed.GEMINI_API_KEY) result.GEMINI_API_KEY = parsed.GEMINI_API_KEY;
if (parsed.OPENROUTER_API_KEY) result.OPENROUTER_API_KEY = parsed.OPENROUTER_API_KEY;
@@ -151,6 +153,13 @@ export function saveClaudeMemEnv(env: ClaudeMemEnv): void {
delete updated.ANTHROPIC_API_KEY;
}
}
if (env.ANTHROPIC_BASE_URL !== undefined) {
if (env.ANTHROPIC_BASE_URL) {
updated.ANTHROPIC_BASE_URL = env.ANTHROPIC_BASE_URL;
} else {
delete updated.ANTHROPIC_BASE_URL;
}
}
if (env.GEMINI_API_KEY !== undefined) {
if (env.GEMINI_API_KEY) {
updated.GEMINI_API_KEY = env.GEMINI_API_KEY;
@@ -210,6 +219,12 @@ export function buildIsolatedEnv(includeCredentials: boolean = true): Record<str
if (credentials.ANTHROPIC_API_KEY) {
isolatedEnv.ANTHROPIC_API_KEY = credentials.ANTHROPIC_API_KEY;
}
// Override ANTHROPIC_BASE_URL from .env if configured
// This ensures the SDK subprocess uses a stable API endpoint instead of
// inheriting a dynamic local proxy port that may become stale
if (credentials.ANTHROPIC_BASE_URL) {
isolatedEnv.ANTHROPIC_BASE_URL = credentials.ANTHROPIC_BASE_URL;
}
// Note: GEMINI_API_KEY and OPENROUTER_API_KEY pass through from process.env,
// but claude-mem's .env takes precedence if configured
if (credentials.GEMINI_API_KEY) {