Repository navigation
v2.2.0
Highlights
- Respond inside the thread of the message a user acted on in 1:1 chats, in addition to channels.
SendAsyncandReplyAsyncplace responses for you, proactiveTeamsBotApplication.ReplyAsyncposts to the reply chain of the named message, and Plan completion lands in the same thread (#714, #722). - Add
Planand steps, withPlan.CreateFromContextfor showing progress while your agent works (#713). - Mark a message or an individual citation with a Microsoft Purview sensitivity label by its label ID using
AddSensitivityLabel(SensitivityUsageInfo)(#719). - Let HTML widgets send their own handshake and report their own height (#720).
- Replace Socket Mode sockets gracefully and drain in-flight work, with a simplified public options surface and a new experimental
TeamsBotApplication.SocketModeobserver withReady,DisconnectedandReconnectedevents (#705, #712, #717). - Propagate the request identity through every
TeamsStreamingWritersend, update and fallback (#711). - List and download pasted inline images through
context.Files(#697). - Let agentic users receive files shared with them (#688).
- Extended markdown text format is now generally available (#694).
- Socket Mode (preview). Develop new agents without exposing a public HTTP endpoint—receive activities over outbound WebSocket connections. (#682, #683, #685, #686).
Deprecations, removals, and migration notes
- Socket Mode options (preview):
StartupTimeout,ReadinessTimeout,ReconnectDelays,KeepAliveIntervalandServerTimeoutare removed fromSocketModeOptions. OnlyNegotiateBaseUrlandGeosremain. Remove any assignments to the removed options. Defaults and retry behavior are unchanged (#712). - HTML widgets (preview):
HtmlWidgetHelpers.InjectWidgetProtocolandInjectWidgetProtocolOptionsare removed. Widget markup is now sent as authored, so your widget must sendui/initializeandui/notifications/initializeditself and report its size withui/notifications/size-changed.samples/HtmlWidgetBotshows a shared widget runtime (#720). - Stream stop button removed:
TeamsStreamingWriter.Cancelledis marked[Obsolete]and always returnsfalse. Remove any handling that depends on it. Streaming now follows the service's 10-minute time limit, up from 2 minutes (#718). ReplyAsyncquoting:ReplyAsyncquotes the inbound message only when its id is a plain numeric message id. In card, dialog and feedback handlers it now sends without a quote instead of failing with HTTP 400. This also applied to released versions (#716).- Sensitivity labels:
AddSensitivityLabel(string name, ...),CitationAppearance.UsageInfoandCitationAppearanceDocument.UsageInfoare marked[Obsolete]in favor ofSensitivityUsageInfo. Builds that treat warnings as errors will report CS0618. Entities now also serialize@typeand@context(#719). - Threading (experimental): the new reply-chain methods on
ConversationApiClientare markedExperimentalTeamsThreading. Use#pragma warning disable ExperimentalTeamsThreadingto call them directly.SendAsync,ReplyAsyncand streaming do not surface the diagnostic (#714). TeamsChannelData.Meetingis now typed: readChannelData.Meetinginstead ofProperties["meeting"]orGet<T>("meeting"), which now throwKeyNotFoundExceptionor return null (#714).- Proactive
ReplyAsync(conversationId, messageId, activity): the chat or channel id now comes fromChannelData, and a;messageid=suffix is no longer stripped. Pass activities whoseChannelDatais populated (#714). - Typed invoke handlers:
ChannelData,Entities,NameandSourceare no longer lost, and a reply from a typed invoke handler inside a 1:1 thread goes to the reply chain. This fix also applies to released versions (#714). - Plan state: apps that persist Plan state should save
replyChainwith it so a rebuilt Plan completes in the same thread. ThePlanBotsample shows this (#722). - Activity timeouts surface as errors: when
ProcessActivityTimeoutelapses, processing now throwsBotHandlerExceptioninstead of returning normally, so HTTP and Socket Mode report a failure instead of a 200 (#690). Microsoft.Identity.Web4.16.1: includes the fix for GHSA-699m-v2jh-245p. TheGraphBotandMcpServersamples moveAzure.Identityto 1.17.2 (#715).
What's Changed
Features & Improvements
- feat(apps): add Socket Mode protocol transport by teddy arida-moody (@teddyam) in #682
- feat(apps): add SignalR Socket Mode connection by teddy arida-moody (@teddyam) in #683
- feat(apps): add multi-geo Socket Mode supervisor and transport by teddy arida-moody (@teddyam) in #685
- feat(apps): add Socket Mode to TeamsBotApplication by teddy arida-moody (@teddyam) in #686
- List and download pasted inline images through
context.Filesby Corina (@corinagum) in #697 - Let agentic users receive files by Corina (@corinagum) in #688
- Mark extended markdown text format as generally available by Corina (@corinagum) in #694
- Update the threading endpoint and add threading support for 1:1 chats by Corina (@corinagum) in #714
- Post Plan completion to the reply chain in 1:1 threads by Corina (@corinagum) in #722
- feat: add support for plans and steps- #648 by Lily Du (@lilyydu) in #713
- Add Purview sensitivity labels to agent messages by Corina (@corinagum) in #719
- feat: HTML widgets send their own handshake and height by Corina (@corinagum) in #720
- Limit public Socket Mode options to endpoint and geos by teddy arida-moody (@teddyam) in #712
- Add Socket Mode lifecycle observation APIs by teddy arida-moody (@teddyam) in #717
- fix: remove stop button logic for streaming and updates for 10 min timeout by Lily Du (@lilyydu) in #718
Bug Fixes
- fix: validate caller app on Entra inbound Agent ID tokens by Corina (@corinagum) in #695
- fix: throw on non-GUID agentic user id instead of falling back to app-only token by Corina (@corinagum) in #696
- fix(core): surface activity processing timeouts by teddy arida-moody (@teddyam) in #690
- fix: improvements on socket replacement and graceful draining by teddy arida-moody (@teddyam) in #705
- Fix TeamsStreamingWriter request identity propagation by Mehak Bindra (@MehakBindra) in #711
- fix: quote the inbound message in ReplyAsync only when its id is a numeric message id by Corina (@corinagum) in #716
- fix: bump Microsoft.Identity.Web to 4.16.1 by Corina (@corinagum) in #715
Documentation
- docs(apps): note Socket Mode availability on Canary and Pilot1 by teddy arida-moody (@teddyam) in #693
- Update TargetedMessages sample to manifest v1.29 by Corina (@corinagum) in #708
- Use production endpoint in Socket Mode sample by teddy arida-moody (@teddyam) in #721
CI/Chores
- chore(devcontainer): use the renamed Aspire dev container feature by David Pine (@IEvangelist) in #703
Dependencies
- chore(deps): bump the github-actions group with 2 updates by Dependabot (@dependabot)[bot] in #704
- chore(deps-dev): bump vite from 8.0.16 to 8.3.5 in /samples/TabApp/Web by Dependabot (@dependabot)[bot] in #707
Full Changelog: v2.1.2...v2.2.0