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.
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/.github/dependabot.yml +5 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/PKG-INFO +3 -3
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/pyproject.toml +2 -2
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/a2a_protocol.py +0 -1
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/cli.py +1 -2
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/execution/coordinator.py +1 -1
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/execution/executor.py +0 -43
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/extension_negotiation.py +2 -4
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/output_modes.py +3 -6
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/middleware.py +3 -3
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/task_store_sdk_compat.py +3 -4
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a.egg-info/PKG-INFO +3 -3
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a.egg-info/requires.txt +2 -2
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/test_metrics.py +4 -3
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/uv.lock +76 -66
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/.github/workflows/dependency-review.yml +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/.github/workflows/publish.yml +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/.github/workflows/validate.yml +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/.gitignore +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/.pre-commit-config.yaml +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/.secrets.baseline +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/AGENTS.md +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/CODE_OF_CONDUCT.md +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/CONTRIBUTING.md +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/LICENSE +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/MANIFEST.in +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/README.md +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/SECURITY.md +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/SUPPORT.md +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/docs/architecture.md +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/docs/compatibility.md +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/docs/conformance-triage.md +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/docs/conformance.md +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/docs/extension-specifications.md +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/docs/guide.md +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/docs/maintainer-architecture.md +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/scripts/README.md +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/scripts/check_coverage.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/scripts/conformance.sh +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/scripts/dependency_health.sh +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/scripts/doctor.sh +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/scripts/find_thin_wrappers.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/scripts/health_common.sh +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/scripts/lint.sh +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/scripts/smoke_test_built_cli.sh +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/setup.cfg +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/__init__.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/a2a_utils.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/auth.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/client/__init__.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/client/agent_card.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/client/auth.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/client/client.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/client/config.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/client/error_mapping.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/client/errors.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/client/payload_text.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/client/polling.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/client/request_context.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/config.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/contracts/__init__.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/contracts/extensions/__init__.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/contracts/extensions/capabilities.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/contracts/extensions/catalog.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/contracts/extensions/compatibility.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/contracts/extensions/contract_docs.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/contracts/extensions/identifiers.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/contracts/extensions/private_params.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/contracts/extensions/public_params.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/execution/__init__.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/execution/event_helpers.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/execution/metrics.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/execution/session_manager.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/execution/stream_events.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/execution/stream_runtime.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/execution/stream_state.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/execution/tool_error_mapping.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/execution/tool_orchestration.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/execution/upstream_error_translator.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/interrupt_request_tracker.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/__init__.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/application.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/dispatch.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/error_responses.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/handlers/__init__.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/handlers/common.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/handlers/interrupt_callbacks.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/handlers/interrupt_queries.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/handlers/provider_discovery.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/handlers/session_control.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/handlers/session_lifecycle.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/handlers/session_queries.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/handlers/workspace_control.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/methods.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/models.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/jsonrpc/params.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/metadata_access.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/opencode_upstream_client.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/parsing.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/parts/__init__.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/parts/mapping.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/parts/text.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/profile/__init__.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/profile/runtime.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/protocol_versions.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/py.typed +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/runtime_state.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/sandbox_policy.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/__init__.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/agent_card.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/application.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/client_manager.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/context_helpers.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/database.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/lifespan.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/migrations.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/openapi.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/request_parsing.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/rest_tasks.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/state_store.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/server/task_store.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/task_states.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/trace_context.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a/upstream_taxonomy.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a.egg-info/SOURCES.txt +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a.egg-info/dependency_links.txt +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a.egg-info/entry_points.txt +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/src/opencode_a2a.egg-info/top_level.txt +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/__init__.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/client/__init__.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/client/test_agent_card.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/client/test_client_config.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/client/test_client_facade.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/client/test_error_mapping.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/client/test_payload_text.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/client/test_polling.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/client/test_request_context.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/config/__init__.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/config/test_settings.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/conftest.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/contracts/__init__.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/contracts/test_extension_contract_consistency.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/__init__.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/test_agent_errors.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/test_agent_helpers.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/test_cancellation.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/test_directory_validation.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/test_multipart_input.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/test_opencode_agent_session_binding.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/test_session_lock_lifecycle.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/test_session_ownership.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/test_streaming_output_contract_blocks.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/test_streaming_output_contract_core.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/test_streaming_output_contract_interrupts.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/execution/test_streaming_output_contract_logging.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/jsonrpc/__init__.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/jsonrpc/test_application_dispatch.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/jsonrpc/test_dispatch_registry.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/jsonrpc/test_error_responses.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/jsonrpc/test_jsonrpc_methods.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/jsonrpc/test_jsonrpc_params.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/jsonrpc/test_jsonrpc_unsupported_method.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/jsonrpc/test_opencode_session_extension_commands.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/jsonrpc/test_opencode_session_extension_interrupts.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/jsonrpc/test_opencode_session_extension_lifecycle.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/jsonrpc/test_opencode_session_extension_prompt_async.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/jsonrpc/test_opencode_session_extension_queries.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/jsonrpc/test_opencode_workspace_control_extension.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/package/__init__.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/package/test_logging.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/package/test_typing_contract.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/package/test_version.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/parts/__init__.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/parts/test_parts_text.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/profile/__init__.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/profile/test_profile_runtime.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/scripts/__init__.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/scripts/test_script_health_contract.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/__init__.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/test_a2a_client_manager.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/test_agent_card.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/test_app_behaviors.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/test_auth.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/test_call_context_builder.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/test_cancel_contract.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/test_cli.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/test_context_helpers.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/test_database_app_persistence.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/test_output_negotiation.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/test_state_store.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/test_task_store_factory.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/server/test_transport_contract.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/support/__init__.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/support/async_iterators.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/support/fake_client_errors.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/support/helpers.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/support/interrupt_clients.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/support/jsonrpc_error_assertions.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/support/session_extensions.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/support/session_query_client.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/support/settings.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/support/streaming_output.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/support/workspace_control_client.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/test_a2a_utils.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/test_metadata_access.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/test_parsing.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/test_trace_context.py +0 -0
- {opencode_a2a-1.1.1 → opencode_a2a-1.1.2}/tests/upstream/__init__.py +0 -0
- {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.
|
|
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.
|
|
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.
|
|
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=
|
|
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.
|
|
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 =
|
|
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
|
-
|
|
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(
|
|
208
|
+
shared = metadata.get("shared")
|
|
212
209
|
if not isinstance(shared, dict):
|
|
213
210
|
return None
|
|
214
|
-
stream = shared.get(
|
|
211
|
+
stream = shared.get("stream")
|
|
215
212
|
if not isinstance(stream, dict):
|
|
216
213
|
return None
|
|
217
|
-
block_type = stream.get(
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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.
|
|
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.
|
|
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
|
|
@@ -18,7 +18,8 @@ from a2a.types import (
|
|
|
18
18
|
TaskStatus,
|
|
19
19
|
)
|
|
20
20
|
|
|
21
|
-
from opencode_a2a.execution.executor import OpencodeAgentExecutor
|
|
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.
|
|
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.
|
|
211
|
+
await executor._stream_runtime.consume(
|
|
211
212
|
session_id="ses-1",
|
|
212
213
|
identity="user-1",
|
|
213
214
|
task_id="task-1",
|