Преглед изворни кода

fix(tui): sorted tool arg maps

adamdottv пре 8 месеци
родитељ
комит
72108c0296
2 измењених фајлова са 22 додато и 6 уклоњено
  1. 12 3
      packages/tui/internal/components/chat/message.go
  2. 10 3
      packages/tui/internal/tui/tui.go

+ 12 - 3
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
 		}

+ 10 - 3
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