Sfoglia il codice sorgente

fix: tui panic from logger (#2075)

Aiden Cline 6 mesi fa
parent
commit
40bdbf92a3
1 ha cambiato i file con 21 aggiunte e 10 eliminazioni
  1. 21 10
      packages/tui/internal/util/apilogger.go

+ 21 - 10
packages/tui/internal/util/apilogger.go

@@ -2,12 +2,31 @@ package util
 
 import (
 	"context"
+	"fmt"
 	"log/slog"
+	"reflect"
 	"sync"
 
 	opencode "github.com/sst/opencode-sdk-go"
 )
 
+func sanitizeValue(val any) any {
+	if val == nil {
+		return nil
+	}
+
+	if err, ok := val.(error); ok {
+		return err.Error()
+	}
+
+	v := reflect.ValueOf(val)
+	if v.Kind() == reflect.Interface && !v.IsNil() {
+		return fmt.Sprintf("%T", val)
+	}
+
+	return val
+}
+
 type APILogHandler struct {
 	client  *opencode.Client
 	service string
@@ -67,21 +86,13 @@ func (h *APILogHandler) Handle(ctx context.Context, r slog.Record) error {
 	h.mu.Lock()
 	for _, attr := range h.attrs {
 		val := attr.Value.Any()
-		if err, ok := val.(error); ok {
-			extra[attr.Key] = err.Error()
-		} else {
-			extra[attr.Key] = val
-		}
+		extra[attr.Key] = sanitizeValue(val)
 	}
 	h.mu.Unlock()
 
 	r.Attrs(func(attr slog.Attr) bool {
 		val := attr.Value.Any()
-		if err, ok := val.(error); ok {
-			extra[attr.Key] = err.Error()
-		} else {
-			extra[attr.Key] = val
-		}
+		extra[attr.Key] = sanitizeValue(val)
 		return true
 	})