From ff1a65b7331cc203884d0ae81af43e13d7460d21 Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Thu, 29 Jan 2026 17:01:10 -0300 Subject: [PATCH] refactor: improvements Signed-off-by: Carlos Alexandro Becker --- internal/ui/model/ui.go | 118 ++++++++++++++++++---------------------- 1 file changed, 52 insertions(+), 66 deletions(-) diff --git a/internal/ui/model/ui.go b/internal/ui/model/ui.go index 8ab6cb70771214ef966600c41793c47a03c4f5df..0134751359f2ae9bc7249ae4d04a83fee487a344 100644 --- a/internal/ui/model/ui.go +++ b/internal/ui/model/ui.go @@ -329,6 +329,56 @@ func (m *UI) focusEditor() tea.Cmd { return m.textarea.Focus() } +func (m *UI) fork() tea.Msg { + if m.isAgentBusy() { + return uiutil.ReportWarn("Agent is busy, please wait...")() + } + if m.session == nil { + return uiutil.ReportWarn("No session to fork...")() + } + selectedItem := m.chat.SelectedItem() + if selectedItem == nil { + return uiutil.ReportWarn("No message selected...")() + } + messageID, ok := m.getMessageIDFromItem(selectedItem) + if !ok { + return uiutil.ReportWarn("Cannot fork from selected item...")() + } + newSession, err := m.com.App.Sessions.Fork(context.Background(), m.session.ID, messageID, m.com.App.Messages) + if err != nil { + return uiutil.ReportError(err)() + } + return loadSessionMsg{ + session: &newSession, + files: []SessionFile{}, + } +} + +func (m *UI) delete() tea.Msg { + if m.isAgentBusy() { + return uiutil.ReportWarn("Agent is busy, please wait...")() + } + if m.session == nil { + return uiutil.ReportWarn("No session to delete from...")() + } + selectedItem := m.chat.SelectedItem() + if selectedItem == nil { + return uiutil.ReportWarn("No message selected...")() + } + if _, ok := selectedItem.(*chat.UserMessageItem); !ok { + return uiutil.ReportWarn("Can only delete from user messages...")() + } + messageID, ok := m.getMessageIDFromItem(selectedItem) + if !ok { + return uiutil.ReportWarn("Cannot get message ID from selected item...")() + } + err := m.com.App.Messages.DeleteMessagesFrom(context.Background(), m.session.ID, messageID) + if err != nil { + return uiutil.ReportError(err)() + } + return m.loadSession(m.session.ID)() +} + // loadCustomCommands loads the custom commands asynchronously. func (m *UI) loadCustomCommands() tea.Cmd { return func() tea.Msg { @@ -1165,76 +1215,12 @@ func (m *UI) handleDialogMsg(msg tea.Msg) tea.Cmd { } cmds = append(cmds, m.initializeProject()) m.dialog.CloseDialog(dialog.CommandsID) - case dialog.ActionForkConversation: - if m.isAgentBusy() { - cmds = append(cmds, uiutil.ReportWarn("Agent is busy, please wait...")) - break - } - if m.session == nil { - cmds = append(cmds, uiutil.ReportWarn("No session to fork...")) - break - } - selectedItem := m.chat.SelectedItem() - if selectedItem == nil { - cmds = append(cmds, uiutil.ReportWarn("No message selected...")) - break - } - if _, ok := selectedItem.(*chat.UserMessageItem); !ok { - cmds = append(cmds, uiutil.ReportWarn("Can only fork from user messages...")) - break - } - messageID, ok := m.getMessageIDFromItem(selectedItem) - if !ok { - cmds = append(cmds, uiutil.ReportWarn("Cannot fork from selected item...")) - break - } - cmds = append(cmds, func() tea.Msg { - newSession, err := m.com.App.Sessions.Fork(context.Background(), m.session.ID, messageID, m.com.App.Messages) - if err != nil { - return uiutil.ReportError(err)() - } - return loadSessionMsg{ - session: &newSession, - files: []SessionFile{}, - } - }) m.dialog.CloseDialog(dialog.CommandsID) - cmds = append(cmds, m.focusEditor()) - + cmds = append(cmds, m.fork, m.focusEditor()) case dialog.ActionDeleteMessages: - if m.isAgentBusy() { - cmds = append(cmds, uiutil.ReportWarn("Agent is busy, please wait...")) - break - } - if m.session == nil { - cmds = append(cmds, uiutil.ReportWarn("No session to delete from...")) - break - } - selectedItem := m.chat.SelectedItem() - if selectedItem == nil { - cmds = append(cmds, uiutil.ReportWarn("No message selected...")) - break - } - if _, ok := selectedItem.(*chat.UserMessageItem); !ok { - cmds = append(cmds, uiutil.ReportWarn("Can only delete from user messages...")) - break - } - messageID, ok := m.getMessageIDFromItem(selectedItem) - if !ok { - cmds = append(cmds, uiutil.ReportWarn("Cannot get message ID from selected item...")) - break - } - cmds = append(cmds, func() tea.Msg { - err := m.com.App.Messages.DeleteMessagesFrom(context.Background(), m.session.ID, messageID) - if err != nil { - return uiutil.ReportError(err)() - } - return m.loadSession(m.session.ID)() - }) m.dialog.CloseDialog(dialog.CommandsID) - cmds = append(cmds, m.focusEditor()) - + cmds = append(cmds, m.delete, m.focusEditor()) case dialog.ActionSelectModel: if m.isAgentBusy() { cmds = append(cmds, uiutil.ReportWarn("Agent is busy, please wait..."))