opencode-a2a 1.1.1__tar.gz → 1.1.2__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 (209) hide show
  1. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/.github/dependabot.yml +5 -0
  2. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/PKG-INFO +3 -3
  3. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/pyproject.toml +2 -2
  4. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/a2a_protocol.py +0 -1
  5. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/cli.py +1 -2
  6. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/execution/coordinator.py +1 -1
  7. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/execution/executor.py +0 -43
  8. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/extension_negotiation.py +2 -4
  9. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/output_modes.py +3 -6
  10. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/middleware.py +3 -3
  11. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/task_store_sdk_compat.py +3 -4
  12. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a.egg-info/PKG-INFO +3 -3
  13. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a.egg-info/requires.txt +2 -2
  14. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/test_metrics.py +4 -3
  15. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/uv.lock +76 -66
  16. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/.github/workflows/dependency-review.yml +0 -0
  17. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/.github/workflows/publish.yml +0 -0
  18. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/.github/workflows/validate.yml +0 -0
  19. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/.gitignore +0 -0
  20. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/.pre-commit-config.yaml +0 -0
  21. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/.secrets.baseline +0 -0
  22. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/AGENTS.md +0 -0
  23. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/CODE_OF_CONDUCT.md +0 -0
  24. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/CONTRIBUTING.md +0 -0
  25. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/LICENSE +0 -0
  26. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/MANIFEST.in +0 -0
  27. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/README.md +0 -0
  28. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/SECURITY.md +0 -0
  29. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/SUPPORT.md +0 -0
  30. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/docs/architecture.md +0 -0
  31. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/docs/compatibility.md +0 -0
  32. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/docs/conformance-triage.md +0 -0
  33. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/docs/conformance.md +0 -0
  34. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/docs/extension-specifications.md +0 -0
  35. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/docs/guide.md +0 -0
  36. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/docs/maintainer-architecture.md +0 -0
  37. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/scripts/README.md +0 -0
  38. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/scripts/check_coverage.py +0 -0
  39. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/scripts/conformance.sh +0 -0
  40. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/scripts/dependency_health.sh +0 -0
  41. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/scripts/doctor.sh +0 -0
  42. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/scripts/find_thin_wrappers.py +0 -0
  43. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/scripts/health_common.sh +0 -0
  44. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/scripts/lint.sh +0 -0
  45. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/scripts/smoke_test_built_cli.sh +0 -0
  46. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/setup.cfg +0 -0
  47. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/__init__.py +0 -0
  48. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/a2a_utils.py +0 -0
  49. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/auth.py +0 -0
  50. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/client/__init__.py +0 -0
  51. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/client/agent_card.py +0 -0
  52. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/client/auth.py +0 -0
  53. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/client/client.py +0 -0
  54. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/client/config.py +0 -0
  55. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/client/error_mapping.py +0 -0
  56. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/client/errors.py +0 -0
  57. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/client/payload_text.py +0 -0
  58. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/client/polling.py +0 -0
  59. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/client/request_context.py +0 -0
  60. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/config.py +0 -0
  61. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/contracts/__init__.py +0 -0
  62. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/contracts/extensions/__init__.py +0 -0
  63. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/contracts/extensions/capabilities.py +0 -0
  64. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/contracts/extensions/catalog.py +0 -0
  65. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/contracts/extensions/compatibility.py +0 -0
  66. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/contracts/extensions/contract_docs.py +0 -0
  67. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/contracts/extensions/identifiers.py +0 -0
  68. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/contracts/extensions/private_params.py +0 -0
  69. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/contracts/extensions/public_params.py +0 -0
  70. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/execution/__init__.py +0 -0
  71. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/execution/event_helpers.py +0 -0
  72. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/execution/metrics.py +0 -0
  73. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/execution/session_manager.py +0 -0
  74. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/execution/stream_events.py +0 -0
  75. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/execution/stream_runtime.py +0 -0
  76. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/execution/stream_state.py +0 -0
  77. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/execution/tool_error_mapping.py +0 -0
  78. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/execution/tool_orchestration.py +0 -0
  79. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/execution/upstream_error_translator.py +0 -0
  80. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/interrupt_request_tracker.py +0 -0
  81. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/__init__.py +0 -0
  82. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/application.py +0 -0
  83. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/dispatch.py +0 -0
  84. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/error_responses.py +0 -0
  85. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/handlers/__init__.py +0 -0
  86. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/handlers/common.py +0 -0
  87. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/handlers/interrupt_callbacks.py +0 -0
  88. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/handlers/interrupt_queries.py +0 -0
  89. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/handlers/provider_discovery.py +0 -0
  90. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/handlers/session_control.py +0 -0
  91. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/handlers/session_lifecycle.py +0 -0
  92. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/handlers/session_queries.py +0 -0
  93. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/handlers/workspace_control.py +0 -0
  94. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/methods.py +0 -0
  95. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/models.py +0 -0
  96. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/params.py +0 -0
  97. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/metadata_access.py +0 -0
  98. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/opencode_upstream_client.py +0 -0
  99. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/parsing.py +0 -0
  100. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/parts/__init__.py +0 -0
  101. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/parts/mapping.py +0 -0
  102. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/parts/text.py +0 -0
  103. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/profile/__init__.py +0 -0
  104. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/profile/runtime.py +0 -0
  105. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/protocol_versions.py +0 -0
  106. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/py.typed +0 -0
  107. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/runtime_state.py +0 -0
  108. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/sandbox_policy.py +0 -0
  109. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/__init__.py +0 -0
  110. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/agent_card.py +0 -0
  111. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/application.py +0 -0
  112. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/client_manager.py +0 -0
  113. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/context_helpers.py +0 -0
  114. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/database.py +0 -0
  115. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/lifespan.py +0 -0
  116. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/migrations.py +0 -0
  117. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/openapi.py +0 -0
  118. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/request_parsing.py +0 -0
  119. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/rest_tasks.py +0 -0
  120. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/state_store.py +0 -0
  121. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/task_store.py +0 -0
  122. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/task_states.py +0 -0
  123. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/trace_context.py +0 -0
  124. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/upstream_taxonomy.py +0 -0
  125. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a.egg-info/SOURCES.txt +0 -0
  126. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a.egg-info/dependency_links.txt +0 -0
  127. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a.egg-info/entry_points.txt +0 -0
  128. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a.egg-info/top_level.txt +0 -0
  129. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/__init__.py +0 -0
  130. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/client/__init__.py +0 -0
  131. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/client/test_agent_card.py +0 -0
  132. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/client/test_client_config.py +0 -0
  133. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/client/test_client_facade.py +0 -0
  134. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/client/test_error_mapping.py +0 -0
  135. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/client/test_payload_text.py +0 -0
  136. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/client/test_polling.py +0 -0
  137. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/client/test_request_context.py +0 -0
  138. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/config/__init__.py +0 -0
  139. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/config/test_settings.py +0 -0
  140. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/conftest.py +0 -0
  141. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/contracts/__init__.py +0 -0
  142. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/contracts/test_extension_contract_consistency.py +0 -0
  143. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/__init__.py +0 -0
  144. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/test_agent_errors.py +0 -0
  145. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/test_agent_helpers.py +0 -0
  146. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/test_cancellation.py +0 -0
  147. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/test_directory_validation.py +0 -0
  148. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/test_multipart_input.py +0 -0
  149. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/test_opencode_agent_session_binding.py +0 -0
  150. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/test_session_lock_lifecycle.py +0 -0
  151. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/test_session_ownership.py +0 -0
  152. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/test_streaming_output_contract_blocks.py +0 -0
  153. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/test_streaming_output_contract_core.py +0 -0
  154. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/test_streaming_output_contract_interrupts.py +0 -0
  155. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/test_streaming_output_contract_logging.py +0 -0
  156. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/jsonrpc/__init__.py +0 -0
  157. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/jsonrpc/test_application_dispatch.py +0 -0
  158. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/jsonrpc/test_dispatch_registry.py +0 -0
  159. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/jsonrpc/test_error_responses.py +0 -0
  160. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/jsonrpc/test_jsonrpc_methods.py +0 -0
  161. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/jsonrpc/test_jsonrpc_params.py +0 -0
  162. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/jsonrpc/test_jsonrpc_unsupported_method.py +0 -0
  163. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/jsonrpc/test_opencode_session_extension_commands.py +0 -0
  164. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/jsonrpc/test_opencode_session_extension_interrupts.py +0 -0
  165. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/jsonrpc/test_opencode_session_extension_lifecycle.py +0 -0
  166. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/jsonrpc/test_opencode_session_extension_prompt_async.py +0 -0
  167. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/jsonrpc/test_opencode_session_extension_queries.py +0 -0
  168. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/jsonrpc/test_opencode_workspace_control_extension.py +0 -0
  169. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/package/__init__.py +0 -0
  170. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/package/test_logging.py +0 -0
  171. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/package/test_typing_contract.py +0 -0
  172. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/package/test_version.py +0 -0
  173. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/parts/__init__.py +0 -0
  174. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/parts/test_parts_text.py +0 -0
  175. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/profile/__init__.py +0 -0
  176. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/profile/test_profile_runtime.py +0 -0
  177. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/scripts/__init__.py +0 -0
  178. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/scripts/test_script_health_contract.py +0 -0
  179. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/__init__.py +0 -0
  180. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/test_a2a_client_manager.py +0 -0
  181. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/test_agent_card.py +0 -0
  182. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/test_app_behaviors.py +0 -0
  183. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/test_auth.py +0 -0
  184. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/test_call_context_builder.py +0 -0
  185. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/test_cancel_contract.py +0 -0
  186. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/test_cli.py +0 -0
  187. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/test_context_helpers.py +0 -0
  188. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/test_database_app_persistence.py +0 -0
  189. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/test_output_negotiation.py +0 -0
  190. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/test_state_store.py +0 -0
  191. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/test_task_store_factory.py +0 -0
  192. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/test_transport_contract.py +0 -0
  193. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/support/__init__.py +0 -0
  194. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/support/async_iterators.py +0 -0
  195. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/support/fake_client_errors.py +0 -0
  196. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/support/helpers.py +0 -0
  197. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/support/interrupt_clients.py +0 -0
  198. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/support/jsonrpc_error_assertions.py +0 -0
  199. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/support/session_extensions.py +0 -0
  200. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/support/session_query_client.py +0 -0
  201. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/support/settings.py +0 -0
  202. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/support/streaming_output.py +0 -0
  203. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/support/workspace_control_client.py +0 -0
  204. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/test_a2a_utils.py +0 -0
  205. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/test_metadata_access.py +0 -0
  206. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/test_parsing.py +0 -0
  207. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/test_trace_context.py +0 -0
  208. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/upstream/__init__.py +0 -0
  209. {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/upstream/test_opencode_upstream_client_params.py +0 -0
@@ -5,6 +5,11 @@ updates:
5
5
  directory: "/"
6
6
  schedule:
7
7
  interval: "weekly"
8
+ ignore:
9
+ # a2a-sdk still constrains protobuf to <7, so major protobuf bumps are unsatisfiable.
10
+ - dependency-name: "protobuf"
11
+ update-types:
12
+ - "version-update:semver-major"
8
13
  open-pull-requests-limit: 1
9
14
  commit-message:
10
15
  prefix: "deps"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opencode-a2a
3
- Version: 1.1.1
3
+ Version: 1.1.2
4
4
  Summary: OpenCode A2A runtime
5
5
  Author: liujuanjuan1984@Intelligent-Internet
6
6
  License-Expression: Apache-2.0
@@ -21,10 +21,10 @@ Description-Content-Type: text/markdown
21
21
  License-File: LICENSE
22
22
  Requires-Dist: a2a-sdk==1.0.2
23
23
  Requires-Dist: aiosqlite<1.0,>=0.20
24
- Requires-Dist: fastapi<1.0,>=0.110
24
+ Requires-Dist: fastapi<1.0,>=0.139
25
25
  Requires-Dist: httpx<1.0,>=0.27
26
26
  Requires-Dist: pydantic<3.0,>=2.6
27
- Requires-Dist: pydantic-settings<3.0,>=2.2
27
+ Requires-Dist: pydantic-settings<3.0,>=2.14.2
28
28
  Requires-Dist: protobuf<7.0,>=6.33.5
29
29
  Requires-Dist: sqlalchemy<3.0,>=2.0
30
30
  Requires-Dist: sse-starlette<4.0,>=2.1
@@ -26,10 +26,10 @@ classifiers = [
26
26
  dependencies = [
27
27
  "a2a-sdk==1.0.2",
28
28
  "aiosqlite>=0.20,<1.0",
29
- "fastapi>=0.110,<1.0",
29
+ "fastapi>=0.139,<1.0",
30
30
  "httpx>=0.27,<1.0",
31
31
  "pydantic>=2.6,<3.0",
32
- "pydantic-settings>=2.2,<3.0",
32
+ "pydantic-settings>=2.14.2,<3.0",
33
33
  "protobuf>=6.33.5,<7.0",
34
34
  "sqlalchemy>=2.0,<3.0",
35
35
  "sse-starlette>=2.1,<4.0",
@@ -5,5 +5,4 @@ from a2a.utils.constants import AGENT_CARD_WELL_KNOWN_PATH as SDK_AGENT_CARD_WEL
5
5
 
6
6
  AGENT_CARD_WELL_KNOWN_PATH = SDK_AGENT_CARD_WELL_KNOWN_PATH
7
7
  EXTENDED_AGENT_CARD_PATH = "/extendedAgentCard"
8
- EXTENDED_AGENT_CARD_PATHS = (EXTENDED_AGENT_CARD_PATH,)
9
8
  CORE_JSONRPC_METHODS = tuple(JsonRpcDispatcher.METHOD_TO_MODEL)
@@ -103,7 +103,6 @@ CALL_HELP = (
103
103
 
104
104
  ROOT_HELP_EPILOG = "Command-specific help:\n opencode-a2a serve --help\n opencode-a2a call --help"
105
105
  SERVE_HELP_EPILOG = f"{OPENCODE_SETUP_HELP}\n\n{SERVE_ENVIRONMENT_HELP}"
106
- CALL_HELP_EPILOG = CALL_HELP
107
106
 
108
107
 
109
108
  class RootHelpFormatter(
@@ -264,7 +263,7 @@ def build_parser() -> argparse.ArgumentParser:
264
263
  help="Call an A2A agent.",
265
264
  description="Call an A2A agent using the A2A protocol. A2A Protocol 1.0 only.",
266
265
  formatter_class=argparse.RawDescriptionHelpFormatter,
267
- epilog=CALL_HELP_EPILOG,
266
+ epilog=CALL_HELP,
268
267
  )
269
268
  call_parser.add_argument(
270
269
  "agent_url",
@@ -280,7 +280,7 @@ class ExecutionCoordinator:
280
280
  if self._prepared.streaming_request:
281
281
  self._stream_terminal_signal = asyncio.get_running_loop().create_future()
282
282
  self._stream_task = asyncio.create_task(
283
- self._executor._consume_opencode_stream(
283
+ self._executor._stream_runtime.consume(
284
284
  session_id=self._session_id,
285
285
  identity=self._prepared.identity,
286
286
  task_id=self._task_id,
@@ -46,12 +46,6 @@ from .event_helpers import _enqueue_artifact_update
46
46
  from .metrics import emit_metric
47
47
  from .session_manager import SessionManager
48
48
  from .stream_runtime import StreamRuntime
49
- from .stream_state import (
50
- _StreamOutputState,
51
- )
52
- from .upstream_error_translator import (
53
- _StreamTerminalSignal,
54
- )
55
49
 
56
50
  logger = logging.getLogger(__name__)
57
51
  _TEXT_PLAIN_MEDIA_TYPE = "text/plain"
@@ -497,40 +491,3 @@ class OpencodeAgentExecutor(AgentExecutor):
497
491
  # JSON-RPC transport sets method in call context state.
498
492
  method = call_context.state.get("method")
499
493
  return method == "SendStreamingMessage"
500
-
501
- async def _consume_opencode_stream(
502
- self,
503
- *,
504
- session_id: str,
505
- identity: str,
506
- task_id: str,
507
- context_id: str,
508
- artifact_id: str,
509
- stream_state: _StreamOutputState,
510
- event_queue: EventQueue,
511
- stop_event: asyncio.Event,
512
- terminal_signal: asyncio.Future[_StreamTerminalSignal],
513
- directory: str | None = None,
514
- workspace_id: str | None = None,
515
- allow_structured_output: bool = True,
516
- emit_session_metadata: bool = True,
517
- emit_streaming_metadata: bool = True,
518
- emit_interrupt_metadata: bool = True,
519
- ) -> None:
520
- await self._stream_runtime.consume(
521
- session_id=session_id,
522
- identity=identity,
523
- task_id=task_id,
524
- context_id=context_id,
525
- artifact_id=artifact_id,
526
- stream_state=stream_state,
527
- event_queue=event_queue,
528
- stop_event=stop_event,
529
- terminal_signal=terminal_signal,
530
- directory=directory,
531
- workspace_id=workspace_id,
532
- allow_structured_output=allow_structured_output,
533
- emit_session_metadata=emit_session_metadata,
534
- emit_streaming_metadata=emit_streaming_metadata,
535
- emit_interrupt_metadata=emit_interrupt_metadata,
536
- )
@@ -26,8 +26,7 @@ from .contracts.extensions import (
26
26
  WORKSPACE_CONTROL_METHODS,
27
27
  )
28
28
 
29
- _STREAMING_SHARED_METADATA_KEYS = frozenset({"stream", "progress", "usage"})
30
- _INTERRUPT_SHARED_METADATA_KEYS = frozenset({"interrupt"})
29
+ _STREAMING_SHARED_METADATA_KEYS = ("stream", "progress", "usage")
31
30
 
32
31
  JSONRPC_EXTENSION_URI_BY_METHOD: dict[str, str] = {
33
32
  **{method: SESSION_MANAGEMENT_EXTENSION_URI for method in SESSION_METHODS.values()},
@@ -107,8 +106,7 @@ def _set_filtered_metadata(
107
106
  for key in _STREAMING_SHARED_METADATA_KEYS:
108
107
  filtered_shared.pop(key, None)
109
108
  if INTERRUPT_CALLBACK_EXTENSION_URI not in requested_extensions:
110
- for key in _INTERRUPT_SHARED_METADATA_KEYS:
111
- filtered_shared.pop(key, None)
109
+ filtered_shared.pop("interrupt", None)
112
110
  if filtered_shared:
113
111
  filtered_metadata["shared"] = filtered_shared
114
112
  else:
@@ -32,9 +32,6 @@ OUTPUT_NEGOTIATION_ACCEPTED_OUTPUT_MODES_FIELD = "accepted_output_modes"
32
32
  _OPENCODE_METADATA_KEY = "opencode"
33
33
  _APPLICATION_JSON_MEDIA_TYPE = "application/json"
34
34
  _TEXT_PLAIN_MEDIA_TYPE = "text/plain"
35
- _STREAM_METADATA_SHARED_KEY = "shared"
36
- _STREAM_METADATA_STREAM_KEY = "stream"
37
- _STREAM_METADATA_BLOCK_TYPE_KEY = "block_type"
38
35
 
39
36
 
40
37
  def normalize_accepted_output_modes(source: Any) -> tuple[str, ...] | None:
@@ -208,13 +205,13 @@ def _extract_artifact_stream_block_type(artifact: Artifact | None) -> str | None
208
205
  metadata = _normalize_metadata_mapping(artifact.metadata)
209
206
  if not metadata:
210
207
  return None
211
- shared = metadata.get(_STREAM_METADATA_SHARED_KEY)
208
+ shared = metadata.get("shared")
212
209
  if not isinstance(shared, dict):
213
210
  return None
214
- stream = shared.get(_STREAM_METADATA_STREAM_KEY)
211
+ stream = shared.get("stream")
215
212
  if not isinstance(stream, dict):
216
213
  return None
217
- block_type = stream.get(_STREAM_METADATA_BLOCK_TYPE_KEY)
214
+ block_type = stream.get("block_type")
218
215
  return block_type.strip() if isinstance(block_type, str) and block_type.strip() else None
219
216
 
220
217
 
@@ -14,7 +14,7 @@ from starlette.responses import StreamingResponse
14
14
 
15
15
  from ..a2a_protocol import (
16
16
  AGENT_CARD_WELL_KNOWN_PATH,
17
- EXTENDED_AGENT_CARD_PATHS,
17
+ EXTENDED_AGENT_CARD_PATH,
18
18
  )
19
19
  from ..auth import (
20
20
  authenticate_static_credential,
@@ -289,7 +289,7 @@ def install_runtime_middlewares(
289
289
  path = request.url.path
290
290
  if path == AGENT_CARD_WELL_KNOWN_PATH:
291
291
  supported_extensions = PUBLIC_EXTENSION_URIS
292
- elif path in EXTENDED_AGENT_CARD_PATHS:
292
+ elif path == EXTENDED_AGENT_CARD_PATH:
293
293
  supported_extensions = ALL_EXTENSION_URIS
294
294
  elif path == "/" or path.startswith("/v1/"):
295
295
  supported_extensions = PUBLIC_EXTENSION_URIS
@@ -313,7 +313,7 @@ def install_runtime_middlewares(
313
313
 
314
314
  path = request.url.path
315
315
  is_public_card = path == AGENT_CARD_WELL_KNOWN_PATH
316
- is_extended_card = path in EXTENDED_AGENT_CARD_PATHS
316
+ is_extended_card = path == EXTENDED_AGENT_CARD_PATH
317
317
  if not is_public_card and not is_extended_card:
318
318
  return await call_next(request)
319
319
 
@@ -71,13 +71,12 @@ class DatabaseTaskStoreCompat:
71
71
  self._task_store.engine.url.render_as_string(hide_password=True)
72
72
  )
73
73
  table_name = self._shape.task_model.__table__.name
74
- required_indexes = frozenset({f"idx_{table_name}_owner_last_updated"})
75
74
  async with self._task_store.engine.begin() as conn:
76
75
  await conn.run_sync(
77
76
  lambda sync_conn: _validate_sdk_task_table_schema(
78
77
  sync_conn,
79
78
  table_name=table_name,
80
- required_indexes=required_indexes,
79
+ required_index=f"idx_{table_name}_owner_last_updated",
81
80
  database_url=database_url,
82
81
  )
83
82
  )
@@ -247,7 +246,7 @@ def _validate_sdk_task_table_schema(
247
246
  connection: Any,
248
247
  *,
249
248
  table_name: str,
250
- required_indexes: frozenset[str],
249
+ required_index: str,
251
250
  database_url: str,
252
251
  ) -> None:
253
252
  inspector = inspect(connection)
@@ -257,7 +256,7 @@ def _validate_sdk_task_table_schema(
257
256
  existing_columns = {column["name"] for column in inspector.get_columns(table_name)}
258
257
  existing_indexes = {index["name"] for index in inspector.get_indexes(table_name)}
259
258
  missing_columns = sorted(_REQUIRED_SCHEMA_COLUMNS - existing_columns)
260
- missing_indexes = sorted(required_indexes - existing_indexes)
259
+ missing_indexes = [] if required_index in existing_indexes else [required_index]
261
260
  if not missing_columns and not missing_indexes:
262
261
  return
263
262
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opencode-a2a
3
- Version: 1.1.1
3
+ Version: 1.1.2
4
4
  Summary: OpenCode A2A runtime
5
5
  Author: liujuanjuan1984@Intelligent-Internet
6
6
  License-Expression: Apache-2.0
@@ -21,10 +21,10 @@ Description-Content-Type: text/markdown
21
21
  License-File: LICENSE
22
22
  Requires-Dist: a2a-sdk==1.0.2
23
23
  Requires-Dist: aiosqlite<1.0,>=0.20
24
- Requires-Dist: fastapi<1.0,>=0.110
24
+ Requires-Dist: fastapi<1.0,>=0.139
25
25
  Requires-Dist: httpx<1.0,>=0.27
26
26
  Requires-Dist: pydantic<3.0,>=2.6
27
- Requires-Dist: pydantic-settings<3.0,>=2.2
27
+ Requires-Dist: pydantic-settings<3.0,>=2.14.2
28
28
  Requires-Dist: protobuf<7.0,>=6.33.5
29
29
  Requires-Dist: sqlalchemy<3.0,>=2.0
30
30
  Requires-Dist: sse-starlette<4.0,>=2.1
@@ -1,9 +1,9 @@
1
1
  a2a-sdk==1.0.2
2
2
  aiosqlite<1.0,>=0.20
3
- fastapi<1.0,>=0.110
3
+ fastapi<1.0,>=0.139
4
4
  httpx<1.0,>=0.27
5
5
  pydantic<3.0,>=2.6
6
- pydantic-settings<3.0,>=2.2
6
+ pydantic-settings<3.0,>=2.14.2
7
7
  protobuf<7.0,>=6.33.5
8
8
  sqlalchemy<3.0,>=2.0
9
9
  sse-starlette<4.0,>=2.1
@@ -18,7 +18,8 @@ from a2a.types import (
18
18
  TaskStatus,
19
19
  )
20
20
 
21
- from opencode_a2a.execution.executor import OpencodeAgentExecutor, _StreamOutputState
21
+ from opencode_a2a.execution.executor import OpencodeAgentExecutor
22
+ from opencode_a2a.execution.stream_state import _StreamOutputState
22
23
  from opencode_a2a.server.application import OpencodeRequestHandler
23
24
  from tests.support.helpers import DummyEventQueue
24
25
  from tests.support.settings import make_settings
@@ -156,7 +157,7 @@ async def test_streaming_metrics_capture_tool_call_and_interrupt_events(caplog)
156
157
  terminal_signal = asyncio.get_running_loop().create_future()
157
158
 
158
159
  with caplog.at_level(logging.DEBUG, logger="opencode_a2a.execution.executor"):
159
- await executor._consume_opencode_stream(
160
+ await executor._stream_runtime.consume(
160
161
  session_id="ses-1",
161
162
  identity="user-1",
162
163
  task_id="task-1",
@@ -207,7 +208,7 @@ async def test_streaming_retry_metric_increments_once_per_retry(monkeypatch, cap
207
208
  terminal_signal = asyncio.get_running_loop().create_future()
208
209
 
209
210
  with caplog.at_level(logging.DEBUG, logger="opencode_a2a.execution.executor"):
210
- await executor._consume_opencode_stream(
211
+ await executor._stream_runtime.consume(
211
212
  session_id="ses-1",
212
213
  identity="user-1",
213
214
  task_id="task-1",