diff --git a/cmd/sidekick-tui/main.go b/cmd/sidekick-tui/main.go index ab95ece..460fab8 100644 --- a/cmd/sidekick-tui/main.go +++ b/cmd/sidekick-tui/main.go @@ -321,6 +321,20 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { m.viewport.HalfViewUp() return m, nil case tea.KeyPgDown, tea.KeyCtrlD: + if msg.Type == tea.KeyCtrlD && m.isThinking { + if m.cancel != nil { + m.cancel() + } + m.isThinking = false + m.currentReasoning = "" + m.currentStream = "" + m.history = append(m.history, sidekick.Message{ + Role: sidekick.MessageRoleSystem, + Content: "Request cancelled.", + }) + m.updateViewportContent() + return m, nil + } m.viewport.HalfViewDown() return m, nil case tea.KeyCtrlJ: @@ -411,11 +425,13 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m, tea.Batch(tiCmd, vpCmd) } -func (m model) runAgent() tea.Cmd { - return func() tea.Msg { - res, err := m.agent.Run(context.Background(), m.history, m.pool) - return agentResponseMsg{response: res, err: err} - } +func (m *model) runAgent() tea.Cmd { + var ctx context.Context + ctx, m.cancel = context.WithCancel(context.Background()) + return func() tea.Msg { + res, err := m.agent.Run(ctx, m.history, m.pool) + return agentResponseMsg{response: res, err: err} + } } func (m model) View() string {