deepseek-ai/deepseek-harness · error · WebError
WEB_PROVIDER_CREDENTIAL_MISSING
WEB_PROVIDER_CREDENTIAL_MISSING
Error message
DeepSeek search has no API key for "${ref}"; store it through the credentials service (the web Models page writes it), export it in the launching environment, or set a literal "apiKey" in the web-search-deepseek config What it means
Error "DeepSeek search has no API key for "${ref}"; store it through the credentials service (the web Models page writes it), export it in the launching environment, or set a literal "apiKey" in the web-search-deepseek config" thrown in deepseek-ai/deepseek-harness.
Source
Thrown at packages/web/web-search-deepseek/src/provider.ts:294
* @returns the resolved key.
*/
private async apiKey(options: DeepSeekSearchProviderOptions, signal?: AbortSignal): Promise<string> {
throwIfSearchAborted(signal)
if (options.apiKey !== undefined && options.apiKey.length > 0) return options.apiKey
let resolved: string | undefined
try {
resolved = await abortable(options.resolveApiKey?.() ?? Promise.resolve(undefined), signal)
} catch (error: unknown) {
if (signal?.aborted === true || isAbortError(error)) throw searchAborted(signal, error)
throw new WebError(
`DeepSeek search credential resolution failed: ${String(error)}`,
'WEB_PROVIDER_ERROR',
{ cause: error },
)
}
if (resolved !== undefined && resolved.length > 0) return resolved
const ref = options.apiKeyEnv ?? 'DEEPSEEK_API_KEY'
throw new WebError(
`DeepSeek search has no API key for "${ref}"; store it through the credentials service`
+ ' (the web Models page writes it), export it in the launching environment, or set a literal'
+ ' "apiKey" in the web-search-deepseek config',
'WEB_PROVIDER_CREDENTIAL_MISSING',
)
}
}
/**
* Race a same-process asynchronous preflight against caller cancellation. The
* attached settlement handlers keep observing an uncooperative operation after
* abort so a later rejection cannot become unhandled.
*/
function abortable<T>(operation: Promise<T>, signal?: AbortSignal): Promise<T> {
if (signal === undefined) return operation
if (signal.aborted) return Promise.reject(searchAborted(signal))
return new Promise<T>((resolve, reject) => {
const onAbort = (): void => { reject(searchAborted(signal)) }View on GitHub (pinned to b150a551b8)
Solutions
- Store the DeepSeek API key through the credentials service, export it in the launching environment, or set apiKey in the web-search-deepseek config.
When it happens
Trigger: Thrown at packages/web/web-search-deepseek/src/provider.ts:294 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of deepseek-ai/deepseek-harness@b150a551b8 (2026-08-24).
Data as JSON: /api/errors/000aa145c20f5405.
Report an issue: GitHub.