Selaa lähdekoodia

fix: display errors when using `opencode run ...` (#751)

Aiden Cline 7 kuukautta sitten
vanhempi
sitoutus
8322f18e03
2 muutettua tiedostoa jossa 17 lisäystä ja 0 poistoa
  1. 15 0
      packages/opencode/src/cli/cmd/run.ts
  2. 2 0
      packages/opencode/src/session/index.ts

+ 15 - 0
packages/opencode/src/cli/cmd/run.ts

@@ -125,6 +125,20 @@ export const RunCommand = cmd({
         }
       })
 
+      let errorMsg: string | undefined
+      Bus.subscribe(Session.Event.Error, async (evt) => {
+        const { sessionID, error } = evt.properties
+        if (sessionID !== session.id || !error) return
+        let err = String(error.name)
+
+        if ("data" in error && error.data && "message" in error.data) {
+          err = error.data.message
+        }
+        errorMsg = errorMsg ? errorMsg + "\n" + err : err
+
+        UI.error(err)
+      })
+
       const result = await Session.chat({
         sessionID: session.id,
         providerID,
@@ -140,6 +154,7 @@ export const RunCommand = cmd({
       if (isPiped) {
         const match = result.parts.findLast((x) => x.type === "text")
         if (match) process.stdout.write(match.text)
+        if (errorMsg) process.stdout.write(errorMsg)
       }
       UI.empty()
     })

+ 2 - 0
packages/opencode/src/session/index.ts

@@ -99,6 +99,7 @@ export namespace Session {
     Error: Bus.event(
       "session.error",
       z.object({
+        sessionID: z.string().optional(),
         error: MessageV2.Assistant.shape.error,
       }),
     ),
@@ -727,6 +728,7 @@ export namespace Session {
           next.error = new NamedError.Unknown({ message: JSON.stringify(e) }, { cause: e })
       }
       Bus.publish(Event.Error, {
+        sessionID: next.sessionID,
         error: next.error,
       })
     }