feat: surface MCP OAuth sidecar events

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
David Kaya
2026-03-27 19:01:46 +01:00
co-authored by Copilot
parent b670680a7d
commit 192c28f721
9 changed files with 343 additions and 10 deletions
@@ -0,0 +1,71 @@
using Aryx.AgentHost.Contracts;
using Aryx.AgentHost.Services;
using GitHub.Copilot.SDK;
namespace Aryx.AgentHost.Tests;
public sealed class CopilotMcpOAuthCoordinatorTests
{
[Fact]
public void BuildMcpOauthRequiredEvent_MapsSdkEventToProtocolEvent()
{
CopilotMcpOAuthCoordinator coordinator = new();
RunTurnCommandDto command = CreateCommand();
McpOauthRequiredEventDto oauthEvent = coordinator.BuildMcpOauthRequiredEvent(
command,
command.Pattern.Agents[0],
new McpOauthRequiredEvent
{
Data = new McpOauthRequiredData
{
RequestId = " oauth-request-1 ",
ServerName = " Example MCP ",
ServerUrl = " https://example.com/mcp ",
StaticClientConfig = new McpOauthRequiredDataStaticClientConfig
{
ClientId = " aryx-client ",
PublicClient = true,
},
},
});
Assert.Equal("mcp-oauth-required", oauthEvent.Type);
Assert.Equal("turn-1", oauthEvent.RequestId);
Assert.Equal("session-1", oauthEvent.SessionId);
Assert.Equal("oauth-request-1", oauthEvent.OauthRequestId);
Assert.Equal("agent-1", oauthEvent.AgentId);
Assert.Equal("Primary", oauthEvent.AgentName);
Assert.Equal("Example MCP", oauthEvent.ServerName);
Assert.Equal("https://example.com/mcp", oauthEvent.ServerUrl);
Assert.NotNull(oauthEvent.StaticClientConfig);
Assert.Equal("aryx-client", oauthEvent.StaticClientConfig!.ClientId);
Assert.True(oauthEvent.StaticClientConfig.PublicClient);
}
private static RunTurnCommandDto CreateCommand()
{
return new RunTurnCommandDto
{
RequestId = "turn-1",
SessionId = "session-1",
Pattern = new PatternDefinitionDto
{
Id = "pattern-1",
Name = "MCP OAuth Pattern",
Mode = "single",
Availability = "available",
Agents =
[
new PatternAgentDefinitionDto
{
Id = "agent-1",
Name = "Primary",
Model = "gpt-5.4",
Instructions = "Help with the request.",
},
],
},
};
}
}