refactor(provider): type init errors (#27484)
This commit is contained in:
@@ -72,8 +72,9 @@ export function FormatError(input: unknown) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ProviderInitError: { providerID: string }
|
// ProviderInitError: { providerID: string }
|
||||||
if (NamedError.hasName(input, "ProviderInitError")) {
|
const providerInit = configData(input, "ProviderInitError")
|
||||||
return `Failed to initialize provider "${(input as ErrorLike).data?.providerID}". Check credentials and configuration.`
|
if (providerInit) {
|
||||||
|
return `Failed to initialize provider "${stringField(providerInit, "providerID")}". Check credentials and configuration.`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConfigJsonError: { path: string, message?: string }
|
// ConfigJsonError: { path: string, message?: string }
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ import { Auth } from "../auth"
|
|||||||
import { Env } from "../env"
|
import { Env } from "../env"
|
||||||
import { InstallationVersion } from "@opencode-ai/core/installation/version"
|
import { InstallationVersion } from "@opencode-ai/core/installation/version"
|
||||||
import { Flag } from "@opencode-ai/core/flag/flag"
|
import { Flag } from "@opencode-ai/core/flag/flag"
|
||||||
import { NamedError } from "@opencode-ai/core/util/error"
|
|
||||||
import { iife } from "@/util/iife"
|
import { iife } from "@/util/iife"
|
||||||
import { Global } from "@opencode-ai/core/global"
|
import { Global } from "@opencode-ai/core/global"
|
||||||
import path from "path"
|
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 {
|
export interface Interface {
|
||||||
readonly list: () => Effect.Effect<Record<ProviderID, Info>>
|
readonly list: () => Effect.Effect<Record<ProviderID, Info>>
|
||||||
@@ -1634,7 +1642,7 @@ const layer = Layer.effect(
|
|||||||
s.sdk.set(key, loaded)
|
s.sdk.set(key, loaded)
|
||||||
return loaded as SDK
|
return loaded as SDK
|
||||||
} catch (e) {
|
} 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"
|
export * as Provider from "./provider"
|
||||||
|
|||||||
@@ -81,6 +81,14 @@ describe("cli.error", () => {
|
|||||||
expect(FormatError({ _tag: "ProviderModelNotFoundError", ...data })).toBe(expected)
|
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", () => {
|
test("formats cancelled UI errors as empty output", () => {
|
||||||
expect(FormatError(new UI.CancelledError())).toBe("")
|
expect(FormatError(new UI.CancelledError())).toBe("")
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user