Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Dec 17, 2025

Migrates all Activity-derived classes from Libraries/Microsoft.Teams.Api/Activities to core/src/Microsoft.Bot.Core/Activities as standalone classes without Teams.Api dependencies.

Changes

Base Infrastructure

  • Created simplified Activity base class with core serialization-relevant properties
  • Added supporting types: Account, Conversation, ConversationReference, ChannelData, Entity, Error, InnerHttpError
  • All properties nullable, no interface implementations

Activities Migrated

Phase 1:

  • TypingActivity
  • EventActivity + subtypes: MeetingStartActivity, MeetingEndActivity, MeetingParticipantJoinActivity, MeetingParticipantLeaveActivity, ReadReceiptActivity
  • InstallUpdateActivity
  • CommandActivity
  • CommandResultActivity

Phase 2:

  • ConversationUpdateActivity
  • EndOfConversationActivity
  • MessageActivity (simplified without Teams.Api dependencies)
  • MessageDeleteActivity
  • MessageReactionActivity (with MessageReaction, ReactionUser types)
  • MessageUpdateActivity

Phase 3 - Invoke Activities:

  • InvokeActivity (base)
  • ExecuteActionActivity, FileConsentActivity, HandoffActivity, SearchActivity
  • AdaptiveCardActivity, AdaptiveCardActionActivity
  • ConfigFetchActivity, ConfigSubmitActivity
  • TabFetchActivity, TabSubmitActivity
  • TaskFetchActivity, TaskSubmitActivity
  • SignInTokenExchangeActivity, SignInVerifyStateActivity
  • MessageSubmitActionActivity
  • 9 MessageExtension activities: MessageExtensionAnonQueryLinkActivity, MessageExtensionCardButtonClickedActivity, MessageExtensionFetchTaskActivity, MessageExtensionQueryActivity, MessageExtensionQueryLinkActivity, MessageExtensionQuerySettingUrlActivity, MessageExtensionSelectItemActivity, MessageExtensionSettingActivity, MessageExtensionSubmitActionActivity

StringEnum → String Constants

  • ActivityTypeActivityTypes static class (Typing, Event, Command, Message, MessageDelete, MessageUpdate, MessageReaction, ConversationUpdate, EndOfConversation, Invoke, etc.)
  • EventActivity.NameEventNames static class (ReadReceipt, MeetingStart, MeetingEnd, etc.)
  • InvokeActivity.NameInvokeNames static class (comprehensive constants for all invoke operation names)
  • InstallUpdateActionInstallUpdateActions static class (Add, Remove)
  • EndOfConversationCodeEndOfConversationCodes static class (Unknown, CompletedSuccessfully, UserCancelled, etc.)
  • ConversationUpdateActivity.EventTypeConversationEventTypes static class (ChannelCreated, TeamArchived, etc.)
  • RoleRoles static class (Bot, User)
  • InputHintInputHints static class (AcceptingInput, IgnoringInput, ExpectingInput)
  • TextFormatTextFormats static class (Plain, Markdown, Xml)
  • ImportanceImportanceLevels static class (Low, Normal, High, Urgent)
  • DeliveryModeDeliveryModes static class (Normal, Notification, Ephemeral, ExpectedReplies)
  • ReactionTypeReactionTypes static class (Like, Heart, Laugh, Surprise, Sad, Angry, PlusOne)
  • UserIdentityTypeUserIdentityTypes static class (AadUser, OnPremiseAadUser, AnonymousGuest, FederatedUser)

Removed

  • Interface implementations (IActivity, IEventActivity, IInvokeActivity)
  • JsonPropertyOrder attributes throughout
  • JsonConverter attributes throughout (including custom polymorphic converters)
  • Abstract base classes (simplified ConfigActivity, TabActivity, TaskActivity, MessageExtensionActivity to concrete classes)
  • Streaming-related methods (TypingActivity.AddStreamUpdate(), MessageActivity.AddStreamFinal())
  • Complex Teams.Api dependencies (e.g., Attachment, SuggestedActions from MessageActivity)

Example Usage

// Before: StringEnum with required
public class InstallUpdateActivity : Activity
{
    public required InstallUpdateAction Action { get; set; }
}

// After: nullable string with constants class
public class InstallUpdateActivity : Activity
{
    /// <summary>
    /// Gets or sets the action. See <see cref="InstallUpdateActions"/> for common values.
    /// </summary>
    public string? Action { get; set; }
}

public static class InstallUpdateActions
{
    public const string Add = "add";
    public const string Remove = "remove";
}

Total: 30 activity files migrated to core/src/Microsoft.Bot.Core/Activities/

Original prompt

Move the following Activity-derived concrete classes from Libraries/Microsoft.Teams.Api/Activities to core/src/Microsoft.Bot.Core/Activities:

  • TypingActivity
  • EventActivity (+ any directly associated subtypes like MeetingStartActivity, MeetingEndActivity, etc.)
  • InstallUpdateActivity (and InstallUpdateAction as a string constants class)
  • CommandActivity
  • CommandResultActivity

Do not move or edit Invoke-related activities at this stage.

Migration rules:

  • Preserve their original base class from the Teams.Api source (do not integrate with CoreActivity, do not implement or reference interfaces).
  • Remove any interface implementations, keep only concrete serialization-relevant members.
  • Replace all StringEnum (or enum-like) fields with string? fields, and for each such logical enum, provide a static string constants class in the same folder. Update XML docs to reference the new constants class.
  • Make all properties string? or nullable/reference type where relevant; remove JsonConverters and [JsonPropertyOrder].
  • Add or preserve XML documentation for all public members, and in particular call out former StringEnum fields with references to the associated constants class.

Move any directly needed dependent types (such as subtypes of EventActivity) with the same rules.

This pull request was created from Copilot chat.


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

Copilot AI changed the title [WIP] Move Activity-derived classes to core library Migrate Activity-derived classes from Teams.Api to Microsoft.Bot.Core Dec 17, 2025
Copilot AI requested a review from rido-min December 17, 2025 02:35
@rido-min
Copy link
Member

@copilot continue with the rest of activities

Copy link
Contributor Author

Copilot AI commented Dec 17, 2025

@copilot continue with the rest of activities

Completed migration of all remaining non-Invoke activities:

Phase 2 Activities Added:

  • ConversationUpdateActivity (with ConversationEventTypes constants)
  • EndOfConversationActivity (with EndOfConversationCodes constants)
  • MessageActivity (simplified, with InputHints, TextFormats, ImportanceLevels, DeliveryModes constants)
  • MessageDeleteActivity
  • MessageReactionActivity (with MessageReaction/ReactionUser types, ReactionTypes, UserIdentityTypes constants)
  • MessageUpdateActivity

All activities follow the same migration pattern: removed StringEnum, replaced with string? and static constants classes, removed JsonPropertyOrder/JsonConverter, made properties nullable.

Total: 19 activity files in core/src/Microsoft.Bot.Core/Activities/

Commit: d2ec1ba

@rido-min
Copy link
Member

@copilot great. now continue migrating all the other activities, includes Invokes, AdaptiveCards, Configs, Tasks and Message Extensions

Copy link
Contributor Author

Copilot AI commented Dec 17, 2025

@copilot great. now continue migrating all the other activities, includes Invokes, AdaptiveCards, Configs, Tasks and Message Extensions

Completed migration of all Invoke-related activities including AdaptiveCards, Configs, Tasks, Tabs, SignIn, and Message Extensions.

Invoke Activities Added (20 activities):

  • Base: InvokeActivity (with comprehensive InvokeNames constants)
  • Simple: ExecuteActionActivity, FileConsentActivity, HandoffActivity, SearchActivity
  • AdaptiveCard: AdaptiveCardActivity, AdaptiveCardActionActivity
  • Config: ConfigFetchActivity, ConfigSubmitActivity
  • Tab: TabFetchActivity, TabSubmitActivity
  • Task: TaskFetchActivity, TaskSubmitActivity
  • SignIn: SignInTokenExchangeActivity, SignInVerifyStateActivity
  • Message: MessageSubmitActionActivity
  • MessageExtension: 9 activities (AnonQueryLink, CardButtonClicked, FetchTask, Query, QueryLink, QuerySettingUrl, SelectItem, Setting, SubmitAction)

All activities simplified by removing custom JsonConverters, abstract base classes, and Teams.Api dependencies. Using same migration pattern with string constants.

Total migration: 30 activity files in core/src/Microsoft.Bot.Core/Activities/

Commits: 4d4186c, 94160c2

Copilot AI changed the title Migrate Activity-derived classes from Teams.Api to Microsoft.Bot.Core Migrate all Activity-derived classes from Teams.Api to Microsoft.Bot.Core Dec 17, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants