microsoft-agents-activity 1.1.0.dev9__tar.gz → 1.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/PKG-INFO +29 -1
  2. microsoft_agents_activity-1.2.0/VERSION.txt +1 -0
  3. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/__init__.py +4 -0
  4. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/activity.py +140 -93
  5. microsoft_agents_activity-1.2.0/microsoft_agents/activity/config/_coercion.py +99 -0
  6. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/config/_configure_logging.py +40 -3
  7. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/conversation_reference.py +2 -6
  8. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/entity/__init__.py +3 -0
  9. microsoft_agents_activity-1.2.0/microsoft_agents/activity/entity/activity_treatment.py +27 -0
  10. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/entity/entity_types.py +1 -0
  11. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/teams_channel_account.py +6 -0
  12. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/token_exchange_state.py +2 -2
  13. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents_activity.egg-info/PKG-INFO +29 -1
  14. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents_activity.egg-info/SOURCES.txt +2 -0
  15. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/readme.md +28 -0
  16. microsoft_agents_activity-1.1.0.dev9/VERSION.txt +0 -1
  17. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/LICENSE +0 -0
  18. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/MANIFEST.in +0 -0
  19. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/_channel_id_field_mixin.py +0 -0
  20. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/_model_utils.py +0 -0
  21. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/_type_aliases.py +0 -0
  22. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/_utils/__init__.py +0 -0
  23. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/_utils/_deferred_string.py +0 -0
  24. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/action_types.py +0 -0
  25. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/activity_event_names.py +0 -0
  26. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/activity_importance.py +0 -0
  27. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/activity_types.py +0 -0
  28. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/adaptive_card_invoke_action.py +0 -0
  29. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/adaptive_card_invoke_response.py +0 -0
  30. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/adaptive_card_invoke_value.py +0 -0
  31. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/agents_model.py +0 -0
  32. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/animation_card.py +0 -0
  33. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/attachment.py +0 -0
  34. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/attachment_data.py +0 -0
  35. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/attachment_info.py +0 -0
  36. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/attachment_layout_types.py +0 -0
  37. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/attachment_view.py +0 -0
  38. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/audio_card.py +0 -0
  39. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/basic_card.py +0 -0
  40. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/caller_id_constants.py +0 -0
  41. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/card_action.py +0 -0
  42. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/card_image.py +0 -0
  43. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/channel_account.py +0 -0
  44. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/channel_adapter_protocol.py +0 -0
  45. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/channel_id.py +0 -0
  46. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/channels.py +0 -0
  47. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/config/__init__.py +0 -0
  48. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/config/_load_configuration.py +0 -0
  49. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/contact_relation_update_action_types.py +0 -0
  50. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/conversation_account.py +0 -0
  51. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/conversation_members.py +0 -0
  52. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/conversation_parameters.py +0 -0
  53. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/conversation_resource_response.py +0 -0
  54. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/conversation_update_types.py +0 -0
  55. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/conversations_result.py +0 -0
  56. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/delivery_modes.py +0 -0
  57. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/end_of_conversation_codes.py +0 -0
  58. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/entity/_schema_mixin.py +0 -0
  59. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/entity/ai_entity.py +0 -0
  60. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/entity/entity.py +0 -0
  61. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/entity/geo_coordinates.py +0 -0
  62. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/entity/mention.py +0 -0
  63. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/entity/place.py +0 -0
  64. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/entity/product_info.py +0 -0
  65. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/entity/stream_info.py +0 -0
  66. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/entity/thing.py +0 -0
  67. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/error.py +0 -0
  68. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/error_response.py +0 -0
  69. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/errors/__init__.py +0 -0
  70. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/errors/error_message.py +0 -0
  71. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/errors/error_resources.py +0 -0
  72. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/expected_replies.py +0 -0
  73. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/fact.py +0 -0
  74. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/hero_card.py +0 -0
  75. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/inner_http_error.py +0 -0
  76. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/input_hints.py +0 -0
  77. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/installation_update_action_types.py +0 -0
  78. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/invoke_response.py +0 -0
  79. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/media_card.py +0 -0
  80. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/media_event_value.py +0 -0
  81. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/media_url.py +0 -0
  82. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/message_reaction.py +0 -0
  83. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/message_reaction_types.py +0 -0
  84. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/message_update_types.py +0 -0
  85. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/oauth_card.py +0 -0
  86. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/paged_members_result.py +0 -0
  87. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/receipt_card.py +0 -0
  88. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/receipt_item.py +0 -0
  89. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/resource_response.py +0 -0
  90. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/role_types.py +0 -0
  91. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/semantic_action.py +0 -0
  92. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/semantic_actions_states.py +0 -0
  93. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/sign_in_constants.py +0 -0
  94. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/sign_in_resource.py +0 -0
  95. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/signin_card.py +0 -0
  96. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/suggested_actions.py +0 -0
  97. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/__init__.py +0 -0
  98. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/app_based_link_query.py +0 -0
  99. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/batch_failed_entries_response.py +0 -0
  100. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/batch_failed_entry.py +0 -0
  101. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/batch_operation_response.py +0 -0
  102. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/batch_operation_state_response.py +0 -0
  103. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/bot_config_auth.py +0 -0
  104. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/cache_info.py +0 -0
  105. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/cancel_operation_response.py +0 -0
  106. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/channel_info.py +0 -0
  107. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/config_auth_response.py +0 -0
  108. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/config_response.py +0 -0
  109. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/config_response_base.py +0 -0
  110. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/config_task_response.py +0 -0
  111. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/conversation_list.py +0 -0
  112. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/file_consent_card.py +0 -0
  113. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/file_consent_card_response.py +0 -0
  114. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/file_download_info.py +0 -0
  115. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/file_info_card.py +0 -0
  116. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/file_upload_info.py +0 -0
  117. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_details.py +0 -0
  118. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_details_base.py +0 -0
  119. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_end_event_details.py +0 -0
  120. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_event_details.py +0 -0
  121. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_info.py +0 -0
  122. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_notification.py +0 -0
  123. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_notification_base.py +0 -0
  124. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_notification_channel_data.py +0 -0
  125. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_notification_recipient_failure_info.py +0 -0
  126. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_notification_response.py +0 -0
  127. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_participant_info.py +0 -0
  128. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_participants_event_details.py +0 -0
  129. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_stage_surface.py +0 -0
  130. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_start_event_details.py +0 -0
  131. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/meeting_tab_icon_surface.py +0 -0
  132. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/message_actions_payload.py +0 -0
  133. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/message_actions_payload_app.py +0 -0
  134. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/message_actions_payload_attachment.py +0 -0
  135. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/message_actions_payload_body.py +0 -0
  136. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/message_actions_payload_conversation.py +0 -0
  137. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/message_actions_payload_from.py +0 -0
  138. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/message_actions_payload_mention.py +0 -0
  139. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/message_actions_payload_reaction.py +0 -0
  140. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/message_actions_payload_user.py +0 -0
  141. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/messaging_extension_action.py +0 -0
  142. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/messaging_extension_action_response.py +0 -0
  143. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/messaging_extension_attachment.py +0 -0
  144. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/messaging_extension_parameter.py +0 -0
  145. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/messaging_extension_query.py +0 -0
  146. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/messaging_extension_query_options.py +0 -0
  147. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/messaging_extension_response.py +0 -0
  148. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/messaging_extension_result.py +0 -0
  149. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/messaging_extension_suggested_action.py +0 -0
  150. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/notification_info.py +0 -0
  151. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card.py +0 -0
  152. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_action_base.py +0 -0
  153. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_action_card.py +0 -0
  154. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_action_query.py +0 -0
  155. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_date_input.py +0 -0
  156. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_fact.py +0 -0
  157. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_http_post.py +0 -0
  158. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_image.py +0 -0
  159. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_input_base.py +0 -0
  160. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_multichoice_input.py +0 -0
  161. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_multichoice_input_choice.py +0 -0
  162. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_open_uri.py +0 -0
  163. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_open_uri_target.py +0 -0
  164. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_section.py +0 -0
  165. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_text_input.py +0 -0
  166. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/o365_connector_card_view_action.py +0 -0
  167. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/on_behalf_of.py +0 -0
  168. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/read_receipt_info.py +0 -0
  169. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/signin_state_verification_query.py +0 -0
  170. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/surface.py +0 -0
  171. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/tab_context.py +0 -0
  172. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/tab_entity_context.py +0 -0
  173. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/tab_request.py +0 -0
  174. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/tab_response.py +0 -0
  175. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/tab_response_card.py +0 -0
  176. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/tab_response_cards.py +0 -0
  177. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/tab_response_payload.py +0 -0
  178. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/tab_submit.py +0 -0
  179. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/tab_submit_data.py +0 -0
  180. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/tab_suggested_actions.py +0 -0
  181. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/targeted_meeting_notification.py +0 -0
  182. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/targeted_meeting_notification_value.py +0 -0
  183. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/task_module_card_response.py +0 -0
  184. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/task_module_continue_response.py +0 -0
  185. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/task_module_message_response.py +0 -0
  186. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/task_module_request.py +0 -0
  187. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/task_module_request_context.py +0 -0
  188. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/task_module_response.py +0 -0
  189. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/task_module_response_base.py +0 -0
  190. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/task_module_task_info.py +0 -0
  191. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/team_details.py +0 -0
  192. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/team_info.py +0 -0
  193. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/teams_batch_operation_response.py +0 -0
  194. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/teams_channel_data.py +0 -0
  195. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/teams_channel_data_settings.py +0 -0
  196. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/teams_meeting_info.py +0 -0
  197. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/teams_meeting_member.py +0 -0
  198. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/teams_meeting_participant.py +0 -0
  199. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/teams_member.py +0 -0
  200. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/teams_paged_members_result.py +0 -0
  201. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/tenant_info.py +0 -0
  202. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/teams/user_meeting_details.py +0 -0
  203. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/text_format_types.py +0 -0
  204. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/text_highlight.py +0 -0
  205. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/thumbnail_card.py +0 -0
  206. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/thumbnail_url.py +0 -0
  207. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/token_exchange_invoke_request.py +0 -0
  208. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/token_exchange_invoke_response.py +0 -0
  209. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/token_exchange_resource.py +0 -0
  210. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/token_or_sign_in_resource_response.py +0 -0
  211. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/token_post_resource.py +0 -0
  212. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/token_request.py +0 -0
  213. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/token_response.py +0 -0
  214. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/token_status.py +0 -0
  215. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/transcript.py +0 -0
  216. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/turn_context_protocol.py +0 -0
  217. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents/activity/video_card.py +0 -0
  218. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents_activity.egg-info/dependency_links.txt +0 -0
  219. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents_activity.egg-info/requires.txt +0 -0
  220. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/microsoft_agents_activity.egg-info/top_level.txt +0 -0
  221. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/pyproject.toml +0 -0
  222. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/setup.cfg +0 -0
  223. {microsoft_agents_activity-1.1.0.dev9 → microsoft_agents_activity-1.2.0}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: microsoft-agents-activity
3
- Version: 1.1.0.dev9
3
+ Version: 1.2.0
4
4
  Summary: A protocol library for Microsoft Agents
5
5
  Author: Microsoft Corporation
6
6
  License-Expression: MIT
@@ -35,6 +35,24 @@ This library is part of the **Microsoft 365 Agents SDK for Python** - a comprehe
35
35
  <th style="width:20%">Date</th>
36
36
  <th style="width:60%">Release Notes</th>
37
37
  </tr>
38
+ <tr>
39
+ <td>1.2.0</td>
40
+ <td>2026-07-17</td>
41
+ <td>
42
+ <a href="https://github.com/microsoft/Agents-for-python/blob/main/changelog.md#microsoft-365-agents-sdk-for-python---release-notes-v120">
43
+ 1.2.0 Release Notes
44
+ </a>
45
+ </td>
46
+ </tr>
47
+ <tr>
48
+ <td>1.1.0</td>
49
+ <td>2026-06-19</td>
50
+ <td>
51
+ <a href="https://github.com/microsoft/Agents-for-python/blob/main/changelog.md#microsoft-365-agents-sdk-for-python---release-notes-v110">
52
+ 1.1.0 Release Notes
53
+ </a>
54
+ </td>
55
+ </tr>
38
56
  <tr>
39
57
  <td>1.0.0</td>
40
58
  <td>2026-05-22</td>
@@ -44,6 +62,15 @@ This library is part of the **Microsoft 365 Agents SDK for Python** - a comprehe
44
62
  </a>
45
63
  </td>
46
64
  </tr>
65
+ <tr>
66
+ <td>0.9.1</td>
67
+ <td>2026-05-04</td>
68
+ <td>
69
+ <a href="https://github.com/microsoft/Agents-for-python/blob/main/changelog.md#microsoft-365-agents-sdk-for-python---release-notes-v091">
70
+ 0.9.1 Release Notes
71
+ </a>
72
+ </td>
73
+ </tr>
47
74
  <tr>
48
75
  <td>0.9.0</td>
49
76
  <td>2026-04-15</td>
@@ -110,6 +137,7 @@ We offer the following PyPI packages to create conversational experiences based
110
137
  | `microsoft-agents-hosting-core` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-hosting-core)](https://pypi.org/project/microsoft-agents-hosting-core/) | Core library for Microsoft Agents hosting. |
111
138
  | `microsoft-agents-hosting-aiohttp` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-hosting-aiohttp)](https://pypi.org/project/microsoft-agents-hosting-aiohttp/) | Configures aiohttp to run the Agent. |
112
139
  | `microsoft-agents-hosting-teams` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-hosting-teams)](https://pypi.org/project/microsoft-agents-hosting-teams/) | Provides classes to host an Agent for Teams. |
140
+ | `microsoft-agents-hosting-dialogs` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-hosting-dialogs)](https://pypi.org/project/microsoft-agents-hosting-dialogs/) | Dialog system with waterfall dialogs, prompts, and multi-turn conversation management. |
113
141
  | `microsoft-agents-storage-blob` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-storage-blob)](https://pypi.org/project/microsoft-agents-storage-blob/) | Extension to use Azure Blob as storage. |
114
142
  | `microsoft-agents-storage-cosmos` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-storage-cosmos)](https://pypi.org/project/microsoft-agents-storage-cosmos/) | Extension to use CosmosDB as storage. |
115
143
  | `microsoft-agents-authentication-msal` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-authentication-msal)](https://pypi.org/project/microsoft-agents-authentication-msal/) | MSAL-based authentication for Microsoft Agents. |
@@ -0,0 +1 @@
1
+ 1.2.0
@@ -45,6 +45,8 @@ from .entity import (
45
45
  ProductInfo,
46
46
  Thing,
47
47
  StreamInfo,
48
+ ActivityTreatment,
49
+ ActivityTreatmentTypes,
48
50
  )
49
51
  from .error import Error
50
52
  from .error_response import ErrorResponse
@@ -199,5 +201,7 @@ __all__ = [
199
201
  "load_configuration_from_env",
200
202
  "ChannelAdapterProtocol",
201
203
  "TurnContextProtocol",
204
+ "ActivityTreatment",
205
+ "ActivityTreatmentTypes",
202
206
  "TokenOrSignInResourceResponse",
203
207
  ]
@@ -6,7 +6,8 @@ from __future__ import annotations
6
6
  import logging
7
7
  from copy import copy
8
8
  from datetime import datetime, timezone
9
- from typing import Optional, Any
9
+ from typing import Optional, Any, cast, Annotated, TypeVar
10
+ from typing_extensions import Self
10
11
 
11
12
  from pydantic import (
12
13
  Field,
@@ -48,6 +49,8 @@ from microsoft_agents.activity.errors import activity_errors
48
49
 
49
50
  logger = logging.getLogger(__name__)
50
51
 
52
+ _EntityT = TypeVar("_EntityT", bound=Entity)
53
+
51
54
 
52
55
  # TODO: A2A Agent 2 is responding with None as id, had to mark it as optional (investigate)
53
56
  class Activity(AgentsModel, _ChannelIdFieldMixin):
@@ -157,7 +160,7 @@ class Activity(AgentsModel, _ChannelIdFieldMixin):
157
160
  local_timestamp: datetime = None
158
161
  local_timezone: NonEmptyString = None
159
162
  service_url: NonEmptyString = None
160
- from_property: ChannelAccount = Field(None, alias="from")
163
+ from_property: Annotated[ChannelAccount, Field(alias="from")] = None
161
164
  conversation: ConversationAccount = None
162
165
  recipient: ChannelAccount = None
163
166
  text_format: NonEmptyString = None
@@ -509,33 +512,36 @@ class Activity(AgentsModel, _ChannelIdFieldMixin):
509
512
  .. remarks::
510
513
  The new activity sets up routing information based on this activity.
511
514
  """
512
- return pick_model(
513
- Activity,
514
- type=ActivityTypes.message,
515
- timestamp=datetime.now(timezone.utc),
516
- from_property=SkipNone(
517
- ChannelAccount.pick_properties(self.recipient, ["id", "name"])
518
- ),
519
- recipient=SkipNone(
520
- ChannelAccount.pick_properties(self.from_property, ["id", "name"])
515
+ return cast(
516
+ Self,
517
+ pick_model(
518
+ self.__class__,
519
+ type=ActivityTypes.message,
520
+ timestamp=datetime.now(timezone.utc),
521
+ from_property=SkipNone(
522
+ ChannelAccount.pick_properties(self.recipient, ["id", "name"])
523
+ ),
524
+ recipient=SkipNone(
525
+ ChannelAccount.pick_properties(self.from_property, ["id", "name"])
526
+ ),
527
+ reply_to_id=(
528
+ SkipNone(self.id)
529
+ if self.type != ActivityTypes.conversation_update
530
+ or self.channel_id not in ["directline", "webchat"]
531
+ else None
532
+ ),
533
+ service_url=self.service_url,
534
+ channel_id=self.channel_id,
535
+ conversation=SkipNone(
536
+ ConversationAccount.pick_properties(
537
+ self.conversation, ["is_group", "id", "name"]
538
+ )
539
+ ),
540
+ text=text if text else "",
541
+ locale=locale if locale else SkipNone(self.locale),
542
+ attachments=[],
543
+ entities=[],
521
544
  ),
522
- reply_to_id=(
523
- SkipNone(self.id)
524
- if type != ActivityTypes.conversation_update
525
- or self.channel_id not in ["directline", "webchat"]
526
- else None
527
- ),
528
- service_url=self.service_url,
529
- channel_id=self.channel_id,
530
- conversation=SkipNone(
531
- ConversationAccount.pick_properties(
532
- self.conversation, ["is_group", "id", "name"]
533
- )
534
- ),
535
- text=text if text else "",
536
- locale=locale if locale else SkipNone(self.locale),
537
- attachments=[],
538
- entities=[],
539
545
  )
540
546
 
541
547
  def create_trace(
@@ -558,33 +564,36 @@ class Activity(AgentsModel, _ChannelIdFieldMixin):
558
564
  if not value_type and value:
559
565
  value_type = type(value).__name__
560
566
 
561
- return pick_model(
562
- Activity,
563
- type=ActivityTypes.trace,
564
- timestamp=datetime.now(timezone.utc),
565
- from_property=SkipNone(
566
- ChannelAccount.pick_properties(self.recipient, ["id", "name"])
567
- ),
568
- recipient=SkipNone(
569
- ChannelAccount.pick_properties(self.from_property, ["id", "name"])
570
- ),
571
- reply_to_id=(
572
- SkipNone(self.id) # preserve unset
573
- if type != ActivityTypes.conversation_update
574
- or self.channel_id not in ["directline", "webchat"]
575
- else None
567
+ return cast(
568
+ Self,
569
+ pick_model(
570
+ self.__class__,
571
+ type=ActivityTypes.trace,
572
+ timestamp=datetime.now(timezone.utc),
573
+ from_property=SkipNone(
574
+ ChannelAccount.pick_properties(self.recipient, ["id", "name"])
575
+ ),
576
+ recipient=SkipNone(
577
+ ChannelAccount.pick_properties(self.from_property, ["id", "name"])
578
+ ),
579
+ reply_to_id=(
580
+ SkipNone(self.id) # preserve unset
581
+ if self.type != ActivityTypes.conversation_update
582
+ or self.channel_id not in ["directline", "webchat"]
583
+ else None
584
+ ),
585
+ service_url=self.service_url,
586
+ channel_id=self.channel_id,
587
+ conversation=SkipNone(
588
+ ConversationAccount.pick_properties(
589
+ self.conversation, ["is_group", "id", "name"]
590
+ )
591
+ ),
592
+ name=SkipNone(name),
593
+ label=SkipNone(label),
594
+ value_type=SkipNone(value_type),
595
+ value=SkipNone(value),
576
596
  ),
577
- service_url=self.service_url,
578
- channel_id=self.channel_id,
579
- conversation=SkipNone(
580
- ConversationAccount.pick_properties(
581
- self.conversation, ["is_group", "id", "name"]
582
- )
583
- ),
584
- name=SkipNone(name),
585
- label=SkipNone(label),
586
- value_type=SkipNone(value_type),
587
- value=SkipNone(value),
588
597
  ).as_trace_activity()
589
598
 
590
599
  @staticmethod
@@ -593,7 +602,7 @@ class Activity(AgentsModel, _ChannelIdFieldMixin):
593
602
  value: object = None,
594
603
  value_type: str | None = None,
595
604
  label: str | None = None,
596
- ):
605
+ ) -> Activity:
597
606
  """
598
607
  Creates an instance of the :class:`microsoft_agents.activity.Activity` class as a TraceActivity object.
599
608
 
@@ -607,13 +616,16 @@ class Activity(AgentsModel, _ChannelIdFieldMixin):
607
616
  if not value_type and value:
608
617
  value_type = type(value).__name__
609
618
 
610
- return pick_model(
619
+ return cast(
611
620
  Activity,
612
- type=ActivityTypes.trace,
613
- name=name,
614
- label=SkipNone(label),
615
- value_type=SkipNone(value_type),
616
- value=SkipNone(value),
621
+ pick_model(
622
+ Activity,
623
+ type=ActivityTypes.trace,
624
+ name=name,
625
+ label=SkipNone(label),
626
+ value_type=SkipNone(value_type),
627
+ value=SkipNone(value),
628
+ ),
617
629
  )
618
630
 
619
631
  @staticmethod
@@ -636,33 +648,71 @@ class Activity(AgentsModel, _ChannelIdFieldMixin):
636
648
  Composite values are split only on the first ``:``.
637
649
  :returns: A conversation reference for the conversation that contains this activity.
638
650
  """
639
- return pick_model(
651
+ return cast(
640
652
  ConversationReference,
641
- activity_id=(
642
- SkipNone(self.id)
643
- if self.type != ActivityTypes.conversation_update
644
- or self.channel_id not in ["directline", "webchat"]
645
- else None
653
+ pick_model(
654
+ ConversationReference,
655
+ activity_id=(
656
+ SkipNone(self.id)
657
+ if self.type != ActivityTypes.conversation_update
658
+ or self.channel_id not in ["directline", "webchat"]
659
+ else None
660
+ ),
661
+ user=copy(self.from_property),
662
+ agent=copy(self.recipient),
663
+ conversation=copy(self.conversation),
664
+ channel_id=(
665
+ self.channel_id.split(":", 1)[0]
666
+ if force_base_channel and self.channel_id is not None
667
+ else self.channel_id
668
+ ),
669
+ locale=self.locale,
670
+ service_url=self.service_url,
646
671
  ),
647
- user=copy(self.from_property),
648
- agent=copy(self.recipient),
649
- conversation=copy(self.conversation),
650
- channel_id=(
651
- self.channel_id.split(":", 1)[0]
652
- if force_base_channel and self.channel_id is not None
653
- else self.channel_id
654
- ),
655
- locale=self.locale,
656
- service_url=self.service_url,
657
672
  )
658
673
 
674
+ @staticmethod
675
+ def _convert_entity(raw_entity: Entity, entity_cls: type[_EntityT]) -> _EntityT:
676
+ """
677
+ Converts an entity to a specific entity type.
678
+
679
+ :param raw_entity: The entity to convert.
680
+ :param entity_cls: The class of the entity type to convert to.
681
+ :return: The converted entity of the specified type.
682
+ """
683
+ if isinstance(raw_entity, entity_cls):
684
+ return raw_entity
685
+ return entity_cls.model_validate(raw_entity.model_dump())
686
+
687
+ @staticmethod
688
+ def _convert_entity_list(
689
+ raw_entities: list[Entity], entity_cls: type[_EntityT]
690
+ ) -> list[_EntityT]:
691
+ """
692
+ Converts a list of entities to a list of a specific entity type.
693
+
694
+ :param raw_entities: The list of entities to convert.
695
+ :param entity_cls: The class of the entity type to convert to.
696
+ :return: The list of converted entities of the specified type.
697
+ """
698
+
699
+ entities: list[_EntityT] = []
700
+ for e in raw_entities:
701
+ entities.append(Activity._convert_entity(e, entity_cls))
702
+ return entities
703
+
659
704
  def get_product_info_entity(self) -> Optional[ProductInfo]:
660
705
  if not self.entities:
661
706
  return None
662
707
  target = EntityTypes.PRODUCT_INFO.lower()
663
708
  # validated entities can be Entity, and that prevents us from
664
709
  # making assumptions about the casing of the 'type' attribute
665
- return next(filter(lambda e: e.type.lower() == target, self.entities), None)
710
+ raw_product_info = next(
711
+ filter(lambda e: e.type.lower() == target, self.entities), None
712
+ )
713
+ if raw_product_info is None:
714
+ return None
715
+ return Activity._convert_entity(raw_product_info, ProductInfo)
666
716
 
667
717
  def get_mentions(self) -> list[Mention]:
668
718
  """
@@ -676,7 +726,11 @@ class Activity(AgentsModel, _ChannelIdFieldMixin):
676
726
  """
677
727
  if not self.entities:
678
728
  return []
679
- return [x for x in self.entities if x.type.lower() == EntityTypes.MENTION]
729
+ raw_mentions = [
730
+ x for x in self.entities if x.type.lower() == EntityTypes.MENTION
731
+ ]
732
+
733
+ return Activity._convert_entity_list(raw_mentions, Mention)
680
734
 
681
735
  def get_reply_conversation_reference(
682
736
  self, reply: ResourceResponse
@@ -739,21 +793,14 @@ class Activity(AgentsModel, _ChannelIdFieldMixin):
739
793
  if self.type is None:
740
794
  return False
741
795
 
742
- type_attribute = f"ActivityTypes.{str(self.type)}".lower()
743
- activity_type = str(activity_type).lower()
744
-
745
- result = type_attribute.startswith(activity_type)
796
+ type_value = str(getattr(self.type, "value", self.type)).lower()
797
+ activity_type_value = str(
798
+ getattr(activity_type, "value", activity_type)
799
+ ).lower()
746
800
 
747
- if result:
748
- result = len(type_attribute) == len(activity_type)
749
-
750
- if not result:
751
- result = (
752
- len(type_attribute) > len(activity_type)
753
- and type_attribute[len(activity_type)] == "/"
754
- )
755
-
756
- return result
801
+ return type_value == activity_type_value or type_value.startswith(
802
+ f"{activity_type_value}/"
803
+ )
757
804
 
758
805
  def add_ai_metadata(
759
806
  self,
@@ -0,0 +1,99 @@
1
+ # Copyright (c) Microsoft Corporation. All rights reserved.
2
+ # Licensed under the MIT License.
3
+
4
+ """Coercion helpers for values loaded from environment configuration.
5
+
6
+ :func:`load_configuration_from_env` keeps every value as the raw string (or a
7
+ nested ``dict``) read from the environment. Consumers that expect a bool, int or
8
+ float must coerce explicitly: a naive ``bool("false")`` is ``True`` and would
9
+ silently invert a flag, and ``int("5") + 1`` style math fails on values that may
10
+ legitimately arrive as strings. These helpers centralize that coercion so every
11
+ config consumer parses env values the same, fail-safe way.
12
+ """
13
+
14
+ from __future__ import annotations
15
+
16
+ from typing import Any
17
+
18
+ _TRUTHY = ("1", "true")
19
+ _FALSY = ("0", "false")
20
+
21
+
22
+ def coerce_bool(value: Any, default: bool | None = None, name: str = "value") -> bool:
23
+ """Coerce a config value (possibly an env string) to a bool.
24
+
25
+ Environment variables always arrive as strings, so ``bool("false")`` would
26
+ be ``True``. Recognized truthy spellings are ``1/true`` and falsy spellings
27
+ are ``0/false`` (case-insensitive).
28
+
29
+ An empty/whitespace-only string or ``None`` is treated as *unset* (not as an
30
+ explicit ``false``). For unset and unrecognized values: if ``default`` is
31
+ provided it is returned, otherwise a ``ValueError`` is raised naming the
32
+ offending setting -- mirroring :func:`coerce_int` and :func:`coerce_float`.
33
+ """
34
+ if isinstance(value, bool):
35
+ return value
36
+ if isinstance(value, (int, float)):
37
+ return bool(value)
38
+ if value is not None:
39
+ text = str(value).strip().lower()
40
+ if text in _TRUTHY:
41
+ return True
42
+ if text in _FALSY:
43
+ return False
44
+ if text:
45
+ if default is not None:
46
+ return default
47
+ raise ValueError(f"Invalid boolean for {name}: {value!r}")
48
+ # Unset (None or empty/whitespace-only string).
49
+ if default is not None:
50
+ return default
51
+ raise ValueError(f"Invalid boolean for {name}: {value!r}")
52
+
53
+
54
+ def coerce_int(value: Any, default: int, name: str = "value") -> int:
55
+ """Coerce a config value (possibly an env string) to an int.
56
+
57
+ Empty/``None`` values fall back to ``default``. Bools are treated as unset
58
+ (a stray ``True``/``False`` is not a meaningful count). Numeric strings such
59
+ as ``"5"`` or ``"5.0"`` are accepted; anything else raises ``ValueError``
60
+ naming the offending setting.
61
+ """
62
+ if value is None:
63
+ return default
64
+ if isinstance(value, bool):
65
+ return default
66
+ if isinstance(value, int):
67
+ return value
68
+ text = str(value).strip()
69
+ if not text:
70
+ return default
71
+ try:
72
+ return int(text, 10)
73
+ except ValueError:
74
+ try:
75
+ return int(float(text))
76
+ except ValueError as ex:
77
+ raise ValueError(f"Invalid integer for {name}: {value!r}") from ex
78
+
79
+
80
+ def coerce_float(value: Any, default: float, name: str = "value") -> float:
81
+ """Coerce a config value (possibly an env string) to a float.
82
+
83
+ Empty/``None`` values fall back to ``default``. Bools are treated as unset.
84
+ Anything that is not parseable as a float raises ``ValueError`` naming the
85
+ offending setting.
86
+ """
87
+ if value is None:
88
+ return default
89
+ if isinstance(value, bool):
90
+ return default
91
+ if isinstance(value, (int, float)):
92
+ return float(value)
93
+ text = str(value).strip()
94
+ if not text:
95
+ return default
96
+ try:
97
+ return float(text)
98
+ except ValueError as ex:
99
+ raise ValueError(f"Invalid number for {name}: {value!r}") from ex
@@ -20,6 +20,44 @@ _NAME_TO_LEVEL = {
20
20
  }
21
21
 
22
22
 
23
+ class ColorFormatter(logging.Formatter):
24
+ """Logging formatter that can add ANSI color based on severity."""
25
+
26
+ MAGENTA = "\033[1;35m"
27
+ RED = "\033[1;31m"
28
+ YELLOW = "\033[1;33m"
29
+ GREEN = "\033[1;32m"
30
+ BLUE = "\033[1;34m"
31
+ RESET = "\033[0m"
32
+
33
+ FMT = (
34
+ "%(asctime)s - %(name)s - %(levelname)s - %(message)s (%(filename)s:%(lineno)d)"
35
+ )
36
+
37
+ def __init__(
38
+ self,
39
+ use_colors: bool = True,
40
+ ) -> None:
41
+ super().__init__(fmt=self.FMT)
42
+ self._plain_formatter = logging.Formatter(fmt=self.FMT)
43
+ if not use_colors:
44
+ self._formatters: dict[int, logging.Formatter] = {}
45
+ return
46
+ self._formatters = {
47
+ logging.CRITICAL: logging.Formatter(
48
+ f"{self.MAGENTA}{self.FMT}{self.RESET}"
49
+ ),
50
+ logging.ERROR: logging.Formatter(f"{self.RED}{self.FMT}{self.RESET}"),
51
+ logging.WARNING: logging.Formatter(f"{self.YELLOW}{self.FMT}{self.RESET}"),
52
+ logging.INFO: logging.Formatter(f"{self.GREEN}{self.FMT}{self.RESET}"),
53
+ logging.DEBUG: logging.Formatter(f"{self.BLUE}{self.FMT}{self.RESET}"),
54
+ }
55
+
56
+ def format(self, record: logging.LogRecord) -> str:
57
+ formatter = self._formatters.get(record.levelno)
58
+ return (formatter or self._plain_formatter).format(record)
59
+
60
+
23
61
  def _configure_logging(logging_config: dict):
24
62
  """Configures logging based on the provided logging configuration dictionary.
25
63
 
@@ -31,9 +69,7 @@ def _configure_logging(logging_config: dict):
31
69
 
32
70
  console_handler = logging.StreamHandler()
33
71
  console_handler.setFormatter(
34
- logging.Formatter(
35
- "%(asctime)s - %(name)s - %(levelname)s - %(message)s (%(filename)s:%(lineno)d)"
36
- )
72
+ ColorFormatter(use_colors=console_handler.stream.isatty())
37
73
  )
38
74
 
39
75
  for key in log_levels:
@@ -50,6 +86,7 @@ def _configure_logging(logging_config: dict):
50
86
  else:
51
87
  logger = logging.getLogger(namespace)
52
88
 
89
+ logger.propagate = False # Prevent log messages from being propagated
53
90
  logger.handlers.clear() # Remove existing handlers to prevent duplicates
54
91
  logger.addHandler(console_handler)
55
92
  logger.setLevel(level)
@@ -4,22 +4,18 @@
4
4
  from __future__ import annotations
5
5
 
6
6
  from uuid import uuid4 as uuid
7
- from typing import Optional
8
- import logging
7
+ from typing import Optional, Annotated
9
8
 
10
9
  from pydantic import Field
11
10
 
12
11
  from .channel_account import ChannelAccount
13
12
  from ._channel_id_field_mixin import _ChannelIdFieldMixin
14
- from .channel_id import ChannelId
15
13
  from .conversation_account import ConversationAccount
16
14
  from .agents_model import AgentsModel
17
15
  from ._type_aliases import NonEmptyString
18
16
  from .activity_types import ActivityTypes
19
17
  from .activity_event_names import ActivityEventNames
20
18
 
21
- logger = logging.getLogger(__name__)
22
-
23
19
 
24
20
  class ConversationReference(AgentsModel, _ChannelIdFieldMixin):
25
21
  """An object relating to a particular point in a conversation.
@@ -48,7 +44,7 @@ class ConversationReference(AgentsModel, _ChannelIdFieldMixin):
48
44
  # optionals here are due to webchat
49
45
  activity_id: Optional[NonEmptyString] = None
50
46
  user: Optional[ChannelAccount] = None
51
- agent: ChannelAccount = Field(None, alias="bot")
47
+ agent: Annotated[ChannelAccount, Field(alias="bot")] = None
52
48
  conversation: ConversationAccount
53
49
  locale: Optional[NonEmptyString] = None
54
50
  service_url: NonEmptyString = None
@@ -1,6 +1,7 @@
1
1
  # Copyright (c) Microsoft Corporation. All rights reserved.
2
2
  # Licensed under the MIT License.
3
3
 
4
+ from .activity_treatment import ActivityTreatment, ActivityTreatmentTypes
4
5
  from .mention import Mention
5
6
  from .entity import Entity
6
7
  from .entity_types import EntityTypes
@@ -35,4 +36,6 @@ __all__ = [
35
36
  "Place",
36
37
  "ProductInfo",
37
38
  "Thing",
39
+ "ActivityTreatment",
40
+ "ActivityTreatmentTypes",
38
41
  ]
@@ -0,0 +1,27 @@
1
+ # Copyright (c) Microsoft Corporation. All rights reserved.
2
+ # Licensed under the MIT License.
3
+
4
+ from enum import Enum
5
+ from typing import Literal
6
+
7
+ from .entity import Entity
8
+ from .entity_types import EntityTypes
9
+
10
+
11
+ class ActivityTreatmentTypes(str, Enum):
12
+ """Well-known enumeration of activity treatment types."""
13
+
14
+ TARGETED = "targeted"
15
+
16
+
17
+ class ActivityTreatment(Entity):
18
+ """Activity treatment information (entity type: "activityTreatment").
19
+
20
+ :param treatment: The type of treatment
21
+ :type treatment: ~microsoft_agents.activity.ActivityTreatmentTypes
22
+ :param type: Type of this entity (RFC 3987 IRI)
23
+ :type type: str
24
+ """
25
+
26
+ type: Literal[EntityTypes.ACTIVITY_TREATMENT] = EntityTypes.ACTIVITY_TREATMENT
27
+ treatment: ActivityTreatmentTypes
@@ -7,6 +7,7 @@ from enum import Enum
7
7
  class EntityTypes(str, Enum):
8
8
  """Well-known enumeration of entity types."""
9
9
 
10
+ ACTIVITY_TREATMENT = "activityTreatment"
10
11
  GEO_COORDINATES = "GeoCoordinates"
11
12
  MENTION = "mention"
12
13
  PLACE = "Place"
@@ -11,6 +11,10 @@ class TeamsChannelAccount(AgentsModel):
11
11
 
12
12
  :param id: Channel id for the user or bot on this channel (Example: ``joe@smith.com``, or ``@joesmith`` or ``123456``)
13
13
  :type id: str
14
+ :param aad_object_id: Azure Active Directory object id for the user.
15
+ :type aad_object_id: str
16
+ :param role: Role of the user in the channel.
17
+ :type role: str
14
18
  :param name: Display friendly name
15
19
  :type name: str
16
20
  :param given_name: Given name part of the user name.
@@ -30,6 +34,8 @@ class TeamsChannelAccount(AgentsModel):
30
34
  model_config = ConfigDict(extra="allow")
31
35
 
32
36
  id: str = None
37
+ aad_object_id: str = None
38
+ role: str = None
33
39
  name: str = None
34
40
  given_name: str = None
35
41
  surname: str = None