diff --git a/packages/opencode/src/cli/cmd/tui/app.tsx b/packages/opencode/src/cli/cmd/tui/app.tsx index cead812f..1f1f9f63 100644 --- a/packages/opencode/src/cli/cmd/tui/app.tsx +++ b/packages/opencode/src/cli/cmd/tui/app.tsx @@ -53,7 +53,7 @@ export function tui(input: { render( () => { return ( - Something went wrong}> + }> @@ -329,3 +329,52 @@ function App() { ) } + +function ErrorComponent(props: { error: Error; reset: () => void, onExit: () => Promise }) { + const term = useTerminalDimensions() + useKeyboard((evt) => { + if (evt.ctrl && evt.name === "c") { + props.onExit() + } + }) + const [copied, setCopied] = createSignal(false) + + const issueURL = new URL("https://github.com/sst/opencode/issues/new?template=bug-report.yml") + + if (props.error.message) { + issueURL.searchParams.set("title", `opentui: fatal: ${props.error.message}`) + } + + if (props.error.stack) { + issueURL.searchParams.set("description", "```\n" + props.error.stack.substring(0, 6000 - issueURL.toString().length) + "...\n```") + } + + const copyIssueURL = () => { + Clipboard.copy(issueURL.toString()).then(() => { setCopied(true) }) + } + + return ( + + + Please report an issue. + + Copy issue URL (exception info pre-filled) + + {copied() && Successfully copied} + + + A fatal error occurred! + + Reset TUI + + + Exit + + + + {props.error.stack} + + {props.error.message} + + ) +}