Skip to content

Feature Request: Allow users to stop/cancel streaming messages #2698

@buremba

Description

@buremba

Summary

Add API support for canceling in-flight streaming messages, enabling Slack bots to stop AI agents upon user request. Currently, once a stream starts, there's no way for users to interrupt it.

Use Case

When an AI agent is processing a long-running task and streaming results:

  1. User realizes they asked the wrong question
  2. User wants to stop the agent to save costs/time
  3. User clicks a "Stop" button in Slack
  4. Bot should be able to cancel the stream and stop the underlying agent

Current limitation: No API exists to cancel a stream after chatStream() is called. Calling stream.stop() only finalizes the stream - it doesn't interrupt it.

Proposed API

Accept cancellation signal via action

// Bot receives button click event
app.action("stop_agent", async ({ ack, body }) => {
  await ack();

  // Cancel the stream associated with this thread
  await client.chatStream.cancel({
    channel: body.channel.id,
    thread_ts: body.message.thread_ts,
    message: "Stopped by user request"
  });
});

Expected Behavior

When a stream is cancelled:

  1. Slack immediately shows a "Cancelled" indicator on the message
  2. Optional cancellation message appears (e.g., "Stopped by user")
  3. Bot receives confirmation that stream was cancelled
  4. Bot can clean up resources (kill agent process, etc.)

Current Workaround

Currently, bots must:

  1. Track stream state externally
  2. Kill the agent process manually
  3. Call stream.stop() which finalizes (not cancels) the stream
  4. Post a new message saying "Cancelled"

This creates a poor UX because the stream still shows as "completed" rather than "cancelled".

Environment

  • @slack/bolt: 4.5.0
  • @slack/web-api: 7.11.0
  • Platform: Slack Desktop App (macOS) / Slack Web

Related APIs

Similar cancellation patterns exist in:

  • AbortController in web standards
  • CancellationToken in other async frameworks

Metadata

Metadata

Assignees

No one assigned

    Labels

    auto-triage-skipPrevent this issue from being closed due to lack of activityenhancementM-T: A feature request for new functionalityserver-side-issue

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions