mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
e82d9f5e45
* Initial plan * Add GitHub Copilot SDK AIAgent implementation with tests Co-authored-by: westey-m <164392973+westey-m@users.noreply.github.com> * Add projects to solution and fix sample imports Co-authored-by: westey-m <164392973+westey-m@users.noreply.github.com> * Improve pragma comment clarity in GithubCopilotAgentThread Co-authored-by: westey-m <164392973+westey-m@users.noreply.github.com> * Address PR feedback: internal constructor/setter, remove CopilotClientOptions ctor, streaming improvements, better sample, container warning Co-authored-by: westey-m <164392973+westey-m@users.noreply.github.com> * Add ownsClient parameter to allow caller control over client disposal Co-authored-by: westey-m <164392973+westey-m@users.noreply.github.com> * Fix unit tests by removing await using to avoid StreamJsonRpc disposal issues Co-authored-by: westey-m <164392973+westey-m@users.noreply.github.com> * Fix file encoding: add UTF-8 BOM to Program.cs Co-authored-by: westey-m <164392973+westey-m@users.noreply.github.com> * Fix dotnet-format errors: UTF-8 BOM, remove unused logger, add this qualifier, remove unnecessary usings Co-authored-by: westey-m <164392973+westey-m@users.noreply.github.com> * Fix test file encoding and remove redundant cast Co-authored-by: westey-m <164392973+westey-m@users.noreply.github.com> * Add AsAIAgent extension methods for CopilotClient with tests Co-authored-by: westey-m <164392973+westey-m@users.noreply.github.com> * Remove IL suppressions, use TryComplete for channel writer, remove TCS from streaming Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> * Keep session alive across calls, add tools overload, add tests Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> * Revert session persistence changes - sessions dispose after each call Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> * Add CreatedAt property mapping using DateTimeOffset.UtcNow Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> * Add DataContent handling via temp files and attachments Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> * Fix formatting: remove extra indentation, simplify Path references, remove unused using Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> * Refactor: extract helper methods to reduce duplication in DataContent handling Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> * Updated sample and session config mapping * Added instructions parameter * Updated README * Address PR feedback: reorder params, optimize dictionary, update prefix, remove InternalsVisibleTo, update sample prompts, add defaults Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> * Remove StreamJsonRpc reference from sample project Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> * Fix parameter ordering: tools now after description, rename to s_mediaTypeExtensions, simplify extension logic, update prompts, fix test expectations Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> * Fix streaming prompt: change Python to C# for Fibonacci example Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> * Handle all SDK events, add UsageContent support, fix model name, remove AutoStart, add using for Channels Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> * Resolved build errors * Addressed comments * Small fix * Addressed comment * Small fix * Addressed comments * Added integration tests * Small update --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: westey-m <164392973+westey-m@users.noreply.github.com> Co-authored-by: Dmytro Struk <13853051+dmytrostruk@users.noreply.github.com> Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com>
89 lines
2.6 KiB
C#
89 lines
2.6 KiB
C#
// Copyright (c) Microsoft. All rights reserved.
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using GitHub.Copilot.SDK;
|
|
using Microsoft.Extensions.AI;
|
|
|
|
namespace Microsoft.Agents.AI.GithubCopilot.UnitTests;
|
|
|
|
/// <summary>
|
|
/// Unit tests for the <see cref="CopilotClientExtensions"/> class.
|
|
/// </summary>
|
|
public sealed class CopilotClientExtensionsTests
|
|
{
|
|
[Fact]
|
|
public void AsAIAgent_WithAllParameters_ReturnsGithubCopilotAgentWithSpecifiedProperties()
|
|
{
|
|
// Arrange
|
|
CopilotClient copilotClient = new(new CopilotClientOptions { AutoStart = false });
|
|
|
|
const string TestId = "test-agent-id";
|
|
const string TestName = "Test Agent";
|
|
const string TestDescription = "This is a test agent description";
|
|
|
|
// Act
|
|
var agent = copilotClient.AsAIAgent(ownsClient: false, id: TestId, name: TestName, description: TestDescription, tools: null);
|
|
|
|
// Assert
|
|
Assert.NotNull(agent);
|
|
Assert.IsType<GithubCopilotAgent>(agent);
|
|
Assert.Equal(TestId, agent.Id);
|
|
Assert.Equal(TestName, agent.Name);
|
|
Assert.Equal(TestDescription, agent.Description);
|
|
}
|
|
|
|
[Fact]
|
|
public void AsAIAgent_WithMinimalParameters_ReturnsGithubCopilotAgent()
|
|
{
|
|
// Arrange
|
|
CopilotClient copilotClient = new(new CopilotClientOptions { AutoStart = false });
|
|
|
|
// Act
|
|
var agent = copilotClient.AsAIAgent(ownsClient: false, tools: null);
|
|
|
|
// Assert
|
|
Assert.NotNull(agent);
|
|
Assert.IsType<GithubCopilotAgent>(agent);
|
|
}
|
|
|
|
[Fact]
|
|
public void AsAIAgent_WithNullClient_ThrowsArgumentNullException()
|
|
{
|
|
// Arrange
|
|
CopilotClient? copilotClient = null;
|
|
|
|
// Act & Assert
|
|
Assert.Throws<ArgumentNullException>(() => copilotClient!.AsAIAgent(sessionConfig: null));
|
|
}
|
|
|
|
[Fact]
|
|
public void AsAIAgent_WithOwnsClient_ReturnsAgentThatOwnsClient()
|
|
{
|
|
// Arrange
|
|
CopilotClient copilotClient = new(new CopilotClientOptions { AutoStart = false });
|
|
|
|
// Act
|
|
var agent = copilotClient.AsAIAgent(ownsClient: true, tools: null);
|
|
|
|
// Assert
|
|
Assert.NotNull(agent);
|
|
Assert.IsType<GithubCopilotAgent>(agent);
|
|
}
|
|
|
|
[Fact]
|
|
public void AsAIAgent_WithTools_ReturnsAgentWithTools()
|
|
{
|
|
// Arrange
|
|
CopilotClient copilotClient = new(new CopilotClientOptions { AutoStart = false });
|
|
List<AITool> tools = [AIFunctionFactory.Create(() => "test", "TestFunc", "Test function")];
|
|
|
|
// Act
|
|
var agent = copilotClient.AsAIAgent(tools: tools);
|
|
|
|
// Assert
|
|
Assert.NotNull(agent);
|
|
Assert.IsType<GithubCopilotAgent>(agent);
|
|
}
|
|
}
|