opencode-a2a 0.8.2__tar.gz → 1.1.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 (232) hide show
  1. opencode_a2a-1.1.0/MANIFEST.in +1 -0
  2. {opencode_a2a-0.8.2/src/opencode_a2a.egg-info → opencode_a2a-1.1.0}/PKG-INFO +22 -13
  3. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/README.md +19 -11
  4. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/docs/compatibility.md +16 -15
  5. opencode_a2a-1.1.0/docs/conformance-triage.md +32 -0
  6. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/docs/conformance.md +2 -2
  7. opencode_a2a-1.1.0/docs/extension-specifications.md +169 -0
  8. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/docs/guide.md +120 -101
  9. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/pyproject.toml +10 -2
  10. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/scripts/README.md +3 -1
  11. opencode_a2a-1.1.0/scripts/doctor.sh +71 -0
  12. opencode_a2a-1.1.0/scripts/find_thin_wrappers.py +367 -0
  13. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/scripts/smoke_test_built_cli.sh +24 -10
  14. opencode_a2a-1.1.0/src/opencode_a2a/a2a_protocol.py +9 -0
  15. opencode_a2a-1.1.0/src/opencode_a2a/a2a_utils.py +96 -0
  16. opencode_a2a-1.1.0/src/opencode_a2a/cli.py +307 -0
  17. opencode_a2a-1.1.0/src/opencode_a2a/client/agent_card.py +43 -0
  18. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/client/client.py +149 -158
  19. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/client/config.py +2 -28
  20. opencode_a2a-1.1.0/src/opencode_a2a/client/error_mapping.py +258 -0
  21. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/client/errors.py +0 -13
  22. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/client/payload_text.py +65 -53
  23. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/client/polling.py +3 -6
  24. opencode_a2a-1.1.0/src/opencode_a2a/client/request_context.py +94 -0
  25. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/config.py +1 -48
  26. opencode_a2a-1.1.0/src/opencode_a2a/contracts/extensions/__init__.py +60 -0
  27. opencode_a2a-1.1.0/src/opencode_a2a/contracts/extensions/capabilities.py +142 -0
  28. opencode_a2a-1.1.0/src/opencode_a2a/contracts/extensions/catalog.py +657 -0
  29. opencode_a2a-1.1.0/src/opencode_a2a/contracts/extensions/compatibility.py +421 -0
  30. opencode_a2a-1.1.0/src/opencode_a2a/contracts/extensions/contract_docs.py +79 -0
  31. opencode_a2a-1.1.0/src/opencode_a2a/contracts/extensions/identifiers.py +48 -0
  32. opencode_a2a-1.1.0/src/opencode_a2a/contracts/extensions/private_params.py +251 -0
  33. opencode_a2a-1.1.0/src/opencode_a2a/contracts/extensions/public_params.py +295 -0
  34. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/execution/coordinator.py +75 -63
  35. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/execution/executor.py +93 -130
  36. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/execution/session_manager.py +7 -5
  37. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/execution/stream_events.py +7 -42
  38. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/execution/stream_runtime.py +128 -92
  39. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/execution/stream_state.py +39 -29
  40. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/execution/tool_error_mapping.py +5 -9
  41. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/execution/tool_orchestration.py +12 -20
  42. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/execution/upstream_error_translator.py +21 -31
  43. opencode_a2a-1.1.0/src/opencode_a2a/extension_negotiation.py +118 -0
  44. opencode_a2a-1.1.0/src/opencode_a2a/interrupt_request_tracker.py +75 -0
  45. opencode_a2a-1.1.0/src/opencode_a2a/jsonrpc/application.py +405 -0
  46. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/jsonrpc/dispatch.py +19 -4
  47. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/jsonrpc/error_responses.py +23 -47
  48. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/jsonrpc/handlers/common.py +2 -32
  49. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/jsonrpc/handlers/interrupt_callbacks.py +34 -44
  50. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/jsonrpc/handlers/interrupt_queries.py +1 -1
  51. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/jsonrpc/handlers/provider_discovery.py +8 -6
  52. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/jsonrpc/handlers/session_control.py +14 -16
  53. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/jsonrpc/handlers/session_lifecycle.py +40 -61
  54. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/jsonrpc/handlers/session_queries.py +25 -22
  55. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/jsonrpc/handlers/workspace_control.py +1 -1
  56. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/jsonrpc/methods.py +9 -9
  57. opencode_a2a-1.1.0/src/opencode_a2a/jsonrpc/models.py +32 -0
  58. opencode_a2a-1.1.0/src/opencode_a2a/jsonrpc/params.py +131 -0
  59. opencode_a2a-1.1.0/src/opencode_a2a/metadata_access.py +58 -0
  60. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/opencode_upstream_client.py +5 -8
  61. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/output_modes.py +167 -82
  62. opencode_a2a-1.1.0/src/opencode_a2a/parts/mapping.py +133 -0
  63. opencode_a2a-1.1.0/src/opencode_a2a/protocol_versions.py +48 -0
  64. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/server/agent_card.py +82 -173
  65. opencode_a2a-1.1.0/src/opencode_a2a/server/application.py +1069 -0
  66. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/server/client_manager.py +0 -3
  67. opencode_a2a-1.1.0/src/opencode_a2a/server/context_helpers.py +97 -0
  68. opencode_a2a-1.1.0/src/opencode_a2a/server/database.py +62 -0
  69. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/server/lifespan.py +19 -14
  70. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/server/middleware.py +70 -122
  71. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/server/migrations.py +17 -1
  72. opencode_a2a-1.1.0/src/opencode_a2a/server/openapi.py +375 -0
  73. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/server/request_parsing.py +0 -43
  74. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/server/rest_tasks.py +117 -86
  75. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/server/state_store.py +55 -36
  76. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/server/task_store.py +102 -171
  77. opencode_a2a-1.1.0/src/opencode_a2a/server/task_store_sdk_compat.py +275 -0
  78. opencode_a2a-1.1.0/src/opencode_a2a/task_states.py +12 -0
  79. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/upstream_taxonomy.py +8 -15
  80. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0/src/opencode_a2a.egg-info}/PKG-INFO +22 -13
  81. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a.egg-info/SOURCES.txt +27 -3
  82. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a.egg-info/requires.txt +2 -1
  83. opencode_a2a-1.1.0/tests/client/test_agent_card.py +42 -0
  84. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/client/test_client_config.py +12 -8
  85. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/client/test_client_facade.py +184 -122
  86. opencode_a2a-1.1.0/tests/client/test_error_mapping.py +254 -0
  87. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/client/test_payload_text.py +30 -11
  88. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/client/test_polling.py +4 -4
  89. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/client/test_request_context.py +55 -11
  90. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/config/test_settings.py +30 -19
  91. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/contracts/test_extension_contract_consistency.py +245 -110
  92. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/execution/test_agent_errors.py +74 -54
  93. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/execution/test_agent_helpers.py +32 -28
  94. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/execution/test_cancellation.py +6 -4
  95. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/execution/test_directory_validation.py +4 -2
  96. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/execution/test_metrics.py +32 -9
  97. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/execution/test_multipart_input.py +22 -21
  98. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/execution/test_opencode_agent_session_binding.py +55 -97
  99. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/execution/test_session_ownership.py +7 -5
  100. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/execution/test_streaming_output_contract_blocks.py +10 -5
  101. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/execution/test_streaming_output_contract_core.py +239 -61
  102. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/execution/test_streaming_output_contract_interrupts.py +57 -21
  103. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/execution/test_streaming_output_contract_logging.py +1 -1
  104. opencode_a2a-1.1.0/tests/jsonrpc/test_application_dispatch.py +390 -0
  105. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/jsonrpc/test_dispatch_registry.py +100 -65
  106. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/jsonrpc/test_error_responses.py +21 -28
  107. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/jsonrpc/test_jsonrpc_methods.py +1 -1
  108. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/jsonrpc/test_jsonrpc_params.py +13 -28
  109. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/jsonrpc/test_jsonrpc_unsupported_method.py +29 -27
  110. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/jsonrpc/test_opencode_session_extension_commands.py +92 -49
  111. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/jsonrpc/test_opencode_session_extension_interrupts.py +152 -40
  112. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/jsonrpc/test_opencode_session_extension_lifecycle.py +35 -20
  113. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/jsonrpc/test_opencode_session_extension_prompt_async.py +76 -46
  114. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/jsonrpc/test_opencode_session_extension_queries.py +88 -73
  115. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/jsonrpc/test_opencode_workspace_control_extension.py +30 -20
  116. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/package/test_typing_contract.py +8 -0
  117. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/profile/test_profile_runtime.py +6 -5
  118. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/scripts/test_script_health_contract.py +27 -0
  119. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/server/test_a2a_client_manager.py +0 -8
  120. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/server/test_agent_card.py +105 -112
  121. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/server/test_app_behaviors.py +714 -137
  122. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/server/test_auth.py +1 -1
  123. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/server/test_call_context_builder.py +6 -0
  124. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/server/test_cancel_contract.py +92 -55
  125. opencode_a2a-1.1.0/tests/server/test_cli.py +312 -0
  126. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/server/test_database_app_persistence.py +6 -5
  127. opencode_a2a-1.1.0/tests/server/test_output_negotiation.py +451 -0
  128. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/server/test_state_store.py +115 -2
  129. opencode_a2a-1.1.0/tests/server/test_task_store_factory.py +880 -0
  130. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/server/test_transport_contract.py +544 -128
  131. opencode_a2a-1.1.0/tests/support/async_iterators.py +17 -0
  132. opencode_a2a-1.1.0/tests/support/fake_client_errors.py +21 -0
  133. opencode_a2a-1.1.0/tests/support/helpers.py +231 -0
  134. opencode_a2a-1.1.0/tests/support/interrupt_clients.py +141 -0
  135. opencode_a2a-1.1.0/tests/support/jsonrpc_error_assertions.py +84 -0
  136. opencode_a2a-1.1.0/tests/support/session_extensions.py +46 -0
  137. opencode_a2a-1.1.0/tests/support/session_query_client.py +449 -0
  138. opencode_a2a-1.1.0/tests/support/settings.py +82 -0
  139. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/support/streaming_output.py +14 -40
  140. opencode_a2a-1.1.0/tests/support/workspace_control_client.py +65 -0
  141. opencode_a2a-1.1.0/tests/test_parsing.py +126 -0
  142. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/upstream/test_opencode_upstream_client_params.py +1 -1
  143. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/uv.lock +304 -172
  144. opencode_a2a-0.8.2/docs/conformance-triage.md +0 -89
  145. opencode_a2a-0.8.2/docs/extension-specifications.md +0 -105
  146. opencode_a2a-0.8.2/scripts/doctor.sh +0 -26
  147. opencode_a2a-0.8.2/src/opencode_a2a/cli.py +0 -97
  148. opencode_a2a-0.8.2/src/opencode_a2a/client/agent_card.py +0 -86
  149. opencode_a2a-0.8.2/src/opencode_a2a/client/error_mapping.py +0 -148
  150. opencode_a2a-0.8.2/src/opencode_a2a/client/request_context.py +0 -80
  151. opencode_a2a-0.8.2/src/opencode_a2a/contracts/extensions.py +0 -1752
  152. opencode_a2a-0.8.2/src/opencode_a2a/execution/request_context.py +0 -88
  153. opencode_a2a-0.8.2/src/opencode_a2a/invocation.py +0 -30
  154. opencode_a2a-0.8.2/src/opencode_a2a/jsonrpc/application.py +0 -269
  155. opencode_a2a-0.8.2/src/opencode_a2a/jsonrpc/params.py +0 -212
  156. opencode_a2a-0.8.2/src/opencode_a2a/metadata_access.py +0 -39
  157. opencode_a2a-0.8.2/src/opencode_a2a/parts/mapping.py +0 -151
  158. opencode_a2a-0.8.2/src/opencode_a2a/protocol_versions.py +0 -103
  159. opencode_a2a-0.8.2/src/opencode_a2a/server/application.py +0 -736
  160. opencode_a2a-0.8.2/src/opencode_a2a/server/openapi.py +0 -713
  161. opencode_a2a-0.8.2/src/opencode_a2a/task_states.py +0 -12
  162. opencode_a2a-0.8.2/tests/client/test_agent_card.py +0 -82
  163. opencode_a2a-0.8.2/tests/client/test_error_mapping.py +0 -81
  164. opencode_a2a-0.8.2/tests/server/test_cli.py +0 -67
  165. opencode_a2a-0.8.2/tests/server/test_output_negotiation.py +0 -217
  166. opencode_a2a-0.8.2/tests/server/test_task_store_factory.py +0 -453
  167. opencode_a2a-0.8.2/tests/support/helpers.py +0 -903
  168. opencode_a2a-0.8.2/tests/support/session_extensions.py +0 -19
  169. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/.github/dependabot.yml +0 -0
  170. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/.github/workflows/dependency-review.yml +0 -0
  171. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/.github/workflows/publish.yml +0 -0
  172. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/.github/workflows/validate.yml +0 -0
  173. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/.gitignore +0 -0
  174. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/.pre-commit-config.yaml +0 -0
  175. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/.secrets.baseline +0 -0
  176. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/AGENTS.md +0 -0
  177. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/CODE_OF_CONDUCT.md +0 -0
  178. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/CONTRIBUTING.md +0 -0
  179. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/LICENSE +0 -0
  180. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/SECURITY.md +0 -0
  181. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/SUPPORT.md +0 -0
  182. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/docs/architecture.md +0 -0
  183. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/docs/maintainer-architecture.md +0 -0
  184. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/scripts/check_coverage.py +0 -0
  185. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/scripts/conformance.sh +0 -0
  186. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/scripts/dependency_health.sh +0 -0
  187. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/scripts/health_common.sh +0 -0
  188. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/scripts/lint.sh +0 -0
  189. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/setup.cfg +0 -0
  190. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/__init__.py +0 -0
  191. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/auth.py +0 -0
  192. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/client/__init__.py +0 -0
  193. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/client/auth.py +0 -0
  194. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/contracts/__init__.py +0 -0
  195. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/execution/__init__.py +0 -0
  196. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/execution/event_helpers.py +0 -0
  197. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/execution/metrics.py +0 -0
  198. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/jsonrpc/__init__.py +0 -0
  199. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/jsonrpc/handlers/__init__.py +0 -0
  200. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/parsing.py +0 -0
  201. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/parts/__init__.py +0 -0
  202. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/parts/text.py +0 -0
  203. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/profile/__init__.py +0 -0
  204. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/profile/runtime.py +0 -0
  205. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/py.typed +0 -0
  206. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/runtime_state.py +0 -0
  207. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/sandbox_policy.py +0 -0
  208. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/server/__init__.py +0 -0
  209. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a/trace_context.py +0 -0
  210. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a.egg-info/dependency_links.txt +0 -0
  211. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a.egg-info/entry_points.txt +0 -0
  212. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/src/opencode_a2a.egg-info/top_level.txt +0 -0
  213. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/__init__.py +0 -0
  214. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/client/__init__.py +0 -0
  215. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/config/__init__.py +0 -0
  216. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/conftest.py +0 -0
  217. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/contracts/__init__.py +0 -0
  218. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/execution/__init__.py +0 -0
  219. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/execution/test_session_lock_lifecycle.py +0 -0
  220. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/jsonrpc/__init__.py +0 -0
  221. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/package/__init__.py +0 -0
  222. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/package/test_logging.py +0 -0
  223. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/package/test_version.py +0 -0
  224. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/parts/__init__.py +0 -0
  225. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/parts/test_parts_text.py +0 -0
  226. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/profile/__init__.py +0 -0
  227. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/scripts/__init__.py +0 -0
  228. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/server/__init__.py +0 -0
  229. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/support/__init__.py +0 -0
  230. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/test_metadata_access.py +0 -0
  231. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/test_trace_context.py +0 -0
  232. {opencode_a2a-0.8.2 → opencode_a2a-1.1.0}/tests/upstream/__init__.py +0 -0
@@ -0,0 +1 @@
1
+ recursive-include docs *.md
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opencode-a2a
3
- Version: 0.8.2
3
+ Version: 1.1.0
4
4
  Summary: OpenCode A2A runtime
5
5
  Author: liujuanjuan1984@Intelligent-Internet
6
6
  License-Expression: Apache-2.0
@@ -19,12 +19,13 @@ Classifier: Topic :: Internet :: WWW/HTTP
19
19
  Requires-Python: >=3.11
20
20
  Description-Content-Type: text/markdown
21
21
  License-File: LICENSE
22
- Requires-Dist: a2a-sdk==0.3.26
22
+ Requires-Dist: a2a-sdk==1.0.2
23
23
  Requires-Dist: aiosqlite<1.0,>=0.20
24
24
  Requires-Dist: fastapi<1.0,>=0.110
25
25
  Requires-Dist: httpx<1.0,>=0.27
26
26
  Requires-Dist: pydantic<3.0,>=2.6
27
27
  Requires-Dist: pydantic-settings<3.0,>=2.2
28
+ Requires-Dist: protobuf<7.0,>=6.33.5
28
29
  Requires-Dist: sqlalchemy<3.0,>=2.0
29
30
  Requires-Dist: sse-starlette<4.0,>=2.1
30
31
  Requires-Dist: uvicorn<1.0,>=0.29
@@ -41,6 +42,15 @@ Dynamic: license-file
41
42
 
42
43
  # opencode-a2a
43
44
 
45
+ ```text
46
+ ___ ____ _ _ ____ _
47
+ / _ \ _ __ ___ _ __ / ___|___ __| | ___ / \ |___ \ / \
48
+ | | | | '_ \ / _ \ '_ \| | / _ \ / _` |/ _ \_____ / _ \ __) | / _ \
49
+ | |_| | |_) | __/ | | | |__| (_) | (_| | __/_____/ ___ \ / __/ / ___ \
50
+ \___/| .__/ \___|_| |_|\____\___/ \__,_|\___| /_/ \_\_____/_/ \_\
51
+ |_|
52
+ ```
53
+
44
54
  > Expose OpenCode through A2A.
45
55
 
46
56
  `opencode-a2a` adds an A2A runtime layer to `opencode serve`, with auth, streaming, session continuity, interrupt handling, and a clear deployment boundary.
@@ -68,11 +78,11 @@ flowchart TD
68
78
  PeerA2A --> PeerRuntime
69
79
  end
70
80
 
71
- External -->|message/send,\nmessage:stream| Ingress
81
+ External -->|SendMessage,\nSendStreamingMessage| Ingress
72
82
  Ingress -->|tool call| OpenCode
73
83
  OpenCode -->|model/tool result events| Ingress
74
84
  Ingress -->|a2a_call| Outbound
75
- Outbound -->|message/send,\nmessage:stream| PeerA2A
85
+ Outbound -->|SendMessage,\nSendStreamingMessage| PeerA2A
76
86
  PeerA2A -->|tool result| Outbound
77
87
  PeerRuntime -->|task session\nexecution| PeerA2A
78
88
  ```
@@ -112,7 +122,7 @@ A2A_HOST=127.0.0.1 \
112
122
  A2A_PORT=8000 \
113
123
  A2A_PUBLIC_URL=http://127.0.0.1:8000 \
114
124
  OPENCODE_WORKSPACE_ROOT=/abs/path/to/workspace \
115
- opencode-a2a
125
+ opencode-a2a serve
116
126
  ```
117
127
 
118
128
  Verify that the service is up:
@@ -125,7 +135,7 @@ curl http://127.0.0.1:8000/.well-known/agent-card.json
125
135
 
126
136
  - A2A HTTP+JSON endpoints such as `/v1/message:send` and `/v1/message:stream`
127
137
  - A2A JSON-RPC support on `POST /`
128
- - SDK-owned A2A task surfaces such as `GET /v1/tasks`, task push notification config routes, and JSON-RPC `agent/getAuthenticatedExtendedCard`
138
+ - SDK-owned A2A task surfaces such as `GET /v1/tasks`, task push notification config routes, JSON-RPC `GetExtendedAgentCard`, and HTTP `GET /extendedAgentCard`
129
139
  - Peering capabilities: can act as a client via `opencode-a2a call`
130
140
  - Autonomous tool execution: supports `a2a_call` tool for outbound agent-to-agent communication
131
141
  - SSE streaming with normalized `text`, `reasoning`, and `tool_call` blocks
@@ -135,11 +145,10 @@ curl http://127.0.0.1:8000/.well-known/agent-card.json
135
145
 
136
146
  ## A2A Protocol Support
137
147
 
138
- - Default protocol line: `0.3`
139
- - Declared supported protocol lines: `0.3`, `1.0`
140
- - `0.3` is the stable interoperability baseline for the current runtime surface.
141
- - `1.0` currently covers version negotiation plus protocol-aware JSON-RPC and REST error shaping, while transport payloads, enums, pagination, signatures, and interface-level protocol declarations still follow the shipped SDK baseline.
142
- - The detailed compatibility matrix and machine-readable support boundary are documented in [`docs/guide.md`](docs/guide.md) and [`docs/compatibility.md`](docs/compatibility.md).
148
+ - Supported A2A protocol line: `1.0`
149
+ - The runtime is now v1-only across HTTP+JSON, JSON-RPC, Agent Card discovery, and protocol-aware error contracts.
150
+ - Legacy `0.3` method aliases and payload shapes are rejected instead of being normalized at runtime.
151
+ - The detailed runtime contract and machine-readable support boundary are documented in [`docs/guide.md`](docs/guide.md) and [`docs/compatibility.md`](docs/compatibility.md).
143
152
 
144
153
  ## Peering Node / Outbound Access
145
154
 
@@ -151,12 +160,12 @@ Interact with other A2A agents directly from the command line:
151
160
  ```bash
152
161
  # Using the target peer agent's Bearer token via environment injection
153
162
  A2A_CLIENT_BEARER_TOKEN=your-outbound-token \
154
- opencode-a2a call http://other-agent:8000 "How are you?"
163
+ opencode-a2a call http://other-agent:8000/.well-known/agent-card.json "How are you?"
155
164
 
156
165
  # Using the target peer agent's Basic auth via environment injection
157
166
  # Accepts raw user:pass or its base64-encoded value
158
167
  A2A_CLIENT_BASIC_AUTH="user:pass" \
159
- opencode-a2a call http://other-agent:8000 "How are you?"
168
+ opencode-a2a call http://other-agent:8000/.well-known/agent-card.json "How are you?"
160
169
  ```
161
170
 
162
171
  ### Outbound Agent Calls (Tools)
@@ -1,5 +1,14 @@
1
1
  # opencode-a2a
2
2
 
3
+ ```text
4
+ ___ ____ _ _ ____ _
5
+ / _ \ _ __ ___ _ __ / ___|___ __| | ___ / \ |___ \ / \
6
+ | | | | '_ \ / _ \ '_ \| | / _ \ / _` |/ _ \_____ / _ \ __) | / _ \
7
+ | |_| | |_) | __/ | | | |__| (_) | (_| | __/_____/ ___ \ / __/ / ___ \
8
+ \___/| .__/ \___|_| |_|\____\___/ \__,_|\___| /_/ \_\_____/_/ \_\
9
+ |_|
10
+ ```
11
+
3
12
  > Expose OpenCode through A2A.
4
13
 
5
14
  `opencode-a2a` adds an A2A runtime layer to `opencode serve`, with auth, streaming, session continuity, interrupt handling, and a clear deployment boundary.
@@ -27,11 +36,11 @@ flowchart TD
27
36
  PeerA2A --> PeerRuntime
28
37
  end
29
38
 
30
- External -->|message/send,\nmessage:stream| Ingress
39
+ External -->|SendMessage,\nSendStreamingMessage| Ingress
31
40
  Ingress -->|tool call| OpenCode
32
41
  OpenCode -->|model/tool result events| Ingress
33
42
  Ingress -->|a2a_call| Outbound
34
- Outbound -->|message/send,\nmessage:stream| PeerA2A
43
+ Outbound -->|SendMessage,\nSendStreamingMessage| PeerA2A
35
44
  PeerA2A -->|tool result| Outbound
36
45
  PeerRuntime -->|task session\nexecution| PeerA2A
37
46
  ```
@@ -71,7 +80,7 @@ A2A_HOST=127.0.0.1 \
71
80
  A2A_PORT=8000 \
72
81
  A2A_PUBLIC_URL=http://127.0.0.1:8000 \
73
82
  OPENCODE_WORKSPACE_ROOT=/abs/path/to/workspace \
74
- opencode-a2a
83
+ opencode-a2a serve
75
84
  ```
76
85
 
77
86
  Verify that the service is up:
@@ -84,7 +93,7 @@ curl http://127.0.0.1:8000/.well-known/agent-card.json
84
93
 
85
94
  - A2A HTTP+JSON endpoints such as `/v1/message:send` and `/v1/message:stream`
86
95
  - A2A JSON-RPC support on `POST /`
87
- - SDK-owned A2A task surfaces such as `GET /v1/tasks`, task push notification config routes, and JSON-RPC `agent/getAuthenticatedExtendedCard`
96
+ - SDK-owned A2A task surfaces such as `GET /v1/tasks`, task push notification config routes, JSON-RPC `GetExtendedAgentCard`, and HTTP `GET /extendedAgentCard`
88
97
  - Peering capabilities: can act as a client via `opencode-a2a call`
89
98
  - Autonomous tool execution: supports `a2a_call` tool for outbound agent-to-agent communication
90
99
  - SSE streaming with normalized `text`, `reasoning`, and `tool_call` blocks
@@ -94,11 +103,10 @@ curl http://127.0.0.1:8000/.well-known/agent-card.json
94
103
 
95
104
  ## A2A Protocol Support
96
105
 
97
- - Default protocol line: `0.3`
98
- - Declared supported protocol lines: `0.3`, `1.0`
99
- - `0.3` is the stable interoperability baseline for the current runtime surface.
100
- - `1.0` currently covers version negotiation plus protocol-aware JSON-RPC and REST error shaping, while transport payloads, enums, pagination, signatures, and interface-level protocol declarations still follow the shipped SDK baseline.
101
- - The detailed compatibility matrix and machine-readable support boundary are documented in [`docs/guide.md`](docs/guide.md) and [`docs/compatibility.md`](docs/compatibility.md).
106
+ - Supported A2A protocol line: `1.0`
107
+ - The runtime is now v1-only across HTTP+JSON, JSON-RPC, Agent Card discovery, and protocol-aware error contracts.
108
+ - Legacy `0.3` method aliases and payload shapes are rejected instead of being normalized at runtime.
109
+ - The detailed runtime contract and machine-readable support boundary are documented in [`docs/guide.md`](docs/guide.md) and [`docs/compatibility.md`](docs/compatibility.md).
102
110
 
103
111
  ## Peering Node / Outbound Access
104
112
 
@@ -110,12 +118,12 @@ Interact with other A2A agents directly from the command line:
110
118
  ```bash
111
119
  # Using the target peer agent's Bearer token via environment injection
112
120
  A2A_CLIENT_BEARER_TOKEN=your-outbound-token \
113
- opencode-a2a call http://other-agent:8000 "How are you?"
121
+ opencode-a2a call http://other-agent:8000/.well-known/agent-card.json "How are you?"
114
122
 
115
123
  # Using the target peer agent's Basic auth via environment injection
116
124
  # Accepts raw user:pass or its base64-encoded value
117
125
  A2A_CLIENT_BASIC_AUTH="user:pass" \
118
- opencode-a2a call http://other-agent:8000 "How are you?"
126
+ opencode-a2a call http://other-agent:8000/.well-known/agent-card.json "How are you?"
119
127
  ```
120
128
 
121
129
  ### Outbound Agent Calls (Tools)
@@ -1,15 +1,14 @@
1
1
  # Compatibility Guide
2
2
 
3
- This document explains the compatibility promises `opencode-a2a` currently tries to uphold for A2A consumers, operators, and maintainers.
3
+ This document defines the compatibility promises `opencode-a2a` currently upholds for A2A consumers, operators, and maintainers.
4
4
 
5
5
  ## Runtime Support
6
6
 
7
7
  - Python versions: 3.11, 3.12, 3.13
8
- - A2A SDK line: `0.3.x`
9
- - Default advertised protocol line: `0.3`
10
- - Declared supported protocol lines: `0.3`, `1.0`
8
+ - A2A SDK line: `1.x.y`
9
+ - Supported A2A protocol line: `1.0`
11
10
 
12
- The repository pins the SDK version in `pyproject.toml`. Upgrade the SDK deliberately rather than relying on floating dependency resolution.
11
+ The repository currently pins one concrete SDK release in `pyproject.toml` within that v1 line. Upgrade the SDK deliberately rather than relying on floating dependency resolution. The SDK-owned core JSON-RPC method set follows that pinned release and is locked by repository tests so SDK upgrades trigger an explicit compatibility review.
13
12
 
14
13
  ## Contract Honesty
15
14
 
@@ -21,12 +20,12 @@ Machine-readable discovery surfaces must reflect actual runtime behavior:
21
20
  - JSON-RPC wire contract
22
21
  - compatibility profile
23
22
 
24
- If runtime support is not actually implemented, do not publish it as a supported machine-readable capability.
23
+ If runtime support is not implemented, do not publish it as a supported machine-readable capability.
25
24
 
26
25
  Consumer guidance:
27
26
 
28
- - Treat the core A2A send / stream / task methods as the portable baseline.
29
- - Treat `urn:a2a:*` entries in this repository as shared repo-family conventions, not as a claim that they are part of the A2A core baseline.
27
+ - Treat the v1 core A2A methods (`SendMessage`, `SendStreamingMessage`, `GetTask`, `CancelTask`, `SubscribeToTask`) as the portable baseline.
28
+ - Treat `urn:opencode-a2a:extension:...` entries in this repository as repository-governed extension identifiers, not as a claim that they are part of the A2A core baseline.
30
29
  - Treat `opencode.*` methods and `metadata.opencode.*` fields as provider-private OpenCode control and discovery surfaces layered on top of the portable A2A baseline.
31
30
  - Treat [extension-specifications.md](./extension-specifications.md) as the stable URI/spec index, not as the main usage guide.
32
31
 
@@ -45,7 +44,8 @@ External TCK runs and local conformance experiments are investigation inputs. Th
45
44
  This repository still ships as an alpha project. Within that alpha line, these declared surfaces should not drift silently:
46
45
 
47
46
  - core A2A send / stream / task methods
48
- - version negotiation and protocol-aware error shaping
47
+ - v1-only request/response payloads and enum values
48
+ - v1 protocol-aware JSON-RPC and REST error shaping
49
49
  - shared session-binding metadata
50
50
  - shared model-selection metadata
51
51
  - shared streaming metadata
@@ -53,12 +53,13 @@ This repository still ships as an alpha project. Within that alpha line, these d
53
53
  - authenticated extended card and OpenAPI wire-contract metadata
54
54
 
55
55
  Changes to those surfaces should be treated as compatibility-sensitive and should include corresponding test updates.
56
+ - provider-private session query params use one top-level request shape; the repository does not promise parallel nested `query.*` aliases for the same filters.
56
57
 
57
58
  Service-level behavior layered on top of those core methods should also be declared explicitly when interoperability depends on it. Current examples:
58
59
 
59
- - `tasks/resubscribe` replay-once behavior for terminal updates
60
+ - `SubscribeToTask` replay-once behavior for terminal updates
60
61
  - first-terminal-state-wins task persistence policy
61
- - task-scoped `acceptedOutputModes` negotiation persistence across send / stream / get / resubscribe
62
+ - task-scoped `acceptedOutputModes` negotiation persistence across send / stream / get / subscribe
62
63
  - request-body rejection behavior for oversized transport payloads
63
64
 
64
65
  ## Deployment Profile
@@ -92,13 +93,13 @@ The default SQLite-first profile is intended for local or controlled single-inst
92
93
  ## Extension Stability
93
94
 
94
95
  - Shared metadata and extension contracts should stay synchronized across Agent Card, OpenAPI, and runtime behavior.
95
- - Public Agent Card should stay intentionally minimal. Detailed extension params belong in the authenticated extended card and OpenAPI, not back in the anonymous discovery surface.
96
+ - Public Agent Card should stay intentionally minimal. Detailed extension params belong in the authenticated extended card, while anonymous OpenAPI should mirror only the shared public disclosure subset.
96
97
  - Deployment-conditional methods must be declared as conditional rather than silently disappearing.
97
98
  - `opencode.sessions.prompt_async` input-part passthrough is compatibility-sensitive. Changes to supported part types, passthrough field semantics, or rejection behavior should be treated as wire-level changes.
98
99
  - `opencode.sessions.shell` is compatibility-sensitive as a deployment-conditional shell snapshot surface. It should not silently widen into a general interactive shell API.
99
100
  - `opencode.workspaces.*` and `opencode.worktrees.*` are boundary-sensitive and should remain explicitly provider-private, operator-scoped, and deployment-conditional where applicable.
100
101
  - Interrupt callback and recovery methods are compatibility-sensitive because clients may depend on request ID lifecycle, expiry semantics, and identity scoping.
101
- - Agent Card media modes and `acceptedOutputModes` handling are compatibility-sensitive. Changes to declared chat modes, to task-scoped negotiation persistence, or to `DataPart` -> `TextPart` downgrade behavior should be treated as wire-level changes.
102
+ - Agent Card media modes and `acceptedOutputModes` handling are compatibility-sensitive. Changes to declared chat modes, to task-scoped negotiation persistence, or to output filtering of structured tool payloads should be treated as wire-level changes.
102
103
  - Agent Card and OpenAPI publication of `protocol_compatibility`, `service_behaviors`, and runtime feature toggles is compatibility-sensitive discoverability surface.
103
104
 
104
105
  ## Extension Boundary Governance
@@ -132,7 +133,7 @@ This repository distinguishes between three layers:
132
133
 
133
134
  Important note:
134
135
 
135
- - `urn:a2a:*` extension URIs used here should be read as shared conventions in this repository family.
136
+ - `urn:opencode-a2a:extension:...` extension URIs used here are repository-governed, versioned permanent identifiers.
136
137
  - They are not a claim that those extensions are part of the A2A core baseline.
137
138
  - `opencode.*` methods are intentionally product-specific. They improve OpenCode-aware workflows but should not be assumed to transfer unchanged to unrelated A2A agents.
138
139
 
@@ -142,6 +143,6 @@ This repository does not currently promise:
142
143
 
143
144
  - hard multi-tenant isolation inside one instance
144
145
  - generic provider-auth orchestration on behalf of OpenCode
145
- - a claim that all declared `1.0` protocol surfaces are fully implemented beyond the documented compatibility matrix
146
+ - compatibility with legacy A2A `0.3` method aliases or payload shapes
146
147
 
147
148
  Those areas may evolve later, but they should not be implied by current machine-readable discovery output.
@@ -0,0 +1,32 @@
1
+ # External Conformance Triage
2
+
3
+ This document summarizes the current interpretation rules for external TCK runs after the repository's A2A v1 migration.
4
+
5
+ ## Current Runtime Baseline
6
+
7
+ - `opencode-a2a` now targets the `a2a-sdk 1.x.y` line
8
+ - the runtime is v1-only
9
+ - canonical JSON-RPC core methods are `SendMessage`, `SendStreamingMessage`, `GetTask`, `CancelTask`, and `SubscribeToTask`
10
+ - legacy `0.3` aliases and payload shapes are intentionally rejected rather than normalized
11
+
12
+ ## How To Read TCK Failures
13
+
14
+ When a TCK run fails, classify the result before changing the runtime:
15
+
16
+ - `Runtime gap`
17
+ - the failure reproduces against the current v1-only runtime and contradicts the repository's declared machine-readable contract
18
+ - `TCK assumption mismatch`
19
+ - the failure depends on method names, payload shapes, or schema expectations that do not match the current A2A v1 SDK/runtime contract
20
+ - `Local experiment artifact`
21
+ - the failure depends on dummy-backed local behavior, environment heuristics, or unrelated tooling/setup issues
22
+
23
+ ## Current Guidance
24
+
25
+ - Re-run conformance against the current runtime before using any historical triage note.
26
+ - Treat Agent Card, authenticated extended card, OpenAPI, and runtime tests as the repository's declared source of truth.
27
+ - Do not reopen removed `0.3` compatibility behavior just to satisfy an outdated TCK assumption.
28
+ - If a TCK gap is real, document it against the current v1 contract with the exact request/response payloads that failed.
29
+
30
+ ## Historical Note
31
+
32
+ Earlier repository-local triage notes were written before the v1 migration and described a mixed `0.3` / partial `1.0` state. Those notes are no longer normative and were removed to avoid stale guidance.
@@ -59,8 +59,8 @@ Each run keeps the following artifacts in the selected output directory:
59
59
  When a TCK run fails, inspect the raw report before changing the runtime:
60
60
 
61
61
  - Some failures may point to real runtime gaps.
62
- - Some failures may come from TCK assumptions that do not match `a2a-sdk==0.3.25`.
63
- - Some failures may come from A2A v0.3 versus v1.0 naming or schema drift.
62
+ - Some failures may come from TCK assumptions that do not match the current `a2a-sdk 1.x.y` contract.
63
+ - Some failures may come from local dummy-backed experiment behavior rather than a wire-level runtime defect.
64
64
 
65
65
  The experiment is useful only if those categories stay separate during triage.
66
66
 
@@ -0,0 +1,169 @@
1
+ # Extension Specifications
2
+
3
+ This document is the stable specification index for extension URIs published by `opencode-a2a`. It is intentionally a compact URI/spec map, not the main consumer guide. For runtime behavior, request examples, and operational setup, see [`guide.md`](./guide.md). For compatibility promises and stability expectations, see [`compatibility.md`](./compatibility.md).
4
+
5
+ ## Discovery Surface Note
6
+
7
+ `opencode-a2a` splits extension discovery into three layers:
8
+
9
+ - Public Agent Card: minimal anonymous discovery for core interfaces and low-sensitivity shared extensions
10
+ - Authenticated extended Agent Card: the canonical machine-readable source for deployment-specific provider-private contracts
11
+ - OpenAPI metadata: minimal anonymous shared-contract disclosure only; provider-private method matrices are intentionally not expanded there
12
+
13
+ Provider-private contract note:
14
+
15
+ - `opencode.*` methods in this repository are deployment-specific provider extensions, not portable A2A baseline capabilities.
16
+ - Shared `metadata.shared.*` contracts are intended to remain low-risk and transportable.
17
+ - Compatibility and wire-contract URIs are descriptive metadata contracts, not activatable runtime capabilities.
18
+ - URI path segments identify the contract, not its auth or disclosure tier; public-vs-extended disclosure is controlled by Agent Card and OpenAPI surfaces.
19
+
20
+ ## SDK and Discovery Compatibility
21
+
22
+ - A2A v1.0 Agent Cards expose extended-card availability via `AgentCard.capabilities.extendedAgentCard`.
23
+ - `opencode-a2a` emits `capabilities.extendedAgentCard` in both public and authenticated extended cards; it does not emit the removed top-level `supportsAuthenticatedExtendedCard` field.
24
+ - The canonical authenticated extended Agent Card HTTP endpoint is `GET /extendedAgentCard`.
25
+
26
+ ## URI Index
27
+
28
+ | Extension | Scope | Disclosure | URI | Section |
29
+ | --- | --- | --- | --- | --- |
30
+ | Shared Session Binding v1 | Shared request metadata | Public + extended | `urn:opencode-a2a:extension:session-binding:v1` | [Shared Session Binding v1](#shared-session-binding-v1) |
31
+ | Shared Model Selection v1 | Shared request metadata | Public + extended | `urn:opencode-a2a:extension:model-selection:v1` | [Shared Model Selection v1](#shared-model-selection-v1) |
32
+ | Shared Stream Hints v1 | Shared response/stream metadata | Public + extended | `urn:opencode-a2a:extension:stream-hints:v1` | [Shared Stream Hints v1](#shared-stream-hints-v1) |
33
+ | Shared Interactive Interrupt v1 | Shared JSON-RPC callback methods | Public + extended | `urn:opencode-a2a:extension:interactive-interrupt:v1` | [Shared Interactive Interrupt v1](#shared-interactive-interrupt-v1) |
34
+ | OpenCode Session Management v1 | Provider-private JSON-RPC methods | Extended only | `urn:opencode-a2a:extension:session-management:v1` | [OpenCode Session Management v1](#opencode-session-management-v1) |
35
+ | OpenCode Provider Discovery v1 | Provider-private JSON-RPC methods | Extended only | `urn:opencode-a2a:extension:provider-discovery:v1` | [OpenCode Provider Discovery v1](#opencode-provider-discovery-v1) |
36
+ | OpenCode Workspace Control v1 | Provider-private JSON-RPC methods | Extended only | `urn:opencode-a2a:extension:workspace-control:v1` | [OpenCode Workspace Control v1](#opencode-workspace-control-v1) |
37
+ | OpenCode Interrupt Recovery v1 | Provider-private JSON-RPC methods | Extended only | `urn:opencode-a2a:extension:interrupt-recovery:v1` | [OpenCode Interrupt Recovery v1](#opencode-interrupt-recovery-v1) |
38
+ | A2A Compatibility Profile v1 | Authenticated discovery metadata | Extended only | `urn:opencode-a2a:extension:compatibility-profile:v1` | [A2A Compatibility Profile v1](#a2a-compatibility-profile-v1) |
39
+ | A2A Wire Contract v1 | Authenticated discovery metadata | Extended only | `urn:opencode-a2a:extension:wire-contract:v1` | [A2A Wire Contract v1](#a2a-wire-contract-v1) |
40
+
41
+ ## Shared Session Binding v1
42
+
43
+ Extension URI: `urn:opencode-a2a:extension:session-binding:v1`
44
+
45
+ - Scope: shared A2A request metadata for rebinding to an existing upstream OpenCode session, plus negotiated response/task session metadata
46
+ - Disclosure: public Agent Card and authenticated extended Agent Card
47
+ - Activation: client requests the URI via `A2A-Extensions` and sends `metadata.shared.session.id`
48
+ - Runtime fields: `metadata.shared.session.id`, `metadata.shared.session`, optional provider-private companions `metadata.opencode.directory` and `metadata.opencode.workspace.id`
49
+ - Dependencies: none declared by this version
50
+ - Security boundary: shared session identity is portable; provider-private routing metadata remains deployment-scoped
51
+ - Versioning: breaking changes require a new versioned URI
52
+
53
+ ## Shared Model Selection v1
54
+
55
+ Extension URI: `urn:opencode-a2a:extension:model-selection:v1`
56
+
57
+ - Scope: shared request-scoped model override for the main chat path
58
+ - Disclosure: public Agent Card and authenticated extended Agent Card
59
+ - Activation: client requests the URI via `A2A-Extensions` and sends `metadata.shared.model`
60
+ - Runtime fields: `metadata.shared.model.providerID`, `metadata.shared.model.modelID`
61
+ - Applies to methods: `SendMessage`, `SendStreamingMessage`
62
+ - Dependencies: none declared by this version
63
+ - Security boundary: request-scoped model preference is shared; provider defaults and auth remain OpenCode deployment concerns
64
+ - Versioning: breaking changes require a new versioned URI
65
+
66
+ ## Shared Stream Hints v1
67
+
68
+ Extension URI: `urn:opencode-a2a:extension:stream-hints:v1`
69
+
70
+ - Scope: shared response/task/stream metadata for block identity, progress, and usage hints
71
+ - Disclosure: public Agent Card and authenticated extended Agent Card
72
+ - Activation: client requests the URI via `A2A-Extensions`; runtime emits shared metadata on streamed events and final task payloads
73
+ - Declared field map:
74
+ - `metadata.shared.stream.block_type`
75
+ - `metadata.shared.stream.sequence`
76
+ - `metadata.shared.progress.type`
77
+ - `metadata.shared.progress.status`
78
+ - `metadata.shared.usage.input_tokens`
79
+ - `metadata.shared.usage.output_tokens`
80
+ - `metadata.shared.usage.total_tokens`
81
+ - Clients must not treat undeclared metadata under this namespace as part of the shared v1 contract
82
+ - Dependencies: none declared by this version
83
+ - Security boundary: this extension is observational metadata only; callback methods are defined by the separate shared interactive interrupt extension
84
+ - Versioning: breaking changes require a new versioned URI
85
+
86
+ ## Shared Interactive Interrupt v1
87
+
88
+ Extension URI: `urn:opencode-a2a:extension:interactive-interrupt:v1`
89
+
90
+ - Scope: shared JSON-RPC callback methods used to answer interactive permission and question interrupts
91
+ - Disclosure: public Agent Card and authenticated extended Agent Card
92
+ - Activation: client requests the URI via `A2A-Extensions` before calling `a2a.interrupt.*` methods
93
+ - Methods: `a2a.interrupt.permission.reply`, `a2a.interrupt.question.reply`, `a2a.interrupt.question.reject`
94
+ - Runtime fields: `metadata.shared.interrupt`, including `metadata.shared.interrupt.request_id` as the callback correlation key
95
+ - Dependencies: none declared by this version
96
+ - Security boundary: the methods are shared, but request IDs remain scoped to authenticated caller identity and local interrupt state
97
+ - Versioning: breaking changes require a new versioned URI
98
+
99
+ ## OpenCode Session Management v1
100
+
101
+ Extension URI: `urn:opencode-a2a:extension:session-management:v1`
102
+
103
+ - Scope: OpenCode session read, mutation, and control methods exposed as A2A JSON-RPC extension methods
104
+ - Disclosure: authenticated extended Agent Card only
105
+ - Activation: authenticated client requests the URI via `A2A-Extensions` before calling `opencode.sessions.*`
106
+ - Methods: `opencode.sessions.status`, `list`, `get`, `children`, `todo`, `diff`, `messages.get`, `messages.list`, `prompt_async`, `command`, `fork`, `share`, `unshare`, `summarize`, `revert`, `unrevert`, and deployment-conditional `shell`
107
+ - Dependencies: none declared by this version
108
+ - Security boundary: this extension is provider-private and deployment-scoped; consumers must not treat it as portable A2A baseline behavior
109
+ - Versioning: breaking changes require a new versioned URI
110
+
111
+ ## OpenCode Provider Discovery v1
112
+
113
+ Extension URI: `urn:opencode-a2a:extension:provider-discovery:v1`
114
+
115
+ - Scope: OpenCode provider and model discovery methods exposed as A2A JSON-RPC extension methods
116
+ - Disclosure: authenticated extended Agent Card only
117
+ - Activation: authenticated client requests the URI via `A2A-Extensions` before calling `opencode.providers.list` or `opencode.models.list`
118
+ - Methods: `opencode.providers.list`, `opencode.models.list`
119
+ - Dependencies: none declared by this version
120
+ - Security boundary: provider/model catalogs remain OpenCode-specific operational surfaces
121
+ - Versioning: breaking changes require a new versioned URI
122
+
123
+ ## OpenCode Workspace Control v1
124
+
125
+ Extension URI: `urn:opencode-a2a:extension:workspace-control:v1`
126
+
127
+ - Scope: OpenCode project, workspace, and worktree discovery/control methods exposed as A2A JSON-RPC extension methods
128
+ - Disclosure: authenticated extended Agent Card only
129
+ - Activation: authenticated client requests the URI via `A2A-Extensions` before calling `opencode.projects.*`, `opencode.workspaces.*`, or `opencode.worktrees.*`
130
+ - Methods: stable project discovery plus experimental workspace/worktree discovery and deployment-conditional mutation methods
131
+ - Dependencies: none declared by this version
132
+ - Security boundary: this extension is provider-private, operator-scoped, and partly deployment-conditional
133
+ - Versioning: breaking changes require a new versioned URI
134
+
135
+ ## OpenCode Interrupt Recovery v1
136
+
137
+ Extension URI: `urn:opencode-a2a:extension:interrupt-recovery:v1`
138
+
139
+ - Scope: local interrupt recovery methods exposed as A2A JSON-RPC extension methods
140
+ - Disclosure: authenticated extended Agent Card only
141
+ - Activation: authenticated client requests the URI via `A2A-Extensions` before calling `opencode.permissions.list` or `opencode.questions.list`
142
+ - Methods: `opencode.permissions.list`, `opencode.questions.list`
143
+ - Dependencies: none declared by this version
144
+ - Security boundary: recovery state is adapter-local and scoped to the current authenticated caller
145
+ - Versioning: breaking changes require a new versioned URI
146
+
147
+ ## A2A Compatibility Profile v1
148
+
149
+ Extension URI: `urn:opencode-a2a:extension:compatibility-profile:v1`
150
+
151
+ - Scope: authenticated discovery metadata describing protocol support, extension retention, and stable service behaviors
152
+ - Disclosure: authenticated extended Agent Card only
153
+ - Activation: authenticated extended Agent Card discovery
154
+ - Data surface: `protocol_compatibility`, method-retention metadata, deployment profile summary, and declared service behaviors
155
+ - Dependencies: none declared by this version
156
+ - Security boundary: this is deployment-specific contract metadata, not a portable core A2A guarantee
157
+ - Versioning: breaking changes require a new versioned URI
158
+
159
+ ## A2A Wire Contract v1
160
+
161
+ Extension URI: `urn:opencode-a2a:extension:wire-contract:v1`
162
+
163
+ - Scope: authenticated discovery metadata describing supported methods, HTTP endpoints, extension URIs, and unified error semantics
164
+ - Disclosure: authenticated extended Agent Card only
165
+ - Activation: authenticated extended Agent Card discovery
166
+ - Data surface: core JSON-RPC methods, core HTTP endpoints, extension JSON-RPC methods, conditional availability, and protocol compatibility summary
167
+ - Dependencies: none declared by this version
168
+ - Security boundary: this is deployment-specific discovery metadata, not an invitation to assume portability of `opencode.*` surfaces
169
+ - Versioning: breaking changes require a new versioned URI