fix: detect and display env var API config fallback (closes #22, closes #4)

Providers API now detects ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN, and
ANTHROPIC_BASE_URL from environment. ProviderManager shows a banner
when env vars are detected, informing users they're used automatically
when no provider is active.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
7418andClaude Opus 4.6 committed 2026-02-08 20:54:10 +08:00
1 parent 81125a233b
commit 4617c71f34
2 files changed
+53 -3

No files matched your search

+27 -2
View File
@@ -1,6 +1,6 @@
import { NextRequest, NextResponse } from 'next/server';
import { getAllProviders, createProvider } from '@/lib/db';
import type { ProvidersResponse, ProviderResponse, ErrorResponse, CreateProviderRequest, ApiProvider } from '@/types';
import type { ProviderResponse, ErrorResponse, CreateProviderRequest, ApiProvider } from '@/types';
function maskApiKey(provider: ApiProvider): ApiProvider {
let maskedKey = provider.api_key;
@@ -10,10 +10,35 @@ function maskApiKey(provider: ApiProvider): ApiProvider {
return { ...provider, api_key: maskedKey };
}
/** Check which ANTHROPIC_* env vars are set in the server process environment */
function detectEnvVars(): Record<string, string> {
const detected: Record<string, string> = {};
const envKeys = [
'ANTHROPIC_API_KEY',
'ANTHROPIC_AUTH_TOKEN',
'ANTHROPIC_BASE_URL',
];
for (const key of envKeys) {
const val = process.env[key];
if (val) {
// Mask secrets, show base_url in full
if (key.includes('URL')) {
detected[key] = val;
} else if (val.length > 8) {
detected[key] = '***' + val.slice(-8);
} else {
detected[key] = '***';
}
}
}
return detected;
}
export async function GET() {
try {
const providers = getAllProviders().map(maskApiKey);
return NextResponse.json<ProvidersResponse>({ providers });
const envDetected = detectEnvVars();
return NextResponse.json({ providers, env_detected: envDetected });
} catch (error) {
return NextResponse.json<ErrorResponse>(
{ error: error instanceof Error ? error.message : 'Failed to get providers' },