codex-a2a 0.6.1__tar.gz → 0.7.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. codex_a2a-0.7.0/.github/dependabot.yml +16 -0
  2. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/.github/workflows/ci.yml +5 -3
  3. codex_a2a-0.7.0/.github/workflows/dependency-health.yml +32 -0
  4. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/.github/workflows/publish.yml +20 -6
  5. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/PKG-INFO +12 -6
  6. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/README.md +1 -0
  7. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/docs/architecture.md +1 -0
  8. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/docs/compatibility.md +3 -0
  9. codex_a2a-0.7.0/docs/conformance-triage.md +49 -0
  10. codex_a2a-0.7.0/docs/conformance.md +78 -0
  11. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/docs/guide.md +3 -1
  12. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/pyproject.toml +10 -5
  13. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/scripts/README.md +8 -0
  14. codex_a2a-0.7.0/scripts/conformance.sh +252 -0
  15. codex_a2a-0.7.0/scripts/dependency_health.sh +26 -0
  16. codex_a2a-0.7.0/scripts/doctor.sh +7 -0
  17. codex_a2a-0.7.0/scripts/health_common.sh +23 -0
  18. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/scripts/validate_baseline.sh +12 -0
  19. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/config.py +20 -0
  20. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/contracts/extensions.py +40 -0
  21. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/execution/discovery_runtime.py +6 -17
  22. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/execution/review_runtime.py +5 -17
  23. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/execution/stream_interrupts.py +33 -69
  24. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/execution/thread_lifecycle_runtime.py +5 -17
  25. codex_a2a-0.7.0/src/codex_a2a/execution/watch_events.py +35 -0
  26. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/application.py +15 -4
  27. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/control_params.py +3 -31
  28. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/discovery_payload_mapping.py +4 -25
  29. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/discovery_query.py +9 -21
  30. codex_a2a-0.7.0/src/codex_a2a/jsonrpc/errors.py +377 -0
  31. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/exec_control.py +14 -28
  32. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/interrupt_params.py +3 -15
  33. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/interrupts.py +13 -26
  34. codex_a2a-0.7.0/src/codex_a2a/jsonrpc/owner_guard.py +40 -0
  35. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/params_common.py +39 -0
  36. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/review_control.py +12 -18
  37. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/session_control.py +12 -25
  38. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/session_query.py +7 -17
  39. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/thread_lifecycle_control.py +14 -51
  40. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/thread_lifecycle_params.py +3 -15
  41. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/turn_control.py +12 -17
  42. codex_a2a-0.7.0/src/codex_a2a/payload_helpers.py +52 -0
  43. codex_a2a-0.7.0/src/codex_a2a/protocol_versions.py +188 -0
  44. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/server/agent_card.py +4 -0
  45. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/server/http_middlewares.py +183 -0
  46. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/server/openapi.py +4 -0
  47. codex_a2a-0.7.0/src/codex_a2a/upstream/discovery_payloads.py +33 -0
  48. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/upstream/interrupts.py +16 -55
  49. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/upstream/notification_mapping.py +10 -24
  50. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/upstream/stream_bridge.py +2 -27
  51. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a.egg-info/PKG-INFO +12 -6
  52. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a.egg-info/SOURCES.txt +16 -0
  53. codex_a2a-0.7.0/src/codex_a2a.egg-info/requires.txt +22 -0
  54. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/config/test_settings.py +28 -0
  55. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/contracts/test_extension_contract_consistency.py +3 -0
  56. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/execution/test_thread_lifecycle_runtime.py +6 -6
  57. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/package/test_release_distribution_contract.py +30 -0
  58. codex_a2a-0.7.0/tests/scripts/__init__.py +1 -0
  59. codex_a2a-0.7.0/tests/scripts/test_script_health_contract.py +76 -0
  60. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/server/test_agent_card.py +23 -0
  61. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/server/test_transport_contract.py +117 -1
  62. codex_a2a-0.7.0/tests/test_protocol_versions.py +83 -0
  63. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/uv.lock +520 -135
  64. codex_a2a-0.6.1/src/codex_a2a/jsonrpc/errors.py +0 -131
  65. codex_a2a-0.6.1/src/codex_a2a.egg-info/requires.txt +0 -17
  66. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/.gitignore +0 -0
  67. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/.pre-commit-config.yaml +0 -0
  68. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/.secrets.baseline +0 -0
  69. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/AGENTS.md +0 -0
  70. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/CONTRIBUTING.md +0 -0
  71. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/LICENSE +0 -0
  72. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/SECURITY.md +0 -0
  73. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/docs/extension-specifications.md +0 -0
  74. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/docs/maintainer-architecture.md +0 -0
  75. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/mypy.ini +0 -0
  76. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/scripts/publish_github_release.sh +0 -0
  77. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/scripts/smoke_test_built_cli.sh +0 -0
  78. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/scripts/sync_codex_docs.sh +0 -0
  79. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/scripts/validate_runtime_matrix.sh +0 -0
  80. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/setup.cfg +0 -0
  81. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/__init__.py +0 -0
  82. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/auth.py +0 -0
  83. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/cli.py +0 -0
  84. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/client/__init__.py +0 -0
  85. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/client/agent_card.py +0 -0
  86. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/client/auth.py +0 -0
  87. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/client/client.py +0 -0
  88. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/client/config.py +0 -0
  89. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/client/errors.py +0 -0
  90. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/client/manager.py +0 -0
  91. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/client/payload_text.py +0 -0
  92. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/client/request_context.py +0 -0
  93. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/client/types.py +0 -0
  94. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/contracts/__init__.py +0 -0
  95. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/contracts/runtime_output.py +0 -0
  96. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/execution/__init__.py +0 -0
  97. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/execution/cancellation.py +0 -0
  98. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/execution/directory_policy.py +0 -0
  99. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/execution/exec_runtime.py +0 -0
  100. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/execution/executor.py +0 -0
  101. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/execution/output_mapping.py +0 -0
  102. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/execution/request_metadata.py +0 -0
  103. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/execution/request_overrides.py +0 -0
  104. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/execution/response_emitter.py +0 -0
  105. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/execution/session_runtime.py +0 -0
  106. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/execution/stream_chunks.py +0 -0
  107. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/execution/stream_processor.py +0 -0
  108. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/execution/stream_state.py +0 -0
  109. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/execution/streaming.py +0 -0
  110. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/execution/tool_call_payloads.py +0 -0
  111. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/input_mapping.py +0 -0
  112. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/__init__.py +0 -0
  113. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/discovery_control.py +0 -0
  114. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/discovery_params.py +0 -0
  115. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/dispatch.py +0 -0
  116. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/hooks.py +0 -0
  117. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/interrupt_lifecycle.py +0 -0
  118. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/interrupt_recovery.py +0 -0
  119. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/interrupt_recovery_params.py +0 -0
  120. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/params.py +0 -0
  121. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/payload_mapping.py +0 -0
  122. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/query_params.py +0 -0
  123. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/review_control_params.py +0 -0
  124. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/jsonrpc/turn_control_params.py +0 -0
  125. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/logging_context.py +0 -0
  126. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/media_modes.py +0 -0
  127. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/metrics.py +0 -0
  128. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/parts/text.py +0 -0
  129. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/profile/__init__.py +0 -0
  130. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/profile/runtime.py +0 -0
  131. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/py.typed +0 -0
  132. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/server/__init__.py +0 -0
  133. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/server/application.py +0 -0
  134. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/server/call_context.py +0 -0
  135. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/server/database.py +0 -0
  136. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/server/migrations.py +0 -0
  137. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/server/output_negotiation.py +0 -0
  138. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/server/request_handler.py +0 -0
  139. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/server/runtime_state.py +0 -0
  140. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/server/task_store.py +0 -0
  141. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/upstream/__init__.py +0 -0
  142. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/upstream/client.py +0 -0
  143. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/upstream/conversation_facade.py +0 -0
  144. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/upstream/exec_facade.py +0 -0
  145. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/upstream/interrupt_bridge.py +0 -0
  146. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/upstream/models.py +0 -0
  147. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/upstream/request_mapping.py +0 -0
  148. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/upstream/startup.py +0 -0
  149. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a/upstream/transport.py +0 -0
  150. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a.egg-info/dependency_links.txt +0 -0
  151. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a.egg-info/entry_points.txt +0 -0
  152. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/src/codex_a2a.egg-info/top_level.txt +0 -0
  153. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/__init__.py +0 -0
  154. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/client/__init__.py +0 -0
  155. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/client/test_agent_card.py +0 -0
  156. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/client/test_cli.py +0 -0
  157. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/client/test_client_flow.py +0 -0
  158. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/client/test_client_manager.py +0 -0
  159. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/client/test_errors.py +0 -0
  160. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/client/test_lifecycle.py +0 -0
  161. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/client/test_payload_text.py +0 -0
  162. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/client/test_request_context.py +0 -0
  163. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/client/test_types.py +0 -0
  164. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/config/__init__.py +0 -0
  165. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/contracts/__init__.py +0 -0
  166. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/execution/__init__.py +0 -0
  167. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/execution/test_agent_errors.py +0 -0
  168. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/execution/test_cancellation.py +0 -0
  169. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/execution/test_codex_agent_session_binding.py +0 -0
  170. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/execution/test_directory_validation.py +0 -0
  171. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/execution/test_discovery_exec_runtime.py +0 -0
  172. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/execution/test_metrics.py +0 -0
  173. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/execution/test_review_runtime.py +0 -0
  174. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/execution/test_session_ownership.py +0 -0
  175. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/execution/test_session_persistence.py +0 -0
  176. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/execution/test_session_runtime.py +0 -0
  177. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/execution/test_stream_chunks.py +0 -0
  178. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/execution/test_stream_interrupts.py +0 -0
  179. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/execution/test_streaming_output_contract.py +0 -0
  180. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/execution/test_tool_call_payloads.py +0 -0
  181. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/fixtures/codex_app_server/command_execution_output_delta.json +0 -0
  182. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/fixtures/codex_app_server/file_change_output_delta.json +0 -0
  183. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/jsonrpc/__init__.py +0 -0
  184. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/jsonrpc/test_codex_discovery_extension.py +0 -0
  185. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/jsonrpc/test_codex_exec_extension.py +0 -0
  186. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/jsonrpc/test_codex_session_extension.py +0 -0
  187. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/jsonrpc/test_codex_thread_lifecycle_extension.py +0 -0
  188. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/jsonrpc/test_codex_turn_review_extension.py +0 -0
  189. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/jsonrpc/test_dispatch.py +0 -0
  190. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/jsonrpc/test_guard_hooks.py +0 -0
  191. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/jsonrpc/test_jsonrpc_models.py +0 -0
  192. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/package/__init__.py +0 -0
  193. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/package/test_logging.py +0 -0
  194. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/package/test_publish_github_release_script.py +0 -0
  195. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/package/test_typing_contract.py +0 -0
  196. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/package/test_version.py +0 -0
  197. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/parts/__init__.py +0 -0
  198. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/parts/test_text.py +0 -0
  199. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/profile/__init__.py +0 -0
  200. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/profile/test_profile.py +0 -0
  201. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/server/__init__.py +0 -0
  202. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/server/test_auth.py +0 -0
  203. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/server/test_call_context_builder.py +0 -0
  204. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/server/test_cli.py +0 -0
  205. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/server/test_database.py +0 -0
  206. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/server/test_database_app_persistence.py +0 -0
  207. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/server/test_migrations.py +0 -0
  208. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/server/test_request_handler.py +0 -0
  209. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/server/test_runtime_state.py +0 -0
  210. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/server/test_task_store.py +0 -0
  211. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/support/__init__.py +0 -0
  212. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/support/context.py +0 -0
  213. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/support/dummy_clients.py +0 -0
  214. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/support/fixtures.py +0 -0
  215. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/support/settings.py +0 -0
  216. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/test_input_mapping.py +0 -0
  217. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/upstream/__init__.py +0 -0
  218. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/upstream/test_codex_client_params.py +0 -0
  219. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/upstream/test_interrupt_persistence.py +0 -0
  220. {codex_a2a-0.6.1 → codex_a2a-0.7.0}/tests/upstream/test_modular_upstream_components.py +0 -0
@@ -0,0 +1,16 @@
1
+ version: 2
2
+
3
+ updates:
4
+ - package-ecosystem: "uv"
5
+ directory: "/"
6
+ schedule:
7
+ interval: "weekly"
8
+ open-pull-requests-limit: 1
9
+ commit-message:
10
+ prefix: "deps"
11
+ labels:
12
+ - "dependencies"
13
+ groups:
14
+ uv-all-updates:
15
+ patterns:
16
+ - "*"
@@ -1,4 +1,4 @@
1
- name: CI
1
+ name: Validation
2
2
 
3
3
  on:
4
4
  pull_request:
@@ -11,11 +11,12 @@ permissions:
11
11
 
12
12
  jobs:
13
13
  quality-gate:
14
+ name: Validation Baseline
14
15
  runs-on: ubuntu-latest
15
16
 
16
17
  steps:
17
18
  - name: Checkout
18
- uses: actions/checkout@v5
19
+ uses: actions/checkout@v6
19
20
 
20
21
  - name: Setup Python
21
22
  uses: actions/setup-python@v6
@@ -34,6 +35,7 @@ jobs:
34
35
  run: bash ./scripts/validate_baseline.sh
35
36
 
36
37
  runtime-matrix:
38
+ name: Runtime Matrix (Python ${{ matrix.python-version }})
37
39
  runs-on: ubuntu-latest
38
40
  strategy:
39
41
  fail-fast: false
@@ -42,7 +44,7 @@ jobs:
42
44
 
43
45
  steps:
44
46
  - name: Checkout
45
- uses: actions/checkout@v5
47
+ uses: actions/checkout@v6
46
48
 
47
49
  - name: Setup Python
48
50
  uses: actions/setup-python@v6
@@ -0,0 +1,32 @@
1
+ name: Dependency Health
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ schedule:
6
+ # 03:00 UTC on day-of-month 1
7
+ - cron: "0 3 1 * *"
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ dependency-health:
14
+ name: Dependency Health Audit
15
+ runs-on: ubuntu-latest
16
+
17
+ steps:
18
+ - name: Checkout
19
+ uses: actions/checkout@v6
20
+
21
+ - name: Setup Python
22
+ uses: actions/setup-python@v6
23
+ with:
24
+ python-version: "3.13"
25
+
26
+ - name: Setup uv
27
+ uses: astral-sh/setup-uv@v7
28
+ with:
29
+ enable-cache: false
30
+
31
+ - name: Run dependency health checks
32
+ run: bash ./scripts/dependency_health.sh
@@ -1,4 +1,4 @@
1
- name: Publish
1
+ name: Release Publish
2
2
 
3
3
  on:
4
4
  push:
@@ -18,6 +18,7 @@ on:
18
18
 
19
19
  jobs:
20
20
  build_release_artifacts:
21
+ name: Build Release Artifacts
21
22
  runs-on: ubuntu-latest
22
23
  permissions:
23
24
  contents: read
@@ -27,7 +28,7 @@ jobs:
27
28
 
28
29
  steps:
29
30
  - name: Checkout
30
- uses: actions/checkout@v5
31
+ uses: actions/checkout@v6
31
32
  with:
32
33
  fetch-depth: 0
33
34
  ref: ${{ github.event_name == 'workflow_dispatch' && inputs.tag_name || github.ref_name }}
@@ -42,6 +43,17 @@ jobs:
42
43
  with:
43
44
  enable-cache: true
44
45
 
46
+ - name: Sync dependencies
47
+ run: uv sync --all-extras --frozen
48
+
49
+ - name: Export runtime requirements for vulnerability audit
50
+ run: >
51
+ uv export --format requirements.txt --no-dev --locked --no-emit-project
52
+ --output-file /tmp/runtime-requirements.txt >/dev/null
53
+
54
+ - name: Run runtime dependency vulnerability audit
55
+ run: uv run pip-audit --requirement /tmp/runtime-requirements.txt
56
+
45
57
  - name: Resolve release tag
46
58
  id: release_tag
47
59
  run: echo "tag=${RELEASE_TAG}" >> "$GITHUB_OUTPUT"
@@ -96,13 +108,14 @@ jobs:
96
108
  WHEEL_PATH: ${{ steps.wheel.outputs.wheel_path }}
97
109
 
98
110
  - name: Upload built artifacts
99
- uses: actions/upload-artifact@v4
111
+ uses: actions/upload-artifact@v7
100
112
  with:
101
113
  name: ${{ steps.artifact_name.outputs.name }}
102
114
  path: dist/
103
115
  if-no-files-found: error
104
116
 
105
117
  publish_pypi:
118
+ name: Publish to PyPI
106
119
  runs-on: ubuntu-latest
107
120
  needs: build_release_artifacts
108
121
  if: github.event_name == 'push' || inputs.publish_to_pypi
@@ -111,7 +124,7 @@ jobs:
111
124
 
112
125
  steps:
113
126
  - name: Download built artifacts
114
- uses: actions/download-artifact@v5
127
+ uses: actions/download-artifact@v8
115
128
  with:
116
129
  name: ${{ needs.build_release_artifacts.outputs.artifact_name }}
117
130
  path: dist
@@ -120,6 +133,7 @@ jobs:
120
133
  uses: pypa/gh-action-pypi-publish@release/v1
121
134
 
122
135
  publish_github_release:
136
+ name: Sync GitHub Release
123
137
  runs-on: ubuntu-latest
124
138
  needs:
125
139
  - build_release_artifacts
@@ -133,12 +147,12 @@ jobs:
133
147
 
134
148
  steps:
135
149
  - name: Checkout
136
- uses: actions/checkout@v5
150
+ uses: actions/checkout@v6
137
151
  with:
138
152
  fetch-depth: 0
139
153
 
140
154
  - name: Download built artifacts
141
- uses: actions/download-artifact@v5
155
+ uses: actions/download-artifact@v8
142
156
  with:
143
157
  name: ${{ needs.build_release_artifacts.outputs.artifact_name }}
144
158
  path: dist
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codex-a2a
3
- Version: 0.6.1
3
+ Version: 0.7.0
4
4
  Summary: Codex A2A runtime adapter
5
5
  Author: liujuanjuan1984@Intelligent-Internet
6
6
  License-Expression: Apache-2.0
@@ -22,22 +22,27 @@ Classifier: Topic :: Internet :: WWW/HTTP
22
22
  Requires-Python: >=3.11
23
23
  Description-Content-Type: text/markdown
24
24
  License-File: LICENSE
25
- Requires-Dist: a2a-sdk==0.3.25
25
+ Requires-Dist: a2a-sdk==0.3.26
26
26
  Requires-Dist: aiosqlite<1.0,>=0.20
27
- Requires-Dist: fastapi<0.111,>=0.110
27
+ Requires-Dist: fastapi<0.136,>=0.121
28
28
  Requires-Dist: httpx<0.29,>=0.28.1
29
+ Requires-Dist: protobuf<8.0,>=6.33.5
30
+ Requires-Dist: pyasn1<1.0,>=0.6.3
29
31
  Requires-Dist: pydantic<3.0,>=2.6
30
32
  Requires-Dist: pydantic-settings<3.0,>=2.2
33
+ Requires-Dist: requests<3.0,>=2.33.0
31
34
  Requires-Dist: sqlalchemy<3.0,>=2.0
32
- Requires-Dist: sse-starlette<3.0,>=2.1
33
- Requires-Dist: uvicorn<0.30,>=0.29
35
+ Requires-Dist: sse-starlette<4.0,>=2.1
36
+ Requires-Dist: uvicorn<0.45,>=0.29
34
37
  Provides-Extra: dev
38
+ Requires-Dist: pip-audit<3.0,>=2.9; extra == "dev"
35
39
  Requires-Dist: pre-commit>=3.7; extra == "dev"
40
+ Requires-Dist: pygments<3.0,>=2.20.0; extra == "dev"
36
41
  Requires-Dist: pytest>=8.0; extra == "dev"
37
42
  Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
38
43
  Requires-Dist: pytest-cov<8.0,>=5.0; extra == "dev"
39
44
  Requires-Dist: ruff>=0.5; extra == "dev"
40
- Requires-Dist: mypy<1.12,>=1.11; extra == "dev"
45
+ Requires-Dist: mypy<1.21,>=1.11; extra == "dev"
41
46
  Dynamic: license-file
42
47
 
43
48
  # codex-a2a
@@ -193,6 +198,7 @@ The normative compatibility split and deployment model live in [Compatibility Gu
193
198
  - [Architecture Guide](docs/architecture.md) System structure, boundaries, and request flow.
194
199
  - [Maintainer Architecture Guide](docs/maintainer-architecture.md) Internal module structure, request call chains, and persistence touchpoints for contributors.
195
200
  - [Compatibility Guide](docs/compatibility.md) Supported Python/runtime surface, extension stability, and ecosystem-facing compatibility expectations.
201
+ - [External Conformance Experiments](docs/conformance.md) Manual A2A TCK experiment entrypoint and triage workflow.
196
202
  - [Security Policy](SECURITY.md) Threat model, deployment caveats, and vulnerability disclosure guidance.
197
203
 
198
204
  ## Development
@@ -151,6 +151,7 @@ The normative compatibility split and deployment model live in [Compatibility Gu
151
151
  - [Architecture Guide](docs/architecture.md) System structure, boundaries, and request flow.
152
152
  - [Maintainer Architecture Guide](docs/maintainer-architecture.md) Internal module structure, request call chains, and persistence touchpoints for contributors.
153
153
  - [Compatibility Guide](docs/compatibility.md) Supported Python/runtime surface, extension stability, and ecosystem-facing compatibility expectations.
154
+ - [External Conformance Experiments](docs/conformance.md) Manual A2A TCK experiment entrypoint and triage workflow.
154
155
  - [Security Policy](SECURITY.md) Threat model, deployment caveats, and vulnerability disclosure guidance.
155
156
 
156
157
  ## Development
@@ -93,6 +93,7 @@ Use the docs by responsibility:
93
93
  - [Maintainer Architecture Guide](maintainer-architecture.md): internal module boundaries, request call chains, and persistence touchpoints
94
94
  - [Extension Specifications](extension-specifications.md): stable extension URI/spec index and public-vs-extended disclosure rules
95
95
  - [Compatibility Guide](compatibility.md): current compatibility promises and stability expectations
96
+ - [External Conformance Experiments](conformance.md): manual A2A TCK experiment entrypoint and triage workflow
96
97
  - [Contributing Guide](../CONTRIBUTING.md): contributor workflow and validation
97
98
  - [Security Policy](../SECURITY.md): threat model and disclosure guidance
98
99
 
@@ -7,9 +7,12 @@ This document explains the compatibility promises this repository currently trie
7
7
  - Python versions: 3.11, 3.12, 3.13
8
8
  - A2A SDK line: `0.3.x`
9
9
  - A2A protocol version advertised by default: `0.3.0`
10
+ - Normalized protocol compatibility lines declared today: `0.3`, `1.0`
10
11
 
11
12
  The repository pins the SDK version in `pyproject.toml` and validates the published CLI build in CI. Upgrade the SDK deliberately rather than relying on floating dependency resolution.
12
13
 
14
+ The authenticated compatibility profile and wire contract publish `default_protocol_version`, `supported_protocol_versions`, and `protocol_compatibility`. Request-time `A2A-Version` negotiation currently supports the default `0.3` line plus a partial `1.0` compatibility line for response header echo, PascalCase JSON-RPC method aliases, and protocol-aware error shaping. Transport payload schemas, enums, pagination, and push-notification behavior remain SDK-owned `0.3` behavior until separately implemented.
15
+
13
16
  ## Contract Honesty
14
17
 
15
18
  Machine-readable discovery surfaces must reflect actual runtime behavior:
@@ -0,0 +1,49 @@
1
+ # External Conformance Triage
2
+
3
+ This document is the standing triage template for local `./scripts/conformance.sh` runs against the official `a2aproject/a2a-tck`.
4
+
5
+ ## Standards Used For Triage
6
+
7
+ - `a2a-sdk==0.3.26` as installed in this repository.
8
+ - The default A2A protocol version advertised by this repository: `0.3.0`.
9
+ - Repository compatibility policy:
10
+ - machine-readable Agent Card and OpenAPI contracts must reflect implemented runtime behavior;
11
+ - external TCK results are investigation input rather than default merge gates;
12
+ - unsupported `1.0` behavior should be tracked as future compatibility work, not silently declared as supported.
13
+
14
+ ## Classification Labels
15
+
16
+ - `Runtime issue`: the failure reproduces against the repository's declared runtime behavior and should be fixed here.
17
+ - `TCK mismatch`: the failure appears to conflict with the installed SDK line or this repository's declared v0.3 baseline.
18
+ - `Future protocol gap`: the failure is not a v0.3 regression, but it identifies work needed for stronger v1.0 compatibility.
19
+ - `Local experiment artifact`: the failure comes from the dummy-backed SUT, local auth, local URLs, timing, or other experiment setup details.
20
+ - `Needs repro`: the failure needs a focused local probe before assigning ownership.
21
+
22
+ ## Triage Workflow
23
+
24
+ For each failed or errored node ID:
25
+
26
+ 1. Copy the node ID from `failed-tests.json`.
27
+ 2. Inspect the corresponding raw details in `pytest-report.json` and `tck.log`.
28
+ 3. Compare the expectation with `docs/compatibility.md`, authenticated Agent Card params, and OpenAPI `x-a2a-extension-contracts`.
29
+ 4. Assign one classification label.
30
+ 5. Record whether the next action belongs in this repository, the TCK, or a future protocol compatibility issue.
31
+
32
+ ## Per-Test Triage
33
+
34
+ Add dated entries below after a real run:
35
+
36
+ ```text
37
+ YYYY-MM-DD:
38
+ - <nodeid>: <classification>. <short rationale>. Next action: <repo/TCK/future/none>.
39
+ ```
40
+
41
+ ## Summary
42
+
43
+ Keep the summary short and separate:
44
+
45
+ - Count clean runtime issues.
46
+ - Count TCK mismatches.
47
+ - Count future protocol gaps.
48
+ - Count local experiment artifacts.
49
+ - List follow-up issue numbers when created.
@@ -0,0 +1,78 @@
1
+ # External Conformance Experiments
2
+
3
+ This repository keeps internal regression and external interoperability experiments separate on purpose.
4
+
5
+ ## Scope
6
+
7
+ - `./scripts/doctor.sh` and `./scripts/validate_baseline.sh` remain the default internal regression entrypoints.
8
+ - `./scripts/conformance.sh` is a local/manual experiment entrypoint for official external tooling.
9
+ - External conformance output is investigation input, not an automatic merge gate.
10
+
11
+ ## Current Experiment Shape
12
+
13
+ The default `./scripts/conformance.sh` workflow does the following:
14
+
15
+ 1. Syncs the repository environment unless explicitly skipped.
16
+ 2. Caches or refreshes the official `a2aproject/a2a-tck` checkout.
17
+ 3. Starts a local dummy-backed `codex-a2a` runtime unless `CONFORMANCE_SUT_URL` points to an existing SUT.
18
+ 4. Runs the requested TCK category, defaulting to `mandatory`.
19
+ 5. Preserves raw logs and machine-readable reports under `run/conformance/<timestamp>/`.
20
+
21
+ The default local SUT uses the repository test double `DummyChatCodexClient`. That keeps the experiment reproducible without requiring a live Codex upstream.
22
+
23
+ ## Usage
24
+
25
+ Run the default mandatory experiment:
26
+
27
+ ```bash
28
+ bash ./scripts/conformance.sh
29
+ ```
30
+
31
+ Run a different TCK category:
32
+
33
+ ```bash
34
+ bash ./scripts/conformance.sh capabilities
35
+ ```
36
+
37
+ Target an already running runtime instead of the local dummy-backed SUT:
38
+
39
+ ```bash
40
+ CONFORMANCE_SUT_URL=http://127.0.0.1:8000 \
41
+ A2A_AUTH_TYPE=bearer \
42
+ A2A_AUTH_TOKEN=dev-token \
43
+ bash ./scripts/conformance.sh mandatory
44
+ ```
45
+
46
+ Skip local environment sync when the repository and cached TCK environment are already current:
47
+
48
+ ```bash
49
+ CONFORMANCE_SKIP_REPO_SYNC=1 \
50
+ CONFORMANCE_SKIP_TCK_SYNC=1 \
51
+ bash ./scripts/conformance.sh mandatory
52
+ ```
53
+
54
+ ## Artifacts
55
+
56
+ Each run keeps the following artifacts in the selected output directory:
57
+
58
+ - `agent-card.json`: fetched public Agent Card
59
+ - `health.json`: fetched authenticated health payload when the local SUT is used
60
+ - `repo-health.log`: repository environment sync and dependency compatibility output
61
+ - `tck.log`: raw TCK console output
62
+ - `pytest-report.json`: pytest-json-report output emitted by the TCK runner when available
63
+ - `failed-tests.json`: compact list of failed/error node IDs for triage when a report is available
64
+ - `metadata.json`: experiment metadata including local repo commit and cached TCK commit
65
+
66
+ ## Interpretation Guidance
67
+
68
+ When a TCK run fails, inspect the raw report before changing the runtime:
69
+
70
+ - Some failures may point to real runtime gaps.
71
+ - Some failures may come from TCK assumptions that do not match `a2a-sdk==0.3.26`.
72
+ - Some failures may come from A2A v0.3 versus v1.0 naming or schema drift.
73
+ - Some failures may be local experiment artifacts from the dummy-backed runtime.
74
+
75
+ The experiment is useful only if those categories stay separate during triage.
76
+ Use the authenticated compatibility profile and wire contract `protocol_compatibility` fields as the repository-owned declaration of which protocol lines are supported today, partially supported for compatibility, or reserved for future work.
77
+
78
+ Record first-pass classifications in [conformance-triage.md](./conformance-triage.md).
@@ -163,7 +163,7 @@ Extension boundary principles:
163
163
 
164
164
  Current implementation note:
165
165
 
166
- - The compatibility profile is declarative. It does not introduce a global runtime `core-only` switch.
166
+ - The compatibility profile is declarative. It does not introduce a global runtime `core-only` switch; request-time `A2A-Version` negotiation is limited to the protocol lines and gaps published in the profile.
167
167
  - This is intentional: current shared session/stream/interrupt behavior is part of the deployed interoperability contract, so a blanket runtime profile split would be misleading without broader wire-level changes.
168
168
  - For compatibility policy and stability expectations, use [compatibility.md](./compatibility.md) as the normative repo document rather than this usage guide.
169
169
 
@@ -199,6 +199,7 @@ Use the grouped sections below as the deployment-first reading order:
199
199
  - `A2A_VERSION`: agent version string
200
200
  - `A2A_PROJECT`: optional project label injected into examples and discovery metadata
201
201
  - `A2A_PROTOCOL_VERSION`: advertised A2A protocol version, default `0.3.0`
202
+ - `A2A_SUPPORTED_PROTOCOL_VERSIONS`: comma-separated request negotiation lines, default `0.3,1.0`
202
203
  - `A2A_DOCUMENTATION_URL`: optional external documentation URL exposed on Agent Card
203
204
  - `A2A_STATIC_AUTH_CREDENTIALS`: JSON array of static inbound credentials. Supports multiple `bearer` and `basic` entries, each with a stable `principal`; `bearer` entries must declare `principal`, while `basic` entries derive `principal` from `username`.
204
205
 
@@ -278,6 +279,7 @@ These variables are forwarded to the local `codex app-server` subprocess.
278
279
  | `A2A_VERSION` | Agent version |
279
280
  | `A2A_PROJECT` | Project label |
280
281
  | `A2A_PROTOCOL_VERSION` | Protocol version |
282
+ | `A2A_SUPPORTED_PROTOCOL_VERSIONS` | Supported protocol versions |
281
283
  | `A2A_DOCUMENTATION_URL` | Documentation URL |
282
284
  | `A2A_ENABLE_HEALTH_ENDPOINT` | Enable /health |
283
285
  | `A2A_ENABLE_SESSION_SHELL` | Enable session shell |
@@ -24,25 +24,30 @@ classifiers = [
24
24
  "Topic :: Internet :: WWW/HTTP",
25
25
  ]
26
26
  dependencies = [
27
- "a2a-sdk==0.3.25",
27
+ "a2a-sdk==0.3.26",
28
28
  "aiosqlite>=0.20,<1.0",
29
- "fastapi>=0.110,<0.111",
29
+ "fastapi>=0.121,<0.136",
30
30
  "httpx>=0.28.1,<0.29",
31
+ "protobuf>=6.33.5,<8.0",
32
+ "pyasn1>=0.6.3,<1.0",
31
33
  "pydantic>=2.6,<3.0",
32
34
  "pydantic-settings>=2.2,<3.0",
35
+ "requests>=2.33.0,<3.0",
33
36
  "sqlalchemy>=2.0,<3.0",
34
- "sse-starlette>=2.1,<3.0",
35
- "uvicorn>=0.29,<0.30",
37
+ "sse-starlette>=2.1,<4.0",
38
+ "uvicorn>=0.29,<0.45",
36
39
  ]
37
40
 
38
41
  [project.optional-dependencies]
39
42
  dev = [
43
+ "pip-audit>=2.9,<3.0",
40
44
  "pre-commit>=3.7",
45
+ "pygments>=2.20.0,<3.0",
41
46
  "pytest>=8.0",
42
47
  "pytest-asyncio>=0.23",
43
48
  "pytest-cov>=5.0,<8.0",
44
49
  "ruff>=0.5",
45
- "mypy>=1.11,<1.12",
50
+ "mypy>=1.11,<1.21",
46
51
  ]
47
52
 
48
53
  [project.scripts]
@@ -12,8 +12,11 @@ This document only explains the remaining repository-local maintainer scripts. U
12
12
 
13
13
  ## Which Script to Use
14
14
 
15
+ - [`scripts/doctor.sh`](./doctor.sh): run the default local validation baseline through the shortest maintainer entrypoint.
15
16
  - [`scripts/validate_baseline.sh`](./validate_baseline.sh): run the default local validation baseline used by contributors and CI.
16
17
  - [`scripts/validate_runtime_matrix.sh`](./validate_runtime_matrix.sh): run the reduced runtime-only validation used by the multi-version CI matrix.
18
+ - [`scripts/conformance.sh`](./conformance.sh): run the official A2A TCK as a local/manual external compatibility experiment.
19
+ - [`scripts/dependency_health.sh`](./dependency_health.sh): run the standalone dependency review flow (`sync`/`pip check`, outdated package listing, and dev vulnerability audit).
17
20
  - [`scripts/smoke_test_built_cli.sh`](./smoke_test_built_cli.sh): validate that a built wheel can be installed through `uv tool` and becomes healthy.
18
21
  - [`scripts/sync_codex_docs.sh`](./sync_codex_docs.sh): refresh local upstream Codex reference snapshots when maintainers need them.
19
22
 
@@ -27,5 +30,10 @@ The `Publish` workflow now separates build, PyPI publish, and GitHub Release syn
27
30
 
28
31
  ## Notes
29
32
 
33
+ - `doctor.sh` is a thin alias for the default local regression baseline; `validate_baseline.sh` remains the CI-facing script name.
34
+ - `conformance.sh` intentionally stays outside the default regression gate. Use it to gather external compatibility evidence, then triage results in [`docs/conformance-triage.md`](../docs/conformance-triage.md).
35
+ - `validate_baseline.sh` and `dependency_health.sh` intentionally remain separate entrypoints and share common prerequisites through [`health_common.sh`](./health_common.sh).
36
+ - `validate_baseline.sh` now blocks on runtime dependency vulnerability audit, while `dependency_health.sh` remains focused on broader dependency review (`outdated` + dev audit).
37
+ - [`.github/dependabot.yml`](../.github/dependabot.yml) prefers a single weekly grouped Dependabot PR for `uv`, while the repository scripts remain the explicit audit and validation entrypoints.
30
38
  - End-user runtime startup does not use repository scripts. Prefer the published CLI command documented in [README.md](../README.md) and [docs/guide.md](../docs/guide.md).
31
39
  - Keep long-form documentation changes in `docs/` to avoid divergence.