| export type Profile = "cloud" | "local"; |
|
|
| function readProfile(): Profile { |
| const raw = (process.env["DOATLAS_PROFILE"] || "cloud").toLowerCase(); |
| return raw === "local" ? "local" : "cloud"; |
| } |
|
|
| const env = process.env; |
|
|
| |
| const hasAnthropicCloud = Boolean(env["AI_INTEGRATIONS_ANTHROPIC_BASE_URL"]); |
| const hasOpenAICloud = Boolean(env["AI_INTEGRATIONS_OPENAI_BASE_URL"]); |
| const hasGeminiCloud = Boolean(env["AI_INTEGRATIONS_GEMINI_BASE_URL"]); |
|
|
| |
| const hasAnthropicDirect = Boolean(env["ANTHROPIC_API_KEY"]); |
| const hasOpenAIDirect = Boolean(env["OPENAI_API_KEY"]); |
| const hasGeminiDirect = Boolean(env["GEMINI_API_KEY"]); |
|
|
| export const config = { |
| profile: readProfile(), |
| appVersion: env["DOATLAS_VERSION"] || "1.0.0", |
| buildSha: env["DOATLAS_BUILD"] || "dev", |
| |
| inviteCodes: ( |
| env["INVITE_CODES"] || |
| (env["NODE_ENV"] !== "production" |
| ? "INVITE-DEMO,INVITE-DOATLAS,INVITE-TEST" |
| : "") |
| ) |
| .split(",") |
| .map((c) => c.trim()) |
| .filter(Boolean), |
|
|
| |
| hasAnthropicCloud, |
| hasOpenAICloud, |
| hasGeminiCloud, |
|
|
| |
| hasAnthropicDirect, |
| hasOpenAIDirect, |
| hasGeminiDirect, |
|
|
| |
| hasAnthropic: hasAnthropicCloud || hasAnthropicDirect, |
| hasOpenAI: hasOpenAICloud || hasOpenAIDirect, |
| hasGemini: hasGeminiCloud || hasGeminiDirect, |
|
|
| |
| hasDeepseek: Boolean(env["DEEPSEEK_API_KEY"]), |
| hasKimi: Boolean(env["MOONSHOT_API_KEY"] || env["KIMI_API_KEY"]), |
| hasZhipu: Boolean(env["ZHIPU_API_KEY"]), |
| hasMinimax: Boolean(env["MINIMAX_API_KEY"]), |
| hasQwen: Boolean(env["DASHSCOPE_API_KEY"] || env["QWEN_API_KEY"]), |
| hasCodexCli: Boolean(env["CODEX_CLI_BIN"]), |
| }; |
|
|
| export function featureFlags(): Record<string, boolean> { |
| const llmAvailable = |
| config.profile === "cloud" |
| ? config.hasAnthropic || config.hasOpenAI || config.hasGemini |
| : config.hasAnthropic || |
| config.hasOpenAI || |
| config.hasGemini || |
| config.hasDeepseek || |
| config.hasKimi || |
| config.hasZhipu || |
| config.hasMinimax || |
| config.hasQwen || |
| config.hasCodexCli; |
| return { |
| streaming: llmAvailable, |
| voice: false, |
| attachments: false, |
| artifacts: false, |
| }; |
| } |
|
|