a2aproject / a2aproject/a2a-dotnet
Refactor agent method implementations to allow extension and custom methods
- 主要语言
- C#
- 星标
- 262
- 派生
- 64
- 平均合并
- 5 天 2 小时
- 30 天内合并 PR
- 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.
贡献指南
调研方向
Examine the current method handler implementations in A2AJsonRpcProcessor.cs, A2AClient.cs, and A2AEndpointRouteBuilderExtensions.cs. Understand the Command pattern and how it could abstract method information. Investigate the TaskManager class as a potential model. The goal is to design a unified abstraction that allows new methods via a single class derivation, without modifying transport-specific handlers.
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- csharp, grpc, json
- 领域
- api, backend, devtools
- Issue 类型
- 重构
- 难度
- 5/5
- 预计耗时
- 一周以上
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 25/100