{"record":{"id":"bc7a9fc6e268cd83","repo":"continuedev/continue","slug":"gitlab-private-token-is-required","errorCode":null,"errorMessage":"GitLab Private Token is required!","messagePattern":"GitLab Private Token is required!","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"core/context/providers/GitLabMergeRequestContextProvider.ts","lineNumber":90,"sourceCode":"  static description: ContextProviderDescription = {\n    title: \"gitlab-mr\",\n    displayTitle: \"GitLab Merge Request\",\n    description: \"Reference comments in a GitLab Merge Request\",\n    type: \"normal\",\n  };\n\n  get deprecationMessage() {\n    return \"The Gitlab Merge Request context provider is now deprecated and will be removed in a later version. Please consider using the GitLab MCP (https://continue.dev/docker/mcp-gitlab) instead.\";\n  }\n\n  private async getApi(): Promise<AxiosInstance> {\n    const { default: Axios } = await import(\"axios\");\n\n    const domain = this.options.domain ?? \"gitlab.com\";\n    const token = this.options.token;\n\n    if (!token) {\n      throw new Error(\"GitLab Private Token is required!\");\n    }\n\n    return Axios.create({\n      baseURL: `https://${domain ?? \"gitlab.com\"}/api/v4`,\n      headers: {\n        \"PRIVATE-TOKEN\": token,\n      },\n    });\n  }\n\n  private async getRemoteBranchInfo(\n    extras: ContextProviderExtras,\n  ): Promise<RemoteBranchInfo> {\n    const subprocess = await getSubprocess(extras);\n\n    const branchName = await subprocess(\"git branch --show-current\");\n\n    const branchRemote = await subprocess(","sourceCodeStart":72,"sourceCodeEnd":108,"githubUrl":"https://github.com/continuedev/continue/blob/5522c6f44ca0ac3528b37244818fbfa39b5af470/core/context/providers/GitLabMergeRequestContextProvider.ts#L72-L108","documentation":"The WatsonX legacy streaming completion request failed at HTTP level (non-ok or missing body), with the response text embedded. Same failure surface as the chat streaming error but on the completions path.","triggerScenarios":"completionStream hitting expired IAM token, wrong project id, unavailable model, or gateway/proxy errors returning non-2xx with no SSE body.","commonSituations":"Token expiry in long-running workers; WATSONX_PROJECT_ID misconfigured per environment; model deprecated/renamed in WatsonX catalog; corporate proxy stripping response bodies.","solutions":["Inspect the embedded response text for the WatsonX error detail","Refresh credentials/token and confirm project id and model id","Test the same payload with curl to isolate adapter vs account issues","Add retry with backoff for transient failures before surfacing to users"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { for await (const c of api.completionStream(body, signal)) {} } catch (e) { const msg = (e as Error).message; if (/401|token/i.test(msg)) { await refreshToken(); return retry(); } if (/429|5\\d\\d/.test(msg)) await backoff(); else throw e; }","preventionTips":["Reuse the same token-refresh/retry wrapper for all WatsonX streaming calls","Verify proxy environments forward SSE bodies (empty body also triggers this error)"],"tags":["watsonx","streaming","http-error","completions"],"backgroundTag":"upstream-api-http-error","analyzedSha":"5522c6f44ca0ac3528b37244818fbfa39b5af470","analyzedAt":"2026-08-27T11:28:54.683Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}