a2aproject / a2aproject/a2a-dotnet
Refactor agent method implementations to allow extension and custom methods
- 主要言語
- C#
- スター
- 262
- フォーク
- 64
- 平均マージ
- 5日 2時間
- マージ済み PR(30日)
- 31
説明
## Description
The [3.5. Method Mapping and Naming Conventions](https://a2a-protocol.org/latest/specification/#35-method-mapping-and-naming-conventions) section of the specification defines conventions for JSON-RPC/gRPC/REST methods mapping and defines existence of custom or extensions methods.
Currently, the handlers for the same methods for different transports are implemented on different places taking information from ad-hoc source locations and custom or extension methods are not supported, see [JSON-RPC server implementation](https://github.com/a2aproject/a2a-dotnet/blob/f2856b721df64b01ac7b2a5852956ce96c58104e/src/A2A.AspNetCore/A2AJsonRpcProcessor.cs#L81) vs. [JSON-RPC client implementation](https://github.com/a2aproject/a2a-dotnet/blob/f2856b721df64b01ac7b2a5852956ce96c58104e/src/A2A/Client/A2AClient.cs#L164) vs. [REST implementation](https://github.com/a2aproject/a2a-dotnet/blob/f2856b721df64b01ac7b2a5852956ce96c58104e/src/A2A.AspNetCore/A2AEndpointRouteBuilderExtensions.cs#L77). gRPC method handlers does not seem to be implemented either?
Within this task, propose a way how to abstract all information needed to serve and handle requests to agent methods (including custom or extension ones) for all supported transports so adding a new method will be matter of deriving single abstract class and its registration without the necessity of changing transport-specific handlers implementations on multiple places.
NOTE: [Command](https://www.geeksforgeeks.org/system-design/command-pattern/) or similar design-pattern can be utilized for this.
NOTE: Adding support for custom or extension methods might involve adding a new method to [A2AEndpointRouteBuilderExtensions.cs](https://github.com/a2aproject/a2a-dotnet/blob/f2856b721df64b01ac7b2a5852956ce96c58104e/src/A2A.AspNetCore/A2AEndpointRouteBuilderExtensions.cs) or adding a new parameter to [A2AEndpointRouteBuilderExtensions.MapA2A()](https://github.com/a2aproject/a2a-dotnet/blob/f2856b721df64b01ac7b2a5852956ce96c58104e/src/A2A.AspNetCore/A2AEndpointRouteBuilderExtensions.cs#L29) that will allow defining the custom methods. Alternatively, similar concept as [TaskManager](https://github.com/a2aproject/a2a-dotnet/blob/f2856b721df64b01ac7b2a5852956ce96c58104e/src/A2A/Server/TaskManager.cs#L15) can be introduced to manage custom methods implementations.
## Motivation
- Reduce code duplication and improve architecture of the library (open-close principle).
- Enable user-defined custom or extensions methods implemented using the same mechanisms as built-in methods are.
コントリビューションガイド
評価
この issue はまだ評価されていません。