mirror of
https://github.com/anomalyco/opencode.git
synced 2026-05-15 09:02:35 +00:00
refactor(provider): type init errors (#27484)
This commit is contained in:
@@ -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 }
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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("")
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user