unstale

npm / @chat-adapter/slack

@chat-adapter/slack

What changed in @chat-adapter/slack 4, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-18.

8 breaking4 security69 new APIs and options21 behavior and defaults36 fixes and other

See which of these apply to your code, ranked, in your agent:

npx @unstale/cli init

@unstale/cli 0.1.1 on npm

@chat-adapter/slack 4138 changes

Breaking changes 8

  • Mention classification now inspects message content and Slack rendering rather than relying on the app_mention event type; inspected messages without a mention report isMention: false.

    4.41.0release notes

  • Mentions and links in raw_text table cells render literally; a bot mention token no longer resolves to a display name.

    4.41.0release notes

  • Slack attachment downloads refuse private and internal addresses, cap responses at 25 MB, and time out after 30 seconds; the bot token is sent only to trusted Slack origins.

    4.39.0release notes

  • Card tables render as paginated, sortable data table blocks by default; header-only or over-limit tables retain their specified fallbacks.

    4.34.0release notes

  • Org-wide installs are keyed on enterprise_id instead of team_id across event, slash command, and interactive payload paths; internal StateAdapter installations may need repopulating under enterprise_id.

    4.29.0release notes

  • A configured webhookVerifier takes precedence over signingSecret and SLACK_SIGNING_SECRET.

    4.29.0release notes

  • The previous boolean is replaced by channelVisibility.

    4.23.0release notes

  • Adapter and StateAdapter implementations must now provide channelIdFromThreadId.

    4.19.0release notes

Security 4

  • External request targets are validated before credentials, message content, or attachment requests are sent.

    4.40.0release notes

  • Bounds the length of bracketed URLs parsed in the link-unfurl fallback to avoid quadratic scans on adversarial input; valid links are unaffected.

    4.37.0release notes

  • Scopes profile caching and display-name mention reverse indexing by installation in multi-workspace deployments, preventing profiles and mention resolutions from leaking across workspaces.

    4.35.0release notes

  • A security bypass involving url_verification was fixed.

    4.16.1release notes

New APIs and options 69

  • Adds an optional hook to namespace dedupe, lock, queue, and turn keys, isolating Slack message concurrency and turn cancellation by installation. In multi-workspace mode, upgrade chat and @chat-adapter/slack together and restart all workers; old queued keys are not migrated and…

    4.42.0release notes

  • Returns every message ID in order when a long reply rotates into several messages; the last entry in messageIds is id.

    4.42.0release notes

  • Adds Block Kit blocks to the message sharing uploaded files. Passing both blocks and initialComment throws a TypeError because Slack would silently ignore blocks.

    4.42.0release notes

  • Button and LinkButton accept user IDs allowed to see the button; Slack renders them as visible_to_user_ids, while other adapters show the button to everyone. Action handlers must still check who clicked.

    4.42.0release notes

  • Select and RadioSelect inputs in Slack modals can opt in to selection change events.

    4.41.0release notes

  • Adapter-scoped transport options support egress proxies across Socket Mode, response URLs, webhook forwarding, and guarded file downloads.

    4.41.0release notes

  • An opt-in webhook option propagates message, action, and slash command handler errors through waitUntil while preserving default behavior.

    4.41.0release notes

  • Sets the maximum age of a native Slack stream segment; after the default four minutes, the adapter continues the reply in a new message at the next paragraph break.

    4.40.0release notes

  • Adds lifecycle support, automatic session titles, and session stop/title-change events while preserving the legacy assistant_view compatibility path.

    4.39.0release notes

  • Provides native stop cancellation for Slack Agent Sessions.

    4.39.0release notes

  • SlackEvent.blocks is now typed with the exported SlackMessageBlock interface.

    4.38.1release notes

  • Adds lifecycle callbacks and dispatch support for Slack message_changed and message_deleted events.

    4.37.0release notes

  • Adds DateInput as a modal child; the Slack adapter renders it as a datepicker, and its submitted value arrives in event.values as a string.

    4.36.0release notes

  • Adds NumberInput as a modal child; the Slack adapter renders it as a number_input, and its submitted value arrives in event.values as a string.

    4.36.0release notes

  • Adds an optional isSystem field to distinguish platform-generated messages from humans and bots; Slack sets it for messages authored by its reserved USLACK user.

    4.35.0release notes

  • Normalized incoming Slack message authors expose email addresses through message.author.email when the users:read.email scope is available; otherwise the field is undefined.

    4.35.0release notes

  • Installation records now include enterpriseId and isEnterpriseInstall to represent org-wide installs.

    4.35.0release notes

  • Accepts an optional installationId so proactive or cron posts outside webhook handling can scope profile and mention caches.

    4.35.0release notes

  • Enables Slack Agent messaging behavior, including app_context_changed routing and folded context on DM messages.

    4.34.0release notes

  • The Slack adapter routes Slack's app_context_changed event.

    4.34.0release notes

  • Adds folded active-view context to the event so handlers can identify the view associated with an app-home open.

    4.34.0release notes

  • Adds the opened Slack tab to the event, distinguishing a Home-tab open from the DM-open signal under agent_view.

    4.34.0release notes

  • Adds a helper for attaching the feedback buttons block to non-streamed messages.

    4.34.0release notes

  • Adds chart elements and a Chart builder with JSX support for pie, bar, area, and line charts.

    4.34.0release notes

  • Adds a helper that renders chart data as a text table on platforms without native chart support.

    4.34.0release notes

  • The blocks subpath gains chart types and card children, data table rendering, and matching Slack limits.

    4.34.0release notes

  • Adds optional native thumbs-up/down feedback buttons to streamed replies, with clicks dispatched through bot.onAction.

    4.34.0release notes

  • Adds a helper for reading folded app context from DM messages.

    4.34.0release notes

  • Adds default rotating status strings for the assistant thinking indicator when no explicit status or messages are passed.

    4.34.0release notes

  • Adds a native streaming configuration option, enabled by default; disable it on Slack flavours without the chat.startStream family.

    4.34.0release notes

  • Adds a core event with normalized AppContextEntity[] describing the user's active view.

    4.34.0release notes

  • Accepts an optional thread reference so prompts can sit at the top of an agent conversation.

    4.34.0release notes

  • Adds static or per-thread prompts applied automatically when an assistant or agent thread opens; null or undefined skips a thread.

    4.34.0release notes

  • Adds an optional accessible table description.

    4.34.0release notes

  • Adds an optional field for specifying rows per page.

    4.34.0release notes

  • Adds support for stable IDs to link button action handlers.

    4.31.0release notes

  • Adds webClientOptions to SlackAdapterConfig and forwards it to default and per-token WebClient instances, exposing settings such as retryConfig, per-request timeout, and rejectRateLimitedCalls.

    4.31.0release notes

  • Exposes runtime-free helpers for converting Slack cards to Block Kit.

    4.30.0release notes

  • Adds helpers for files, thread replies, views, interactions, and input blocks.

    4.30.0release notes

  • Adds a lightweight subpath for Slack API primitives.

    4.30.0release notes

  • Adds a lightweight subpath for Slack formatting primitives.

    4.30.0release notes

  • Adds a lightweight subpath for Slack webhook primitives.

    4.30.0release notes

  • Expose typed WebClient access bound to the current request-context token or configured default token, enabling Web API calls not covered by high-level SDK methods.

    4.29.0release notes

  • The typed native Slack client getter is renamed from client to webClient to match the underlying SDK class; client remains as a deprecated alias.

    4.29.0release notes

  • Optionally resolve bot tokens for incoming events, slash commands, and interactive payloads through an external read-only provider instead of internal StateAdapter state.

    4.29.0release notes

  • Slack AdapterConfig types and related sub-types move into a ./types module; public re-exports from index.ts remain unchanged.

    4.29.0release notes

  • Allows passing redirectUri explicitly during the Slack OAuth token exchange, with the callback query parameter retained as a backward-compatible fallback.

    4.25.0release notes

  • Adds an enum to distinguish private, workspace, external, and unknown channel scopes.

    4.23.0release notes

  • Adds getChannelVisibility() to the Adapter interface and Slack adapter.

    4.23.0release notes

  • Introduces a LinkPreview object on Message.

    4.20.1release notes

  • Adds an API for transforming history to AI SDK messages.

    4.20.1release notes

  • EphemeralMessage is now generic over TRawMessage, allowing its raw message type to be specified.

    4.19.0release notes

  • Adds scheduling messages for a future time through Slack’s chat.scheduleMessage API, with cancellation support and the ScheduledMessage type.

    4.19.0release notes

  • Adds support for native Slack tables.

    4.18.0release notes

  • Adds onMemberJoinedChannel to the Slack adapter.

    4.16.0release notes

  • Adds the CardLink element.

    4.15.0release notes

  • You can now attach multiple files to the same Slack message instead of breaking by file.

    4.15.0release notes

  • Slack installations can use a custom key prefix.

    4.14.0release notes

  • The Slack adapter adds typing indicators using the Slack assistants API.

    4.14.0release notes

  • The adapter routes assistant_thread_context_changed events.

    4.13.0release notes

  • The adapter routes assistant_thread_started events.

    4.13.0release notes

  • Adds handler registration for assistant_thread_context_changed events.

    4.13.0release notes

  • Adds handler registration for assistant_thread_started events.

    4.13.0release notes

  • Adds a Slack adapter method to set assistant status.

    4.13.0release notes

  • Adds a Slack adapter method to set the assistant title.

    4.13.0release notes

  • Adds a Slack adapter method to set suggested prompts.

    4.13.0release notes

  • stream() accepts stopBlocks for Block Kit on stream finalization.

    4.13.0release notes

  • Adds support for slash commands in the Slack adapter.

    4.12.0release notes

  • Cards can now include inline Select components and Radio buttons.

    4.11.0release notes

Behavior and default changes 21

  • Post-and-edit fallback updates use Slack’s markdown_text field while streaming, so live-updating messages render markdown and have a 12,000-character ceiling instead of 4,000.

    4.40.0release notes

  • Custom status text is surfaced in the Agent messaging experience; clearing the status transitions the session to active.

    4.40.0release notes

  • Bot-authored messages use the Slack bot user ID when a bot profile is available.

    4.40.0release notes

  • Normalized Slack messages now include alert attachment content, so mention detection and onMessage pattern handlers can see alert text.

    4.39.0release notes

  • Channel-addressed calls echo context_team_id back as client_context_team_id when an event comes from a shared channel hosted on an away workspace.

    4.35.0release notes

  • Uses a 24-hour state-adapter marker to drop retried event deliveries after the original was dispatched, while still recovering retries whose first delivery never arrived.

    4.35.0release notes

  • Environment credential fallback is disabled only by explicitly supplied auth or verification fields, so unrelated config such as agentView does not suppress it.

    4.34.0release notes

  • Under agentView, Messages-tab DM messages are threaded with each user message as a root; subscribed openDM conversation threads continue receiving top-level DM messages.

    4.34.0release notes

  • Surfaces Slack's per-block validation details when block submission fails with invalid_blocks.

    4.34.0release notes

  • Card charts render as data visualization blocks and fall back to text when they violate Slack constraints.

    4.34.0release notes

  • Falls back to throttled post-and-edit if the first native streaming call is rejected, preserving consumed text; permanent platform errors disable native streaming for later streams on the adapter instance.

    4.34.0release notes

  • Makes file upload confirmation ids available in postMessage results.

    4.30.0release notes

  • Adapter internals are protected rather than private, allowing consumers to subclass adapters and override or extend their behavior.

    4.29.0release notes

  • The factory accepts SlackAdapterConfig directly instead of Partial<SlackAdapterConfig>; all config fields were already optional, so call sites need no changes.

    4.29.0release notes

  • Slack native streaming can send markdown tables without code fences; other consumers retain the append-only table fallback.

    4.25.0release notes

  • The adapter now depends on chat as a full dependency rather than an optional dependency.

    4.21.0release notes

  • Slack channel names are now resolved automatically.

    4.20.1release notes

  • Adapters have improved fallback-render behavior.

    4.16.0release notes

  • Markdown rendering is fully streaming, including for Slack, which has native streaming.

    4.16.0release notes

  • Markdown tables are rendered by the adapters.

    4.16.0release notes

  • Environment variables are now loaded automatically.

    4.13.4release notes

Fixes and other changes 36

  • Cuts Slack card text that exceeds Block Kit length limits, preventing Slack from rejecting messages. Markdown cuts preserve mentions, links, HTML entities, open code fences, and closing bold markers.

    4.42.0release notes

  • Backward thread history reads follow every API page before selecting the newest messages, fixing older replies being returned for threads spanning multiple pages. Long threads take one API call per page.

    4.42.0release notes

  • Preserves literal text and code formatting in incoming Slack messages and correctly parses email and phone links.

    4.42.0release notes

  • Completes open task cards when a stream segment rotates and replays in-progress cards in the next segment. Retired segments finish without Slack's error indicator; if closing cards are rejected, the adapter finalizes without them and streams the rest as text…

    4.42.0release notes

  • Inbound Slack messages convert special mentions and user group mentions to readable text.

    4.41.1release notes

  • Incoming bot mentions resolve to the bot’s display name in message text, while isMention is detected from the raw event text.

    4.40.0release notes

  • Receiving an empty status reactivates Slack Agent Sessions.

    4.40.0release notes

  • Preserves the first line of incoming Slack code blocks and treats only paired triple-backtick fences as code blocks, preventing formatting rewrites from altering fenced content.

    4.39.0release notes

  • Pasted Slack tables are preserved as structured table nodes in message.formatted and tab-separated text in message.text, with cell formatting and table order retained.

    4.38.1release notes

  • Normalizes the commonly hallucinated link order before Markdown conversion.

    4.37.0release notes

  • Preserves the Slack channel ID when converting labeled channel tokens, allowing agents to pass the ID to channel tools.

    4.37.0release notes

  • Resolves @name mentions on the native streaming path, matching the post-and-edit fallback while keeping fenced code literal and preserving existing ambiguity semantics.

    4.37.0release notes

  • Event token resolution prefers the envelope's authorizations[0] installation identity over top-level team_id or enterprise_id, which remain fallbacks.

    4.35.0release notes

  • Returns a replyable Slack thread ID by using the posted top-level message's timestamp as the thread root.

    4.35.0release notes

  • Recognizes bare @W… mentions in outgoing messages as raw Enterprise Grid user IDs so they render as real mentions instead of display names.

    4.35.0release notes

  • Handles org-wide Slack installs by keying the installation by enterprise ID instead of failing when Slack returns team: null; the result includes enterpriseId and isEnterpriseInstall.

    4.35.0release notes

  • Resolves per-installation tokens for events, slash commands, and interactive payloads in multi-workspace deployments, and preserves enterprise_id, is_enterprise_install, and is_ext_shared_channel in event payloads.

    4.35.0release notes

  • API calls while handling org-wide install events pass the event's team_id explicitly for workspace-scoped methods that require it.

    4.35.0release notes

  • Retry envelopes are now routed like first deliveries instead of being acknowledged and dropped; message-id deduplication drops true duplicates.

    4.33.0release notes

  • Cached Slack display names inside URLs are no longer resolved as user mentions before payload formatting.

    4.32.0release notes

  • Mention linking skips inline code spans and fenced code blocks, preventing handles in package names or shell snippets from becoming Slack user mentions.

    4.32.0release notes

  • Mention linking now skips whole http(s):// spans and excludes a slash immediately before @, preserving handles inside URLs while leaving whitespace- and punctuation-led mentions, emails, and mailto links unaffected.

    4.31.0release notes

  • Passes the Slack bot token through native stream append and stop calls.

    4.30.0release notes

  • Slack reaction events now resolve the reacting user's display name and real name through cached user lookup, falling back to the Slack user ID if lookup fails.

    4.30.0release notes

  • The factory no longer silently drops the apiUrl config field.

    4.29.0release notes

  • Fixes conversion of markdown tables to Slack table blocks.

    4.26.0release notes

  • Empty table cells now fall back to a single space to meet Slack Block Kit requirements and avoid invalid_blocks errors.

    4.24.0release notes

  • Duplicate mentions are resolved using the replace callback offset instead of indexOf.

    4.20.2release notes

  • The user cache is invalidated on Slack user_change events so display name updates are picked up immediately.

    4.20.2release notes

  • Reaction events on threaded replies now resolve the parent thread_ts, so onReaction receives the correct thread ID.

    4.19.0release notes

  • Compatibility fixes for AI SDK6.

    4.18.0release notes

  • Slack file_share messages are no longer silently dropped, allowing file uploads to reach processMessage.

    4.17.0release notes

  • The hasText check no longer causes a no_text error for file-only posts.

    4.17.0release notes

  • Nested lists are rendered with platform-appropriate indentation and ordered child content instead of being flattened.

    4.16.1release notes

  • The StreamChunk type now uses a discriminated union for improved type safety.

    4.16.1release notes

  • Standard Markdown bold in CardText content is converted to Slack and Google Chat formatting instead of rendering literally.

    4.13.1release notes