diff options
| author | Aiden Cline <[email protected]> | 2026-02-18 17:13:01 -0600 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-02-18 17:13:01 -0600 |
| commit | 088eac9d4eaba040e7e19084fd82cbb2e32ce6ed (patch) | |
| tree | 10a0e66ea6962af29665095006dd4712f99f694b | |
| parent | 5fe237a3fda1b4dcc5e76ed8b36f07d73fad3321 (diff) | |
| download | opencode-088eac9d4eaba040e7e19084fd82cbb2e32ce6ed.tar.gz opencode-088eac9d4eaba040e7e19084fd82cbb2e32ce6ed.zip | |
fix: opencode run crashing, and show errored tool calls in output (#14206)
| -rw-r--r-- | packages/opencode/src/cli/cmd/run.ts | 25 | ||||
| -rw-r--r-- | packages/opencode/src/cli/ui.ts | 3 |
2 files changed, 22 insertions, 6 deletions
diff --git a/packages/opencode/src/cli/cmd/run.ts b/packages/opencode/src/cli/cmd/run.ts index bf63eabf8..f3781f1ab 100644 --- a/packages/opencode/src/cli/cmd/run.ts +++ b/packages/opencode/src/cli/cmd/run.ts @@ -168,12 +168,17 @@ function websearch(info: ToolProps<typeof WebSearchTool>) { } function task(info: ToolProps<typeof TaskTool>) { - const agent = Locale.titlecase(info.input.subagent_type) - const desc = info.input.description - const started = info.part.state.status === "running" + const input = info.part.state.input + const status = info.part.state.status + const subagent = + typeof input.subagent_type === "string" && input.subagent_type.trim().length > 0 ? input.subagent_type : "unknown" + const agent = Locale.titlecase(subagent) + const desc = + typeof input.description === "string" && input.description.trim().length > 0 ? input.description : undefined + const icon = status === "error" ? "✗" : status === "running" ? "•" : "✓" const name = desc ?? `${agent} Task` inline({ - icon: started ? "•" : "✓", + icon, title: name, description: desc ? `${agent} Agent` : undefined, }) @@ -451,9 +456,17 @@ export const RunCommand = cmd({ const part = event.properties.part if (part.sessionID !== sessionID) continue - if (part.type === "tool" && part.state.status === "completed") { + if (part.type === "tool" && (part.state.status === "completed" || part.state.status === "error")) { if (emit("tool_use", { part })) continue - tool(part) + if (part.state.status === "completed") { + tool(part) + continue + } + inline({ + icon: "✗", + title: `${part.tool} failed`, + }) + UI.error(part.state.error) } if ( diff --git a/packages/opencode/src/cli/ui.ts b/packages/opencode/src/cli/ui.ts index 9df1f4ac5..f242a77f6 100644 --- a/packages/opencode/src/cli/ui.ts +++ b/packages/opencode/src/cli/ui.ts @@ -104,6 +104,9 @@ export namespace UI { } export function error(message: string) { + if (message.startsWith("Error: ")) { + message = message.slice("Error: ".length) + } println(Style.TEXT_DANGER_BOLD + "Error: " + Style.TEXT_NORMAL + message) } |
