Repository navigation
fix: harden CI and complete a2a-sdk V2 lifecycle migration - #538
Conversation
Bumps the uv-all-updates group with 5 updates in the / directory: | Package | From | To | | --- | --- | --- | | [fastapi](https://github.com/fastapi/fastapi) | `0.141.1` | `0.143.0` | | [pydantic](https://github.com/pydantic/pydantic) | `2.13.5` | `2.14.1` | | [mypy](https://github.com/python/mypy) | `2.3.1` | `2.4.0` | | [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.2` | `4.7.0` | | [ruff](https://github.com/astral-sh/ruff) | `0.16.9` | `0.17.0` | Updates `fastapi` from 0.141.1 to 0.143.0 - [Release notes](https://github.com/fastapi/fastapi/releases) - [Commits](fastapi/fastapi@0.141.1...0.143.0) Updates `pydantic` from 2.13.5 to 2.14.1 - [Release notes](https://github.com/pydantic/pydantic/releases) - [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md) - [Commits](pydantic/pydantic@v2.13.5...v2.14.1) Updates `mypy` from 2.3.1 to 2.4.0 - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](python/mypy@v2.3.1...v2.4.0) Updates `pre-commit` from 4.6.2 to 4.7.0 - [Release notes](https://github.com/pre-commit/pre-commit/releases) - [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md) - [Commits](pre-commit/pre-commit@v4.6.2...v4.7.0) Updates `ruff` from 0.16.9 to 0.17.0 - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](astral-sh/ruff@0.16.9...0.17.0) --- updated-dependencies: - dependency-name: fastapi dependency-version: 0.143.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: uv-all-updates - dependency-name: pydantic dependency-version: 2.14.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: uv-all-updates - dependency-name: mypy dependency-version: 2.4.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: uv-all-updates - dependency-name: pre-commit dependency-version: 4.7.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: uv-all-updates - dependency-name: ruff dependency-version: 0.17.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: uv-all-updates ... Signed-off-by: dependabot[bot] <support@github.com>
独立审查结论审查范围: 结论:未发现剩余阻塞问题,建议 CI 通过后合并。 改动整体围绕 issue 需求展开,没有明显冗余或偏离;SDK 升级的 wire-level 变化已显式同步到代码、测试和文档。 已发现并收敛的问题
逐项评估
Issue / PR 关系
残余风险
最终验证
|
补充审查:媒体类型与 SDK 私有封装治理1.
|
与 codex-a2a PR #382 的对比审查对比结论codex-a2a PR #382 在本轮 SDK 升级中最大的优势是:直接采用 SDK 1.2.x 的
本仓值得 codex-a2a 参考的做法
本 PR 仍需诚实保留的差距
因此,若目标是完全遵循 SDK 生态,下一步应是实际完成 handler/store 迁移,而不是继续增加 issue 数量或把 #533 当作已经解决。 最终验证
|
独立审查结论本轮已完成 SDK V2 生命周期迁移的代码、契约、文档和依赖复核。当前没有剩余的阻塞问题,也未把已知问题转成后续 issue:
发现、风险与收敛
|
|
最终 CI 已全部通过(commit |
目的
本 PR 一次性收口 CI/静态检查问题、依赖升级、最新审计结果,以及 SDK 升级引入的完整 V2 任务生命周期迁移。旧
LegacyRequestHandler、私有 guard store 和私有 REST streaming 路径已实际删除,不再通过新增 issue 延后处理。SDK 与锁定依赖的权威版本以pyproject.toml和uv.lock为准。S安全规则并收敛src/assert。主要变更
SDK V2 生命周期与持久化
migrationsextra 使用同一权威 pin,避免 extras 与运行时解析出不同版本。OpencodeRequestHandler直接继承 SDKDefaultRequestHandlerV2。VersionedDatabaseTaskStore与DatabaseTaskEventStream,通过 version CAS 检测并发写入并提供事件重放。CopyingTaskStoreAdapter;需要版本接口时统一通过 SDKLegacyTaskStoreAdapter转换。GuardedTaskStore、DatabaseTaskStoreCompat、私有 atomic SQL upsert 和 first-terminal-state-wins 策略。RequestContextBuilder扩展点记录并持久化到 Task metadata;终态后释放进程内缓存。REST、JSON-RPC 与安全边界
server/rest_tasks.py,REST 核心路由直接使用 SDKRestDispatcher公共方法。RestDispatcher._handle_streaming、_setup_active_task和_versioned_store的依赖。RequestHandler.on_message_send_stream/on_subscribe_to_task包装,protobuf event 按 A2A wire JSON 计量。content、小写 role 和kind/type/filePart 形状。application/a2a+json;AIP-193 错误响应继续使用application/json。ParseError映射到协议错误,而不是误报为 peer unavailable。依赖与审计
certifi、filelock、opentelemetry-api、virtualenv风险。pip-audit均无已知漏洞;刷新后uv pip list --outdated为空。审查中发现并已解决
get/save接口,已同时迁移 handler 与 store。_setup_active_task,已改为公开RequestContextBuilder。_handle_streaming,已删除并改为公共路由黑盒测试。验证
bash ./scripts/doctor.sh:通过;827 passed;总覆盖率 92.65%;critical-file coverage policy、Ruff、mypy、pre-commit、wheel/sdist 与安装后 CLI smoke 全部通过。bash ./scripts/conformance.sh:8/8 passed。pip-audit:No known vulnerabilities found。uv pip list --outdated:刷新后无输出。兼容性与影响
application/a2a+json是 A2A 成功响应的专用 JSON 媒体类型,不是新的响应体封装;body 仍是 A2A ProtoJSON 对象,错误仍是 AIP-193 JSON。客户端、反向代理和网关需要允许+json,只精确匹配application/json的消费者需要更新。UnsupportedOperationError;已取消任务的重复取消仍保持幂等返回。task_versions与task_events。既有数据库需先执行 README/升级指南中的a2a-db upgrade。关联