# What changed in chat

> 240 changes in chat 4 from its official release notes, upgrade guides and advisories: 21 breaking, 5 deprecations, 7 security, 116 new APIs and options. Each one cited. Sources checked 2026-10-18. HTML: https://unstale.sh/npm/chat/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## chat 4

### Breaking changes

- A Teams button opening a modal renders with associatedInputs set to none, so card inputs do not block the dialog or get submitted. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.42.0)
- The union gains a member; external adapters that exhaustively handle it with a never check need a text_input case. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.42.0)
- Returns undefined for inherited object keys such as "toString" instead of returning Object.prototype members. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.42.0)
- Returns an empty array for inherited object keys such as "toString" instead of returning Object.prototype members. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.42.0)
- Messages queued under old keys are not migrated, and old and new workers do not exclude each other; upgrade chat and @chat-adapter/slack together and restart all workers. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.42.0)
- Invalid arguments now throw ChatError at registration, and global or sticky pattern flags match on every message rather than skipping alternate ones. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.42.0)
- AI tool calls inside handlers without a conversation scope are rejected unless given an explicit scope or scope: false; standalone tool factories follow the same rules. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.42.0)
- Creating tools with an empty scope id now throws. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.42.0)
- Teams card inputs using the IDs actionId, value, or msteams cause a ValidationError when rendered; the cards subpath throws an Error. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.42.0)
- The subpath emits the native Adaptive Cards Table element. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.41.0)
- A definitive false from an adapter now suppresses SDK text-based mention detection; adapters should return undefined when a mention is undetermined. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.41.0)
- Adds cross-platform per-user message persistence, replacing bot.transcripts; migrate the config key to history.user and update call sites. (4.39.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.39.0)
- Applies the conversation scope guard to write tools; out-of-scope thread or channel IDs are rejected before execution. sendDirectMessage remains gated by approval alone. (4.39.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.39.0)
- No longer treats request-body messages as conversation state: it consumes only the latest user message, strips tool parts, rejects messages left without parts with HTTP 400, and gets prior turns from the state adapter when history persistence is enabled. (4.39.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.39.0)
- Direct calls now reject when a receipt fails instead of logging a warning and resolving; callers should await the method or catch its rejection. (4.38.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.38.0)
- Read guards now scope tools in modal, assistant, app-home, app-context, and member-joined handlers; unscoped reads log a warning, and reads from newly scoped handlers may now be rejected. (4.37.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.37.0)
- Teams dialog values submitted as JSON numbers are stringified instead of dropped, so previously absent keys can now be present as strings. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.36.0)
- Sets supported Node versions in the package engines. (4.29.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.29.0)
- Adds this method to the Adapter interface and Slack adapter, replacing the previous isExternalChannel boolean. (4.23.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.23.0)
- Makes channelIdFromThreadId required in the Adapter and StateAdapter interfaces. (4.19.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.19.0)
- Improves type safety by changing StreamChunk to a discriminated union. (4.16.1) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.16.1)

### Security

- External link metadata is marked as untrusted. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.40.0)
- Webhook tenant isolation is hardened. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.40.0)
- Adds a Notion adapter for page and block comment discussions, including webhook verification, streaming, history, mentions, and up to 3 native attachments. (4.37.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.37.0)
- Configure the consumer secret to receive XChat webhooks, whose POSTs must carry a valid x-twitter-webhooks-signature. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.36.0)
- Supports encrypted send and receive in direct messages and groups through webhook push or polling; signature verification is on by default and undecryptable or unverified events are dropped. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.36.0)
- Supports inbound attachments with lazy download and decryption, plus outbound encrypted uploads. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.36.0)
- Fixes a security bypass involving url_verification. (4.16.1) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.16.1)

### Deprecations

- The subpath is deprecated and re-exports the original API from @chat-adapter/catalog so existing imports keep working. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.42.0)
- Passing a guard function remains supported but is deprecated in favor of scope. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.42.0)
- Remains available as a deprecated alias for bot.history.user. (4.39.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.39.0)
- Deprecated in favour of HistoryEntry; both types remain exported from chat. (4.39.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.39.0)
- Ships from chat/ai alongside AiMessage, AiMessagePart, and ToAiMessagesOptions; the previous chat re-export remains available but is deprecated. (4.29.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.29.0)

### New APIs and options

- Adds optional card input values keyed by input ID; Teams populates them from Action.Submit payloads. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.42.0)
- Adds an optional hook for adapters to namespace dedupe, lock, queue, and turn keys, isolating Slack message concurrency and cancellation by installation. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.42.0)
- Adds an optional field to postable content and streaming options; adapters with a native AI label can display it, and Teams shows its AI generated label. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.42.0)
- Adds a zero-dependency catalog of adapters, including metadata and helpers for listing adapters, looking up entries, and checking feature support. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.42.0)
- Adds a handler-only overload for messages reaching pattern routing, including attachment-only messages without text. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.42.0)
- Standalone tool factories exported from chat/ai now accept strictScope and follow the same scope rules as createChatTools. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.42.0)
- Adds an adapter that reads channel chat through EventSub webhooks, replies through the Helix Chat API, deletes messages as a moderator, and sends and receives whispers. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.42.0)
- Button and LinkButton accept user IDs allowed to see the button; Slack renders the option as visible_to_user_ids, while other adapters ignore it. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.42.0)
- Installation lifecycle events provide a persistable channelId for later proactive messages. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.41.0)
- New subpath provides TanStack message conversion for thread history and a Chat SDK toolset; its tools require zod 4.2 or newer. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.41.0)
- Adds an installation lifecycle handler; the Teams adapter emits it for installationUpdate activities. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.41.0)
- Adds an installation lifecycle handler; the Teams adapter emits it for installationUpdate activities. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.41.0)
- Select and RadioSelect inputs in Slack modals can opt in to selection change events. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.41.0)
- Adds an option to control grid lines in Teams tables; it defaults to true, and false keeps a table borderless. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.41.0)
- Adds a Teams-only table rendering option for grid style. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.41.0)
- Adds an option for vertical alignment of cell content in Teams table rendering. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.41.0)
- Adds optional positive integer column weights for Teams table rendering. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.41.0)
- The legacy setting can be set to false to disable count-based history eviction; the default remains 200 entries per user. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.41.0)
- The Teams adapter supports Vercel Connect with lazy app identity resolution and custom webhook verification. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.41.0)
- Adds an opt-in webhook option to propagate message, action, and slash command handler errors through waitUntil while preserving default behavior. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.41.0)
- Adds a tooltip option to Button; the Teams adapter renders it as an Adaptive Card action tooltip, while other adapters ignore it. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.40.0)
- Adds a width hint to Card; the Teams adapter renders it as the msteams full-width card property, while other adapters ignore it. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.40.0)
- Adds a tooltip option to LinkButton; the Teams adapter renders it as an Adaptive Card action tooltip, while other adapters ignore it. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.40.0)
- Adds promise-based helpers for per-channel message access; reads delegate to the adapter, with SDK-side persisted history served from cache. (4.39.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.39.0)
- Adds promise-based helpers for per-thread message access; reads delegate to the adapter, with SDK-side persisted history served from cache. (4.39.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.39.0)
- Caps lock renewal at a maximum lifetime, defaulting to 10 minutes, so a hung handler cannot block a thread forever. (4.39.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.39.0)
- Introduced as the replacement for TranscriptEntry; both types are exported from chat. (4.39.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.39.0)
- Can include an explicit action ID. (4.39.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.39.0)
- Adds lifecycle support, native stop cancellation through thread.signal, automatic session titles, and session stop/title-change events while preserving the legacy assistant_view compatibility path. (4.39.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.39.0)
- Converts history.user.list() entries into { role, content } messages ready for LLM prompts. (4.39.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.39.0)
- Adds a workflow-safe serialization entrypoint for projects that need to use serialization without Node-only runtime dependencies. (4.38.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.38.0)
- The --connect option scaffolds Discord bots with create-chat-sdk. (4.38.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.38.0)
- The Discord adapter adds support for custom webhook verification. (4.38.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.38.0)
- Adds a shared thread API for marking messages as read across WhatsApp, Messenger, and XChat. (4.38.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.38.0)
- Adds native message replies, including WhatsApp contextual reply support. (4.38.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.38.0)
- The Discord adapter adds Vercel Connect credential resolvers. (4.38.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.38.0)
- Adds strictScope: true to confine a thread scope to that thread, rejecting sibling threads and the parent channel. (4.37.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.37.0)
- Adds a native adapter with signed webhooks, media, quick replies, story context, reactions, and typed Meta API errors. (4.37.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.37.0)
- Adds lifecycle callbacks for message updates and deletions, including Slack message_changed and message_deleted dispatch support. (4.37.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.37.0)
- Adds Notion emoji platform support. (4.37.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.37.0)
- Adds XChat support as a new subpath alongside the existing X adapter; the XChat crypto dependencies are optional peer dependencies. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.36.0)
- Adds a modal child rendered by the Slack adapter as a datepicker and by the Teams adapter as Input.Date. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.36.0)
- Allows webhook verification to be disabled when an upstream layer already verifies XChat webhooks. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.36.0)
- Sets the age gate for the first edit of a fresh message; its default is 5000ms so receiving clients have stored the original. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.36.0)
- Adds an optional catalog field for adapters that ship on a subpath. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.36.0)
- Adds a modal child rendered by the Slack adapter as a number_input and by the Teams adapter as Input.Number; submitted values arrive in event.values as strings. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.36.0)
- Starts or reuses an encrypted one-to-one conversation and performs a full key exchange when needed so the bot can message first. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.36.0)
- Controls XChat read receipts and defaults to on. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.36.0)
- Provides an environment-variable alternative to consumerSecret for receiving verified XChat webhooks. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.36.0)
- Adds a configurable group welcome message. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.36.0)
- Adds support for sending and receiving reactions. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.36.0)
- Exports a builder for approval cards from the chat/workflow subpath. (4.35.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.35.0)
- Exports a builder for resolved approval cards from the chat/workflow subpath. (4.35.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.35.0)
- Adds an optional Author field to distinguish platform-generated messages from humans and bots; the Slack adapter sets it for messages from its reserved USLACK user. (4.35.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.35.0)
- Adds durable human-in-the-loop approvals through the chat/workflow subpath. The workflow suspends for a decision or optional timeout, validates approvers, finalizes the card, and returns the outcome; it requires the optional workflow peer dependency. (4.35.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.35.0)
- Adds Slack adapter support for Slack's Agent messaging experience, including app_context_changed routing and folded context on DM messages. (4.34.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.34.0)
- Adds the opened Slack tab, allowing handlers to distinguish a Home-tab open from the DM-open signal under agent_view. (4.34.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.34.0)
- Adds a builder for pie, bar, area, and line charts, with JSX support. (4.34.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.34.0)
- Adds a chart element supporting pie, bar, area, and line charts with Slack-style data visualization fields. (4.34.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.34.0)
- Adds a helper for rendering chart data as fallback text on platforms without native chart support. (4.34.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.34.0)
- Adds SlackChartElement types, chart card children, data table rendering, and matching limits to the blocks subpath. (4.34.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.34.0)
- Adds a helper for reading folded app context from DM messages. (4.34.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.34.0)
- Adds a core event carrying normalized AppContextEntity[] data for the user's active view. (4.34.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.34.0)
- Accepts an optional thread reference so prompts can sit at the top of an agent conversation. (4.34.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.34.0)
- Adds an optional accessible table description. (4.34.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.34.0)
- Adds an optional field for specifying rows per page. (4.34.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.34.0)
- Adds the vendor-official Dial adapter to the catalog and CLI scaffold spec. (4.33.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.33.0)
- Adds the vendor-official Photon adapter to the catalog and CLI scaffold spec. (4.33.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.33.0)
- Adds an adapter for replying to public mentions, sending and receiving direct messages, posting and editing from the bot account, and liking posts via the X API v2 with OAuth 2.0 and managed token refresh. (4.33.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.33.0)
- Adds autoCompletePrevious, defaulting to true; pass false to keep multiple tasks in progress for parallel execution. (4.32.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.32.0)
- Adds a zero-dependency catalog subpath with official and vendor-official adapter metadata, environment specs, and setup helpers. (4.31.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.31.0)
- Adds support for stable IDs to link button action handlers. (4.31.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.31.0)
- Adds a burst concurrency strategy. (4.29.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.29.0)
- Adds a subpath for AI utilities, keeping the optional ai and zod peer dependencies out of bundles that do not use them. (4.29.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.29.0)
- Exposes Chat SDK operations as AI SDK tools, with presets, per-tool or global approval settings, and tools that can be cherry-picked. (4.29.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.29.0)
- A standalone reviver is exported for workflow-safe deserialization without adapter dependencies. (4.26.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.26.0)
- Buttons can use actionType: "modal" to support Teams dialogs. (4.24.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.24.0)
- Adds an onOpenModal webhook hook for Teams dialog support. (4.24.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.24.0)
- Adds an enum distinguishing private, workspace, external, and unknown channel scopes. (4.23.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.23.0)
- The Adapter interface gains an optional disconnect() hook, called during chat.shutdown() for resource cleanup. (4.21.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.21.0)
- Introduces the LinkPreview object on Message. (4.20.1) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.20.1)
- Adds an API for transforming history to AI SDK messages. (4.20.1) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.20.1)
- Adds forceReleaseLock to StateAdapter for interrupting or steering long-running handlers. (4.19.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.19.0)
- Adds a config option for interrupting or steering long-running handlers when a lock conflict occurs. (4.19.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.19.0)
- Adds a type for scheduled messages, with cancellation support in the Slack adapter. (4.19.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.19.0)
- Adds scheduling of messages to be sent at a future time; the Slack adapter uses chat.scheduleMessage and supports cancellation. (4.19.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.19.0)
- Adds support for native Slack tables. (4.18.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.18.0)
- Button() accepts a disabled prop for Google Chat and Discord. (4.16.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.16.0)
- This config option suppresses the initial "..." placeholder in post+edit fallback streaming. (4.16.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.16.0)
- The Slack adapter adds an onMemberJoinedChannel handler. (4.16.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.16.0)
- Added the CardLink element. (4.15.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.15.0)
- ChatConfig now accepts dedupeTtlMs to configure the deduplication TTL; the default TTL is 5 minutes. (4.15.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.15.0)
- The Slack adapter now supports typing indicators using the Slack assistants API. (4.14.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.14.0)
- Adds handler registration for assistant_thread_context_changed events. (4.13.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.13.0)
- Adds handler registration for assistant_thread_started events. (4.13.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.13.0)
- Adds a Slack adapter method for setting assistant status. (4.13.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.13.0)
- Adds a Slack adapter method for setting assistant title. (4.13.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.13.0)
- Adds a Slack adapter method for setting suggested prompts. (4.13.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.13.0)
- Accepts stopBlocks to support Block Kit on stream finalization. (4.13.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.13.0)
- Adds support for slash commands. (4.12.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.12.0)
- Cards can now include inline Select components. (4.11.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.11.0)
- Cards can now include Radio buttons. (4.11.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.11.0)
- Support was added for creating modals from ephemeral messages. (4.10.1) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.10.1)
- Adds a field for passing arbitrary metadata through the modal lifecycle. (4.10.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.10.0)
- Adds GitHub and Linear integrations. (4.8.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.8.0)
- Added to modal events to provide related message information. (4.7.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.7.0)
- Added to modal events to provide related thread information. (4.7.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.7.0)
- Adds the LinkButton component for use in applications. (4.6.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.6.0)
- Adds postEphemeral() for ephemeral messages. (4.5.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.5.0)
- Adds a private metadata field to onModalClose events. (4.4.1) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.4.1)
- Adds support for modal events. (4.4.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.4.0)
- Adds support for modals. (4.4.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.4.0)
- Adds support for selectors. (4.4.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.4.0)
- Adds support for text inputs. (4.4.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.4.0)
- Adds Discord support. (4.3.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.3.0)
- Adds native streaming support. (4.1.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.1.0)

### Performance

- Resolved user profiles are cached in the state adapter for 1 hour, or 5 minutes after failed lookups, avoiding a Graph call per message. (4.35.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.35.0)

### Behavior and default changes

- Built-in AI tools set aiGenerated: true on the markdown and raw messages they post or edit. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.42.0)
- Button callbackUrl POST requests now include card input values, including when no onAction handler is configured. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.42.0)
- TextInput can now be used as a CardChild, allowing users to reply directly on a card instead of opening a dialog. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.42.0)
- Teams requires card inputs unless optional is set and validates every input before allowing a button through. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.42.0)
- Custom Bot Framework and Graph token factories take precedence over client-secret environment variables. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.41.0)
- Accepts the stream returned by TanStack's chat(). (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.41.0)
- Can be set to false to disable count-based history eviction; the default remains 200 entries per user. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.41.0)
- The Teams adapter renders Table as the native Adaptive Cards 1.5 Table element, with grid lines, relative column sizing, and an accessible header row. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.41.0)
- The Teams adapter uses the service URL encoded in the thread ID for messaging operations, reaching regional or sovereign endpoints; an explicit apiUrl still pins every call. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.41.0)
- Accepts the stream returned by TanStack's chat(). (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.41.0)
- Accepts the stream returned by TanStack's chat(). (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.41.0)
- Emitted Adaptive Cards now declare schema version 1.5, which supports action tooltips. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.40.0)
- AI tool scoping is tightened. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.40.0)
- The Teams cards subpath renders button and link-button tooltips and card width hints as Adaptive Card properties. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.40.0)
- Direct-message conversations are isolated. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.40.0)
- Google Chat pagination now uses native pagination. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.40.0)
- Queued-message scoping is tightened. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.40.0)
- Recording storage is bounded. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.40.0)
- Slack caches are isolated. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.40.0)
- Telegram file downloads are returned as portable ArrayBuffer data while Buffer support remains in the shared attachment contract. (4.39.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.39.0)
- Locks remain alive while message handlers run, keeping queue, burst, and debounce strategies serialized beyond the lock TTL; loops stop if ownership is lost, and debounce continues draining messages that arrive during a handler. (4.39.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.39.0)
- Supports native stop cancellation for Slack Agent Sessions. (4.39.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.39.0)
- Replied-to message context is preserved in normalized messages and populated from Telegram replies. (4.38.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.38.0)
- Built-in agent read tools are confined to the conversation being handled, with an optional scope override. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.36.0)
- Cards degrade to text with tappable URL and mention entities plus a URL preview attachment. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.36.0)
- Supports editing and deleting the bot's own messages; the first edit of a fresh message is age-gated by editSafetyDelayMs. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.36.0)
- Adds typing keep-alive support. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.36.0)
- Requests include a chat-sdk-xchat product token so Chat SDK traffic is identifiable in X API request logs; a User-Agent set via apiHeaders takes precedence. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.36.0)
- Normalized incoming Teams message authors now expose Microsoft Graph email addresses. (4.35.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.35.0)
- Explicitly configured progress is shown as a native Teams DM status while native streaming is preserved. (4.35.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.35.0)
- The chat package now accepts AI SDK v7 as a peer dependency alongside v6. (4.34.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.34.0)
- Carries folded active-view context so handlers can identify the view associated with a Home-open event. (4.34.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.34.0)
- Accepts AI SDK v7 and newer compatible React, Svelte, and Vue AI SDK peer dependency majors. (4.34.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.34.0)
- Environment credential fallback remains enabled unless an auth or verification field is explicitly passed, so unrelated config such as agentView does not suppress it. (4.34.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.34.0)
- Under agentView, each user message in the Messages tab is a thread root; subscribed conversation-scoped threads from openDM() continue to receive top-level DM messages. (4.34.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.34.0)
- Surfaces Slack's per-block validation details when the API rejects blocks. (4.34.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.34.0)
- The interactive state picker now filters out CLI-incompatible state adapters. (4.33.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.33.0)
- The default message dedupe TTL increases from 5 to 10 minutes to outlast platform redelivery windows; configuring dedupeTtlMs still overrides it. (4.33.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.33.0)
- Adds native draft streaming in Telegram private chats, with fallback streaming elsewhere. (4.30.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.30.0)
- Slack native streaming can send markdown tables without wrapping them in code fences; other consumers retain the append-only table fallback. (4.25.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.25.0)
- New concurrency strategies are implemented for overlapping messages. (4.22.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.22.0)
- Migrates the remaining adapters to shared error types. (4.19.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.19.0)
- Adapters have updated fallback-render behavior. (4.16.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.16.0)
- Markdown can be rendered fully while streaming, including on Slack, which has native streaming. (4.16.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.16.0)
- Markdown rendering now supports tables. (4.16.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.16.0)
- A new ConsoleLogger is created automatically. (4.13.4) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.13.4)
- Routes the Slack assistant_thread_context_changed event. (4.13.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.13.0)
- Routes the Slack assistant_thread_started event. (4.13.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.13.0)

### Tooling

- Adds Teams support to the command's Connect scaffolding. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.41.0)
- The CLI scaffold now registers the XChat adapter. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.36.0)

### Fixes and other changes

- SlackAdapter and TelegramAdapter can now be assigned to Adapter when exactOptionalPropertyTypes is enabled. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.42.0)
- The default thread signal is created on first use, and threads revived inside the Workflow DevKit VM receive an inert signal that never aborts, fixing workflow startup failures. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.42.0)
- Modal context is retained until the modal closes, keeping relatedThread and relatedChannel available after validation errors or update and push responses. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.42.0)
- Restoring threads and channels now preserves streaming settings and runtime ownership. (4.41.1) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.41.1)
- After a failed state connection, the next initialize() call or webhook retries initialization; concurrent callers share one attempt, and failures remain cached until shutdown(). (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.41.0)
- The chat JSX runtime now forwards align on Table, matching fromReactElement. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.41.0)
- Telegram polling waits for handlers to settle before advancing update offsets. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.41.0)
- Callback tokens are consumed once. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.40.0)
- Buttons retain their tooltip and other fields when callbackUrl is swapped for a callback token. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.40.0)
- Ephemeral follow-ups are preserved. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.40.0)
- Explicit Google Chat bot identity is required for reliable mention handling. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.40.0)
- Preserves adapter-returned thread ids when editing channel messages. (4.39.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.39.0)
- Queued and debounced messages are isolated by thread when using channel-scoped locks. (4.38.1) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.38.1)
- Keeps empty table cells to preserve tab-separated column alignment and drops rows with no content, such as placeholder header rows. (4.38.1) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.38.1)
- Automatic Chat class serializers are isolated from Node-only runtime dependencies. (4.38.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.38.0)
- Email addresses no longer trigger bot mentions because an @ following a word character is not treated as a mention. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.36.0)
- Personal and group conversations are routed using their explicit conversation type, so group chats use buffered fallback even when their IDs resemble direct messages. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.36.0)
- Detects mentions from structured mention entities, swipe-replies to the bot, and a plain-text @handle fallback. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.36.0)
- Keeps messages with empty text when they have supported links or attachments, including images and fetchable text files. Messages with only unsupported attachments remain skipped, and multipart content may contain only attachment parts. (4.35.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.35.0)
- No longer falsely matches @bot when the mention is @bot-dev. (4.34.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.34.0)
- The Telegram adapter no longer falsely matches @bot when the mention is @bot-dev. (4.34.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.34.0)
- Preserves markdown structural whitespace when extracting normalized message text. (4.34.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.34.0)
- Preserves skipped mention routing for debounce and message patterns. (4.33.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.33.0)
- Bot mentions are now detected in skipped queue and burst messages. (4.32.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.32.0)
- Streaming posts without an incoming message context no longer crash when using lightweight thread handles. (4.32.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.32.0)
- Fallback streaming is guarded against empty post and edit calls. (4.26.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.26.0)
- Source maps are disabled in published packages. (4.24.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.24.0)
- An adapter is now used to parse the channel ID for thread.channelId. (4.24.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.24.0)
- Step separator detection for AI SDK v5+ now checks for the finish-step event. (4.21.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.21.0)
- The Thread and Channel interfaces now declare the toJSON() method to match their implementations. (4.21.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.21.0)
- Accumulates text and posts once instead of using the fallbackStream post-and-edit loop that caused 422 errors from empty body edits during TTFT; fallbackStream edit failures are now logged via Logger. (4.20.1) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.20.1)
- Makes EphemeralMessage generic over TRawMessage. (4.19.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.19.0)
- Fixes compatibility with AI SDK 6. (4.18.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.18.0)
- Fixes non-atomic message deduplication that could silently drop app_mention events. (4.17.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.17.0)
- Improves streaming for AI SDK. (4.16.1) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.16.1)
- Fixes a crash when openModal is called for an action with no thread context, such as a home tab button. (4.16.1) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.16.1)
- Streaming markdown healing is added with remend. (4.16.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.16.0)
- Fixes lost metadata that prevented deserialized threads from posting streams to Slack. (4.13.3) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.13.3)
- allMessages was fixed and tested. (4.2.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.2.0)
- fetchMessages was fixed and tested. (4.2.0) — [release notes](https://github.com/vercel/chat/releases/tag/chat%404.2.0)
