Skip to content

v2.2.0

Choose a tag to compare

@corinagum corinagum released this 06 Nov 00:45
· 4 commits to releases/core since this release
662e26f

Highlights

  • Respond inside the thread of the message a user acted on in 1:1 chats, in addition to channels. SendAsync and ReplyAsync place responses for you, proactive TeamsBotApplication.ReplyAsync posts to the reply chain of the named message, and Plan completion lands in the same thread (#714, #722).
  • Add Plan and steps, with Plan.CreateFromContext for 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.SocketMode observer with Ready, Disconnected and Reconnected events (#705, #712, #717).
  • Propagate the request identity through every TeamsStreamingWriter send, 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, KeepAliveInterval and ServerTimeout are removed from SocketModeOptions. Only NegotiateBaseUrl and Geos remain. Remove any assignments to the removed options. Defaults and retry behavior are unchanged (#712).
  • HTML widgets (preview): HtmlWidgetHelpers.InjectWidgetProtocol and InjectWidgetProtocolOptions are removed. Widget markup is now sent as authored, so your widget must send ui/initialize and ui/notifications/initialized itself and report its size with ui/notifications/size-changed. samples/HtmlWidgetBot shows a shared widget runtime (#720).
  • Stream stop button removed: TeamsStreamingWriter.Cancelled is marked [Obsolete] and always returns false. Remove any handling that depends on it. Streaming now follows the service's 10-minute time limit, up from 2 minutes (#718).
  • ReplyAsync quoting: ReplyAsync quotes 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.UsageInfo and CitationAppearanceDocument.UsageInfo are marked [Obsolete] in favor of SensitivityUsageInfo. Builds that treat warnings as errors will report CS0618. Entities now also serialize @type and @context (#719).
  • Threading (experimental): the new reply-chain methods on ConversationApiClient are marked ExperimentalTeamsThreading. Use #pragma warning disable ExperimentalTeamsThreading to call them directly. SendAsync, ReplyAsync and streaming do not surface the diagnostic (#714).
  • TeamsChannelData.Meeting is now typed: read ChannelData.Meeting instead of Properties["meeting"] or Get<T>("meeting"), which now throw KeyNotFoundException or return null (#714).
  • Proactive ReplyAsync(conversationId, messageId, activity): the chat or channel id now comes from ChannelData, and a ;messageid= suffix is no longer stripped. Pass activities whose ChannelData is populated (#714).
  • Typed invoke handlers: ChannelData, Entities, Name and Source are 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 replyChain with it so a rebuilt Plan completes in the same thread. The PlanBot sample shows this (#722).
  • Activity timeouts surface as errors: when ProcessActivityTimeout elapses, processing now throws BotHandlerException instead of returning normally, so HTTP and Socket Mode report a failure instead of a 200 (#690).
  • Microsoft.Identity.Web 4.16.1: includes the fix for GHSA-699m-v2jh-245p. The GraphBot and McpServer samples move Azure.Identity to 1.17.2 (#715).

What's Changed

Features & Improvements

Bug Fixes

Documentation

CI/Chores

Dependencies

Full Changelog: v2.1.2...v2.2.0