npm / @chat-adapter/teams
@chat-adapter/teams
What changed in @chat-adapter/teams 4, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-18.
4 breaking3 security29 new APIs and options9 behavior and defaults1 tooling16 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli init@chat-adapter/teams 462 changes
Breaking changes 4
Teams buttons with actionType set to modal render with associatedInputs set to none, so opening a dialog does not wait on or submit card inputs.
Teams uses guarded downloads for anonymous attachments: private or internal addresses, plain HTTP, oversized responses, and downloads exceeding the timeout are refused; loopback emulator downloads use bot authentication.
Teams JSON-number submit values are now stringified into event.values instead of being dropped, so previously absent keys may now be present as strings.
Adapters have updated fallback-render behavior.
Security 3
External request targets are validated before credentials, message content, or attachment requests are sent.
Webhook tenant isolation is hardened.
Authenticates connector-hosted inline attachments.
New APIs and options 29
ActionEvent gains optional values keyed by card input ID. Teams fills them from Action.Submit, and callbackUrl POSTs carry them too; validate them as user input.
PostableRaw, PostableMarkdown, PostableAst, PostableCard, StreamingPlanOptions, and StreamOptions accept optional aiGenerated; Teams shows its AI generated label when true. Edits must set the flag again to retain the label.
Adds an installation lifecycle handler emitted for
installationUpdateactivities, includingadd-upgrade, with a persistablechannelIdfor later proactive messages.Adds an installation lifecycle handler emitted for
installationUpdateactivities, includingremove-upgrade, with a persistablechannelIdfor later proactive messages.Adds
gridLines, which defaults totrue; passfalseto keep a borderless table.Adds the
gridStylerendering option for Teams tables.Adds
verticalAlignto control vertical alignment of cell content when rendering tables in Teams.Adds
widths, an option for positive integer column weights when rendering tables in Teams.The Teams adapter supports Vercel Connect with lazy app identity resolution and custom webhook verification; custom Bot Framework and Graph token factories take precedence over client-secret environment variables.
Adds an opt-in webhook option to propagate message, action, and slash command handler errors through
waitUntil, preserving default behavior when not enabled.The adapter exposes the bot user ID for application use.
Button and LinkButton support a tooltip, rendered by the Teams adapter as an Adaptive Card action tooltip.
Card supports a width hint, which the Teams adapter renders as the
msteamsfull-width card property.Adds DateInput as a modal child; the Teams adapter renders it as Input.Date.
Adds NumberInput as a modal child; the Teams adapter renders it as Input.Number.
Add support for adding and removing reactions from Microsoft Teams messages.
Normalized incoming Teams message authors expose Microsoft Graph email addresses; resolved profiles are cached in the state adapter to limit Graph calls.
Add native Microsoft Teams targeted message support via thread.postEphemeral() and channel.postEphemeral().
Add a TeamsAdapterConfig option for a custom token factory, enabling authentication through an external mechanism without a static client secret.
Adds low-level Teams primitive subpaths for custom runtimes.
Supported Node versions are now set in engines, giving developers a declared Node runtime compatibility range.
Adapter internals are now protected rather than private, allowing consumers to subclass an adapter and override or extend its behavior, including processUpdate.
Teams Adaptive Cards now support RadioSelect with auto-submit fan-out.
Teams Adaptive Cards now support Select with auto-submit fan-out.
Buttons can use actionType: "modal" to open a Teams dialog (task module).
Adds a webhook hook for handling when a Teams dialog opens.
Adds the ability to receive reaction events.
Adds typing indicator support.
The Teams adapter adds support for certificate and federated (workload identity) authentication.
Behavior and default changes 9
TextInput is now a CardChild, letting users reply directly on cards. Teams renders it as Adaptive Card Input.Text; IDs actionId, value, and msteams are rejected on cards.
Teams sends, edits, deletes, reacts, and types against the service URL encoded in the thread ID; an explicit
apiUrlstill pins every call to that endpoint.Teams renders
Tableas the native Adaptive Cards 1.5Tableelement instead of aContainerofColumnSets, enabling grid lines, relative column sizing, and accessible header rows.Emitted Adaptive Cards now declare schema version 1.5, enabling action tooltips.
The adapter emits Teams bot-join events so applications can react when the bot joins.
Show explicitly configured progress as a native Teams DM status while preserving native streaming.
chat is now a full dependency rather than an optional dependency, so it is installed with the adapter.
Markdown rendering is now fully streaming, including for Slack, which has native streaming.
Markdown tables are now rendered.
Tooling 1
Teams is supported by Connect scaffolding, including interactive setup.
Fixes and other changes 16
Teams now classifies bot senders using account role, bot account ID, and adapter identity, reporting isBot and isMe consistently across messages, reactions, card actions, and dialog events.
Teams channel posts return the created thread ID, allowing follow-up text and Adaptive Card messages to reply to that thread.
The chat JSX runtime now forwards
alignon<Table>, matchingfromReactElement.Edit and delete operations for targeted Teams messages use the
?isTargetedActivity=trueendpoint; targeted IDs are recorded in the Chat state adapter with a 24-hour TTL.Outgoing @names are preserved as plain text rather than converted to mention markup without matching entities.
The adapter falls back to Teams activity group metadata when the explicit conversation type is missing.
Buttons with a callbackUrl retain their tooltip and other fields when the URL is replaced with a callback token.
Live Teams sender email is now hydrated without requiring Microsoft Graph permissions.
Strips tags repeatedly until the output is stable, preventing nested or malformed markup from leaving a partial tag behind in Teams message conversion.
Routes personal and group conversations using their explicit conversation type, so group chats use buffered fallback even when their IDs resemble direct messages.
Parses Teams file download cards.
Fall back to Microsoft Graph's user principal name when a Teams user has no mail address.
Mention conversion no longer turns email addresses, @handles inside URLs, or mentions inside code spans into <at> mention tags.
Expanded npm keywords for adapter and state packages to improve discoverability.
Nested lists are rendered with platform-appropriate indentation and newline separation instead of being flattened during Markdown-to-platform conversion.
Fixes ESM directory imports for the Microsoft Graph auth provider.