diff --git a/VolcanicAgenticCore.slnx b/VolcanicAgenticCore.slnx index 7231bbf..b66c906 100644 --- a/VolcanicAgenticCore.slnx +++ b/VolcanicAgenticCore.slnx @@ -1,5 +1,6 @@ + diff --git a/extensions/Volcanic.AgenticCore.Extensions.A2A/A2AClientSettings.cs b/extensions/Volcanic.AgenticCore.Extensions.A2A/A2AClientSettings.cs new file mode 100644 index 0000000..9386360 --- /dev/null +++ b/extensions/Volcanic.AgenticCore.Extensions.A2A/A2AClientSettings.cs @@ -0,0 +1,23 @@ +namespace Volcanic.AgenticCore.Extensions.A2A; + +/// Section A2AClient (env A2AClient__…). Named so it doesn't clash with the SDK's A2AClientOptions. +public sealed class A2AClientSettings +{ + public const string SectionName = "A2AClient"; + + /// Off by default: no a2a tool, no watches. Independent of the server's A2A:Enabled. + public bool Enabled { get; set; } + + /// How long send waits for a result before a watch takes over. 0 hands over at once. + public int WaitSeconds { get; set; } = 60; + + public TimeSpan WatchTimeout { get; set; } = TimeSpan.FromDays(1); + public int CardTimeoutSeconds { get; set; } = 10; + public long MaxFileBytes { get; set; } = 10 * 1024 * 1024; + + /// + /// Our public base URL for push webhooks ({PushBaseUrl}/a2a/push/{watchId}). Set by the host from the server's + /// A2A:PublicUrl only while the server (and so the push receiver) is on; null = subscribe or poll. + /// + public string? PushBaseUrl { get; set; } +} diff --git a/extensions/Volcanic.AgenticCore.Extensions.A2A/Volcanic.AgenticCore.Extensions.A2A.csproj b/extensions/Volcanic.AgenticCore.Extensions.A2A/Volcanic.AgenticCore.Extensions.A2A.csproj new file mode 100644 index 0000000..63e0d6f --- /dev/null +++ b/extensions/Volcanic.AgenticCore.Extensions.A2A/Volcanic.AgenticCore.Extensions.A2A.csproj @@ -0,0 +1,14 @@ + + + A2A client extension: the a2a tool, remote agents in agents.json, watches for long tasks. + + + + + + + + + + + diff --git a/src/Volcanic.AgenticCore.A2A.Server/Volcanic.AgenticCore.A2A.Server.csproj b/src/Volcanic.AgenticCore.A2A.Server/Volcanic.AgenticCore.A2A.Server.csproj index 3c88e3a..4ba06f7 100644 --- a/src/Volcanic.AgenticCore.A2A.Server/Volcanic.AgenticCore.A2A.Server.csproj +++ b/src/Volcanic.AgenticCore.A2A.Server/Volcanic.AgenticCore.A2A.Server.csproj @@ -9,6 +9,7 @@ + diff --git a/tests/Volcanic.AgenticCore.Extensions.Tests/A2A/A2AClientSettingsTests.cs b/tests/Volcanic.AgenticCore.Extensions.Tests/A2A/A2AClientSettingsTests.cs new file mode 100644 index 0000000..5bb1201 --- /dev/null +++ b/tests/Volcanic.AgenticCore.Extensions.Tests/A2A/A2AClientSettingsTests.cs @@ -0,0 +1,19 @@ +using Volcanic.AgenticCore.Extensions.A2A; + +namespace Volcanic.AgenticCore.Extensions.Tests.A2A; + +public class A2AClientSettingsTests +{ + [Fact] + public void Defaults_OffWithSpecValues() + { + var s = new A2AClientSettings(); + Assert.False(s.Enabled); + Assert.Equal(60, s.WaitSeconds); + Assert.Equal(TimeSpan.FromDays(1), s.WatchTimeout); + Assert.Equal(10, s.CardTimeoutSeconds); + Assert.Equal(10 * 1024 * 1024, s.MaxFileBytes); + Assert.Null(s.PushBaseUrl); + Assert.Equal("A2AClient", A2AClientSettings.SectionName); + } +} diff --git a/tests/Volcanic.AgenticCore.Extensions.Tests/Volcanic.AgenticCore.Extensions.Tests.csproj b/tests/Volcanic.AgenticCore.Extensions.Tests/Volcanic.AgenticCore.Extensions.Tests.csproj index 2890f7e..5bdc248 100644 --- a/tests/Volcanic.AgenticCore.Extensions.Tests/Volcanic.AgenticCore.Extensions.Tests.csproj +++ b/tests/Volcanic.AgenticCore.Extensions.Tests/Volcanic.AgenticCore.Extensions.Tests.csproj @@ -11,6 +11,8 @@ + + @@ -18,6 +20,8 @@ + + @@ -27,4 +31,12 @@ + + + + + + +