Skip to content

Commit bfb7082

Browse files
committed
Fix documentation & Product names
Applied fix for PR Product rename Allign names in all documentation
1 parent 13fe1fc commit bfb7082

File tree

16 files changed

+105
-100
lines changed

16 files changed

+105
-100
lines changed

ProxyAgent-CSharp/.github/copilot-instructions.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
# GitHub Copilot Instructions for Azure AI Foundry Agent for M365
1+
# GitHub Copilot Instructions for Microsoft Foundry Agent for M365
22

33
## Project Overview
4-
This is a proxy solution that connects Azure AI Foundry agents to Microsoft 365 Copilot and Teams using the Microsoft 365 Agents Toolkit.
4+
This is a proxy solution that connects Microsoft Foundry agents to Microsoft 365 Copilot and Teams using the Microsoft 365 Agents Toolkit.
55

66
## Technology Stack
77
- **.NET 9** - Bot application runtime
88
- **M365 Agent SDK** - Microsoft 365 Agent SDK
99
- **Microsoft 365 Agents Toolkit** - Formerly Teams Toolkit
10-
- **Azure AI Foundry Agent SDK** - For agent integration
10+
- **Microsoft Foundry Agent SDK** - For agent integration
1111
- **Bicep** - Infrastructure as Code
1212
- **Managed Identity** - For production authentication (no secrets)
1313

1414
## Architecture Patterns
15-
- Use the proxy pattern to route messages between M365 Copilot and Azure AI Foundry
15+
- Use the proxy pattern to route messages between M365 Copilot and Microsoft Foundry
1616
- Bot Service acts as the messaging endpoint
1717
- Managed Identity for authentication in production
1818
- Client Secret + Single Tenant for local development

ProxyAgent-CSharp/.vscode/launch.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@
55
"name": "Launch in Teams (Edge)",
66
"type": "msedge",
77
"request": "launch",
8-
"url": "https://teams.microsoft.com/l/app/${TEAMS_APP_ID}?installAppPackage=true&webjoin=true&appTenantId=${{TEAMS_APP_TENANT_ID}}&login_hint=${{TEAMSFX_M365_USER_NAME}}",
8+
"url": "https://teams.microsoft.com/l/app/${{local:TEAMS_APP_ID}}?installAppPackage=true&webjoin=true&appTenantId=${{local:TEAMS_APP_TENANT_ID}}&login_hint=${{TEAMSFX_M365_USER_NAME}}",
99
"presentation": {
1010
"group": "Teams",
11+
"hidden": true,
1112
"order": 1
1213
},
1314
"internalConsoleOptions": "neverOpen"
@@ -16,9 +17,10 @@
1617
"name": "Launch in Teams (Chrome)",
1718
"type": "chrome",
1819
"request": "launch",
19-
"url": "https://teams.microsoft.com/l/app/${{TEAMS_APP_ID}}?installAppPackage=true&webjoin=true&appTenantId=${{TEAMS_APP_TENANT_ID}}&login_hint=${{TEAMSFX_M365_USER_NAME}}",
20+
"url": "https://teams.microsoft.com/l/app/${{{local:TEAMS_APP_ID}}}?installAppPackage=true&webjoin=true&appTenantId=${{local:TEAMS_APP_TENANT_ID}}&login_hint=${{TEAMSFX_M365_USER_NAME}}",
2021
"presentation": {
2122
"group": "Teams",
23+
"hidden": true,
2224
"order": 2
2325
},
2426
"internalConsoleOptions": "neverOpen"
@@ -30,6 +32,7 @@
3032
"url": "https://m365.cloud.microsoft/chat/entity1-d870f6cd-4aa5-4d42-9626-ab690c041429/${local:agent-hint}?auth=2&$login_hint=${TEAMSFX_M365_USER_NAME}&developerMode=Basic",
3133
"presentation": {
3234
"group": "Copilot",
35+
"hidden": true,
3336
"order": 3
3437
},
3538
"internalConsoleOptions": "neverOpen"
@@ -41,6 +44,7 @@
4144
"url": "https://m365.cloud.microsoft/chat/entity1-d870f6cd-4aa5-4d42-9626-ab690c041429/${{local:agent-hint}}?auth=2&${{TEAMSFX_M365_USER_NAME}}&developerMode=Basic",
4245
"presentation": {
4346
"group": "Copilot",
47+
"hidden": true,
4448
"order": 4
4549
},
4650
"internalConsoleOptions": "neverOpen"

ProxyAgent-CSharp/AzureAgentToM365ATK/Agents/AzureAgent.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// Licensed under the MIT License.
33

44
// Use this flag to enable the no SSO mode, which allows the agent to run without user authentication.
5-
// We will then use DefaultAzureCredential (set via 'az login') to authenticate the agent in the Azure AI Foundry project.
5+
// We will then use DefaultAzureCredential (set via 'az login') to authenticate the agent in the Microsoft Foundry project.
66
// #define DISABLE_SSO
77

88
#if DISABLE_SSO
@@ -25,7 +25,7 @@ namespace AzureAgentToM365ATK.Agent;
2525

2626
public class AzureAgent : AgentApplication
2727
{
28-
// This is a cache to store the agent model for the Azure AI Foundry agent as this object uses private serializer and virtual objects and is expensive to create.
28+
// This is a cache to store the agent model for the Microsoft Foundry agent as this object uses private serializer and virtual objects and is expensive to create.
2929
// This cache will store the returned model by agent ID. if you need to change the agent model you would need to clear this cache.
3030
private static ConcurrentDictionary<string, Response<PersistentAgent>> _agentModelCache = new();
3131

@@ -35,29 +35,29 @@ public class AzureAgent : AgentApplication
3535
public AzureAgent(AgentApplicationOptions options, IConfiguration configuration) : base(options)
3636
{
3737

38-
// TO DO: get the connection string of your Azure AI Foundry project in the portal
38+
// TO DO: get the connection string of your Microsoft Foundry project in the portal
3939
this._connectionStringForAgent = configuration["AIServices:AzureAIFoundryProjectEndpoint"];
4040
if (string.IsNullOrEmpty(_connectionStringForAgent))
4141
{
4242
throw new InvalidOperationException("AzureAIFoundryProjectEndpoint is not configured.");
4343
}
4444

45-
// TO DO: Get the assistant ID in the Azure AI Foundry project portal for your agent
45+
// TO DO: Get the assistant ID in the Microsoft Foundry project portal for your agent
4646
this._agentId = configuration["AIServices:AgentID"];
4747
if (string.IsNullOrEmpty(this._agentId))
4848
{
4949
throw new InvalidOperationException("AgentID is not configured.");
5050
}
5151

52-
// Setup Agent with Route handlers to manage connecting and responding from the Azure AI Foundry agent
52+
// Setup Agent with Route handlers to manage connecting and responding from the Microsoft Foundry agent
5353

5454
// This is handling the sign out event, which will clear the user authorization token.
5555
OnMessage("--signout", HandleSignOutAsync);
5656

5757
// This is handling the clearing of the agent model cache without needing to restart the agent.
5858
OnMessage("--clearcache", HandleClearingModelCacheAsync);
5959

60-
// This is handling the message activity, which will send the user message to the Azure AI Foundry agent.
60+
// This is handling the message activity, which will send the user message to the Microsoft Foundry agent.
6161
// we are also indicating which auth profile we want to have available for this handler.
6262
#if DISABLE_SSO
6363
OnActivity(ActivityTypes.Message, SendMessageToAzureAgent);
@@ -94,7 +94,7 @@ private async Task HandleSignOutAsync(ITurnContext turnContext, ITurnState turnS
9494
}
9595

9696
/// <summary>
97-
/// This method sends the user message ( just text in this example ) to the Azure AI Foundry agent and streams the response back to the user.
97+
/// This method sends the user message ( just text in this example ) to the Microsoft Foundry agent and streams the response back to the user.
9898
/// </summary>
9999
/// <param name="turnContext"></param>
100100
/// <param name="turnState"></param>
@@ -108,14 +108,14 @@ protected async Task SendMessageToAzureAgent(ITurnContext turnContext, ITurnStat
108108
// Start a Streaming Process to let clients that support streaming know that we are processing the request.
109109
await turnContext.StreamingResponse.QueueInformativeUpdateAsync("Just a moment please..", cancellationToken).ConfigureAwait(false);
110110

111-
// Set up the PersistentAgentsClient to communicate with the Azure AI Foundry agent.
111+
// Set up the PersistentAgentsClient to communicate with the Microsoft Foundry agent.
112112

113113
#if DISABLE_SSO
114114
PersistentAgentsClient _aiProjectClient = new PersistentAgentsClient(this._connectionStringForAgent, new DefaultAzureCredential());
115115
#else
116-
// This is a helper class to generate an OBO User Token for the Azure AI Foundry agent from the current user authorization.
116+
// This is a helper class to generate an OBO User Token for the Microsoft Foundry agent from the current user authorization.
117117
PersistentAgentsClient _aiProjectClient = new PersistentAgentsClient(this._connectionStringForAgent,
118-
// This is a helper class to generate an OBO User Token for the Azure AI Foundry agent from the current user authorization.
118+
// This is a helper class to generate an OBO User Token for the Microsoft Foundry agent from the current user authorization.
119119
new UserAuthorizationTokenWrapper(UserAuthorization, turnContext, "SSO"));
120120
#endif
121121

@@ -124,9 +124,9 @@ protected async Task SendMessageToAzureAgent(ITurnContext turnContext, ITurnStat
124124
if (agentModel == null)
125125
{
126126
// subtle hint to the client that the agent model is being fetched.
127-
await turnContext.StreamingResponse.QueueInformativeUpdateAsync("Connecting to Azure AI Foundry.", cancellationToken).ConfigureAwait(false);
127+
await turnContext.StreamingResponse.QueueInformativeUpdateAsync("Connecting to Microsoft Foundry.", cancellationToken).ConfigureAwait(false);
128128

129-
// If the agent model is not found in the conversation state, fetch it from the Azure AI Foundry project.
129+
// If the agent model is not found in the conversation state, fetch it from the Microsoft Foundry project.
130130
agentModel = await _aiProjectClient.Administration.GetAgentAsync(this._agentId).ConfigureAwait(false);
131131
// Cache the agent model for future use.
132132
_agentModelCache.TryAdd(this._agentId, agentModel);

ProxyAgent-CSharp/AzureAgentToM365ATK/Program.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
// Enabling anonymous access to the root and controller endpoints in development for testing purposes.
4545
if (app.Environment.IsDevelopment() )
4646
{
47-
app.MapGet("/", () => "Microsoft Agents SDK From Azure AI Foundry Agent Service Sample");
47+
app.MapGet("/", () => "Microsoft Agents SDK From Microsoft Foundry Agent Service Sample");
4848
app.UseDeveloperExceptionPage();
4949
app.MapControllers().AllowAnonymous();
5050
}

ProxyAgent-CSharp/M365Agent/AZURE_DEPLOYMENT.md

Lines changed: 35 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ When you run `atk provision --env dev`, the following Azure resources are create
4343
| **User Assigned Managed Identity** | Bot identity (no passwords!) | `{resourceBaseName}-identity` |
4444
| **App Service Plan** | Compute resources (Linux) | `{resourceBaseName}-plan` |
4545
| **Web App** | Hosts .NET 9 bot application | `{resourceBaseName}-app` |
46-
| **Azure Bot Service** | Bot Framework registration | `{resourceBaseName}` |
46+
| **Azure Bot Service** | Azure Bot Service registration | `{resourceBaseName}` |
4747
| **Entra ID App Registration** | SSO authentication | `{botDisplayName}` |
4848
| **OAuth Connection** | SSO token exchange | `SsoConnection` |
4949

@@ -151,35 +151,20 @@ Edit `M365Agent/env/.env.dev`:
151151

152152
```bash
153153
# ============================================================================
154-
# Azure Configuration (REQUIRED - Set these before provisioning)
154+
# Microsoft Foundry Configuration (REQUIRED - Set these before provisioning)
155155
# ============================================================================
156-
AZURE_SUBSCRIPTION_ID=<your-subscription-id>
157-
AZURE_RESOURCE_GROUP_NAME=rg-m365agent-prod
158-
RESOURCE_SUFFIX=prod123
156+
AZURE_AI_FOUNDRY_PROJECT_ENDPOINT=<URL of your MS Foundry endpoint>
157+
AGENT_ID=<Agent ID that start by asst_>
159158

160-
# ============================================================================
161-
# Environment Settings
162-
# ============================================================================
163-
TEAMSFX_ENV=dev
164-
APP_NAME_SUFFIX=dev
165-
166-
# ============================================================================
167-
# Output Variables (Auto-populated by atk provision)
168-
# ============================================================================
169-
# Do not edit these - they are populated automatically during deployment
170159
```
171160

172-
**Tips:**
173-
- Get your subscription ID: `az account show --query id -o tsv`
174-
- `RESOURCE_SUFFIX` must be globally unique (lowercase, alphanumeric, max 10 chars)
175-
- Use descriptive names like `prod001`, `dev001`, etc.
176-
177161
### Step 2: Provision Azure Infrastructure
178162

179-
```powershell
180-
cd M365Agent
181-
atk provision --env dev
182-
```
163+
**Using Microsoft 365 Agents Toolkit UI (Recommended):**
164+
1. Open the **Microsoft 365 Agents Toolkit** extension panel in VS Code or Visual Studio
165+
2. Navigate to the **Lifecycle** section
166+
3. Select environment: **dev**
167+
4. Click **Provision** to create Azure resources
183168

184169
**What happens:**
185170
1. ✅ Creates Teams app registration in Teams Developer Portal
@@ -193,9 +178,9 @@ atk provision --env dev
193178
```
194179
✓ Teams app created successfully
195180
✓ Provisioning Azure resources...
196-
✓ Managed Identity created: botprod123-identity
197-
✓ App Service deployed: https://botprod123-app.azurewebsites.net
198-
✓ Bot Service registered: botprod123
181+
✓ Managed Identity created: <AppName>-identity
182+
✓ App Service deployed: https://<AppName>-app.azurewebsites.net
183+
✓ Bot Service registered: <AppName>
199184
✓ SSO App Registration created
200185
✓ OAuth Connection configured
201186
✓ Teams app package validated
@@ -204,12 +189,20 @@ atk provision --env dev
204189

205190
**Duration:** ~5-8 minutes
206191

207-
### Step 3: Deploy Application Code
208-
192+
**Alternatively, using CLI:**
209193
```powershell
210-
atk deploy --env dev
194+
cd M365Agent
195+
atk provision --env dev
211196
```
212197

198+
### Step 3: Deploy Application Code
199+
200+
**Using Microsoft 365 Agents Toolkit UI (Recommended):**
201+
1. In the **Microsoft 365 Agents Toolkit** extension panel
202+
2. Navigate to the **Lifecycle** section
203+
3. Select environment: **dev**
204+
4. Click **Deploy** to publish application code
205+
213206
**What happens:**
214207
1. ✅ Builds .NET application (`dotnet publish -c Release`)
215208
2. ✅ Creates deployment package
@@ -226,7 +219,15 @@ atk deploy --env dev
226219

227220
**Duration:** ~2-3 minutes
228221

229-
### Step 4: Install in Teams
222+
**Alternatively, using CLI:**
223+
```powershell
224+
cd M365Agent
225+
atk deploy --env dev
226+
```
227+
228+
### Step 4: Install in Microsoft 365 Copilot & Microsoft Teams
229+
230+
**Note:** The app is automatically registered in Teams Developer Portal during provisioning. However, you can manually install it if needed:
230231

231232
1. Open **Microsoft Teams**
232233
2. Go to **Apps****Manage your apps**
@@ -261,7 +262,7 @@ Location: Same as resource group
261262
- ✅ No secrets to manage or rotate
262263
- ✅ Secure authentication to Azure services
263264
- ✅ Integrated Azure RBAC support
264-
- ✅ Used as bot's identity in Bot Framework
265+
- ✅ Used as bot's identity in Azure Bot Service
265266

266267
---
267268

@@ -315,7 +316,7 @@ Location: Same as resource group
315316

316317
**Module:** `modules/azurebot.bicep`
317318

318-
**Purpose:** Registers your web service as a bot with the Bot Framework and enables Teams channel.
319+
**Purpose:** Registers your web service as a bot with Azure Bot Service and enables Teams channel.
319320

320321
**Resources Created:**
321322

@@ -885,7 +886,7 @@ You've successfully deployed your M365 Agent to Azure! 🎉
885886
- [Microsoft 365 Agents Toolkit Documentation](https://aka.ms/teams-toolkit-docs)
886887
- [Azure Bot Service Documentation](https://learn.microsoft.com/azure/bot-service/)
887888
- [Bicep Documentation](https://learn.microsoft.com/azure/azure-resource-manager/bicep/)
888-
- [Bot Framework SDK](https://github.com/microsoft/botbuilder-dotnet)
889+
- [M365 Agent SDK](https://github.com/microsoft/agents)
889890
890891
**Support:**
891892
- GitHub Issues: [Teams Toolkit Repository](https://github.com/OfficeDev/TeamsFx/issues)

ProxyAgent-CSharp/M365Agent/LOCAL_DEPLOYMENT.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ That's it! Everything else happens automatically.
215215

216216
1. **Configure environment** in `.env.local`:
217217
```bash
218-
# Azure AI Foundry configuration
218+
# Microsoft Foundry configuration
219219
AZURE_AI_FOUNDRY_PROJECT_ENDPOINT=<your-ai-foundry-endpoint>
220220
AGENT_ID=<your-agent-id>
221221
```
@@ -419,7 +419,7 @@ The automated deployment creates **two separate app registrations** for security
419419
**Authentication:** Client ID + Client Secret
420420

421421
**Used for:**
422-
- Bot Framework authentication
422+
- Azure Bot Service authentication
423423
- Bot Service communication
424424
- Local development identity (replaces Managed Identity)
425425

@@ -444,7 +444,7 @@ Required for: Bot Service to verify bot identity
444444
**Configuration:**
445445
```yaml
446446
OAuth Scope: access_as_user
447-
Federated Credentials: Bot Framework token issuer
447+
Federated Credentials: Azure Bot Service token issuer
448448
Pre-authorized Clients: Teams, Outlook, M365 apps
449449
No client secrets: More secure than password-based auth
450450
```
@@ -690,7 +690,7 @@ Then press **F5** again - everything will retry automatically.
690690
# Check if bot is accessible via tunnel
691691
curl <BOT_ENDPOINT_from_.env.local>
692692
693-
# Should return bot framework response
693+
# Should return Azure Bot Service response
694694
```
695695

696696
---
@@ -972,9 +972,9 @@ Edit `.vscode/launch.json`:
972972

973973
Press F5 and select the Chrome configuration.
974974

975-
### Azure AI Foundry Integration
975+
### Microsoft Foundry Integration
976976

977-
**Add your Azure AI Foundry project:**
977+
**Add your Microsoft Foundry project:**
978978

979979
1. After first F5 run, open `M365Agent/env/.env.local`
980980
2. Update these values:
@@ -1224,7 +1224,7 @@ Production uses:
12241224

12251225
**Documentation:**
12261226
- [Microsoft 365 Agents Toolkit](https://aka.ms/teams-toolkit-docs)
1227-
- [Bot Framework SDK for .NET](https://github.com/microsoft/botbuilder-dotnet)
1227+
- [M365 Agent SDK for .NET](https://github.com/microsoft/agents)
12281228
- [Dev Tunnels Documentation](https://learn.microsoft.com/azure/developer/dev-tunnels/)
12291229
- [Teams Platform](https://learn.microsoft.com/microsoftteams/platform/)
12301230

ProxyAgent-CSharp/M365Agent/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ An intelligent agent that helps with Azure operations and tasks, built with Micr
2323
1. Activate the #define DISABLE_SSO flag in AzureAgent.cs file
2424
2. Install the Microsoft 365 Agents Playground: https://learn.microsoft.com/en-us/microsoft-365/agents-sdk/test-with-toolkit-project?tabs=windows
2525
3. In VS, set the debugging target to "AzureAgentToM365ATK"
26-
4. In a terminal, use 'az login' and use an account that can call the Azure AI Foundry agent. This will be used by the DefaultAzureCredentials call.
26+
4. In a terminal, use 'az login' and use an account that can call the Microsoft Foundry agent. This will be used by the DefaultAzureCredentials call.
2727
5. Press F5 to start debugging, find the http endpoint in the debug console
2828
6. Launch in a terminal: 'agentsplayground -e "http://localhost:<your-agent-port>/api/messages"
2929

ProxyAgent-CSharp/M365Agent/infra/azure-local.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@
365365
],
366366
"issuer": "[format('{0}{1}/v2.0', environment().authentication.loginEndpoint, parameters('tenantId'))]",
367367
"subject": "[format('/eid1/c/pub/t/{0}/a/9ExAW52n_ky4ZiS_jhpJIQ/{1}', reference('tenantIdEncoder').outputs.encodedGuid.value, guid(resourceGroup().id, parameters('aadAppName'), 'BotServiceOauthConnection'))]",
368-
"description": "Federated credential for Bot Framework token exchange"
368+
"description": "Federated credential for Azure Bot Service token exchange"
369369
},
370370
"dependsOn": [
371371
"aadApplication",

ProxyAgent-CSharp/M365Agent/infra/azure.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -462,7 +462,7 @@
462462
"type": "string",
463463
"defaultValue": "",
464464
"metadata": {
465-
"description": "Azure AI Foundry Project Endpoint (optional)"
465+
"description": "Microsoft Foundry Project Endpoint (optional)"
466466
}
467467
},
468468
"azureAIAgentId": {
@@ -868,7 +868,7 @@
868868
],
869869
"issuer": "[format('{0}{1}/v2.0', environment().authentication.loginEndpoint, parameters('tenantId'))]",
870870
"subject": "[format('/eid1/c/pub/t/{0}/a/9ExAW52n_ky4ZiS_jhpJIQ/{1}', reference('tenantIdEncoder').outputs.encodedGuid.value, guid(resourceGroup().id, parameters('aadAppName'), 'BotServiceOauthConnection'))]",
871-
"description": "Federated credential for Bot Framework token exchange"
871+
"description": "Federated credential for Azure Bot Service token exchange"
872872
},
873873
"dependsOn": [
874874
"aadApplication",

0 commit comments

Comments
 (0)