Conversation
Updates the requirements on [a2a-sdk](https://github.com/a2aproject/a2a-python) to permit the latest version. - [Release notes](https://github.com/a2aproject/a2a-python/releases) - [Changelog](https://github.com/a2aproject/a2a-python/blob/main/CHANGELOG.md) - [Commits](a2aproject/a2a-python@v0.2.5...v0.3.25) --- updated-dependencies: - dependency-name: a2a-sdk dependency-version: 0.3.25 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com>
pdettori
left a comment
There was a problem hiding this comment.
Review: a2a-sdk <0.3.0 → <0.4.0
Widening the constraint is safe in intent but premature — the agent code uses the camelCase API removed in 0.3.0, and includes a manual route workaround that conflicts with 0.3.x built-in behavior. The uv.lock still pins 0.2.5 so uv sync won't break today, but any lock refresh pulls 0.3.25 and breaks the agent.
Issue 1 — camelCase field access removed in 0.3.0
a2a-sdk 0.3.0 removed __getattr__/__setattr__ camelCase aliases from types.py (#335). The agent code still uses camelCase:
| Location | camelCase | Required |
|---|---|---|
__main__.py |
AgentCapabilities(pushNotifications=True) |
push_notifications=True |
__main__.py |
AgentCard(defaultInputModes=..., defaultOutputModes=...) |
default_input_modes, default_output_modes |
agent_executor.py |
task.contextId (×4) |
task.context_id |
Migration script: https://github.com/a2aproject/a2a-samples/blob/main/samples/python/refactor_camel_to_snake.sh
Issue 2 — Duplicate route conflict in 0.3.x
__main__.py manually inserts /.well-known/agent-card.json as a workaround for 0.2.x. In 0.3.0+ this path is served natively by the SDK (#352). The manual app.routes.insert(...) block must be removed before widening the constraint.
| requires-python = ">=3.12" | ||
| dependencies = [ | ||
| "a2a-sdk>=0.2.5,<0.3.0", | ||
| "a2a-sdk>=0.2.5,<0.4.0", |
There was a problem hiding this comment.
a2a-sdk 0.3.0 removed camelCase field access from types.py. The agent uses pushNotifications, defaultInputModes, defaultOutputModes (constructors) and task.contextId (attribute access) — all break with 0.3.x. Migrate with the refactor script before widening this constraint.
Migrate camelCase fields to snake_case and remove manual agent-card route workaround (now built into SDK >= 0.3.0): - AgentCapabilities: pushNotifications -> push_notifications - AgentCard: defaultInputModes/defaultOutputModes -> snake_case - Remove manual /.well-known/agent-card.json route insertion - task.contextId -> task.context_id in agent_executor.py Signed-off-by: Paolo Dettori <dettori@us.ibm.com>
Update all task.contextId attribute accesses to task.context_id to comply with a2a-sdk 0.3.x API (camelCase access removed). Signed-off-by: Paolo Dettori <dettori@us.ibm.com>
InMemoryPushNotifier was removed in a2a-sdk 0.3.0. Replace with InMemoryPushNotificationConfigStore + BasePushNotificationSender. Signed-off-by: Paolo Dettori <dettori@us.ibm.com>
Update all task.contextId attribute accesses to task.context_id to comply with a2a-sdk 0.3.x API (camelCase access removed). Signed-off-by: Paolo Dettori <dettori@us.ibm.com>
In a2a-sdk 0.3.x, starlette and sse-starlette became optional dependencies under the [http-server] extra. Update the dependency specifier accordingly. Signed-off-by: Paolo Dettori <dettori@us.ibm.com>
Verification: Fix confirmed ✅Migrated the currency converter to Breaking changes found and fixed across 4 commits:
Result: |
Signed-off-by: Paolo Dettori <dettori@us.ibm.com>
Updates the requirements on a2a-sdk to permit the latest version.
Release notes
Sourced from a2a-sdk's releases.
Changelog
Sourced from a2a-sdk's changelog.
... (truncated)
Commits
697ab8echore(main): release 0.3.25 (#730)22b25d6fix: use default_factory for mutable field defaults in ServerCallContext (#744)a236d4dfix: return background task from consume_and_break_on_interrupt to prevent GC...fa14dbffeat: Implement a vertex based task store (#752)8b647bdchore(deps): bump the all group with 13 updates (#747)2325ad2chore(deps): bump the github-actions group with 3 updates (#746)cced34dtest: sync mypy command in GEMINI.md with CI (#733)3ad2503docs: GEMINI.md updates (#729)d2d3860chore(main): release 0.3.24 (#708)7632f55fix(core): preserve legitimate falsy values in _clean_empty (#713)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)