refactor(provider): type init errors (#27484)

This commit is contained in:
Shoubhit Dash
2026-05-14 14:48:58 +05:30
committed by GitHub
parent 0af242974c
commit be6e7b309e
3 changed files with 22 additions and 9 deletions

View File

@@ -72,8 +72,9 @@ export function FormatError(input: unknown) {
}
// ProviderInitError: { providerID: string }
if (NamedError.hasName(input, "ProviderInitError")) {
return `Failed to initialize provider "${(input as ErrorLike).data?.providerID}". Check credentials and configuration.`
const providerInit = configData(input, "ProviderInitError")
if (providerInit) {
return `Failed to initialize provider "${stringField(providerInit, "providerID")}". Check credentials and configuration.`
}
// ConfigJsonError: { path: string, message?: string }

View File

@@ -13,7 +13,6 @@ import { Auth } from "../auth"
import { Env } from "../env"
import { InstallationVersion } from "@opencode-ai/core/installation/version"
import { Flag } from "@opencode-ai/core/flag/flag"
import { NamedError } from "@opencode-ai/core/util/error"
import { iife } from "@/util/iife"
import { Global } from "@opencode-ai/core/global"
import path from "path"
@@ -975,7 +974,16 @@ export class ModelNotFoundError extends Schema.TaggedErrorClass<ModelNotFoundErr
}
}
export type Error = ModelNotFoundError
export class InitError extends Schema.TaggedErrorClass<InitError>()("ProviderInitError", {
providerID: ProviderID,
cause: Schema.optional(Schema.Defect),
}) {
static isInstance(input: unknown): input is InitError {
return input instanceof InitError
}
}
export type Error = ModelNotFoundError | InitError
export interface Interface {
readonly list: () => Effect.Effect<Record<ProviderID, Info>>
@@ -1634,7 +1642,7 @@ const layer = Layer.effect(
s.sdk.set(key, loaded)
return loaded as SDK
} catch (e) {
throw new InitError({ providerID: model.providerID }, { cause: e })
throw new InitError({ providerID: model.providerID, cause: e })
}
}
@@ -1827,8 +1835,4 @@ export function parseModel(model: string) {
}
}
export const InitError = NamedError.create("ProviderInitError", {
providerID: ProviderID,
})
export * as Provider from "./provider"

View File

@@ -81,6 +81,14 @@ describe("cli.error", () => {
expect(FormatError({ _tag: "ProviderModelNotFoundError", ...data })).toBe(expected)
})
test("formats legacy and tagged provider init errors the same way", () => {
const data = { providerID: "anthropic" }
const expected = 'Failed to initialize provider "anthropic". Check credentials and configuration.'
expect(FormatError({ name: "ProviderInitError", data })).toBe(expected)
expect(FormatError({ _tag: "ProviderInitError", ...data })).toBe(expected)
})
test("formats cancelled UI errors as empty output", () => {
expect(FormatError(new UI.CancelledError())).toBe("")
})