-
Notifications
You must be signed in to change notification settings - Fork 57
Open
Description
If we take the sample from the .NET README and turn it into a File Based app it errors due to the way the JSON serializer is configured on the RCP connection:
Unhandled exception. System.Text.Json.JsonException: An error occured during serialization.
---> System.InvalidOperationException: Reflection-based serialization has been disabled for this application. Either use the source generator APIs or explicitly configure the 'JsonSerializerOptions.TypeInfoResolver' property.
at System.Text.Json.ThrowHelper.ThrowInvalidOperationException_JsonSerializerIsReflectionDisabled()
at System.Text.Json.JsonSerializerOptions.ConfigureForJsonSerializer()
at System.Text.Json.JsonSerializer.GetTypeInfo(JsonSerializerOptions options, Type inputType)
at System.Text.Json.JsonSerializer.GetTypeInfo[T](JsonSerializerOptions options)
at StreamJsonRpc.SystemTextJsonFormatter.<Serialize>g__WriteUserData|17_5(Object value, Type declaredType, <>c__DisplayClass17_0&, <>c__DisplayClass17_1&)
at StreamJsonRpc.SystemTextJsonFormatter.<Serialize>g__WriteArguments|17_2(JsonRpcRequest request, <>c__DisplayClass17_0&, <>c__DisplayClass17_1&)
at StreamJsonRpc.SystemTextJsonFormatter.Serialize(IBufferWriter`1 bufferWriter, JsonRpcMessage message)
--- End of inner exception stack trace ---
at StreamJsonRpc.SystemTextJsonFormatter.Serialize(IBufferWriter`1 bufferWriter, JsonRpcMessage message)
at StreamJsonRpc.HeaderDelimitedMessageHandler.Write(JsonRpcMessage content, CancellationToken cancellationToken)
at StreamJsonRpc.PipeMessageHandler.WriteCoreAsync(JsonRpcMessage content, CancellationToken cancellationToken)
at StreamJsonRpc.MessageHandlerBase.WriteAsync(JsonRpcMessage content, CancellationToken cancellationToken)
at StreamJsonRpc.JsonRpc.SendAsync(JsonRpcMessage message, CancellationToken cancellationToken)
at StreamJsonRpc.JsonRpc.InvokeCoreAsync(JsonRpcRequest request, Type expectedResultType, CancellationToken cancellationToken)
at StreamJsonRpc.JsonRpc.InvokeCoreAsync[TResult](RequestId id, String targetName, IReadOnlyList`1 arguments, IReadOnlyList`1 positionalArgumentDeclaredTypes, IReadOnlyDictionary`2 namedArgumentDeclaredTypes, CancellationToken cancellationToken, Boolean isParameterObject)
at GitHub.Copilot.SDK.CopilotClient.VerifyProtocolVersionAsync(Connection connection, CancellationToken cancellationToken)
at GitHub.Copilot.SDK.CopilotClient.<StartAsync>g__StartCoreAsync|9_0(CancellationToken ct)
at GitHub.Copilot.SDK.CopilotClient.CleanupConnectionAsync(List`1 errors)
at GitHub.Copilot.SDK.CopilotClient.ForceStopAsync()
at GitHub.Copilot.SDK.CopilotClient.DisposeAsync()
at Program.<Main>$(String[] args) in D:\tmp\copilot-sdk-playground.cs:line 32
at Program.<Main>(String[] args)
The only change to the sample from the README is to add the package directive:
#:package GitHub.Copilot.SDK@*
using GitHub.Copilot.SDK;
// Create and start client
await using var client = new CopilotClient();
await client.StartAsync();
// Create a session
await using var session = await client.CreateSessionAsync(new SessionConfig
{
Model = "gpt-5"
});
// Wait for response using session.idle event
var done = new TaskCompletionSource();
session.On(evt =>
{
if (evt is AssistantMessageEvent msg)
{
Console.WriteLine(msg.Data.Content);
}
else if (evt is SessionIdleEvent)
{
done.SetResult();
}
});
// Send a message and wait for completion
await session.SendAsync(new MessageOptions { Prompt = "What is 2+2?" });
await done.Task;Metadata
Metadata
Assignees
Labels
No labels