From 48976bde4bcd14ce25b7b22bc724635d683b1f4a Mon Sep 17 00:00:00 2001 From: rekram1-node Date: Tue, 19 Aug 2025 13:52:54 -0500 Subject: [PATCH] fix: tui panic from logger --- packages/tui/internal/util/apilogger.go | 31 +++++++++++++++++-------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/packages/tui/internal/util/apilogger.go b/packages/tui/internal/util/apilogger.go index a58be635..8e872e63 100644 --- a/packages/tui/internal/util/apilogger.go +++ b/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 })