diff --git a/dotnet/Directory.Packages.props b/dotnet/Directory.Packages.props index 40116c26d6..46e0d61924 100644 --- a/dotnet/Directory.Packages.props +++ b/dotnet/Directory.Packages.props @@ -25,7 +25,7 @@ - + diff --git a/dotnet/agent-framework-dotnet.slnx b/dotnet/agent-framework-dotnet.slnx index d7bd80d50e..b3a95ea1f6 100644 --- a/dotnet/agent-framework-dotnet.slnx +++ b/dotnet/agent-framework-dotnet.slnx @@ -542,6 +542,7 @@ + diff --git a/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-ChatClientAgent/HostedChatClientAgent.csproj b/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-ChatClientAgent/HostedChatClientAgent.csproj index b1fe8d3e3c..0bccd317f6 100644 --- a/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-ChatClientAgent/HostedChatClientAgent.csproj +++ b/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-ChatClientAgent/HostedChatClientAgent.csproj @@ -17,11 +17,13 @@ + + + diff --git a/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-McpTools/HostedMcpTools.csproj b/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-McpTools/HostedMcpTools.csproj index 9ce19dd540..359e8a35bb 100644 --- a/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-McpTools/HostedMcpTools.csproj +++ b/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-McpTools/HostedMcpTools.csproj @@ -11,7 +11,7 @@ - + @@ -20,11 +20,13 @@ + diff --git a/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-TextRag/HostedTextRag.csproj b/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-TextRag/HostedTextRag.csproj index 9a22108c7b..ed24c32eea 100644 --- a/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-TextRag/HostedTextRag.csproj +++ b/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-TextRag/HostedTextRag.csproj @@ -11,7 +11,7 @@ - + @@ -19,12 +19,14 @@ + diff --git a/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-Toolbox/HostedToolbox.csproj b/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-Toolbox/HostedToolbox.csproj index 1e3c4e10c2..458518c67b 100644 --- a/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-Toolbox/HostedToolbox.csproj +++ b/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-Toolbox/HostedToolbox.csproj @@ -11,7 +11,7 @@ - + @@ -19,11 +19,13 @@ + diff --git a/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-Workflow-Handoff/HostedWorkflowHandoff.csproj b/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-Workflow-Handoff/HostedWorkflowHandoff.csproj index 625aac0329..d6b68609fb 100644 --- a/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-Workflow-Handoff/HostedWorkflowHandoff.csproj +++ b/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-Workflow-Handoff/HostedWorkflowHandoff.csproj @@ -23,6 +23,7 @@ + @@ -31,6 +32,7 @@ + @@ -26,6 +27,7 @@ + false + + + + + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dotnet/src/Microsoft.Agents.AI.Foundry/Hosting/OutputConverter.cs b/dotnet/src/Microsoft.Agents.AI.Foundry.Hosting/OutputConverter.cs similarity index 100% rename from dotnet/src/Microsoft.Agents.AI.Foundry/Hosting/OutputConverter.cs rename to dotnet/src/Microsoft.Agents.AI.Foundry.Hosting/OutputConverter.cs diff --git a/dotnet/src/Microsoft.Agents.AI.Foundry/Hosting/ServiceCollectionExtensions.cs b/dotnet/src/Microsoft.Agents.AI.Foundry.Hosting/ServiceCollectionExtensions.cs similarity index 100% rename from dotnet/src/Microsoft.Agents.AI.Foundry/Hosting/ServiceCollectionExtensions.cs rename to dotnet/src/Microsoft.Agents.AI.Foundry.Hosting/ServiceCollectionExtensions.cs diff --git a/dotnet/src/Microsoft.Agents.AI.Foundry/FoundryAITool.cs b/dotnet/src/Microsoft.Agents.AI.Foundry/FoundryAITool.cs index d9ecb851e3..a235cef664 100644 --- a/dotnet/src/Microsoft.Agents.AI.Foundry/FoundryAITool.cs +++ b/dotnet/src/Microsoft.Agents.AI.Foundry/FoundryAITool.cs @@ -122,40 +122,6 @@ public static class FoundryAITool public static AITool CreateHostedMcpToolbox(string toolboxName, string? version = null) => new HostedMcpToolboxAITool(toolboxName, version); - /// - /// Creates an marker from a retrieved - /// from AIProjectClient. Uses and - /// . - /// - /// The toolbox record. - /// An marker backed by . - public static AITool CreateHostedMcpToolbox(ToolboxRecord toolbox) - { - if (toolbox is null) - { - throw new ArgumentNullException(nameof(toolbox)); - } - - return new HostedMcpToolboxAITool(toolbox.Name, toolbox.DefaultVersion); - } - - /// - /// Creates an marker from a specific - /// retrieved from AIProjectClient. Uses and - /// . - /// - /// The toolbox version. - /// An marker backed by . - public static AITool CreateHostedMcpToolbox(ToolboxVersion toolboxVersion) - { - if (toolboxVersion is null) - { - throw new ArgumentNullException(nameof(toolboxVersion)); - } - - return new HostedMcpToolboxAITool(toolboxVersion.Name, toolboxVersion.Version); - } - // --- OpenAI SDK ResponseTool factories --- /// diff --git a/dotnet/src/Microsoft.Agents.AI.Foundry/Microsoft.Agents.AI.Foundry.csproj b/dotnet/src/Microsoft.Agents.AI.Foundry/Microsoft.Agents.AI.Foundry.csproj index 003a50ecf7..d223f25677 100644 --- a/dotnet/src/Microsoft.Agents.AI.Foundry/Microsoft.Agents.AI.Foundry.csproj +++ b/dotnet/src/Microsoft.Agents.AI.Foundry/Microsoft.Agents.AI.Foundry.csproj @@ -3,8 +3,7 @@ true true - $(NoWarn);OPENAI001;MEAI001;NU1903 - false + $(NoWarn);OPENAI001;MEAI001 @@ -21,10 +20,6 @@ true - - - - @@ -34,12 +29,6 @@ - - - - - - @@ -56,11 +45,6 @@ - - - - - Microsoft Agent Framework for Foundry Agents @@ -72,9 +56,4 @@ - - - - - diff --git a/dotnet/tests/Microsoft.Agents.AI.Foundry.UnitTests/HostedMcpToolboxAIToolTests.cs b/dotnet/tests/Microsoft.Agents.AI.Foundry.UnitTests/HostedMcpToolboxAIToolTests.cs index 640ef69008..d6fbd53df5 100644 --- a/dotnet/tests/Microsoft.Agents.AI.Foundry.UnitTests/HostedMcpToolboxAIToolTests.cs +++ b/dotnet/tests/Microsoft.Agents.AI.Foundry.UnitTests/HostedMcpToolboxAIToolTests.cs @@ -93,71 +93,4 @@ public class HostedMcpToolboxAIToolTests Assert.Equal("my-toolbox", marker.ToolboxName); Assert.Equal("v1", marker.Version); } - - [Fact] - public void FoundryAITool_CreateHostedMcpToolbox_FromToolboxRecord_UsesNameAndDefaultVersion() - { - var record = Azure.AI.Projects.Agents.ProjectsAgentsModelFactory.ToolboxRecord( - id: "tbx-123", - name: "calendar-tools", - defaultVersion: "v2"); - - var tool = FoundryAITool.CreateHostedMcpToolbox(record); - - var marker = Assert.IsType(tool); - Assert.Equal("calendar-tools", marker.ToolboxName); - Assert.Equal("v2", marker.Version); - Assert.Equal("foundry-toolbox://calendar-tools?version=v2", marker.ServerAddress); - } - - [Fact] - public void FoundryAITool_CreateHostedMcpToolbox_FromToolboxRecord_NullDefaultVersionOmitsQuery() - { - var record = Azure.AI.Projects.Agents.ProjectsAgentsModelFactory.ToolboxRecord( - id: "tbx-abc", - name: "finance-tools", - defaultVersion: null); - - var tool = FoundryAITool.CreateHostedMcpToolbox(record); - - var marker = Assert.IsType(tool); - Assert.Equal("finance-tools", marker.ToolboxName); - Assert.Null(marker.Version); - Assert.Equal("foundry-toolbox://finance-tools", marker.ServerAddress); - } - - [Fact] - public void FoundryAITool_CreateHostedMcpToolbox_FromToolboxRecord_Null_Throws() - { - Assert.Throws( - () => FoundryAITool.CreateHostedMcpToolbox((Azure.AI.Projects.Agents.ToolboxRecord)null!)); - } - - [Fact] - public void FoundryAITool_CreateHostedMcpToolbox_FromToolboxVersion_UsesNameAndVersion() - { - var version = Azure.AI.Projects.Agents.ProjectsAgentsModelFactory.ToolboxVersion( - metadata: null, - id: "ver-1", - name: "hr-tools", - version: "2025-09-01", - description: "HR toolbox", - createdAt: DateTimeOffset.UtcNow, - tools: null, - policies: null); - - var tool = FoundryAITool.CreateHostedMcpToolbox(version); - - var marker = Assert.IsType(tool); - Assert.Equal("hr-tools", marker.ToolboxName); - Assert.Equal("2025-09-01", marker.Version); - Assert.Equal("foundry-toolbox://hr-tools?version=2025-09-01", marker.ServerAddress); - } - - [Fact] - public void FoundryAITool_CreateHostedMcpToolbox_FromToolboxVersion_Null_Throws() - { - Assert.Throws( - () => FoundryAITool.CreateHostedMcpToolbox((Azure.AI.Projects.Agents.ToolboxVersion)null!)); - } } diff --git a/dotnet/tests/Microsoft.Agents.AI.Foundry.UnitTests/Hosting/FoundryAIToolExtensionsTests.cs b/dotnet/tests/Microsoft.Agents.AI.Foundry.UnitTests/Hosting/FoundryAIToolExtensionsTests.cs new file mode 100644 index 0000000000..f083a9946e --- /dev/null +++ b/dotnet/tests/Microsoft.Agents.AI.Foundry.UnitTests/Hosting/FoundryAIToolExtensionsTests.cs @@ -0,0 +1,76 @@ +// Copyright (c) Microsoft. All rights reserved. + +using System; +using Microsoft.Agents.AI.Foundry.Hosting; + +namespace Microsoft.Agents.AI.Foundry.UnitTests.Hosting; + +public class FoundryAIToolExtensionsTests +{ + [Fact] + public void CreateHostedMcpToolbox_FromToolboxRecord_UsesNameAndDefaultVersion() + { + var record = Azure.AI.Projects.Agents.ProjectsAgentsModelFactory.ToolboxRecord( + id: "tbx-123", + name: "calendar-tools", + defaultVersion: "v2"); + + var tool = FoundryAIToolExtensions.CreateHostedMcpToolbox(record); + + var marker = Assert.IsType(tool); + Assert.Equal("calendar-tools", marker.ToolboxName); + Assert.Equal("v2", marker.Version); + Assert.Equal("foundry-toolbox://calendar-tools?version=v2", marker.ServerAddress); + } + + [Fact] + public void CreateHostedMcpToolbox_FromToolboxRecord_NullDefaultVersionOmitsQuery() + { + var record = Azure.AI.Projects.Agents.ProjectsAgentsModelFactory.ToolboxRecord( + id: "tbx-abc", + name: "finance-tools", + defaultVersion: null); + + var tool = FoundryAIToolExtensions.CreateHostedMcpToolbox(record); + + var marker = Assert.IsType(tool); + Assert.Equal("finance-tools", marker.ToolboxName); + Assert.Null(marker.Version); + Assert.Equal("foundry-toolbox://finance-tools", marker.ServerAddress); + } + + [Fact] + public void CreateHostedMcpToolbox_FromToolboxRecord_Null_Throws() + { + Assert.Throws( + () => FoundryAIToolExtensions.CreateHostedMcpToolbox((Azure.AI.Projects.Agents.ToolboxRecord)null!)); + } + + [Fact] + public void CreateHostedMcpToolbox_FromToolboxVersion_UsesNameAndVersion() + { + var version = Azure.AI.Projects.Agents.ProjectsAgentsModelFactory.ToolboxVersion( + metadata: null, + id: "ver-1", + name: "hr-tools", + version: "2025-09-01", + description: "HR toolbox", + createdAt: DateTimeOffset.UtcNow, + tools: null, + policies: null); + + var tool = FoundryAIToolExtensions.CreateHostedMcpToolbox(version); + + var marker = Assert.IsType(tool); + Assert.Equal("hr-tools", marker.ToolboxName); + Assert.Equal("2025-09-01", marker.Version); + Assert.Equal("foundry-toolbox://hr-tools?version=2025-09-01", marker.ServerAddress); + } + + [Fact] + public void CreateHostedMcpToolbox_FromToolboxVersion_Null_Throws() + { + Assert.Throws( + () => FoundryAIToolExtensions.CreateHostedMcpToolbox((Azure.AI.Projects.Agents.ToolboxVersion)null!)); + } +} diff --git a/dotnet/tests/Microsoft.Agents.AI.Foundry.UnitTests/Microsoft.Agents.AI.Foundry.UnitTests.csproj b/dotnet/tests/Microsoft.Agents.AI.Foundry.UnitTests/Microsoft.Agents.AI.Foundry.UnitTests.csproj index aa291855d8..2cead6029a 100644 --- a/dotnet/tests/Microsoft.Agents.AI.Foundry.UnitTests/Microsoft.Agents.AI.Foundry.UnitTests.csproj +++ b/dotnet/tests/Microsoft.Agents.AI.Foundry.UnitTests/Microsoft.Agents.AI.Foundry.UnitTests.csproj @@ -2,16 +2,20 @@ false - $(NoWarn);NU1605 + $(NoWarn);NU1605;NU1903 - + + + + + @@ -26,6 +30,10 @@ + + + +