diff --git a/src/shared/constants/providers.ts b/src/shared/constants/providers.ts index 4ecda2a411..7f6a7ef57c 100644 --- a/src/shared/constants/providers.ts +++ b/src/shared/constants/providers.ts @@ -427,6 +427,7 @@ export const WEB_COOKIE_PROVIDERS = { textIcon: "DDG", website: "https://duckduckgo.com/duckchat", hasFree: true, + noAuth: true, freeNote: "Free — anonymous access to multiple AI models via DuckDuckGo.", authHint: "No credentials required — DuckDuckGo AI Chat is anonymous and free.", }, @@ -2892,6 +2893,7 @@ export function providerAllowsOptionalApiKey(providerId: unknown): boolean { providerId === "petals" || providerId === "pollinations" || providerId === "copilot-web" || + providerId === "duckduckgo-web" || providerId === "veoaifree-web" || providerId === "hackclub" || providerId === "huggingchat" || diff --git a/src/sse/services/auth.ts b/src/sse/services/auth.ts index cedc25bab6..65a69f194f 100644 --- a/src/sse/services/auth.ts +++ b/src/sse/services/auth.ts @@ -47,6 +47,7 @@ import { getProviderAlias, resolveProviderId, NOAUTH_PROVIDERS, + WEB_COOKIE_PROVIDERS, } from "@/shared/constants/providers"; import { isModelExcludedByConnection } from "@/domain/connectionModelRules"; import * as log from "../utils/logger"; @@ -825,9 +826,11 @@ export async function getProviderCredentials( // No-auth providers (e.g. opencode) need no DB connection — return synthetic credentials // so the executor receives a valid credentials object without auth headers being added. const resolvedId = resolveProviderId(provider); - if ( - (NOAUTH_PROVIDERS as Record)[resolvedId]?.noAuth - ) { + const providerMaps: Record[] = [ + NOAUTH_PROVIDERS as Record, + WEB_COOKIE_PROVIDERS as Record, + ]; + if (providerMaps.some((map) => map[resolvedId]?.noAuth)) { return { apiKey: null, accessToken: null,