mirror of
https://github.com/davidkaya/aryx.git
synced 2026-07-28 23:48:39 +02:00
Add turn-stream capability metadata and richer normalized provider events for reasoning blocks, tool lifecycle, and turn boundaries. Track those signals in turn execution state and cover the new Copilot adapter/state behavior with tests. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
78 lines
2.8 KiB
C#
78 lines
2.8 KiB
C#
using Aryx.AgentHost.Contracts;
|
|
using Aryx.AgentHost.Services;
|
|
using GitHub.Copilot.SDK;
|
|
|
|
namespace Aryx.AgentHost.Tests;
|
|
|
|
public sealed class CopilotEventAdapterTests
|
|
{
|
|
private static readonly CopilotEventAdapter Adapter = new();
|
|
|
|
[Fact]
|
|
public void Capabilities_AdvertiseRichTurnStreamSupport()
|
|
{
|
|
ProviderTurnStreamCapabilities capabilities = Adapter.Capabilities;
|
|
|
|
Assert.True(capabilities.SupportsIntent);
|
|
Assert.True(capabilities.SupportsReasoningDelta);
|
|
Assert.True(capabilities.SupportsReasoningBlock);
|
|
Assert.True(capabilities.SupportsToolExecutionProgress);
|
|
Assert.True(capabilities.SupportsToolExecutionPartialResult);
|
|
Assert.True(capabilities.SupportsToolExecutionCompletion);
|
|
Assert.True(capabilities.SupportsSubagentLifecycle);
|
|
Assert.True(capabilities.SupportsHookLifecycle);
|
|
Assert.True(capabilities.SupportsSessionCompaction);
|
|
Assert.True(capabilities.SupportsPendingMessagesMutation);
|
|
Assert.True(capabilities.SupportsSessionTurnBoundaries);
|
|
}
|
|
|
|
[Fact]
|
|
public void TryAdapt_ToolExecutionComplete_MapsNormalizedResult()
|
|
{
|
|
ProviderToolExecutionCompleteEvent evt = Assert.IsType<ProviderToolExecutionCompleteEvent>(
|
|
Adapter.TryAdapt(SessionEvent.FromJson(
|
|
"""
|
|
{
|
|
"type": "tool.execution_complete",
|
|
"data": {
|
|
"toolCallId": "tool-call-1",
|
|
"success": true,
|
|
"result": {
|
|
"content": "summary",
|
|
"detailedContent": "summary\nfull"
|
|
}
|
|
},
|
|
"id": "11111111-2222-3333-4444-555555555555",
|
|
"timestamp": "2026-03-27T00:00:00Z"
|
|
}
|
|
""")));
|
|
|
|
Assert.Equal("tool-call-1", evt.ToolCallId);
|
|
Assert.True(evt.Success);
|
|
Assert.Equal("summary", evt.ResultContent);
|
|
Assert.Equal("summary\nfull", evt.DetailedResultContent);
|
|
Assert.Null(evt.Error);
|
|
}
|
|
|
|
[Fact]
|
|
public void TryAdapt_AssistantReasoning_MapsCompletedReasoningBlock()
|
|
{
|
|
ProviderAssistantReasoningEvent evt = Assert.IsType<ProviderAssistantReasoningEvent>(
|
|
Adapter.TryAdapt(SessionEvent.FromJson(
|
|
"""
|
|
{
|
|
"type": "assistant.reasoning",
|
|
"data": {
|
|
"reasoningId": "reasoning-1",
|
|
"content": "Planning the next step."
|
|
},
|
|
"id": "66666666-7777-8888-9999-aaaaaaaaaaaa",
|
|
"timestamp": "2026-03-27T00:00:00Z"
|
|
}
|
|
""")));
|
|
|
|
Assert.Equal("reasoning-1", evt.ReasoningId);
|
|
Assert.Equal("Planning the next step.", evt.Content);
|
|
}
|
|
}
|