summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJensen <[email protected]>2025-11-27 00:49:55 +0800
committerGitHub <[email protected]>2025-11-26 10:49:55 -0600
commit33f004d4b6c8750c2b74b9790ec55ff883e42656 (patch)
tree656e80e780211f4e3e8e03e7e2ec2c539edd2df6
parent8963b536eee2ff7b46b9751b534e648a5e2a31cc (diff)
downloadopencode-33f004d4b6c8750c2b74b9790ec55ff883e42656.tar.gz
opencode-33f004d4b6c8750c2b74b9790ec55ff883e42656.zip
fix(tui): show bootstrap errors instead of {} to trace (#4779)
Co-authored-by: Github Action <[email protected]>
-rw-r--r--packages/opencode/src/cli/cmd/tui/context/exit.tsx8
-rw-r--r--packages/opencode/src/cli/cmd/tui/context/sync.tsx6
-rw-r--r--packages/opencode/src/cli/error.ts15
3 files changed, 26 insertions, 3 deletions
diff --git a/packages/opencode/src/cli/cmd/tui/context/exit.tsx b/packages/opencode/src/cli/cmd/tui/context/exit.tsx
index 612c39157..3e23f718c 100644
--- a/packages/opencode/src/cli/cmd/tui/context/exit.tsx
+++ b/packages/opencode/src/cli/cmd/tui/context/exit.tsx
@@ -1,6 +1,6 @@
import { useRenderer } from "@opentui/solid"
import { createSimpleContext } from "./helper"
-import { FormatError } from "@/cli/error"
+import { FormatError, FormatUnknownError } from "@/cli/error"
export const { use: useExit, provider: ExitProvider } = createSimpleContext({
name: "Exit",
@@ -10,8 +10,10 @@ export const { use: useExit, provider: ExitProvider } = createSimpleContext({
renderer.destroy()
await input.onExit?.()
if (reason) {
- const formatted = FormatError(reason) ?? JSON.stringify(reason)
- process.stderr.write(formatted + "\n")
+ const formatted = FormatError(reason) ?? FormatUnknownError(reason)
+ if (formatted) {
+ process.stderr.write(formatted + "\n")
+ }
}
process.exit(0)
}
diff --git a/packages/opencode/src/cli/cmd/tui/context/sync.tsx b/packages/opencode/src/cli/cmd/tui/context/sync.tsx
index 80884c73a..0293abace 100644
--- a/packages/opencode/src/cli/cmd/tui/context/sync.tsx
+++ b/packages/opencode/src/cli/cmd/tui/context/sync.tsx
@@ -23,6 +23,7 @@ import { createSimpleContext } from "./helper"
import type { Snapshot } from "@/snapshot"
import { useExit } from "./exit"
import { batch, onMount } from "solid-js"
+import { Log } from "@/util/log"
export const { use: useSync, provider: SyncProvider } = createSimpleContext({
name: "Sync",
@@ -290,6 +291,11 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
})
})
.catch(async (e) => {
+ Log.Default.error("tui bootstrap failed", {
+ error: e instanceof Error ? e.message : String(e),
+ name: e instanceof Error ? e.name : undefined,
+ stack: e instanceof Error ? e.stack : undefined,
+ })
await exit(e)
})
}
diff --git a/packages/opencode/src/cli/error.ts b/packages/opencode/src/cli/error.ts
index 77f4cec6b..07a53d293 100644
--- a/packages/opencode/src/cli/error.ts
+++ b/packages/opencode/src/cli/error.ts
@@ -38,3 +38,18 @@ export function FormatError(input: unknown) {
if (UI.CancelledError.isInstance(input)) return ""
}
+
+export function FormatUnknownError(input: unknown): string {
+ if (input instanceof Error) {
+ return input.stack ?? `${input.name}: ${input.message}`
+ }
+
+ if (typeof input === "object" && input !== null) {
+ try {
+ const json = JSON.stringify(input, null, 2)
+ if (json && json !== "{}") return json
+ } catch {}
+ }
+
+ return String(input)
+}