Bladeren bron

fix: opencode run crashing, and show errored tool calls in output (#14206)

Aiden Cline 5 maanden geleden
bovenliggende
commit
088eac9d4e
2 gewijzigde bestanden met toevoegingen van 22 en 6 verwijderingen
  1. 19 6
      packages/opencode/src/cli/cmd/run.ts
  2. 3 0
      packages/opencode/src/cli/ui.ts

+ 19 - 6
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 (

+ 3 - 0
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)
   }