@@ -329,56 +329,6 @@ 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 {
@@ -1217,10 +1167,10 @@ func (m *UI) handleDialogMsg(msg tea.Msg) tea.Cmd {
m.dialog.CloseDialog(dialog.CommandsID)
case dialog.ActionForkConversation:
m.dialog.CloseDialog(dialog.CommandsID)
- cmds = append(cmds, m.fork, m.focusEditor())
+ cmds = append(cmds, m.forkConversation, m.focusEditor())
case dialog.ActionDeleteMessages:
m.dialog.CloseDialog(dialog.CommandsID)
- cmds = append(cmds, m.delete, m.focusEditor())
+ cmds = append(cmds, m.deleteBellow, m.focusEditor())
case dialog.ActionSelectModel:
if m.isAgentBusy() {
cmds = append(cmds, uiutil.ReportWarn("Agent is busy, please wait..."))
@@ -2568,6 +2518,58 @@ func (m *UI) getMessageIDFromItem(item list.Item) (string, bool) {
return "", false
}
+// forkConversation a conversation.
+func (m *UI) forkConversation() 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{},
+ }
+}
+
+// deleteBellow messages bellow the selected one.
+func (m *UI) deleteBellow() 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)()
+}
+
// mimeOf detects the MIME type of the given content.
func mimeOf(content []byte) string {
mimeBufferSize := min(512, len(content))