From d983b9485d91306da6ca72d726348812840f2831 Mon Sep 17 00:00:00 2001 From: ElecTwix Date: Thu, 30 Oct 2025 08:13:18 +0300 Subject: fix: add doom loop detection (#3445) Co-authored-by: Aiden Cline --- packages/tui/internal/components/chat/message.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'packages/tui/internal/components') diff --git a/packages/tui/internal/components/chat/message.go b/packages/tui/internal/components/chat/message.go index fc5a21ad1..801545a88 100644 --- a/packages/tui/internal/components/chat/message.go +++ b/packages/tui/internal/components/chat/message.go @@ -504,7 +504,11 @@ func renderToolDetails( base := styles.NewStyle().Background(backgroundColor) text := base.Foreground(t.Text()).Bold(true).Render muted := base.Foreground(t.TextMuted()).Render - permissionContent = "Permission required to run this tool:\n\n" + if permission.Type == "doom-loop" { + permissionContent = permission.Title + "\n\n" + } else { + permissionContent = "Permission required to run this tool:\n\n" + } permissionContent += text( "enter ", ) + muted( @@ -642,9 +646,9 @@ func renderToolDetails( for _, item := range todos.([]any) { todo := item.(map[string]any) content := todo["content"] - if content == nil { - continue - } + if content == nil { + continue + } switch todo["status"] { case "completed": body += fmt.Sprintf("- [x] %s\n", content) -- cgit v1.2.3 From aca32eaa1c1e16ca1e4044ac9ea28050a78d5381 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Thu, 30 Oct 2025 01:41:28 -0500 Subject: fix: tui not showing some errors --- packages/tui/internal/components/chat/messages.go | 2 ++ packages/tui/internal/tui/tui.go | 14 ++++++++++++++ 2 files changed, 16 insertions(+) (limited to 'packages/tui/internal/components') diff --git a/packages/tui/internal/components/chat/messages.go b/packages/tui/internal/components/chat/messages.go index a09e809f0..3d52b84e5 100644 --- a/packages/tui/internal/components/chat/messages.go +++ b/packages/tui/internal/components/chat/messages.go @@ -656,6 +656,8 @@ func (m *messagesComponent) renderView() tea.Cmd { case nil: case opencode.AssistantMessageErrorMessageOutputLengthError: error = "Message output length exceeded" + case opencode.AssistantMessageErrorAPIError: + error = err.Data.Message case opencode.ProviderAuthError: error = err.Data.Message case opencode.MessageAbortedError: diff --git a/packages/tui/internal/tui/tui.go b/packages/tui/internal/tui/tui.go index 279443674..3a0bc3730 100644 --- a/packages/tui/internal/tui/tui.go +++ b/packages/tui/internal/tui/tui.go @@ -656,12 +656,26 @@ func (a Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { case opencode.EventListResponseEventSessionError: switch err := msg.Properties.Error.AsUnion().(type) { case nil: + // No error details provided case opencode.ProviderAuthError: slog.Error("Failed to authenticate with provider", "error", err.Data.Message) return a, toast.NewErrorToast("Provider error: " + err.Data.Message) case opencode.UnknownError: slog.Error("Server error", "name", err.Name, "message", err.Data.Message) return a, toast.NewErrorToast(err.Data.Message, toast.WithTitle(string(err.Name))) + case opencode.EventListResponseEventSessionErrorPropertiesErrorAPIError: + slog.Error("API error", "message", err.Data.Message, "statusCode", err.Data.StatusCode) + return a, toast.NewErrorToast(err.Data.Message, toast.WithTitle(string(err.Name))) + case opencode.MessageAbortedError: + // Message was aborted - this is expected when user cancels, so just log it + slog.Debug("Message aborted", "message", err.Data.Message) + case opencode.EventListResponseEventSessionErrorPropertiesErrorMessageOutputLengthError: + slog.Error("Message output length error") + return a, toast.NewErrorToast("Message output length exceeded limit") + default: + // Handle any unhandled error types + slog.Error("Unhandled session error type", "type", fmt.Sprintf("%T", err)) + return a, toast.NewErrorToast("An unexpected error occurred") } case opencode.EventListResponseEventSessionCompacted: if msg.Properties.SessionID == a.app.Session.ID { -- cgit v1.2.3