-
Notifications
You must be signed in to change notification settings - Fork 105
feat: Implement the spec updates for v0.3.0 #212
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Summary of Changes
Hello @fjuma, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!
This pull request brings the A2A Java SDK into alignment with the recently released v0.3.0 specification. It introduces significant updates to the core data models, particularly enhancing the AgentCard structure with new fields like transport protocols and digital signatures. A key new feature is the implementation of the agent/getAuthenticatedExtendedCard API, enabling secure retrieval of extended agent metadata. Additionally, a new security scheme for mutual TLS is added, and various existing specification classes receive updated documentation and minor structural adjustments.
Highlights
- Core Spec Alignment: Updates the SDK to conform with the v0.3.0 A2A specification, introducing new data models and modifying existing ones.
- Authenticated Extended Agent Card API: Implements the new
agent/getAuthenticatedExtendedCardJSON-RPC method, allowing clients to retrieve an authenticated extended agent card, along with corresponding request, response, and error classes. - Agent Card Structure Enhancements: Modifies the
AgentCardto includepreferredTransport,additionalInterfaces, andsignatures, and renames the default agent card discovery path from/.well-known/agent.jsonto/.well-known/agent-card.json. New classesAgentCardSignatureandTransportProtocolare introduced. - New Security Scheme: Introduces
MutualTLSSecuritySchemeto support mTLS authentication, expanding the available security options. - Project Version Update: Bumps the project's parent and dependency versions to
0.3.0.Beta1-SNAPSHOTacross all modules.
Using Gemini Code Assist
The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.
Invoking Gemini
You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.
| Feature | Command | Description |
|---|---|---|
| Code Review | /gemini review |
Performs a code review for the current pull request in its current state. |
| Pull Request Summary | /gemini summary |
Provides a summary of the current pull request in its current state. |
| Comment | @gemini-code-assist | Responds in comments when explicitly tagged, both in issue comments and review comments. |
| Help | /gemini help |
Displays a list of available commands. |
Customization
To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.
Limitations & Feedback
Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments or fill out our survey to provide feedback.
You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.
Footnotes
-
Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution. ↩
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code Review
This pull request implements the v0.3.0 spec for the A2A protocol, introducing new spec classes and updating existing ones. The changes include updates to client, server implementations, spec definitions, and examples. The implementation is well-executed with diligent updates to tests. Minor issues related to correctness and maintainability have been identified.
| String httpResponseBody = sendPostRequest(request, authHeaders); | ||
| return unmarshalResponse(httpResponseBody, GET_AUTHENTICATED_AGENT_CARD_RESPONSE_REFERENCE); | ||
| } catch (IOException | InterruptedException e) { | ||
| throw new A2AServerException("Failed to get authenticated extended agent card: " + e, e.getCause()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The original exception e should be passed as the cause for the new A2AServerException, not e.getCause(). Using e.getCause() can lead to loss of important stack trace information if e itself is the root cause and has no further cause.
| throw new A2AServerException("Failed to get authenticated extended agent card: " + e, e.getCause()); | |
| throw new A2AServerException("Failed to get authenticated extended agent card: " + e, e); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed
| private static final TypeReference<SetTaskPushNotificationConfigResponse> SET_TASK_PUSH_NOTIFICATION_CONFIG_RESPONSE_REFERENCE = new TypeReference<>() {}; | ||
| private static final TypeReference<ListTaskPushNotificationConfigResponse> LIST_TASK_PUSH_NOTIFICATION_CONFIG_RESPONSE_REFERENCE = new TypeReference<>() {}; | ||
| private static final TypeReference<DeleteTaskPushNotificationConfigResponse> DELETE_TASK_PUSH_NOTIFICATION_CONFIG_RESPONSE_REFERENCE = new TypeReference<>() {}; | ||
| private static final TypeReference<GetAuthenticatedExtendedCardResponse> GET_AUTHENTICATED_AGENT_CARD_RESPONSE_REFERENCE = new TypeReference<>() {}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The name of this constant, GET_AUTHENTICATED_AGENT_CARD_RESPONSE_REFERENCE, does not match its generic type GetAuthenticatedExtendedCardResponse. For consistency and to avoid confusion, it should be renamed to GET_AUTHENTICATED_EXTENDED_CARD_RESPONSE_REFERENCE.
| private static final TypeReference<GetAuthenticatedExtendedCardResponse> GET_AUTHENTICATED_AGENT_CARD_RESPONSE_REFERENCE = new TypeReference<>() {}; | |
| private static final TypeReference<GetAuthenticatedExtendedCardResponse> GET_AUTHENTICATED_EXTENDED_CARD_RESPONSE_REFERENCE = new TypeReference<>() {}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed
| if (! method.equals(METHOD)) { | ||
| throw new IllegalArgumentException("Invalid GetTaskPushNotificationRequest method"); | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The exception message here is incorrect. It refers to GetTaskPushNotificationRequest but should refer to GetAuthenticatedExtendedCardRequest. This seems to be a copy-paste error.
| if (! method.equals(METHOD)) { | |
| throw new IllegalArgumentException("Invalid GetTaskPushNotificationRequest method"); | |
| } | |
| if (! method.equals(METHOD)) { | |
| throw new IllegalArgumentException("Invalid GetAuthenticatedExtendedCardRequest method"); | |
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed
5a511ff to
1f2d12f
Compare
…t to JSONRPC as per v0.3.0
…emove the previous authenticatedExtendedCard endpoint
…ow Skills to specify Security as per v0.3.0
…t-card.json as per v0.3.0
…ow Skills to specify Security for gRPC as per v0.3.0
# Description This PR introduces some new spec classes and updates some existing ones based off the updates in the [v0.3.0 spec](https://github.com/a2aproject/A2A/releases/tag/v0.3.0). Note that the TCK job will fail until the v0.3.0 TCK is available. - [X] Follow the [`CONTRIBUTING` Guide](../CONTRIBUTING.md). - [X] Make your Pull Request title in the <https://www.conventionalcommits.org/> specification. - Important Prefixes for [release-please](https://github.com/googleapis/release-please): - `fix:` which represents bug fixes, and correlates to a [SemVer](https://semver.org/) patch. - `feat:` represents a new feature, and correlates to a SemVer minor. - `feat!:`, or `fix!:`, `refactor!:`, etc., which represent a breaking change (indicated by the `!`) and will result in a SemVer major. - [X] Ensure the tests pass - [X] Appropriate READMEs were updated (if necessary) Fixes a2aproject#209 🦕
Description
This PR introduces some new spec classes and updates some existing ones based off the updates in the v0.3.0 spec.
Note that the TCK job will fail until the v0.3.0 TCK is available.
CONTRIBUTINGGuide.fix:which represents bug fixes, and correlates to a SemVer patch.feat:represents a new feature, and correlates to a SemVer minor.feat!:, orfix!:,refactor!:, etc., which represent a breaking change (indicated by the!) and will result in a SemVer major.Fixes #209 🦕