From f9497553676f9ac96d3662ddb726512a9ab3eea4 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 17 Dec 2025 15:59:03 -0600 Subject: fix: better init error messages --- packages/desktop/src/pages/error.tsx | 54 ++++++++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-) (limited to 'packages/desktop/src/pages') diff --git a/packages/desktop/src/pages/error.tsx b/packages/desktop/src/pages/error.tsx index 7a7c85aad..2f2848d39 100644 --- a/packages/desktop/src/pages/error.tsx +++ b/packages/desktop/src/pages/error.tsx @@ -4,12 +4,62 @@ import { Component } from "solid-js" import { usePlatform } from "@/context/platform" import { Icon } from "@opencode-ai/ui/icon" +export type InitError = { + name: string + data: Record +} + +function formatError(error: InitError | undefined): string { + if (!error) return "Unknown error" + + const data = error.data + switch (error.name) { + case "MCPFailed": + return `MCP server "${data.name}" failed. Note, opencode does not support MCP authentication yet.` + case "ProviderModelNotFoundError": { + const { providerID, modelID, suggestions } = data as { + providerID: string + modelID: string + suggestions?: string[] + } + return [ + `Model not found: ${providerID}/${modelID}`, + ...(Array.isArray(suggestions) && suggestions.length ? ["Did you mean: " + suggestions.join(", ")] : []), + `Check your config (opencode.json) provider/model names`, + ].join("\n") + } + case "ProviderInitError": + return `Failed to initialize provider "${data.providerID}". Check credentials and configuration.` + case "ConfigJsonError": + return `Config file at ${data.path} is not valid JSON(C)` + (data.message ? `: ${data.message}` : "") + case "ConfigDirectoryTypoError": + return `Directory "${data.dir}" in ${data.path} is not valid. Rename the directory to "${data.suggestion}" or remove it. This is a common typo.` + case "ConfigFrontmatterError": + return `Failed to parse frontmatter in ${data.path}:\n${data.message}` + case "ConfigInvalidError": { + const issues = Array.isArray(data.issues) + ? data.issues.map( + (issue: { message: string; path: string[] }) => "↳ " + issue.message + " " + issue.path.join("."), + ) + : [] + return [`Config file at ${data.path} is invalid` + (data.message ? `: ${data.message}` : ""), ...issues].join( + "\n", + ) + } + case "UnknownError": + return String(data.message) + default: + return data.message ? String(data.message) : JSON.stringify(data, null, 2) + } +} + interface ErrorPageProps { - error: any + error: InitError | undefined } export const ErrorPage: Component = (props) => { const platform = usePlatform() + console.log("ErrorPage", props.error) return (
@@ -19,7 +69,7 @@ export const ErrorPage: Component = (props) => {

An error occurred while loading the application.