{"record":{"id":"ac330eb4d962f7d6","repo":"deepseek-ai/deepseek-harness","slug":"web-provider-error-ac330e","errorCode":"WEB_PROVIDER_ERROR","errorMessage":"Exa search request failed: ${String(error)}","messagePattern":"Exa search request failed: (.+?)","errorType":"exception","errorClass":"WebError","httpStatus":null,"severity":"error","filePath":"packages/web/web-search-exa/src/provider.ts","lineNumber":120,"sourceCode":"        method: 'POST',\n        redirect: 'error',\n        headers: {\n          'authorization': `Bearer ${this.options.apiKey}`,\n          'content-type': 'application/json',\n          'accept': 'application/json',\n          'user-agent': USER_AGENT,\n        },\n        body: JSON.stringify({\n          query: request.query,\n          type: this.options.searchType,\n          contents: { highlights: { highlightsPerUrl: this.options.highlightsPerResult } },\n          ...numResults !== undefined ? { numResults } : {},\n        }),\n        ...signal !== undefined ? { signal } : {},\n      })\n    } catch (error: unknown) {\n      if (isAbortError(error)) throw new WebError('Exa search aborted', 'WEB_ABORTED', { cause: error })\n      throw new WebError(`Exa search request failed: ${String(error)}`, 'WEB_PROVIDER_ERROR', { cause: error })\n    }\n\n    if (!response.ok) {\n      const status = response.status\n      let message = `Exa API error (HTTP ${status})`\n      try {\n        const parsed = await response.json() as ExaError\n        const detail = parsed.error ?? parsed.message\n        if (detail !== undefined && detail.length > 0) message = detail\n      } catch (error: unknown) {\n        // An abort fired mid-body must surface as WEB_ABORTED, not be swallowed\n        // into a generic HTTP-error message — cancellation is not a provider\n        // error (the seam's cancellation contract).\n        if (isAbortError(error)) throw new WebError('Exa search aborted', 'WEB_ABORTED', { cause: error })\n        // Otherwise: the HTTP status is already captured in `message` above; a\n        // malformed/non-JSON error body (normal for gateway 5xx/429s) can only\n        // cost a richer provider message, never the real error.\n      }","sourceCodeStart":102,"sourceCodeEnd":138,"githubUrl":"https://github.com/deepseek-ai/deepseek-harness/blob/b150a551b8d465e31e418e1b2eaf5e79bbb7d28e/packages/web/web-search-exa/src/provider.ts#L102-L138","documentation":"Error \"Exa search request failed: ${String(error)}\" thrown in deepseek-ai/deepseek-harness.","triggerScenarios":"Thrown at packages/web/web-search-exa/src/provider.ts:120 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Inspect the request error in the message; check the Exa API key, quota, and network connectivity."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"b150a551b8d465e31e418e1b2eaf5e79bbb7d28e","analyzedAt":"2026-08-24T18:12:29.105Z","schemaVersion":2},"datasetVersion":"2026-08-24T22:17:12.610Z"}