From 8dff4d64ff01860b3d8812d60907b1702ec34631 Mon Sep 17 00:00:00 2001 From: Kujtim Hoxha Date: Tue, 8 Jul 2025 17:38:51 +0200 Subject: [PATCH] fix: add panic recovery to TUI subscription handler - Add panic recovery with graceful TUI shutdown to app.Subscribe method - Ensures application doesn't crash if TUI subscription loop panics - Logs panic details to timestamped files for debugging - Maintains consistency with other critical goroutines in codebase --- internal/app/app.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/internal/app/app.go b/internal/app/app.go index c06f859e5fa083bde55bd2c4e5d07036190be8bf..b47fe1c8e4ca6cb37baa7d638126f16295421e72 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -16,6 +16,7 @@ import ( "github.com/charmbracelet/crush/internal/format" "github.com/charmbracelet/crush/internal/history" "github.com/charmbracelet/crush/internal/llm/agent" + "github.com/charmbracelet/crush/internal/log" "github.com/charmbracelet/crush/internal/pubsub" "github.com/charmbracelet/crush/internal/lsp" @@ -230,6 +231,11 @@ func (app *App) InitCoderAgent() error { } func (app *App) Subscribe(program *tea.Program) { + defer log.RecoverPanic("app.Subscribe", func() { + slog.Info("TUI subscription panic - attempting graceful shutdown") + program.Quit() + }) + app.tuiWG.Add(1) tuiCtx, tuiCancel := context.WithCancel(app.globalCtx) app.cleanupFuncs = append(app.cleanupFuncs, func() {