diff --git a/packages/tui/internal/components/chat/message.go b/packages/tui/internal/components/chat/message.go index 0176e49b..3fa013e3 100644 --- a/packages/tui/internal/components/chat/message.go +++ b/packages/tui/internal/components/chat/message.go @@ -305,14 +305,15 @@ func renderToolInvocation( toolArgsMap := make(map[string]any) if toolCall.Args != nil { value := *toolCall.Args - m, ok := value.(map[string]any) - if ok { + if m, ok := value.(map[string]any); ok { toolArgsMap = m + firstKey := "" for key := range toolArgsMap { firstKey = key break } + toolArgs = renderArgs(&toolArgsMap, firstKey) } } @@ -589,9 +590,17 @@ func renderArgs(args *map[string]any, titleKey string) string { if args == nil || len(*args) == 0 { return "" } + + keys := make([]string, 0, len(*args)) + for key := range *args { + keys = append(keys, key) + } + slices.Sort(keys) + title := "" parts := []string{} - for key, value := range *args { + for _, key := range keys { + value := (*args)[key] if value == nil { continue } diff --git a/packages/tui/internal/tui/tui.go b/packages/tui/internal/tui/tui.go index 084ee3c1..7dc0737e 100644 --- a/packages/tui/internal/tui/tui.go +++ b/packages/tui/internal/tui/tui.go @@ -229,6 +229,12 @@ func (a appModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { a.app.Messages = append(a.app.Messages, msg.Properties.Info) } } + case client.EventSessionError: + unknownError, err := msg.Properties.Error.AsUnknownError() + if err == nil { + slog.Error("Server error", "name", unknownError.Name, "message", unknownError.Data.Message) + return a, toast.NewErrorToast(unknownError.Data.Message, toast.WithTitle(unknownError.Name)) + } case tea.WindowSizeMsg: msg.Height -= 2 // Make space for the status bar a.width, a.height = msg.Width, msg.Height @@ -243,12 +249,13 @@ func (a appModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } a.layout.SetSize(a.width, a.height) case app.SessionSelectedMsg: - var err error - a.app.Session = msg - a.app.Messages, err = a.app.ListMessages(context.Background(), msg.Id) + messages, err := a.app.ListMessages(context.Background(), msg.Id) if err != nil { slog.Error("Failed to list messages", "error", err) + return a, toast.NewErrorToast("Failed to open session") } + a.app.Session = msg + a.app.Messages = messages case app.ModelSelectedMsg: a.app.Provider = &msg.Provider a.app.Model = &msg.Model