Просмотр исходного кода

feat(tui): retain cache when cycling between subagent/parent sessions for perf (#1981)

Yihui Khuu 6 месяцев назад
Родитель
Сommit
b3885d1614

+ 20 - 1
packages/tui/internal/components/chat/messages.go

@@ -171,7 +171,11 @@ func (m *messagesComponent) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 		m.showThinkingBlocks = !m.showThinkingBlocks
 		m.app.State.ShowThinkingBlocks = &m.showThinkingBlocks
 		return m, tea.Batch(m.renderView(), m.app.SaveState())
-	case app.SessionLoadedMsg, app.SessionClearedMsg:
+	case app.SessionLoadedMsg:
+		m.tail = true
+		m.loading = true
+		return m, m.renderView()
+	case app.SessionClearedMsg:
 		m.cache.Clear()
 		m.tail = true
 		m.loading = true
@@ -183,6 +187,21 @@ func (m *messagesComponent) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 			return m, m.renderView()
 		}
 	case app.SessionSelectedMsg:
+		currentParent := m.app.Session.ParentID
+		if currentParent == "" {
+			currentParent = m.app.Session.ID
+		}
+
+		targetParent := msg.ParentID
+		if targetParent == "" {
+			targetParent = msg.ID
+		}
+
+		// Clear cache only if switching between different session families
+		if currentParent != targetParent {
+			m.cache.Clear()
+		}
+
 		m.viewport.GotoBottom()
 	case app.MessageRevertedMsg:
 		if msg.Session.ID == m.app.Session.ID {

+ 6 - 1
packages/tui/internal/tui/tui.go

@@ -621,6 +621,10 @@ func (a Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 			},
 		}
 	case app.SessionSelectedMsg:
+		updated, cmd := a.messages.Update(msg)
+		a.messages = updated.(chat.MessagesComponent)
+		cmds = append(cmds, cmd)
+
 		messages, err := a.app.ListMessages(context.Background(), msg.ID)
 		if err != nil {
 			slog.Error("Failed to list messages", "error", err.Error())
@@ -628,7 +632,8 @@ func (a Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 		}
 		a.app.Session = msg
 		a.app.Messages = messages
-		return a, util.CmdHandler(app.SessionLoadedMsg{})
+		cmds = append(cmds, util.CmdHandler(app.SessionLoadedMsg{}))
+		return a, tea.Batch(cmds...)
 	case app.SessionCreatedMsg:
 		a.app.Session = msg.Session
 	case dialog.ScrollToMessageMsg: