diff --git a/A2A.slnx b/A2A.slnx index 171c811..b95a4e4 100644 --- a/A2A.slnx +++ b/A2A.slnx @@ -31,6 +31,7 @@ + diff --git a/src/A2A.Client.Abstractions/A2A.Client.Abstractions.csproj b/src/A2A.Client.Abstractions/A2A.Client.Abstractions.csproj index 5d56956..51c3c9b 100644 --- a/src/A2A.Client.Abstractions/A2A.Client.Abstractions.csproj +++ b/src/A2A.Client.Abstractions/A2A.Client.Abstractions.csproj @@ -5,7 +5,7 @@ enable enable A2A.Client - 0.15.0 + 0.16.0 $(VersionPrefix) $(VersionPrefix) en diff --git a/src/A2A.Client.Abstractions/IA2AClient.cs b/src/A2A.Client.Abstractions/IA2AClient.cs index 92033b7..f17861f 100644 --- a/src/A2A.Client.Abstractions/IA2AClient.cs +++ b/src/A2A.Client.Abstractions/IA2AClient.cs @@ -20,6 +20,18 @@ public interface IA2AClient : IA2AProtocolApi { + /// + /// Activates the A2A extension identified by the given URI. + /// + /// The URI of the A2A extension to activate. + /// The configured . + IA2AClient ActivateExtension(Uri uri); + /// + /// Deactivates the A2A extension identified by the given URI. + /// + /// The URI of the A2A extension to deactivate. + /// The configured . + IA2AClient DeactivateExtension(Uri uri); } diff --git a/src/A2A.Client.Abstractions/IA2AClientBuilder.cs b/src/A2A.Client.Abstractions/IA2AClientBuilder.cs index 85ab490..6d466bb 100644 --- a/src/A2A.Client.Abstractions/IA2AClientBuilder.cs +++ b/src/A2A.Client.Abstractions/IA2AClientBuilder.cs @@ -35,6 +35,7 @@ IA2AClientBuilder UseTransport() /// /// Builds the configured . /// - void Build(); + /// A new . + IA2AClient Build(); } diff --git a/src/A2A.Client.Abstractions/IA2AClientTransport.cs b/src/A2A.Client.Abstractions/IA2AClientTransport.cs index c63980f..fea3395 100644 --- a/src/A2A.Client.Abstractions/IA2AClientTransport.cs +++ b/src/A2A.Client.Abstractions/IA2AClientTransport.cs @@ -20,6 +20,16 @@ public interface IA2AClientTransport : IA2AProtocolApi { + /// + /// Activates the A2A extension identified by the given URI. + /// + /// The URI of the A2A extension to activate. + void ActivateExtension(Uri uri); + /// + /// Deactivates the A2A extension identified by the given URI. + /// + /// The URI of the A2A extension to deactivate. + void DeactivateExtension(Uri uri); } \ No newline at end of file diff --git a/src/A2A.Client.Transports.Grpc/A2A.Client.Transports.Grpc.csproj b/src/A2A.Client.Transports.Grpc/A2A.Client.Transports.Grpc.csproj index 191cee4..ddcb649 100644 --- a/src/A2A.Client.Transports.Grpc/A2A.Client.Transports.Grpc.csproj +++ b/src/A2A.Client.Transports.Grpc/A2A.Client.Transports.Grpc.csproj @@ -5,7 +5,7 @@ enable enable A2A.Client.Transports - 0.15.0 + 0.16.0 $(VersionPrefix) $(VersionPrefix) en diff --git a/src/A2A.Client.Transports.Grpc/A2AGrpcClientTransport.cs b/src/A2A.Client.Transports.Grpc/A2AGrpcClientTransport.cs index 7f30eca..07621ae 100644 --- a/src/A2A.Client.Transports.Grpc/A2AGrpcClientTransport.cs +++ b/src/A2A.Client.Transports.Grpc/A2AGrpcClientTransport.cs @@ -12,6 +12,7 @@ // limitations under the License. using Grpc.Core; +using System.Collections.Generic; using Task = System.Threading.Tasks.Task; namespace A2A.Client.Transports; @@ -24,18 +25,27 @@ public sealed class A2AGrpcClientTransport(A2a.V1.A2AService.A2AServiceClient gr : IA2AClientTransport { + const string VersionMetadataKey = "A2A-Version"; + const string ExtensionMetadataKey = "A2A-Extensions"; + + ListValue? extensions; + /// public async Task SendMessageAsync(Models.SendMessageRequest request, CancellationToken cancellationToken = default) { ArgumentNullException.ThrowIfNull(request); - return A2AGrpcMapper.MapFromGrpc(await grpcClient.SendMessageAsync(A2AGrpcMapper.MapToGrpc(request), cancellationToken: cancellationToken).ConfigureAwait(false)); + var grpcRequest = A2AGrpcMapper.MapToGrpc(request); + SetRequestMetadata(grpcRequest.Metadata); + return A2AGrpcMapper.MapFromGrpc(await grpcClient.SendMessageAsync(grpcRequest, cancellationToken: cancellationToken).ConfigureAwait(false)); } /// public async IAsyncEnumerable SendStreamingMessageAsync(Models.SendMessageRequest request, [EnumeratorCancellation] CancellationToken cancellationToken = default) { ArgumentNullException.ThrowIfNull(request); - var result = grpcClient.SendStreamingMessage(A2AGrpcMapper.MapToGrpc(request), cancellationToken: cancellationToken); + var grpcRequest = A2AGrpcMapper.MapToGrpc(request); + SetRequestMetadata(grpcRequest.Metadata); + var result = grpcClient.SendStreamingMessage(grpcRequest, cancellationToken: cancellationToken); await foreach (var streamResponse in result.ResponseStream.ReadAllAsync(cancellationToken).ConfigureAwait(false)) { if (streamResponse is null) continue; @@ -142,4 +152,37 @@ await grpcClient.DeleteTaskPushNotificationConfigAsync(new() }, cancellationToken: cancellationToken).ConfigureAwait(false); } + void SetRequestMetadata(Struct metadata) + { + metadata.Fields[VersionMetadataKey] = Value.ForString(A2AProtocolVersion.Latest); + if (extensions is not null) metadata.Fields[ExtensionMetadataKey] = new() + { + ListValue = extensions + }; + } + + /// + public void ActivateExtension(Uri uri) + { + ArgumentNullException.ThrowIfNull(uri); + var value = uri.OriginalString; + extensions ??= new(); + if (extensions.Values.Any(v => v.StringValue.Equals(value, StringComparison.OrdinalIgnoreCase))) return; + extensions.Values.Add(new Value() + { + StringValue = value + }); + } + + /// + public void DeactivateExtension(Uri uri) + { + ArgumentNullException.ThrowIfNull(uri); + if (extensions is null) return; + var value = uri.OriginalString; + var toRemove = extensions.Values.FirstOrDefault(v => v.StringValue.Equals(value, StringComparison.OrdinalIgnoreCase)); + if (toRemove is null) return; + extensions.Values.Remove(toRemove); + } + } diff --git a/src/A2A.Client.Transports.Http/A2A.Client.Transports.Http.csproj b/src/A2A.Client.Transports.Http/A2A.Client.Transports.Http.csproj index 8589b5d..2a01eeb 100644 --- a/src/A2A.Client.Transports.Http/A2A.Client.Transports.Http.csproj +++ b/src/A2A.Client.Transports.Http/A2A.Client.Transports.Http.csproj @@ -5,7 +5,7 @@ enable enable A2A.Client.Transports - 0.15.0 + 0.16.0 $(VersionPrefix) $(VersionPrefix) en diff --git a/src/A2A.Client.Transports.Http/A2AHttpClientTransport.cs b/src/A2A.Client.Transports.Http/A2AHttpClientTransport.cs index 18be3ba..6d62512 100644 --- a/src/A2A.Client.Transports.Http/A2AHttpClientTransport.cs +++ b/src/A2A.Client.Transports.Http/A2AHttpClientTransport.cs @@ -24,6 +24,8 @@ public sealed class A2AHttpClientTransport(HttpClient httpClient) : IA2AClientTransport { + const string ExtensionHeaderName = "A2A-Extensions"; + /// public async Task SendMessageAsync(SendMessageRequest request, CancellationToken cancellationToken = default) { @@ -169,4 +171,25 @@ public async Task DeletePushNotificationConfigAsync(string taskId, string config } + /// + public void ActivateExtension(Uri uri) + { + ArgumentNullException.ThrowIfNull(uri); + var value = uri.OriginalString; + if (httpClient.DefaultRequestHeaders.TryGetValues(ExtensionHeaderName, out var existing) && existing.Contains(value, StringComparer.OrdinalIgnoreCase)) return; + httpClient.DefaultRequestHeaders.TryAddWithoutValidation(ExtensionHeaderName, value); + } + + /// + public void DeactivateExtension(Uri uri) + { + ArgumentNullException.ThrowIfNull(uri); + var value = uri.OriginalString; + if (!httpClient.DefaultRequestHeaders.TryGetValues(ExtensionHeaderName, out var existing)) return; + var extensions = existing.Where(v => !string.Equals(v, value, StringComparison.OrdinalIgnoreCase)).ToArray(); + httpClient.DefaultRequestHeaders.Remove(ExtensionHeaderName); + if (extensions.Length == 0) return; + foreach (var extension in extensions) httpClient.DefaultRequestHeaders.TryAddWithoutValidation(ExtensionHeaderName, extension); + } + } diff --git a/src/A2A.Client.Transports.Http/Extensions/A2AClientBuilderExtensions.cs b/src/A2A.Client.Transports.Http/Extensions/A2AClientBuilderExtensions.cs index c767104..32ec572 100644 --- a/src/A2A.Client.Transports.Http/Extensions/A2AClientBuilderExtensions.cs +++ b/src/A2A.Client.Transports.Http/Extensions/A2AClientBuilderExtensions.cs @@ -33,6 +33,7 @@ public static IA2AClientBuilder UseHttpTransport(this IA2AClientBuilder builder, builder.Services.AddHttpClient(httpClient => { httpClient.BaseAddress = baseAddress; + httpClient.DefaultRequestHeaders.Add("A2A-Version", A2AProtocolVersion.Latest); }); builder.Services.AddSingleton(provider => provider.GetRequiredService()); return builder.UseTransport(); diff --git a/src/A2A.Client.Transports.JsonRpc/A2A.Client.Transports.JsonRpc.csproj b/src/A2A.Client.Transports.JsonRpc/A2A.Client.Transports.JsonRpc.csproj index 31acc63..52ef979 100644 --- a/src/A2A.Client.Transports.JsonRpc/A2A.Client.Transports.JsonRpc.csproj +++ b/src/A2A.Client.Transports.JsonRpc/A2A.Client.Transports.JsonRpc.csproj @@ -5,7 +5,7 @@ enable enable A2A.Client.Transports - 0.15.0 + 0.16.0 $(VersionPrefix) $(VersionPrefix) en diff --git a/src/A2A.Client.Transports.JsonRpc/A2AJsonRpcClientTransport.cs b/src/A2A.Client.Transports.JsonRpc/A2AJsonRpcClientTransport.cs index 6069a4e..d2f0fb3 100644 --- a/src/A2A.Client.Transports.JsonRpc/A2AJsonRpcClientTransport.cs +++ b/src/A2A.Client.Transports.JsonRpc/A2AJsonRpcClientTransport.cs @@ -24,6 +24,8 @@ public sealed class A2AJsonRpcClientTransport(HttpClient httpClient) : IA2AClientTransport { + const string ExtensionHeaderName = "A2A-Extensions"; + /// public async Task SendMessageAsync(SendMessageRequest request, CancellationToken cancellationToken = default) { @@ -257,4 +259,25 @@ public async Task DeletePushNotificationConfigAsync(string taskId, string config if (rpcResponse.Error is not null) throw new Exception($"An error occurred while processing the JSON-RPC request (error code: {rpcResponse.Error.Code}): {rpcResponse.Error.Message})."); } + /// + public void ActivateExtension(Uri uri) + { + ArgumentNullException.ThrowIfNull(uri); + var value = uri.OriginalString; + if (httpClient.DefaultRequestHeaders.TryGetValues(ExtensionHeaderName, out var existing) && existing.Contains(value, StringComparer.OrdinalIgnoreCase)) return; + httpClient.DefaultRequestHeaders.TryAddWithoutValidation(ExtensionHeaderName, value); + } + + /// + public void DeactivateExtension(Uri uri) + { + ArgumentNullException.ThrowIfNull(uri); + var value = uri.OriginalString; + if (!httpClient.DefaultRequestHeaders.TryGetValues(ExtensionHeaderName, out var existing)) return; + var extensions = existing.Where(v => !string.Equals(v, value, StringComparison.OrdinalIgnoreCase)).ToArray(); + httpClient.DefaultRequestHeaders.Remove(ExtensionHeaderName); + if (extensions.Length == 0) return; + foreach (var extension in extensions) httpClient.DefaultRequestHeaders.TryAddWithoutValidation(ExtensionHeaderName, extension); + } + } diff --git a/src/A2A.Client.Transports.JsonRpc/Extensions/A2AClientBuilderExtensions.cs b/src/A2A.Client.Transports.JsonRpc/Extensions/A2AClientBuilderExtensions.cs index ccd153a..ade663f 100644 --- a/src/A2A.Client.Transports.JsonRpc/Extensions/A2AClientBuilderExtensions.cs +++ b/src/A2A.Client.Transports.JsonRpc/Extensions/A2AClientBuilderExtensions.cs @@ -33,6 +33,7 @@ public static IA2AClientBuilder UseJsonRpcTransport(this IA2AClientBuilder build builder.Services.AddHttpClient(httpClient => { httpClient.BaseAddress = baseAddress; + httpClient.DefaultRequestHeaders.Add("A2A-Version", A2AProtocolVersion.Latest); }); builder.Services.AddSingleton(provider => provider.GetRequiredService()); return builder.UseTransport(); diff --git a/src/A2A.Client/A2A.Client.csproj b/src/A2A.Client/A2A.Client.csproj index 30a6176..5a111ef 100644 --- a/src/A2A.Client/A2A.Client.csproj +++ b/src/A2A.Client/A2A.Client.csproj @@ -5,7 +5,7 @@ enable enable A2A.Client - 0.15.0 + 0.16.0 $(VersionPrefix) $(VersionPrefix) en diff --git a/src/A2A.Client/A2AClient.cs b/src/A2A.Client/A2AClient.cs index 702bc7b..a562f45 100644 --- a/src/A2A.Client/A2AClient.cs +++ b/src/A2A.Client/A2AClient.cs @@ -11,7 +11,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -using A2A.Models; using Task = System.Threading.Tasks.Task; namespace A2A.Client; @@ -54,4 +53,20 @@ public sealed class A2AClient(IA2AClientTransport transport) /// public Task DeletePushNotificationConfigAsync(string taskId, string configId, string? tenant = null, CancellationToken cancellationToken = default) => transport.DeletePushNotificationConfigAsync(taskId, configId, tenant, cancellationToken); + /// + public IA2AClient ActivateExtension(Uri uri) + { + ArgumentNullException.ThrowIfNull(uri); + transport.ActivateExtension(uri); + return this; + } + + /// + public IA2AClient DeactivateExtension(Uri uri) + { + ArgumentNullException.ThrowIfNull(uri); + transport.DeactivateExtension(uri); + return this; + } + } diff --git a/src/A2A.Client/A2AClientBuilder.cs b/src/A2A.Client/A2AClientBuilder.cs index dd0ca28..12cd66b 100644 --- a/src/A2A.Client/A2AClientBuilder.cs +++ b/src/A2A.Client/A2AClientBuilder.cs @@ -16,15 +16,20 @@ namespace A2A.Client; /// /// Represents the default implementation of the interface. /// -/// The to configure. -public sealed class A2AClientBuilder(IServiceCollection services) +public sealed class A2AClientBuilder : IA2AClientBuilder { Type? transportType; + internal A2AClientBuilder(IServiceCollection services) + { + Services = services; + Services.AddSingleton(); + } + /// - public IServiceCollection Services { get; } = services; + public IServiceCollection Services { get; } /// public IA2AClientBuilder UseTransport() @@ -35,10 +40,16 @@ public IA2AClientBuilder UseTransport() } /// - public void Build() + public IA2AClient Build() { if (transportType is null) throw new InvalidOperationException("The transport type must be specified before building the client."); - Services.AddSingleton(); + return Services.BuildServiceProvider().GetRequiredService(); } + /// + /// Creates a new . + /// + /// A new . + public static IA2AClientBuilder Create() => new A2AClientBuilder(new ServiceCollection()); + } \ No newline at end of file diff --git a/src/A2A.Client/Extensions/A2AClientServiceCollectionExtensions.cs b/src/A2A.Client/Extensions/A2AClientServiceCollectionExtensions.cs index 91cec92..fd11f86 100644 --- a/src/A2A.Client/Extensions/A2AClientServiceCollectionExtensions.cs +++ b/src/A2A.Client/Extensions/A2AClientServiceCollectionExtensions.cs @@ -30,8 +30,6 @@ public static IServiceCollection AddA2AClient(this IServiceCollection services, { var builder = new A2AClientBuilder(services); setup.Invoke(builder); - builder.Build(); - services.AddSingleton(); return services; } diff --git a/src/A2A.Core.JsonRpc/A2A.Core.JsonRpc.csproj b/src/A2A.Core.JsonRpc/A2A.Core.JsonRpc.csproj index 820d9d7..df266a5 100644 --- a/src/A2A.Core.JsonRpc/A2A.Core.JsonRpc.csproj +++ b/src/A2A.Core.JsonRpc/A2A.Core.JsonRpc.csproj @@ -5,7 +5,7 @@ enable enable A2A - 0.15.0 + 0.16.0 $(VersionPrefix) $(VersionPrefix) en diff --git a/src/A2A.Core/A2A.Core.csproj b/src/A2A.Core/A2A.Core.csproj index a07e281..0d654cf 100644 --- a/src/A2A.Core/A2A.Core.csproj +++ b/src/A2A.Core/A2A.Core.csproj @@ -5,7 +5,7 @@ enable enable A2A - 0.15.0 + 0.16.0 $(VersionPrefix) $(VersionPrefix) en diff --git a/src/A2A.Core/A2AProtocolVersion.cs b/src/A2A.Core/A2AProtocolVersion.cs new file mode 100644 index 0000000..d700012 --- /dev/null +++ b/src/A2A.Core/A2AProtocolVersion.cs @@ -0,0 +1,27 @@ +// Copyright © 2025-Present the a2a-net Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"), +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +namespace A2A; + +/// +/// Enumerates the supported A2A protocol versions. +/// +public static class A2AProtocolVersion +{ + + /// + /// Gets the latest supported A2A protocol version. + /// + public const string Latest = "0.3"; + +} diff --git a/src/A2A.Extensions.A2UI/A2A.Extensions.A2UI.csproj b/src/A2A.Extensions.A2UI/A2A.Extensions.A2UI.csproj new file mode 100644 index 0000000..1e7bb38 --- /dev/null +++ b/src/A2A.Extensions.A2UI/A2A.Extensions.A2UI.csproj @@ -0,0 +1,37 @@ + + + + net10.0 + Library + enable + enable + A2A.Extensions + 0.16.0 + $(VersionPrefix) + $(VersionPrefix) + en + true + true + true + true + A2A-NET A2UI Extension + The A2UI extension. + a2a-net.Extensions.A2UI + a2a;extensions:a2ui + true + Apache-2.0 + README.md + Copyright © 2025-Present the a2a-net Authors. All rights reserved. + https://github.com/neuroglia-io/a2a + https://github.com/neuroglia-io/a2a + git + embedded + + + + + True + \ + + + diff --git a/src/A2A.Extensions.A2UI/A2UIExtension.cs b/src/A2A.Extensions.A2UI/A2UIExtension.cs new file mode 100644 index 0000000..3fa07ef --- /dev/null +++ b/src/A2A.Extensions.A2UI/A2UIExtension.cs @@ -0,0 +1,66 @@ +// Copyright © 2025-Present the a2a-net Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"), +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +namespace A2A.Extensions; + +/// +/// Provides extension methods and related types for working with A2UI components and configuration. +/// +public static class A2UIExtension +{ + + /// + /// Gets the unique URI that identifies the A2UI extension. + /// + public static readonly Uri BaseUri = new("https://a2ui.org/a2a-extension/a2ui/"); + /// + /// Gets the current version string of the A2UI extension. + /// + public const string CurrentVersion = "v0.9"; + /// + /// Gets the unique URI that identifies the current version of the A2UI extension. + /// + public static readonly Uri Uri = GetUri(CurrentVersion); + + /// + /// Gets the unique URI that identifies a specific version of the A2UI extension. + /// + /// The version string of the A2UI extension. + /// An URI representing the specific version of the A2UI extension. + public static Uri GetUri(string version) => new(BaseUri, version); + + /// + /// Represents the parameters for configuring an A2UI extension. + /// + [Description("Represents the parameters for configuring an A2UI extension.")] + [DataContract] + public sealed record Parameters + { + + /// + /// Gets a collection of URIs pointing to a component catalog definition schema that the agent can generate. + /// + [Description("A collection of URIs pointing to a component catalog definition schema that the agent can generate.")] + [DataMember(Order = 1, Name = "supportedCatalogIds"), JsonPropertyOrder(1), JsonPropertyName("supportedCatalogIds")] + public IReadOnlyCollection? SupportedCatalogIds { get; init; } + + /// + /// Gets a boolean indicating whether the agent can accept inline component catalogs provided directly within requests. + /// + [Description("A boolean indicating whether the agent can accept inline component catalogs provided directly within requests.")] + [DataMember(Order = 2, Name = "acceptsInlineCatalogs"), JsonPropertyOrder(2), JsonPropertyName("acceptsInlineCatalogs")] + public bool? AcceptsInlineCatalogs { get; init; } + + } + +} \ No newline at end of file diff --git a/src/A2A.Extensions.A2UI/Usings.cs b/src/A2A.Extensions.A2UI/Usings.cs new file mode 100644 index 0000000..8597029 --- /dev/null +++ b/src/A2A.Extensions.A2UI/Usings.cs @@ -0,0 +1,16 @@ +// Copyright © 2025-Present the a2a-net Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"), +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +global using System.ComponentModel; +global using System.Runtime.Serialization; +global using System.Text.Json.Serialization; diff --git a/src/A2A.Server.Abstractions/A2A.Server.Abstractions.csproj b/src/A2A.Server.Abstractions/A2A.Server.Abstractions.csproj index 5b07a3c..bae9f46 100644 --- a/src/A2A.Server.Abstractions/A2A.Server.Abstractions.csproj +++ b/src/A2A.Server.Abstractions/A2A.Server.Abstractions.csproj @@ -6,7 +6,7 @@ enable enable A2A.Server - 0.15.0 + 0.16.0 $(VersionPrefix) $(VersionPrefix) en diff --git a/src/A2A.Server.AspNetCore/A2A.Server.csproj b/src/A2A.Server.AspNetCore/A2A.Server.csproj index aed90ec..2e406b2 100644 --- a/src/A2A.Server.AspNetCore/A2A.Server.csproj +++ b/src/A2A.Server.AspNetCore/A2A.Server.csproj @@ -6,7 +6,7 @@ enable enable A2A.Server - 0.15.0 + 0.16.0 $(VersionPrefix) $(VersionPrefix) en diff --git a/src/A2A.Server.Persistence.Memory/A2A.Server.Persistence.Memory.csproj b/src/A2A.Server.Persistence.Memory/A2A.Server.Persistence.Memory.csproj index dfa34ad..95f66d6 100644 --- a/src/A2A.Server.Persistence.Memory/A2A.Server.Persistence.Memory.csproj +++ b/src/A2A.Server.Persistence.Memory/A2A.Server.Persistence.Memory.csproj @@ -6,7 +6,7 @@ enable enable A2A.Server - 0.15.0 + 0.16.0 $(VersionPrefix) $(VersionPrefix) en diff --git a/src/A2A.Server.Persistence.Redis/A2A.Server.Persistence.Redis.csproj b/src/A2A.Server.Persistence.Redis/A2A.Server.Persistence.Redis.csproj index f34ef8e..8a2c261 100644 --- a/src/A2A.Server.Persistence.Redis/A2A.Server.Persistence.Redis.csproj +++ b/src/A2A.Server.Persistence.Redis/A2A.Server.Persistence.Redis.csproj @@ -6,7 +6,7 @@ enable enable A2A.Server - 0.15.0 + 0.16.0 $(VersionPrefix) $(VersionPrefix) en diff --git a/src/A2A.Server.Scheduling.Memory/A2A.Server.Scheduling.Memory.csproj b/src/A2A.Server.Scheduling.Memory/A2A.Server.Scheduling.Memory.csproj index 8fd5d23..1c9637f 100644 --- a/src/A2A.Server.Scheduling.Memory/A2A.Server.Scheduling.Memory.csproj +++ b/src/A2A.Server.Scheduling.Memory/A2A.Server.Scheduling.Memory.csproj @@ -6,7 +6,7 @@ enable enable A2A.Server - 0.15.0 + 0.16.0 $(VersionPrefix) $(VersionPrefix) en diff --git a/src/A2A.Server.Scheduling.Quartz/A2A.Server.Scheduling.Quartz.csproj b/src/A2A.Server.Scheduling.Quartz/A2A.Server.Scheduling.Quartz.csproj index f5fa208..ca9bd7f 100644 --- a/src/A2A.Server.Scheduling.Quartz/A2A.Server.Scheduling.Quartz.csproj +++ b/src/A2A.Server.Scheduling.Quartz/A2A.Server.Scheduling.Quartz.csproj @@ -6,7 +6,7 @@ enable enable A2A.Server - 0.15.0 + 0.16.0 $(VersionPrefix) $(VersionPrefix) en diff --git a/src/A2A.Server.Transports.Grpc/A2A.Server.Transports.Grpc.csproj b/src/A2A.Server.Transports.Grpc/A2A.Server.Transports.Grpc.csproj index df9b18d..be7a64f 100644 --- a/src/A2A.Server.Transports.Grpc/A2A.Server.Transports.Grpc.csproj +++ b/src/A2A.Server.Transports.Grpc/A2A.Server.Transports.Grpc.csproj @@ -6,7 +6,7 @@ enable enable A2A.Server.Transports - 0.15.0 + 0.16.0 $(VersionPrefix) $(VersionPrefix) en diff --git a/src/A2A.Server.Transports.Http/A2A.Server.Transports.Http.csproj b/src/A2A.Server.Transports.Http/A2A.Server.Transports.Http.csproj index 268e81e..e66d177 100644 --- a/src/A2A.Server.Transports.Http/A2A.Server.Transports.Http.csproj +++ b/src/A2A.Server.Transports.Http/A2A.Server.Transports.Http.csproj @@ -6,7 +6,7 @@ enable enable A2A.Server.Transports - 0.15.0 + 0.16.0 $(VersionPrefix) $(VersionPrefix) en diff --git a/src/A2A.Server.Transports.JsonRpc/A2A.Server.Transports.JsonRpc.csproj b/src/A2A.Server.Transports.JsonRpc/A2A.Server.Transports.JsonRpc.csproj index 911c32a..073bba3 100644 --- a/src/A2A.Server.Transports.JsonRpc/A2A.Server.Transports.JsonRpc.csproj +++ b/src/A2A.Server.Transports.JsonRpc/A2A.Server.Transports.JsonRpc.csproj @@ -6,7 +6,7 @@ enable enable A2A.Server.Transports - 0.15.0 + 0.16.0 $(VersionPrefix) $(VersionPrefix) en