rebrand better-clawd and ship initial npm-ready release

This commit is contained in:
x1xhlol
2026-04-01 16:51:18 +02:00
Unverified
parent 420d4155ec
commit 407fa14d6f
109 changed files with 4155 additions and 1690 deletions

View File

@@ -1,22 +1,106 @@
import type { AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS } from '../../services/analytics/index.js'
import { isEnvTruthy } from '../envUtils.js'
export type APIProvider = 'firstParty' | 'bedrock' | 'vertex' | 'foundry'
export type APIProvider =
| 'firstParty'
| 'openrouter'
| 'openai'
| 'bedrock'
| 'vertex'
| 'foundry'
function getExplicitProviderOverride(): APIProvider | null {
const rawProvider =
process.env.BETTER_CLAWD_API_PROVIDER ??
process.env.CLAUDE_CODE_API_PROVIDER
switch (rawProvider?.toLowerCase()) {
case 'anthropic':
case 'firstparty':
case 'first_party':
case 'first-party':
return 'firstParty'
case 'openrouter':
return 'openrouter'
case 'openai':
return 'openai'
case 'bedrock':
return 'bedrock'
case 'vertex':
return 'vertex'
case 'foundry':
return 'foundry'
default:
return null
}
}
export function isOpenRouterBaseUrl(baseUrl?: string | null): boolean {
if (!baseUrl) {
return false
}
try {
return new URL(baseUrl).host === 'openrouter.ai'
} catch {
return false
}
}
export function isOpenRouterConfigured(): boolean {
return (
getExplicitProviderOverride() === 'openrouter' ||
Boolean(process.env.OPENROUTER_API_KEY) ||
isOpenRouterBaseUrl(process.env.OPENROUTER_BASE_URL) ||
isOpenRouterBaseUrl(process.env.ANTHROPIC_BASE_URL)
)
}
export function isOpenAIConfigured(): boolean {
return (
getExplicitProviderOverride() === 'openai' ||
Boolean(process.env.OPENAI_API_KEY) ||
Boolean(process.env.OPENAI_BASE_URL) ||
Boolean(process.env.OPENAI_ACCESS_TOKEN) ||
Boolean(process.env.CODEX_ACCESS_TOKEN)
)
}
export function getOpenRouterBaseUrl(): string {
return process.env.OPENROUTER_BASE_URL ?? 'https://openrouter.ai/api/v1'
}
export function getOpenAIBaseUrl(): string {
return process.env.OPENAI_BASE_URL ?? 'https://api.openai.com/v1'
}
export function getAPIProvider(): APIProvider {
const explicitProvider = getExplicitProviderOverride()
if (explicitProvider) {
return explicitProvider
}
return isEnvTruthy(process.env.CLAUDE_CODE_USE_BEDROCK)
? 'bedrock'
: isEnvTruthy(process.env.CLAUDE_CODE_USE_VERTEX)
? 'vertex'
: isEnvTruthy(process.env.CLAUDE_CODE_USE_FOUNDRY)
? 'foundry'
: 'firstParty'
: isOpenAIConfigured()
? 'openai'
: isOpenRouterConfigured()
? 'openrouter'
: 'firstParty'
}
export function getAPIProviderForStatsig(): AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS {
return getAPIProvider() as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS
}
export function isAnthropicCompatibleProvider(
provider: APIProvider = getAPIProvider(),
): boolean {
return provider !== 'openai'
}
/**
* Check if ANTHROPIC_BASE_URL is a first-party Anthropic API URL.
* Returns true if not set (default API) or points to api.anthropic.com