diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx b/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx index b1616b95..3841be0d 100644 --- a/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx @@ -1792,7 +1792,7 @@ export function Prompt(props: PromptProps) { return ( - {retryText()} + {retryText()} ) diff --git a/packages/opencode/src/cli/cmd/tui/context/local.tsx b/packages/opencode/src/cli/cmd/tui/context/local.tsx index edc5608b..55da7f0e 100644 --- a/packages/opencode/src/cli/cmd/tui/context/local.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/local.tsx @@ -7,12 +7,15 @@ import { uniqueBy } from "remeda" import path from "path" import { Global } from "@/global" import { iife } from "@/util/iife" +import { Log } from "@/util" import { useToast } from "../ui/toast" import { useArgs } from "./args" import { useSDK } from "./sdk" import { RGBA } from "@opentui/core" import { Filesystem } from "@/util" +const log = Log.create({ service: "tui.local" }) + export function parseModel(model: string) { const [providerID, ...rest] = model.split("/") return { @@ -151,7 +154,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ if (Array.isArray(x.favorite)) setModelStore("favorite", x.favorite) if (typeof x.variant === "object" && x.variant !== null) setModelStore("variant", x.variant) }) - .catch(() => {}) + .catch((err: any) => log.warn("Failed to read model preferences", { error: String(err) })) .finally(() => { setModelStore("ready", true) if (state.pending) save() diff --git a/packages/opencode/src/cli/cmd/tui/context/sdk.tsx b/packages/opencode/src/cli/cmd/tui/context/sdk.tsx index 22561844..51283eb8 100644 --- a/packages/opencode/src/cli/cmd/tui/context/sdk.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/sdk.tsx @@ -3,6 +3,7 @@ import type { GlobalEvent } from "@mimo-ai/sdk/v2" import { createSimpleContext } from "./helper" import { createGlobalEmitter } from "@solid-primitives/event-bus" import { Flag } from "@/flag/flag" +import { Log } from "@/util" import { batch, onCleanup, onMount } from "solid-js" export type EventSource = { @@ -18,6 +19,7 @@ export const { use: useSDK, provider: SDKProvider } = createSimpleContext({ headers?: RequestInit["headers"] events?: EventSource }) => { + const log = Log.create({ service: "tui.sdk" }) const abort = new AbortController() let sse: AbortController | undefined @@ -90,7 +92,7 @@ export const { use: useSDK, provider: SDKProvider } = createSimpleContext({ if (Flag.MIMOCODE_EXPERIMENTAL_WORKSPACES) { // Start syncing workspaces, it's important to do this after // we've started listening to events - await sdk.sync.start().catch(() => {}) + await sdk.sync.start().catch((err: any) => log.warn("Workspace sync failed", { error: String(err) })) } for await (const event of events.stream) { @@ -107,7 +109,7 @@ export const { use: useSDK, provider: SDKProvider } = createSimpleContext({ const backoff = Math.min(retryDelay * 2 ** (attempt - 1), maxRetryDelay) await new Promise((resolve) => setTimeout(resolve, backoff)) } - })().catch(() => {}) + }).catch((err: any) => log.error("SSE event loop crashed", { error: String(err) })) } onMount(async () => { @@ -118,7 +120,7 @@ export const { use: useSDK, provider: SDKProvider } = createSimpleContext({ if (Flag.MIMOCODE_EXPERIMENTAL_WORKSPACES) { // Start syncing workspaces, it's important to do this after // we've started listening to events - await sdk.sync.start().catch(() => {}) + await sdk.sync.start().catch((err: any) => log.warn("Workspace sync failed", { error: String(err) })) } } else { startSSE() diff --git a/packages/opencode/src/cli/cmd/tui/plugin/runtime.ts b/packages/opencode/src/cli/cmd/tui/plugin/runtime.ts index 7f93ca84..45068689 100644 --- a/packages/opencode/src/cli/cmd/tui/plugin/runtime.ts +++ b/packages/opencode/src/cli/cmd/tui/plugin/runtime.ts @@ -90,19 +90,16 @@ const EMPTY_TUI: TuiPluginModule = { function fail(message: string, data: Record) { if (!("error" in data)) { log.error(message, data) - console.error(`[tui.plugin] ${message}`, data) return } const text = `${message}: ${errorMessage(data.error)}` const next = { ...data, error: errorData(data.error) } log.error(text, next) - console.error(`[tui.plugin] ${text}`, next) } function warn(message: string, data: Record) { log.warn(message, data) - console.warn(`[tui.plugin] ${message}`, data) } type CleanupResult = { type: "ok" } | { type: "error"; error: unknown } | { type: "timeout" }