Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
ce65413
.NET: Honor cancellation for Foundry-hosted workflow responses (#7842)
Copilot Aug 25, 2026
7683b0e
.NET: Use Responses API for hosted web search in AG-UI (#7843)
Copilot Aug 25, 2026
7181af5
Python: update ChatKit attachment handling (#7846)
SergeyMenshykh Aug 25, 2026
5da6ea8
.NET: Bump Aspire.Hosting from 13.1.0 to 13.5.2 (#7826)
dependabot[bot] Aug 25, 2026
92aec78
.NET: Suppress false positive Zip Slip alert (#7858)
SergeyMenshykh Aug 25, 2026
6f75ec8
Python: preserve unmapped Anthropic and Mistral finish reasons (#7850)
YashvantHange Aug 25, 2026
ee65ce4
.NET: added Mem0Sharp integration for in-memory storage in agent samp…
jihadkhawaja Aug 25, 2026
af461de
Python: keep agent loop marker from provider SDKs (#7860)
eavanvalkenburg Aug 25, 2026
a538dbb
.NET: Annotate DevUI aggregator static-analysis false positives (#7864)
SergeyMenshykh Aug 26, 2026
13c3e1c
Rename CommunityToolkit.VectorData.CosmosNoSql to AzureCosmosDB (#7878)
adamsitnik Aug 26, 2026
5d8540f
chore: upgrades aspnet openapi dependency (#7870)
baywet Aug 26, 2026
e34bf48
.NET: Simplify A2A function tool samples (#7861)
SergeyMenshykh Aug 26, 2026
563ed06
ci: adds dependabot cooldown for python and dotnet (#7868)
baywet Aug 26, 2026
4f05631
Bump Azure.AI.AgentServer.Invocations from 1.0.0-beta.5 to 1.0.0-beta…
dependabot[bot] Aug 26, 2026
8afee4c
.NET: docs: updates the contributing information for CFS users (#7869)
baywet Aug 26, 2026
57a0359
Bump CommunityToolkit.VectorData.InMemory from 1.0.0 to 1.0.1 (#7888)
dependabot[bot] Aug 26, 2026
b5e8ae9
Python: fix AG-UI service-session snapshot replay (#7770)
PratikWayase Aug 26, 2026
a076d28
fix(python): isolate stateless AG-UI sessions
eavanvalkenburg Aug 27, 2026
477444d
fix(python): reject disabled service storage
eavanvalkenburg Aug 27, 2026
74a1786
fix(python): preserve Responses replay metadata
eavanvalkenburg Aug 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ updates:
labels:
- ".NET"
- "dependencies"
cooldown:
default-days: 7

# Maintain dependencies for python.
# TODO: Remove these Python Dependabot entries after we have confidence in the
Expand All @@ -35,6 +37,9 @@ updates:
labels:
- "python"
- "dependencies"
cooldown:
default-days: 7

- package-ecosystem: "uv"
directory: "python/"
schedule:
Expand All @@ -43,6 +48,8 @@ updates:
labels:
- "python"
- "dependencies"
cooldown:
default-days: 7

# Maintain dependencies for github-actions
- package-ecosystem: "github-actions"
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,9 @@ python/dotnet-ref
dotnet/filtered-*.slnx
**/*.lscache

# Local .NET build overrides
/dotnet/Directory.Build.rsp

# Local tool state
.omc/
.omx/
Expand Down
12 changes: 12 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,18 @@ Each language has its own dev setup guide, coding standards, and build scripts:
- Integration tests: `dotnet test --filter-query "/*IntegrationTests*/*/*/*"` (requires API keys/endpoints)
- Linting (auto-fix): `dotnet format`

#### Microsoft Internal Feed Proxy for GitHub Copilot SDK (.NET)

Microsoft contributors can route GitHub Copilot SDK npm downloads through the internal proxy without passing extra `dotnet` arguments:

1. Create `dotnet/Directory.Build.rsp` with:

```text
-p:CopilotNpmRegistryUrl=https://packagefeedproxy.microsoft.io/npm/
```

When running `dotnet build` (or other `dotnet` commands) from the `./dotnet` directory, this property is applied automatically.

### PR - CI Process

The continuous integration (CI) system will automatically perform the required
Expand Down
2 changes: 0 additions & 2 deletions dotnet/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,6 @@ StyleCopReport.xml
*.pgc
*.pgd
*.rsp
# but not Directory.Build.rsp, as it configures directory-level build defaults
!Directory.Build.rsp
*.sbr
*.tlb
*.tli
Expand Down
19 changes: 19 additions & 0 deletions dotnet/Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,25 @@
<IsReleaseCandidate>false</IsReleaseCandidate>
<IsReleased>false</IsReleased>
</PropertyGroup>

<PropertyGroup>
<!--
Temporary workarounds for Aspire 13.5.2. Remove both once the AppHost SDK/packages no longer need them.

1. Aspire.AppHost.Sdk 13.5.2 resolves the Dashboard/DCP runtime identifier with the in-proc
Microsoft.NET.Build.Tasks.PickBestRid task, which is not registered while a cross-targeting
(TargetFrameworks) project is being evaluated, so AppHost restore fails with MSB4036. Setting this to
false keeps the SDK on its out-of-proc Aspire.RuntimeIdentifier.Tool fallback, which resolves the same
runtime identifier at the cost of one extra process launch.
Mirrors the workaround in https://github.com/CommunityToolkit/Aspire.

2. Aspire.Hosting.AppHost 13.5.2 raises ASPIRE010 whenever an AppHost builds without the Aspire CLI
bundle (the SDK default). The bundle is not available on CI agents, and the diagnostic itself offers
suppression as the supported way to keep building without it, so it is treated as informational here.
-->
<_AspireUseSdkPickBestRid>false</_AspireUseSdkPickBestRid>
<NoWarn>$(NoWarn);ASPIRE010</NoWarn>
</PropertyGroup>

<PropertyGroup>
<!-- Disable NuGet packaging by default. Projects can override. -->
Expand Down
31 changes: 15 additions & 16 deletions dotnet/Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
</PropertyGroup>
<PropertyGroup>
<!-- Aspire -->
<AspireAppHostSdkVersion>13.1.0</AspireAppHostSdkVersion>
<AspireAppHostSdkVersion>13.5.2</AspireAppHostSdkVersion>
</PropertyGroup>
<ItemGroup>
<!-- Aspire.* -->
Expand Down Expand Up @@ -77,8 +77,7 @@
<!-- Microsoft.AspNetCore.* -->
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.0" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="10.0.0" />
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="10.0.9" />
<PackageVersion Include="Microsoft.OpenApi" Version="2.7.5" /> <!-- Pin patched OpenAPI.NET to remediate GHSA-v5pm-xwqc-g5wc -->
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="10.0.11" />
<PackageVersion Include="Swashbuckle.AspNetCore.SwaggerUI" Version="10.0.0" />
<!-- Microsoft.Extensions.* -->
<PackageVersion Include="Microsoft.Extensions.AI" Version="10.9.0" />
Expand All @@ -89,24 +88,24 @@
<PackageVersion Include="Microsoft.Extensions.AI.OpenAI" Version="10.6.0" />
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="10.0.0" />
<PackageVersion Include="Microsoft.Extensions.Compliance.Abstractions" Version="10.5.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="10.0.1" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.1" />
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="10.0.1" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="10.0.1" />
<PackageVersion Include="Microsoft.Extensions.Configuration.UserSecrets" Version="10.0.1" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.1" />
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Configuration.UserSecrets" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.FileSystemGlobbing" Version="10.0.6" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="10.0.1" />
<PackageVersion Include="Microsoft.Extensions.FileSystemGlobbing" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="10.0.0" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="10.0.1" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="10.0.1" />
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.ServiceDiscovery" Version="10.0.0" />
<PackageVersion Include="Microsoft.Extensions.VectorData.Abstractions" Version="10.7.0" />
<PackageVersion Include="Microsoft.Extensions.VectorData.Abstractions" Version="10.8.2" />
<!-- Vector Stores -->
<PackageVersion Include="CommunityToolkit.VectorData.CosmosNoSql" Version="1.0.0" />
<PackageVersion Include="CommunityToolkit.VectorData.InMemory" Version="1.0.0" />
<PackageVersion Include="CommunityToolkit.VectorData.AzureCosmosDB" Version="1.0.0" />
<PackageVersion Include="CommunityToolkit.VectorData.InMemory" Version="1.0.1" />
<PackageVersion Include="CommunityToolkit.VectorData.Qdrant" Version="1.0.0" />
<!-- Agent SDKs -->
<PackageVersion Include="GitHub.Copilot.SDK" Version="1.0.5" />
Expand Down
3 changes: 2 additions & 1 deletion dotnet/agent-framework-dotnet.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -402,7 +402,8 @@
</Folder>
<Folder Name="/Samples/02-agents/A2A/">
<File Path="samples/02-agents/A2A/README.md" />
<Project Path="samples/02-agents/A2A/A2AAgent_AsFunctionTools/A2AAgent_AsFunctionTools.csproj" />
<Project Path="samples/02-agents/A2A/A2AAgent_AsFunctionTool/A2AAgent_AsFunctionTool.csproj" />
<Project Path="samples/02-agents/A2A/A2AAgent_Skills/A2AAgent_Skills.csproj" />
<Project Path="samples/02-agents/A2A/A2AAgent_PollingForTaskCompletion/A2AAgent_PollingForTaskCompletion.csproj" />
<Project Path="samples/02-agents/A2A/A2AAgent_ProtocolSelection/A2AAgent_ProtocolSelection.csproj" />
<Project Path="samples/02-agents/A2A/A2AAgent_StreamReconnection/A2AAgent_StreamReconnection.csproj" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,12 @@

<ItemGroup>
<PackageReference Include="A2A" />
<PackageReference Include="Azure.AI.OpenAI" />
<PackageReference Include="Azure.Identity" />
<PackageReference Include="Microsoft.Extensions.Hosting" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\..\..\src\Microsoft.Agents.AI.A2A\Microsoft.Agents.AI.A2A.csproj" />
<ProjectReference Include="..\..\..\..\src\Microsoft.Agents.AI.OpenAI\Microsoft.Agents.AI.OpenAI.csproj" />
<ProjectReference Include="..\..\..\..\src\Microsoft.Agents.AI.Foundry\Microsoft.Agents.AI.Foundry.csproj" />
</ItemGroup>

</Project>
35 changes: 35 additions & 0 deletions dotnet/samples/02-agents/A2A/A2AAgent_AsFunctionTool/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// Copyright (c) Microsoft. All rights reserved.

// This sample shows how to expose an A2A agent as a function tool that another agent can call.

using A2A;
using Azure.AI.Projects;
using Azure.Identity;
using Microsoft.Agents.AI;

var endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
var model = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
var a2aAgentHost = Environment.GetEnvironmentVariable("A2A_AGENT_HOST") ?? throw new InvalidOperationException("A2A_AGENT_HOST is not set.");

// Initialize an A2ACardResolver to get an A2A agent card.
A2ACardResolver agentCardResolver = new(new Uri(a2aAgentHost));

// Get the agent card
AgentCard agentCard = await agentCardResolver.GetAgentCardAsync();

// Create an instance of the AIAgent for an existing A2A agent specified by the agent card.
AIAgent a2aAgent = agentCard.AsAIAgent();

// Create the main agent, and provide the A2A agent as a function tool.
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
// latency issues, unintended credential probing, and potential security risks from fallback mechanisms.
AIAgent agent = new AIProjectClient(new Uri(endpoint), new DefaultAzureCredential())
.AsAIAgent(
model: model,
instructions: "You are a helpful assistant. Use the available tools to answer the user's questions.",
tools: [a2aAgent.AsAIFunction()]
);

// Invoke the agent and output the text result.
Console.WriteLine(await agent.RunAsync("What can you help me with?"));
30 changes: 30 additions & 0 deletions dotnet/samples/02-agents/A2A/A2AAgent_AsFunctionTool/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# A2A Agent as a Function Tool

This sample demonstrates how to expose an A2A agent as a single function tool that another AI agent can call.

The sample:

- Discovers a remote A2A agent from its agent card
- Converts the agent card to an `AIAgent`
- Converts that agent to one function tool with `AsAIFunction()`
- Registers the function tool with a main AI agent

## Prerequisites

Before you begin, ensure you have the following prerequisites:

- .NET 10 SDK or later
- Access to the A2A agent host service
- A Microsoft Foundry project with a deployed model

**Note**: These samples need to be run against a valid A2A server. If no A2A server is available, they can be run against the echo-agent that can be spun up locally by following the guidelines at: https://github.com/a2aproject/a2a-dotnet/blob/main/samples/AgentServer/README.md

Set the following environment variables:

Authenticate with Azure CLI by running `az login`, then set:

```powershell
$env:A2A_AGENT_HOST="https://your-a2a-agent-host" # Replace with your A2A agent host endpoint
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-project.services.ai.azure.com/api/projects/your-project" # Replace with your Foundry project endpoint
$env:FOUNDRY_MODEL="gpt-5.4-mini" # Optional, defaults to gpt-5.4-mini
```
22 changes: 0 additions & 22 deletions dotnet/samples/02-agents/A2A/A2AAgent_AsFunctionTools/README.md

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFrameworks>net10.0</TargetFrameworks>

<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="A2A" />
<PackageReference Include="Azure.Identity" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\..\..\src\Microsoft.Agents.AI.A2A\Microsoft.Agents.AI.A2A.csproj" />
<ProjectReference Include="..\..\..\..\src\Microsoft.Agents.AI.Foundry\Microsoft.Agents.AI.Foundry.csproj" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -1,39 +1,30 @@
// Copyright (c) Microsoft. All rights reserved.

// This sample shows how to represent an A2A agent as a set of function tools, where each function tool
// corresponds to a skill of the A2A agent, and register these function tools with another AI agent so
// it can leverage the A2A agent's skills.
// This sample shows how to expose each skill advertised by an A2A agent as a separate function tool.

using System.Text.RegularExpressions;
using A2A;
using Azure.AI.OpenAI;
using Azure.AI.Projects;
using Azure.Identity;
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
using OpenAI.Chat;

var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT") ?? throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
var deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
var endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
var model = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
var a2aAgentHost = Environment.GetEnvironmentVariable("A2A_AGENT_HOST") ?? throw new InvalidOperationException("A2A_AGENT_HOST is not set.");

// Initialize an A2ACardResolver to get an A2A agent card.
// Resolve the remote A2A agent and its advertised skills.
A2ACardResolver agentCardResolver = new(new Uri(a2aAgentHost));

// Get the agent card
AgentCard agentCard = await agentCardResolver.GetAgentCardAsync();

// Create an instance of the AIAgent for an existing A2A agent specified by the agent card.
AIAgent a2aAgent = agentCard.AsAIAgent();

// Create the main agent, and provide the a2a agent skills as a function tools.
// Create the main agent, and provide each A2A skill as a separate function tool.
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
// latency issues, unintended credential probing, and potential security risks from fallback mechanisms.
AIAgent agent = new AzureOpenAIClient(
new Uri(endpoint),
new DefaultAzureCredential())
.GetChatClient(deploymentName)
AIAgent agent = new AIProjectClient(new Uri(endpoint), new DefaultAzureCredential())
.AsAIAgent(
model: model,
instructions: "You are a helpful assistant that helps people with travel planning.",
tools: [.. CreateFunctionTools(a2aAgent, agentCard)]
);
Expand Down
34 changes: 34 additions & 0 deletions dotnet/samples/02-agents/A2A/A2AAgent_Skills/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# A2A Agent Skills

This sample demonstrates how to expose each skill advertised by an A2A agent as a separate function tool for another AI agent.

Unlike exposing the whole A2A agent as one tool, this approach gives the model a distinct tool for each skill. The sample uses the skill metadata from the A2A agent card to name and describe those tools.

All generated tools invoke the same A2A agent. Their names and descriptions help the main agent choose an advertised capability; they do not invoke separate skill-specific endpoints.

The sample:

- Discovers a remote A2A agent and its skills from the agent card
- Creates one function tool for each advertised skill
- Adds the skill's description, tags, examples, and supported modes to the function description
- Registers all generated function tools with a main AI agent

## Prerequisites

Before you begin, ensure you have the following prerequisites:

- .NET 10 SDK or later
- Access to the A2A agent host service
- A Microsoft Foundry project with a deployed model

**Note**: These samples need to be run against a valid A2A server. If no A2A server is available, they can be run against the echo-agent that can be spun up locally by following the guidelines at: https://github.com/a2aproject/a2a-dotnet/blob/main/samples/AgentServer/README.md

Set the following environment variables:

Authenticate with Azure CLI by running `az login`, then set:

```powershell
$env:A2A_AGENT_HOST="https://your-a2a-agent-host" # Replace with your A2A agent host endpoint
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-project.services.ai.azure.com/api/projects/your-project" # Replace with your Foundry project endpoint
$env:FOUNDRY_MODEL="gpt-5.4-mini" # Optional, defaults to gpt-5.4-mini
```
5 changes: 3 additions & 2 deletions dotnet/samples/02-agents/A2A/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ See the README.md for each sample for the prerequisites for that sample.

|Sample|Description|
|---|---|
|[A2A Agent As Function Tools](./A2AAgent_AsFunctionTools/)|This sample demonstrates how to represent an A2A agent as a set of function tools, where each function tool corresponds to a skill of the A2A agent, and register these function tools with another AI agent so it can leverage the A2A agent's skills.|
|[A2A Agent as a Function Tool](./A2AAgent_AsFunctionTool/)|This sample demonstrates how to expose an A2A agent as a single function tool that another AI agent can call.|
|[A2A Agent Skills](./A2AAgent_Skills/)|This sample demonstrates how to expose each skill advertised by an A2A agent as a separate function tool.|
|[A2A Agent Polling For Task Completion](./A2AAgent_PollingForTaskCompletion/)|This sample demonstrates how to poll for long-running task completion using continuation tokens with an A2A agent.|
|[A2A Agent Stream Reconnection](./A2AAgent_StreamReconnection/)|This sample demonstrates how to reconnect to an A2A agent's streaming response using continuation tokens, allowing recovery from stream interruptions.|
|[A2A Agent Protocol Selection](./A2AAgent_ProtocolSelection/)|This sample demonstrates how to select the A2A protocol binding (HTTP+JSON vs JSON-RPC) when creating an AIAgent from an A2A agent card using A2AClientOptions.|
Expand All @@ -23,7 +24,7 @@ See the README.md for each sample for the prerequisites for that sample.
To run the samples, navigate to the desired sample directory, e.g.

```powershell
cd A2AAgent_AsFunctionTools
cd A2AAgent_AsFunctionTool
```

Set the required environment variables as documented in the sample readme.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

<ItemGroup>
<PackageReference Include="Azure.Identity" />
<PackageReference Include="CommunityToolkit.VectorData.CosmosNoSql" />
<PackageReference Include="CommunityToolkit.VectorData.AzureCosmosDB" />
<PackageReference Include="Microsoft.Azure.Cosmos" />
<PackageReference Include="Newtonsoft.Json" />
</ItemGroup>
Expand Down
Loading
Loading