mirror of
https://github.com/sst/opencode.git
synced 2025-08-22 05:54:08 +00:00
feat(tui): retain cache when cycling between subagent/parent sessions for perf (#1981)
This commit is contained in:
parent
ca3769b7fa
commit
b3885d1614
2 changed files with 26 additions and 2 deletions
|
@ -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 {
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue