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>
52 lines
1.5 KiB
C#
52 lines
1.5 KiB
C#
// Copyright (c) Microsoft. All rights reserved.
|
|
|
|
// This sample shows how to create a GitHub Copilot agent with shell command permissions.
|
|
|
|
using GitHub.Copilot.SDK;
|
|
using Microsoft.Agents.AI;
|
|
|
|
// Permission handler that prompts the user for approval
|
|
static Task<PermissionRequestResult> PromptPermission(PermissionRequest request, PermissionInvocation invocation)
|
|
{
|
|
Console.WriteLine($"\n[Permission Request: {request.Kind}]");
|
|
Console.Write("Approve? (y/n): ");
|
|
|
|
string? input = Console.ReadLine()?.Trim().ToUpperInvariant();
|
|
string kind = input is "Y" or "YES" ? "approved" : "denied-interactively-by-user";
|
|
|
|
return Task.FromResult(new PermissionRequestResult { Kind = kind });
|
|
}
|
|
|
|
// Create and start a Copilot client
|
|
await using CopilotClient copilotClient = new();
|
|
await copilotClient.StartAsync();
|
|
|
|
// Create an agent with a session config that enables permission handling
|
|
SessionConfig sessionConfig = new()
|
|
{
|
|
OnPermissionRequest = PromptPermission,
|
|
};
|
|
|
|
AIAgent agent = copilotClient.AsAIAgent(sessionConfig, ownsClient: true);
|
|
|
|
// Toggle between streaming and non-streaming modes
|
|
bool useStreaming = true;
|
|
|
|
string prompt = "List all files in the current directory";
|
|
Console.WriteLine($"User: {prompt}\n");
|
|
|
|
if (useStreaming)
|
|
{
|
|
await foreach (AgentResponseUpdate update in agent.RunStreamingAsync(prompt))
|
|
{
|
|
Console.Write(update);
|
|
}
|
|
|
|
Console.WriteLine();
|
|
}
|
|
else
|
|
{
|
|
AgentResponse response = await agent.RunAsync(prompt);
|
|
Console.WriteLine(response);
|
|
}
|