Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
92 commits
Select commit Hold shift + click to select a range
9461a08
Initial core bot activity library, CI, and extensibility
rido-min Dec 10, 2025
34c8eaf
lint
rido-min Dec 10, 2025
86b3ae2
Add permissions to Core-CI workflow for contents and PRs
rido-min Dec 10, 2025
5b1bc24
Merge branch 'main' into next/core
rido-min Dec 10, 2025
e645b70
Add Proactive and SourceCodeGenerators (#237)
rido-min Dec 11, 2025
f429c90
Merge branch 'main' into next/core
rido-min Dec 11, 2025
6c9d953
Update pipeline config, solution items, and null handling
rido-min Dec 11, 2025
1e75444
Add .NET 8 SDK install step to BuildTestPack job
rido-min Dec 11, 2025
56f691d
Update package icon and include assets in NuGet package
rido-min Dec 11, 2025
836843d
Add bot_icon.png image asset
rido-min Dec 11, 2025
851ab6c
Update NuGet push to run only on next/core branch
rido-min Dec 11, 2025
716e01b
Update .gitignore to exclude config and settings files
rido-min Dec 11, 2025
cca6c26
Add new test project and GitHub Actions workflow
rido-min Dec 11, 2025
daae240
Target unit tests in pipeline, fix conversation ID usage
rido-min Dec 11, 2025
6535d6a
Update echo message, logging, and exception handling
rido-min Dec 11, 2025
74934be
Update .gitignore to include runsettings files and add README for tes…
rido-min Dec 11, 2025
7a9aa23
Refactor test commands and update project references in CI configurat…
rido-min Dec 11, 2025
2073c71
Add .editorconfig, rename reply method, update tests
rido-min Dec 11, 2025
7690ea4
Refactor: use explicit types instead of var everywhere
rido-min Dec 11, 2025
1bb7229
Add copyright and MIT license headers to all files (#240)
rido-min Dec 11, 2025
8c07ca1
Add proactive messaging endpoint and update EchoBot responses
rido-min Dec 11, 2025
298973e
Merge branch 'next/core' of https://github.com/microsoft/teams.net in…
rido-min Dec 11, 2025
349f7e7
Add Azure Monitor telemetry and improve logging/configs (#241)
rido-min Dec 12, 2025
4e2a51f
Remove unused usings and improve TryGetValue typing
rido-min Dec 12, 2025
7d259a3
Merge branch 'main' into next/core
rido-min Dec 12, 2025
4d7ae86
Update pipeline triggers and add PushToADOFeed variable
rido-min Dec 12, 2025
0e90563
Fix reply activity creation method in middleware
rido-min Dec 12, 2025
b9495ec
Configure MSAL based on different configuration styles (#243)
rido-min Dec 12, 2025
154b58a
compat bot handlers
rido-min Dec 13, 2025
1dcd279
Improve message formatting and agent identity handling
rido-min Dec 13, 2025
23075bf
Add UMI support (#244)
heyitsaamir Dec 15, 2025
c5e9b41
Add AF sample, adds SendTypingActivity (#245)
rido-min Dec 16, 2025
a2ea29b
Move AgenticIdentity to Schema and make it public
rido-min Dec 16, 2025
bd7bb40
[core]: add JWT validation for bots & agents (#246)
lilyydu Dec 18, 2025
051a8ba
add packable
Dec 18, 2025
666290a
Support for Invokes, TeamsAttachmentBuilder, Complete IConversationCl…
rido-min Jan 8, 2026
1ac1a07
Return Activity Id From api/messages (#261)
rido-min Jan 12, 2026
4d640a8
Merge branch 'main' into next/core
rido-min Jan 13, 2026
73ef468
[core + compat]: Add UserTokenClient (#260)
MehakBindra Jan 13, 2026
6906413
Update Compat Layer to target Teams features (#265)
rido-min Jan 15, 2026
7ee0e41
Rename projects to use Microsoft.Teams (#267)
rido-min Jan 15, 2026
a6e8212
Set IsPackable property to false in ABSTokenServiceClient project
rido-min Jan 16, 2026
b136884
Fix Invoke Response (#268)
rido-min Jan 20, 2026
547ad4d
Review XML comments in Public APIs (#271)
rido-min Jan 20, 2026
a86b274
Update `FromCompatActivity` extension to create `CoreActivity` instea…
singhk97 Jan 21, 2026
ecb8c91
[TeamsBotApps] Add type safe routing system and typed context (#275)
MehakBindra Jan 22, 2026
93939c7
Merge branch 'main' into next/core
rido-min Jan 22, 2026
3d480b9
Compat Teams Info (#280)
rido-min Jan 22, 2026
456f29c
Fix Write Invoke Response when called from CompatMiddleware (#284)
rido-min Jan 23, 2026
a354cc9
Remove CompatMiddlewareAdapter (#286)
rido-min Jan 26, 2026
a127567
Review app Hosting and Auth pipeline (#289)
rido-min Jan 27, 2026
4377713
Merge branch 'main' into next/core
rido-min Jan 27, 2026
c6fe4df
[TeamsBotApps] Add all message activity handlers and schema (#282)
MehakBindra Jan 28, 2026
712f497
Downgrade Bot.Builder.Integration.AspNet.Core to 4.22.3 (#296)
rido-min Jan 29, 2026
5e595ae
Merge branch 'main' into next/core
rido-min Feb 2, 2026
17cc382
add tests to `FromCompatActivity` (#300)
singhk97 Feb 3, 2026
a1189ca
Add `ICompatAdapter` interface (#304)
singhk97 Feb 3, 2026
ede4af0
Refactor `CompatAdapter` to extend `CompatBotAdapter` (#307)
singhk97 Feb 4, 2026
cdc4d28
Add install & conv activity handlers , simplify activities, add warni…
MehakBindra Feb 6, 2026
1078412
Fix Agentic support in TeamsBotApplication (#314)
rido-min Feb 9, 2026
afa51c0
Fix Agentic support in TeamsBotApplication (#314)
rido-min Feb 9, 2026
728e8a9
Update MSAL, and minor API imrpovements (#316)
rido-min Feb 10, 2026
0e6c20a
Consolidate SuppressMessage attributes in GlobalSuppresions (#332)
rido-min Feb 13, 2026
55e9fcf
fix transitive package dependency issue + refactor router setup (#325)
singhk97 Feb 13, 2026
c91f619
Add invoke payloads and handlers (#326)
MehakBindra Feb 17, 2026
0418318
Sample PA Bot with advanced DI, including multi hosting (#308)
rido-min Feb 18, 2026
c888afb
Add events(meetings) to core + sample (#337)
MehakBindra Feb 19, 2026
1ce3e00
Add ReplyToId support and simplify bot setup (#341)
rido-min Feb 23, 2026
f1eebce
Simplify BotApplication constructors with BotApplicationOptions (#342)
singhk97 Feb 23, 2026
a3d6834
Make BotApplicationOptions an optional parameter (#345)
singhk97 Feb 25, 2026
576d55c
Routing: run all handlers sequentially and add startup validation (#…
MehakBindra Feb 27, 2026
71db83a
Refactor for type safety and code clarity (#356)
rido-min Feb 27, 2026
07c72c1
Revisit `LogInformation` statements (#351)
singhk97 Feb 27, 2026
b23042b
CoreActivity, make From/Recipient/Conversation optional (nullable fie…
rido-min Mar 4, 2026
e2efe05
Refactor Teams bot hosting; add CustomHosting sample (#362)
rido-min Mar 4, 2026
520c2e0
Add `CitationEntity` & citation extension methods (#361)
corinagum Mar 5, 2026
93598b8
Add Tabs and Functions support to core (#354)
MehakBindra Mar 10, 2026
0c8661b
Dynamic incomming token validation for PA bot (#367)
singhk97 Mar 11, 2026
fddbe9f
Add breaking change docs and fix invoke routing edge cases (#368)
MehakBindra Mar 12, 2026
51d7ac4
fix: incorrect mapping of conversation parameters in compat conversat…
singhk97 Mar 12, 2026
a1d41f5
fix: correct parameter order in AddBotAuthentication method calls (#376)
singhk97 Mar 17, 2026
272bb40
Next/core upd from main (#377)
rido-min Mar 17, 2026
e484021
Fix log forging vulnerability in `GetCorrelationVector` (#373)
singhk97 Mar 18, 2026
fb238fd
[PA bug fix] use incomming activity's `serviceUrl` if not set in outg…
singhk97 Mar 18, 2026
bdc40af
Add Api Clients with Reactions and Targeted Message support (#334)
rido-min Mar 19, 2026
682a2b3
Add streaming to core (#378)
MehakBindra Mar 20, 2026
317d94e
Next/core channel events (#385)
MehakBindra Mar 23, 2026
32a0b87
Add guarded logging extensions and apply throughout codebase (#388)
rido-min Mar 23, 2026
79ad3d1
[Sample] Add time off request card and welcome message middleware (#387)
rido-min Mar 23, 2026
e830032
Add SuggestedActions support (#383)
rido-min Mar 23, 2026
826a160
Refactor: move Teams activity types to Handlers namespace (#386)
rido-min Mar 23, 2026
72f97c8
Hosting changes: refactoring & support no-auth setup scenario (#384)
singhk97 Mar 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
17 changes: 11 additions & 6 deletions .azdo/cd-core.yaml
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
# =============================================================================
# This pipeline (BotCore-CD) builds, tests, and packs the core/ project.
# PR trigger: next/* branches (all paths). CI trigger: next/* branches (core/** paths only).
# Pushes packages to internal preview feed on next/core branch.
# =============================================================================

pr:
branches:
include:
- next/*
# Uncomment and edit the following lines to add path filters for PRs in the future
# paths:
# include:
# - core/**
paths:
include:
- core/**

trigger:
branches:
Expand Down Expand Up @@ -55,7 +60,7 @@ stages:

- task: NuGetCommand@2
displayName: 'Push NuGet Packages'
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/next/core'))
condition: eq(variables['PushToADOFeed'], true)
inputs:
command: push
packagesToPush: '$(Build.ArtifactStagingDirectory)/*.nupkg'
Expand All @@ -66,5 +71,5 @@ stages:
displayName: 'Publish NuGet Packages as Pipeline Artifact'
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)'
artifact: 'nuget-packages'
artifact: 'Packages'
publishLocation: 'pipeline'
39 changes: 26 additions & 13 deletions .azdo/ci.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
# =============================================================================
# This pipeline (teams.net-pr) builds, tests, and packs the SDK (excluding core/).
# PR trigger: main and release/* branches. No CI trigger.
# =============================================================================

trigger: none

pr:
branches:
include:
Expand All @@ -7,10 +14,12 @@ pr:
exclude:
- core/**


pool:
vmImage: 'ubuntu-22.04'

variables:
buildConfiguration: 'Release'

stages:
- stage: Build_Test_Pack
jobs:
Expand All @@ -33,22 +42,26 @@ stages:
- script: dotnet restore
displayName: 'Restore'

- script: dotnet build --no-restore --configuration Release
- script: dotnet build --no-restore --configuration $(buildConfiguration)
displayName: 'Build'

- script: dotnet test --no-build --configuration Release
- script: dotnet test --no-build --configuration $(buildConfiguration) --logger trx
displayName: 'Test'

- script: dotnet pack --no-build -o $(Build.ArtifactStagingDirectory) /p:SymbolPackageFormat=snupkg --configuration Release
- task: PublishTestResults@2
displayName: 'Publish Test Results'
condition: succeededOrFailed()
inputs:
testResultsFormat: 'VSTest'
testResultsFiles: '**/*.trx'
mergeTestResults: true

- script: dotnet pack --no-build -o $(Build.ArtifactStagingDirectory) /p:SymbolPackageFormat=snupkg --configuration $(buildConfiguration)
displayName: 'Pack'

- task: NuGetCommand@2
displayName: 'Push NuGet Packages'
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
- task: PublishPipelineArtifact@1
displayName: 'Publish NuGet Packages as Pipeline Artifact'
inputs:
command: push
packagesToPush: '$(Build.ArtifactStagingDirectory)/*.nupkg'
nuGetFeedType: internal
publishVstsFeed: '$(System.TeamProject)/TeamsSDKPreviews'


targetPath: '$(Build.ArtifactStagingDirectory)'
artifact: 'Packages'
publishLocation: 'pipeline'
158 changes: 158 additions & 0 deletions .azdo/publish-preview.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
# =============================================================================
# This pipeline publishes preview packages. Manually triggered only.
# - "Internal": pushes unsigned packages to the internal TeamsSDKPreviews feed.
# - "Public": signs (Authenticode + NuGet) and pushes to nuget.org (requires approval).
# =============================================================================

trigger: none

pr: none

parameters:
- name: publishType
displayName: 'Publish Type'
type: string
default: 'Internal'
values:
- Internal
- Public

pool:
vmImage: 'ubuntu-22.04'

variables:
buildConfiguration: 'Release'
folderPath: '$(Build.SourcesDirectory)'
${{ if eq(parameters.publishType, 'Public') }}:
appRegistrationTenantId: 'cdc5aeea-15c5-4db6-b079-fcadd2505dc2'
authenticodeSignId: '2d5c4ab9-0b7e-4f60-bb92-70322df77b94'
nugetSignId: 'a94a770a-9a7b-4888-a3ea-24584b851e49'

stages:

- ${{ if eq(parameters.publishType, 'Internal') }}:
- stage: Build_Test_Pack_Push_Internal
displayName: 'Build, Test, Pack, and Push (Internal Preview)'
jobs:
- job: BuildTestPackPush
displayName: 'Build, Test, Pack, and Push to Internal Feed'
steps:
- checkout: self

- task: UseDotNet@2
displayName: 'Use .NET 8'
inputs:
packageType: 'sdk'
version: '8.0.x'

- task: UseDotNet@2
displayName: 'Use .NET 10'
inputs:
packageType: 'sdk'
version: '10.0.x'

- script: dotnet restore
displayName: 'Restore'

- script: dotnet build --no-restore --configuration $(buildConfiguration)
displayName: 'Build'

- script: dotnet test --no-build --verbosity normal --logger trx --configuration $(buildConfiguration)
displayName: 'Test'

- task: PublishTestResults@2
displayName: 'Publish Test Results'
condition: succeededOrFailed()
inputs:
testResultsFormat: 'VSTest'
testResultsFiles: '**/*.trx'
mergeTestResults: true

- script: dotnet pack --no-build -o $(Build.ArtifactStagingDirectory) /p:SymbolPackageFormat=snupkg --configuration $(buildConfiguration)
displayName: 'Pack'

- task: NuGetCommand@2
displayName: 'Push NuGet Packages to Internal Feed'
inputs:
command: push
packagesToPush: '$(Build.ArtifactStagingDirectory)/*.nupkg'
nuGetFeedType: internal
publishVstsFeed: '$(System.TeamProject)/TeamsSDKPreviews'

- task: PublishPipelineArtifact@1
displayName: 'Publish NuGet Packages as Pipeline Artifact'
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)'
artifact: 'PreviewPackages'
publishLocation: 'pipeline'

- ${{ if eq(parameters.publishType, 'Public') }}:
- stage: Build_Test_Sign_Pack
displayName: 'Build, Test, Sign, and Pack (Public Preview)'
jobs:
- job: BuildTestSignPack
displayName: 'Build, Test, Sign, and Pack'
steps:
- checkout: self

- task: UseDotNet@2
displayName: 'Use .NET 8'
inputs:
packageType: 'sdk'
version: '8.0.x'

- task: UseDotNet@2
displayName: 'Use .NET 10'
inputs:
packageType: 'sdk'
version: '10.0.x'

- script: dotnet restore
displayName: 'Restore'

- script: dotnet build --no-restore --configuration $(buildConfiguration)
displayName: 'Build'

- script: dotnet test --no-build --verbosity normal --logger trx --configuration $(buildConfiguration)
displayName: 'Test'

- task: PublishTestResults@2
displayName: 'Publish Test Results'
condition: succeededOrFailed()
inputs:
testResultsFormat: 'VSTest'
testResultsFiles: '**/*.trx'
mergeTestResults: true

- template: templates/sign-and-pack.yaml

- task: PublishPipelineArtifact@1
displayName: 'Publish NuGet Packages as Pipeline Artifact'
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)'
artifact: 'PreviewPackages'
publishLocation: 'pipeline'

- ${{ if eq(parameters.publishType, 'Public') }}:
- stage: PushToNuGet
displayName: 'Push Preview Packages to nuget.org'
dependsOn: Build_Test_Sign_Pack
jobs:
- deployment: PushPackages
displayName: 'Manual Approval Required to Push Packages'
environment:
name: 'teams-net-publish'
strategy:
runOnce:
deploy:
steps:
- download: current
artifact: PreviewPackages

- task: NuGetCommand@2
displayName: 'Push NuGet Packages'
inputs:
command: push
packagesToPush: '$(Pipeline.Workspace)/PreviewPackages/*.nupkg'
nuGetFeedType: external
publishFeedCredentials: 'Microsoft.Teams.*'
110 changes: 18 additions & 92 deletions .azdo/publish.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
# =============================================================================
# For public releases, this pipeline (teams.net) is triggered manually.
# It builds, tests, signs (Authenticode + NuGet), and packs the code, then pushes to nuget.org (requires approval).
# =============================================================================

trigger: none

pr: none
Expand Down Expand Up @@ -38,104 +43,25 @@ stages:
- script: dotnet build --no-restore --configuration $(buildConfiguration)
displayName: 'Build'

- script: dotnet test --no-restore --verbosity normal --logger trx --configuration $(buildConfiguration)
- script: dotnet test --no-build --verbosity normal --logger trx --configuration $(buildConfiguration)
displayName: 'Test'

- task: EsrpCodeSigning@5
displayName: "Authenticode Sign DLLs"
inputs:
ConnectedServiceName: 'TeamsESRP-CP-230012'
AppRegistrationTenantId: '$(appRegistrationTenantId)'
AppRegistrationClientId: '$(authenticodeSignId)'
AuthSignCertName: '$(authenticodeSignId)'
EsrpClientId: '$(authenticodeSignId)'
AuthAKVName: esrp-teams
UseMSIAuthentication: true
FolderPath: '$(folderPath)'
Pattern: 'Libraries/**/*.dll'
UseMinimatch: true
signConfigType: 'inlineSignParams'
inlineOperation: |
[
{
"KeyCode": "CP-230012",
"OperationCode": "SigntoolSign",
"Parameters": {
"OpusName": "Microsoft",
"OpusInfo": "http://www.microsoft.com",
"FileDigest": "/fd \"SHA256\"",
"PageHash": "/NPH",
"TimeStamp": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256"
},
"ToolName": "sign",
"ToolVersion": "1.0"
},
{
"KeyCode": "CP-230012",
"OperationCode": "SigntoolVerify",
"Parameters": {},
"ToolName": "sign",
"ToolVersion": "1.0"
}
]
SessionTimeout: '60'
MaxConcurrency: '50'
MaxRetryAttempts: '5'

- task: DotNetCoreCLI@2
displayName: 'Pack NuGet Packages'
- task: PublishTestResults@2
displayName: 'Publish Test Results'
condition: succeededOrFailed()
inputs:
command: pack
packagesToPack: '$(folderPath)/Libraries/**/*.csproj'
packDestination: '$(Build.ArtifactStagingDirectory)'
includeSymbols: false
nobuild: true
configuration: '$(buildConfiguration)'
arguments: '/p:SymbolPackageFormat=snupkg'
testResultsFormat: 'VSTest'
testResultsFiles: '**/*.trx'
mergeTestResults: true

- task: EsrpCodeSigning@5
displayName: 'Sign NuGet Packages'
inputs:
ConnectedServiceName: 'TeamsESRP-CP-401405'
AppRegistrationTenantId: '$(appRegistrationTenantId)'
AppRegistrationClientId: '$(nugetSignId)'
AuthSignCertName: '$(nugetSignId)'
EsrpClientId: '$(nugetSignId)'
AuthAKVName: esrp-teams
UseMSIAuthentication: true
FolderPath: '$(Build.ArtifactStagingDirectory)'
Pattern: |
*.nupkg
*.snupkg
UseMinimatch: true
signConfigType: 'inlineSignParams'
inlineOperation: |
[
{
"KeyCode": "CP-401405",
"OperationCode": "NuGetSign",
"ToolName": "sign",
"ToolVersion": "1.0",
"Parameters": {}
},
{
"KeyCode": "CP-401405",
"OperationCode": "NuGetVerify",
"Parameters": {},
"ToolName": "sign",
"ToolVersion": "1.0"
}
]
SessionTimeout: '20'
MaxConcurrency: '50'
MaxRetryAttempts: '5'
PendingAnalysisWaitTimeoutMinutes: '5'
- template: templates/sign-and-pack.yaml

- task: PublishBuildArtifacts@1
displayName: 'Publish NuGet Artifacts'
- task: PublishPipelineArtifact@1
displayName: 'Publish NuGet Packages as Pipeline Artifact'
inputs:
PathToPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'Packages'
targetPath: '$(Build.ArtifactStagingDirectory)'
artifact: 'Packages'
publishLocation: 'pipeline'

- stage: PushToNuGet
displayName: 'Push NuGet Packages to nuget.org'
Expand Down
Loading
Loading