From b1b82977ec0691ac3943775a5efed1e7869d6a7e Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Mon, 1 Dec 2025 01:33:32 -0600 Subject: [PATCH] tweak: better err msgs --- packages/opencode/src/provider/transform.ts | 26 +++++++++++++++++---- packages/opencode/src/session/message-v2.ts | 2 +- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index 1cf53e5c6..dc640ef6b 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -1,4 +1,5 @@ -import type { ModelMessage } from "ai" +import type { APICallError, ModelMessage } from "ai" +import { STATUS_CODES } from "http" import { unique } from "remeda" import type { JSONSchema } from "zod/v4/core" @@ -308,11 +309,28 @@ export namespace ProviderTransform { return schema } - export function error(providerID: string, message: string) { + export function error(providerID: string, error: APICallError) { + let message = error.message if (providerID === "github-copilot" && message.includes("The requested model is not supported")) { - message += + return ( + message + "\n\nMake sure the model is enabled in your copilot settings: https://github.com/settings/copilot/features" + ) } - return message + + if (!error.responseBody || (error.statusCode && message !== STATUS_CODES[error.statusCode])) { + return message + } + + try { + const body = JSON.parse(error.responseBody) + // try to extract common error message fields + const errMsg = body.message || body.error + if (errMsg && typeof errMsg === "string") { + return `${message}: ${errMsg}` + } + } catch {} + + return `${message}: ${error.responseBody}` } } diff --git a/packages/opencode/src/session/message-v2.ts b/packages/opencode/src/session/message-v2.ts index 718e90921..f7b3ed479 100644 --- a/packages/opencode/src/session/message-v2.ts +++ b/packages/opencode/src/session/message-v2.ts @@ -739,7 +739,7 @@ export namespace MessageV2 { { cause: e }, ).toObject() case APICallError.isInstance(e): - const message = ProviderTransform.error(ctx.providerID, e.message) + const message = ProviderTransform.error(ctx.providerID, e) return new MessageV2.APIError( { message,