codex-a2a 0.6.1__tar.gz → 0.6.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.
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/.github/workflows/ci.yml +3 -1
- codex_a2a-0.6.2/.github/workflows/dependency-health.yml +32 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/.github/workflows/publish.yml +15 -1
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/PKG-INFO +7 -2
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/pyproject.toml +6 -1
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/scripts/README.md +3 -0
- codex_a2a-0.6.2/scripts/dependency_health.sh +26 -0
- codex_a2a-0.6.2/scripts/health_common.sh +23 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/scripts/validate_baseline.sh +12 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a.egg-info/PKG-INFO +7 -2
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a.egg-info/SOURCES.txt +5 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a.egg-info/requires.txt +6 -1
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/package/test_release_distribution_contract.py +27 -0
- codex_a2a-0.6.2/tests/scripts/__init__.py +1 -0
- codex_a2a-0.6.2/tests/scripts/test_script_health_contract.py +43 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/uv.lock +300 -25
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/.gitignore +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/.pre-commit-config.yaml +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/.secrets.baseline +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/AGENTS.md +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/CONTRIBUTING.md +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/LICENSE +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/README.md +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/SECURITY.md +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/docs/architecture.md +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/docs/compatibility.md +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/docs/extension-specifications.md +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/docs/guide.md +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/docs/maintainer-architecture.md +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/mypy.ini +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/scripts/publish_github_release.sh +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/scripts/smoke_test_built_cli.sh +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/scripts/sync_codex_docs.sh +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/scripts/validate_runtime_matrix.sh +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/setup.cfg +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/__init__.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/auth.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/cli.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/client/__init__.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/client/agent_card.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/client/auth.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/client/client.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/client/config.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/client/errors.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/client/manager.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/client/payload_text.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/client/request_context.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/client/types.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/config.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/contracts/__init__.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/contracts/extensions.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/contracts/runtime_output.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/__init__.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/cancellation.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/directory_policy.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/discovery_runtime.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/exec_runtime.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/executor.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/output_mapping.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/request_metadata.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/request_overrides.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/response_emitter.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/review_runtime.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/session_runtime.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/stream_chunks.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/stream_interrupts.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/stream_processor.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/stream_state.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/streaming.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/thread_lifecycle_runtime.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/tool_call_payloads.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/input_mapping.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/__init__.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/application.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/control_params.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/discovery_control.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/discovery_params.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/discovery_payload_mapping.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/discovery_query.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/dispatch.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/errors.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/exec_control.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/hooks.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/interrupt_lifecycle.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/interrupt_params.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/interrupt_recovery.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/interrupt_recovery_params.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/interrupts.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/params.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/params_common.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/payload_mapping.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/query_params.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/review_control.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/review_control_params.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/session_control.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/session_query.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/thread_lifecycle_control.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/thread_lifecycle_params.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/turn_control.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/turn_control_params.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/logging_context.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/media_modes.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/metrics.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/parts/text.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/profile/__init__.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/profile/runtime.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/py.typed +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/server/__init__.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/server/agent_card.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/server/application.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/server/call_context.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/server/database.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/server/http_middlewares.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/server/migrations.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/server/openapi.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/server/output_negotiation.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/server/request_handler.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/server/runtime_state.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/server/task_store.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/upstream/__init__.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/upstream/client.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/upstream/conversation_facade.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/upstream/exec_facade.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/upstream/interrupt_bridge.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/upstream/interrupts.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/upstream/models.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/upstream/notification_mapping.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/upstream/request_mapping.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/upstream/startup.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/upstream/stream_bridge.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/upstream/transport.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a.egg-info/dependency_links.txt +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a.egg-info/entry_points.txt +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a.egg-info/top_level.txt +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/__init__.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/client/__init__.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/client/test_agent_card.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/client/test_cli.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/client/test_client_flow.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/client/test_client_manager.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/client/test_errors.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/client/test_lifecycle.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/client/test_payload_text.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/client/test_request_context.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/client/test_types.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/config/__init__.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/config/test_settings.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/contracts/__init__.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/contracts/test_extension_contract_consistency.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/__init__.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_agent_errors.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_cancellation.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_codex_agent_session_binding.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_directory_validation.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_discovery_exec_runtime.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_metrics.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_review_runtime.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_session_ownership.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_session_persistence.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_session_runtime.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_stream_chunks.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_stream_interrupts.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_streaming_output_contract.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_thread_lifecycle_runtime.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_tool_call_payloads.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/fixtures/codex_app_server/command_execution_output_delta.json +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/fixtures/codex_app_server/file_change_output_delta.json +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/jsonrpc/__init__.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/jsonrpc/test_codex_discovery_extension.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/jsonrpc/test_codex_exec_extension.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/jsonrpc/test_codex_session_extension.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/jsonrpc/test_codex_thread_lifecycle_extension.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/jsonrpc/test_codex_turn_review_extension.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/jsonrpc/test_dispatch.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/jsonrpc/test_guard_hooks.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/jsonrpc/test_jsonrpc_models.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/package/__init__.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/package/test_logging.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/package/test_publish_github_release_script.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/package/test_typing_contract.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/package/test_version.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/parts/__init__.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/parts/test_text.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/profile/__init__.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/profile/test_profile.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/server/__init__.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/server/test_agent_card.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/server/test_auth.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/server/test_call_context_builder.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/server/test_cli.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/server/test_database.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/server/test_database_app_persistence.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/server/test_migrations.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/server/test_request_handler.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/server/test_runtime_state.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/server/test_task_store.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/server/test_transport_contract.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/support/__init__.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/support/context.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/support/dummy_clients.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/support/fixtures.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/support/settings.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/test_input_mapping.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/upstream/__init__.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/upstream/test_codex_client_params.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/upstream/test_interrupt_persistence.py +0 -0
- {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/upstream/test_modular_upstream_components.py +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
name:
|
|
1
|
+
name: Validation
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
pull_request:
|
|
@@ -11,6 +11,7 @@ permissions:
|
|
|
11
11
|
|
|
12
12
|
jobs:
|
|
13
13
|
quality-gate:
|
|
14
|
+
name: Validation Baseline
|
|
14
15
|
runs-on: ubuntu-latest
|
|
15
16
|
|
|
16
17
|
steps:
|
|
@@ -34,6 +35,7 @@ jobs:
|
|
|
34
35
|
run: bash ./scripts/validate_baseline.sh
|
|
35
36
|
|
|
36
37
|
runtime-matrix:
|
|
38
|
+
name: Runtime Matrix (Python ${{ matrix.python-version }})
|
|
37
39
|
runs-on: ubuntu-latest
|
|
38
40
|
strategy:
|
|
39
41
|
fail-fast: false
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
name: Dependency Health
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
schedule:
|
|
6
|
+
# 03:00 UTC on day-of-month 1
|
|
7
|
+
- cron: "0 3 1 * *"
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
dependency-health:
|
|
14
|
+
name: Dependency Health Audit
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- name: Checkout
|
|
19
|
+
uses: actions/checkout@v5
|
|
20
|
+
|
|
21
|
+
- name: Setup Python
|
|
22
|
+
uses: actions/setup-python@v6
|
|
23
|
+
with:
|
|
24
|
+
python-version: "3.13"
|
|
25
|
+
|
|
26
|
+
- name: Setup uv
|
|
27
|
+
uses: astral-sh/setup-uv@v7
|
|
28
|
+
with:
|
|
29
|
+
enable-cache: false
|
|
30
|
+
|
|
31
|
+
- name: Run dependency health checks
|
|
32
|
+
run: bash ./scripts/dependency_health.sh
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
name: Publish
|
|
1
|
+
name: Release Publish
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
@@ -18,6 +18,7 @@ on:
|
|
|
18
18
|
|
|
19
19
|
jobs:
|
|
20
20
|
build_release_artifacts:
|
|
21
|
+
name: Build Release Artifacts
|
|
21
22
|
runs-on: ubuntu-latest
|
|
22
23
|
permissions:
|
|
23
24
|
contents: read
|
|
@@ -42,6 +43,17 @@ jobs:
|
|
|
42
43
|
with:
|
|
43
44
|
enable-cache: true
|
|
44
45
|
|
|
46
|
+
- name: Sync dependencies
|
|
47
|
+
run: uv sync --all-extras --frozen
|
|
48
|
+
|
|
49
|
+
- name: Export runtime requirements for vulnerability audit
|
|
50
|
+
run: >
|
|
51
|
+
uv export --format requirements.txt --no-dev --locked --no-emit-project
|
|
52
|
+
--output-file /tmp/runtime-requirements.txt >/dev/null
|
|
53
|
+
|
|
54
|
+
- name: Run runtime dependency vulnerability audit
|
|
55
|
+
run: uv run pip-audit --requirement /tmp/runtime-requirements.txt
|
|
56
|
+
|
|
45
57
|
- name: Resolve release tag
|
|
46
58
|
id: release_tag
|
|
47
59
|
run: echo "tag=${RELEASE_TAG}" >> "$GITHUB_OUTPUT"
|
|
@@ -103,6 +115,7 @@ jobs:
|
|
|
103
115
|
if-no-files-found: error
|
|
104
116
|
|
|
105
117
|
publish_pypi:
|
|
118
|
+
name: Publish to PyPI
|
|
106
119
|
runs-on: ubuntu-latest
|
|
107
120
|
needs: build_release_artifacts
|
|
108
121
|
if: github.event_name == 'push' || inputs.publish_to_pypi
|
|
@@ -120,6 +133,7 @@ jobs:
|
|
|
120
133
|
uses: pypa/gh-action-pypi-publish@release/v1
|
|
121
134
|
|
|
122
135
|
publish_github_release:
|
|
136
|
+
name: Sync GitHub Release
|
|
123
137
|
runs-on: ubuntu-latest
|
|
124
138
|
needs:
|
|
125
139
|
- build_release_artifacts
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codex-a2a
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.2
|
|
4
4
|
Summary: Codex A2A runtime adapter
|
|
5
5
|
Author: liujuanjuan1984@Intelligent-Internet
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -24,15 +24,20 @@ Description-Content-Type: text/markdown
|
|
|
24
24
|
License-File: LICENSE
|
|
25
25
|
Requires-Dist: a2a-sdk==0.3.25
|
|
26
26
|
Requires-Dist: aiosqlite<1.0,>=0.20
|
|
27
|
-
Requires-Dist: fastapi<0.
|
|
27
|
+
Requires-Dist: fastapi<0.122,>=0.121
|
|
28
28
|
Requires-Dist: httpx<0.29,>=0.28.1
|
|
29
|
+
Requires-Dist: protobuf<7.0,>=6.33.5
|
|
30
|
+
Requires-Dist: pyasn1<1.0,>=0.6.3
|
|
29
31
|
Requires-Dist: pydantic<3.0,>=2.6
|
|
30
32
|
Requires-Dist: pydantic-settings<3.0,>=2.2
|
|
33
|
+
Requires-Dist: requests<3.0,>=2.33.0
|
|
31
34
|
Requires-Dist: sqlalchemy<3.0,>=2.0
|
|
32
35
|
Requires-Dist: sse-starlette<3.0,>=2.1
|
|
33
36
|
Requires-Dist: uvicorn<0.30,>=0.29
|
|
34
37
|
Provides-Extra: dev
|
|
38
|
+
Requires-Dist: pip-audit<3.0,>=2.9; extra == "dev"
|
|
35
39
|
Requires-Dist: pre-commit>=3.7; extra == "dev"
|
|
40
|
+
Requires-Dist: pygments<3.0,>=2.20.0; extra == "dev"
|
|
36
41
|
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
37
42
|
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
|
|
38
43
|
Requires-Dist: pytest-cov<8.0,>=5.0; extra == "dev"
|
|
@@ -26,10 +26,13 @@ classifiers = [
|
|
|
26
26
|
dependencies = [
|
|
27
27
|
"a2a-sdk==0.3.25",
|
|
28
28
|
"aiosqlite>=0.20,<1.0",
|
|
29
|
-
"fastapi>=0.
|
|
29
|
+
"fastapi>=0.121,<0.122",
|
|
30
30
|
"httpx>=0.28.1,<0.29",
|
|
31
|
+
"protobuf>=6.33.5,<7.0",
|
|
32
|
+
"pyasn1>=0.6.3,<1.0",
|
|
31
33
|
"pydantic>=2.6,<3.0",
|
|
32
34
|
"pydantic-settings>=2.2,<3.0",
|
|
35
|
+
"requests>=2.33.0,<3.0",
|
|
33
36
|
"sqlalchemy>=2.0,<3.0",
|
|
34
37
|
"sse-starlette>=2.1,<3.0",
|
|
35
38
|
"uvicorn>=0.29,<0.30",
|
|
@@ -37,7 +40,9 @@ dependencies = [
|
|
|
37
40
|
|
|
38
41
|
[project.optional-dependencies]
|
|
39
42
|
dev = [
|
|
43
|
+
"pip-audit>=2.9,<3.0",
|
|
40
44
|
"pre-commit>=3.7",
|
|
45
|
+
"pygments>=2.20.0,<3.0",
|
|
41
46
|
"pytest>=8.0",
|
|
42
47
|
"pytest-asyncio>=0.23",
|
|
43
48
|
"pytest-cov>=5.0,<8.0",
|
|
@@ -14,6 +14,7 @@ This document only explains the remaining repository-local maintainer scripts. U
|
|
|
14
14
|
|
|
15
15
|
- [`scripts/validate_baseline.sh`](./validate_baseline.sh): run the default local validation baseline used by contributors and CI.
|
|
16
16
|
- [`scripts/validate_runtime_matrix.sh`](./validate_runtime_matrix.sh): run the reduced runtime-only validation used by the multi-version CI matrix.
|
|
17
|
+
- [`scripts/dependency_health.sh`](./dependency_health.sh): run the standalone dependency review flow (`sync`/`pip check`, outdated package listing, and dev vulnerability audit).
|
|
17
18
|
- [`scripts/smoke_test_built_cli.sh`](./smoke_test_built_cli.sh): validate that a built wheel can be installed through `uv tool` and becomes healthy.
|
|
18
19
|
- [`scripts/sync_codex_docs.sh`](./sync_codex_docs.sh): refresh local upstream Codex reference snapshots when maintainers need them.
|
|
19
20
|
|
|
@@ -27,5 +28,7 @@ The `Publish` workflow now separates build, PyPI publish, and GitHub Release syn
|
|
|
27
28
|
|
|
28
29
|
## Notes
|
|
29
30
|
|
|
31
|
+
- `validate_baseline.sh` and `dependency_health.sh` intentionally remain separate entrypoints and share common prerequisites through [`health_common.sh`](./health_common.sh).
|
|
32
|
+
- `validate_baseline.sh` now blocks on runtime dependency vulnerability audit, while `dependency_health.sh` remains focused on broader dependency review (`outdated` + dev audit).
|
|
30
33
|
- End-user runtime startup does not use repository scripts. Prefer the published CLI command documented in [README.md](../README.md) and [docs/guide.md](../docs/guide.md).
|
|
31
34
|
- Keep long-form documentation changes in `docs/` to avoid divergence.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Run the standalone dependency health checks used by the dedicated workflow.
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
# shellcheck source=./health_common.sh
|
|
6
|
+
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/health_common.sh"
|
|
7
|
+
|
|
8
|
+
run_shared_repo_health_prerequisites "dependency-health"
|
|
9
|
+
|
|
10
|
+
echo "[dependency-health] list outdated packages"
|
|
11
|
+
uv pip list --outdated
|
|
12
|
+
|
|
13
|
+
dev_requirements="$(mktemp)"
|
|
14
|
+
trap 'rm -f "${dev_requirements}"' EXIT
|
|
15
|
+
|
|
16
|
+
echo "[dependency-health] export dev extra requirements"
|
|
17
|
+
uv export \
|
|
18
|
+
--format requirements.txt \
|
|
19
|
+
--extra dev \
|
|
20
|
+
--no-dev \
|
|
21
|
+
--locked \
|
|
22
|
+
--no-emit-project \
|
|
23
|
+
--output-file "${dev_requirements}" >/dev/null
|
|
24
|
+
|
|
25
|
+
echo "[dependency-health] run dev dependency vulnerability audit"
|
|
26
|
+
uv run pip-audit --requirement "${dev_requirements}"
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Shared prerequisites for repository health-check scripts.
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
+
ROOT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
|
7
|
+
|
|
8
|
+
run_shared_repo_health_prerequisites() {
|
|
9
|
+
local label="${1:-health}"
|
|
10
|
+
|
|
11
|
+
cd "$ROOT_DIR"
|
|
12
|
+
|
|
13
|
+
if ! command -v uv >/dev/null 2>&1; then
|
|
14
|
+
echo "uv not found in PATH" >&2
|
|
15
|
+
exit 1
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
echo "[${label}] sync locked environment"
|
|
19
|
+
uv sync --all-extras --frozen
|
|
20
|
+
|
|
21
|
+
echo "[${label}] verify dependency compatibility"
|
|
22
|
+
uv pip check
|
|
23
|
+
}
|
|
@@ -11,6 +11,18 @@ uv run pre-commit run --all-files
|
|
|
11
11
|
uv run mypy --config-file mypy.ini
|
|
12
12
|
uv run pytest
|
|
13
13
|
|
|
14
|
+
runtime_requirements="$(mktemp)"
|
|
15
|
+
trap 'rm -f "${runtime_requirements}"' EXIT
|
|
16
|
+
|
|
17
|
+
uv export \
|
|
18
|
+
--format requirements.txt \
|
|
19
|
+
--no-dev \
|
|
20
|
+
--locked \
|
|
21
|
+
--no-emit-project \
|
|
22
|
+
--output-file "${runtime_requirements}" >/dev/null
|
|
23
|
+
|
|
24
|
+
uv run pip-audit --requirement "${runtime_requirements}"
|
|
25
|
+
|
|
14
26
|
rm -f dist/codex_a2a-*.whl dist/codex_a2a-*.tar.gz
|
|
15
27
|
build_warning_filters="ignore::UserWarning:vcs_versioning._backends._git,ignore::UserWarning:vcs_versioning.overrides"
|
|
16
28
|
PYTHONWARNINGS="${build_warning_filters}${PYTHONWARNINGS:+,${PYTHONWARNINGS}}" uv build --no-sources
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codex-a2a
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.2
|
|
4
4
|
Summary: Codex A2A runtime adapter
|
|
5
5
|
Author: liujuanjuan1984@Intelligent-Internet
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -24,15 +24,20 @@ Description-Content-Type: text/markdown
|
|
|
24
24
|
License-File: LICENSE
|
|
25
25
|
Requires-Dist: a2a-sdk==0.3.25
|
|
26
26
|
Requires-Dist: aiosqlite<1.0,>=0.20
|
|
27
|
-
Requires-Dist: fastapi<0.
|
|
27
|
+
Requires-Dist: fastapi<0.122,>=0.121
|
|
28
28
|
Requires-Dist: httpx<0.29,>=0.28.1
|
|
29
|
+
Requires-Dist: protobuf<7.0,>=6.33.5
|
|
30
|
+
Requires-Dist: pyasn1<1.0,>=0.6.3
|
|
29
31
|
Requires-Dist: pydantic<3.0,>=2.6
|
|
30
32
|
Requires-Dist: pydantic-settings<3.0,>=2.2
|
|
33
|
+
Requires-Dist: requests<3.0,>=2.33.0
|
|
31
34
|
Requires-Dist: sqlalchemy<3.0,>=2.0
|
|
32
35
|
Requires-Dist: sse-starlette<3.0,>=2.1
|
|
33
36
|
Requires-Dist: uvicorn<0.30,>=0.29
|
|
34
37
|
Provides-Extra: dev
|
|
38
|
+
Requires-Dist: pip-audit<3.0,>=2.9; extra == "dev"
|
|
35
39
|
Requires-Dist: pre-commit>=3.7; extra == "dev"
|
|
40
|
+
Requires-Dist: pygments<3.0,>=2.20.0; extra == "dev"
|
|
36
41
|
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
37
42
|
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
|
|
38
43
|
Requires-Dist: pytest-cov<8.0,>=5.0; extra == "dev"
|
|
@@ -10,6 +10,7 @@ mypy.ini
|
|
|
10
10
|
pyproject.toml
|
|
11
11
|
uv.lock
|
|
12
12
|
.github/workflows/ci.yml
|
|
13
|
+
.github/workflows/dependency-health.yml
|
|
13
14
|
.github/workflows/publish.yml
|
|
14
15
|
docs/architecture.md
|
|
15
16
|
docs/compatibility.md
|
|
@@ -17,6 +18,8 @@ docs/extension-specifications.md
|
|
|
17
18
|
docs/guide.md
|
|
18
19
|
docs/maintainer-architecture.md
|
|
19
20
|
scripts/README.md
|
|
21
|
+
scripts/dependency_health.sh
|
|
22
|
+
scripts/health_common.sh
|
|
20
23
|
scripts/publish_github_release.sh
|
|
21
24
|
scripts/smoke_test_built_cli.sh
|
|
22
25
|
scripts/sync_codex_docs.sh
|
|
@@ -177,6 +180,8 @@ tests/parts/__init__.py
|
|
|
177
180
|
tests/parts/test_text.py
|
|
178
181
|
tests/profile/__init__.py
|
|
179
182
|
tests/profile/test_profile.py
|
|
183
|
+
tests/scripts/__init__.py
|
|
184
|
+
tests/scripts/test_script_health_contract.py
|
|
180
185
|
tests/server/__init__.py
|
|
181
186
|
tests/server/test_agent_card.py
|
|
182
187
|
tests/server/test_auth.py
|
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
a2a-sdk==0.3.25
|
|
2
2
|
aiosqlite<1.0,>=0.20
|
|
3
|
-
fastapi<0.
|
|
3
|
+
fastapi<0.122,>=0.121
|
|
4
4
|
httpx<0.29,>=0.28.1
|
|
5
|
+
protobuf<7.0,>=6.33.5
|
|
6
|
+
pyasn1<1.0,>=0.6.3
|
|
5
7
|
pydantic<3.0,>=2.6
|
|
6
8
|
pydantic-settings<3.0,>=2.2
|
|
9
|
+
requests<3.0,>=2.33.0
|
|
7
10
|
sqlalchemy<3.0,>=2.0
|
|
8
11
|
sse-starlette<3.0,>=2.1
|
|
9
12
|
uvicorn<0.30,>=0.29
|
|
10
13
|
|
|
11
14
|
[dev]
|
|
15
|
+
pip-audit<3.0,>=2.9
|
|
12
16
|
pre-commit>=3.7
|
|
17
|
+
pygments<3.0,>=2.20.0
|
|
13
18
|
pytest>=8.0
|
|
14
19
|
pytest-asyncio>=0.23
|
|
15
20
|
pytest-cov<8.0,>=5.0
|
|
@@ -8,7 +8,9 @@ CONTRIBUTING_TEXT = Path("CONTRIBUTING.md").read_text()
|
|
|
8
8
|
SECURITY_TEXT = Path("SECURITY.md").read_text()
|
|
9
9
|
SCRIPTS_README_TEXT = Path("scripts/README.md").read_text()
|
|
10
10
|
CI_WORKFLOW_TEXT = Path(".github/workflows/ci.yml").read_text()
|
|
11
|
+
DEPENDENCY_HEALTH_WORKFLOW_TEXT = Path(".github/workflows/dependency-health.yml").read_text()
|
|
11
12
|
PUBLISH_WORKFLOW_TEXT = Path(".github/workflows/publish.yml").read_text()
|
|
13
|
+
DEPENDENCY_HEALTH_SCRIPT_TEXT = Path("scripts/dependency_health.sh").read_text()
|
|
12
14
|
SMOKE_TEST_SCRIPT_TEXT = Path("scripts/smoke_test_built_cli.sh").read_text()
|
|
13
15
|
RUNTIME_MATRIX_SCRIPT_TEXT = Path("scripts/validate_runtime_matrix.sh").read_text()
|
|
14
16
|
SYNC_CODEX_DOCS_TEXT = Path("scripts/sync_codex_docs.sh").read_text()
|
|
@@ -52,24 +54,48 @@ def test_readme_documents_released_cli_installation_via_uv_tool() -> None:
|
|
|
52
54
|
|
|
53
55
|
|
|
54
56
|
def test_publish_workflow_builds_and_smoke_tests_release_artifacts() -> None:
|
|
57
|
+
assert "name: Release Publish" in PUBLISH_WORKFLOW_TEXT
|
|
55
58
|
assert 'tags:\n - "v*"' in PUBLISH_WORKFLOW_TEXT
|
|
56
59
|
assert "workflow_dispatch" in PUBLISH_WORKFLOW_TEXT
|
|
60
|
+
assert "name: Build Release Artifacts" in PUBLISH_WORKFLOW_TEXT
|
|
61
|
+
assert "name: Publish to PyPI" in PUBLISH_WORKFLOW_TEXT
|
|
62
|
+
assert "name: Sync GitHub Release" in PUBLISH_WORKFLOW_TEXT
|
|
63
|
+
assert "Export runtime requirements for vulnerability audit" in PUBLISH_WORKFLOW_TEXT
|
|
64
|
+
assert "Run runtime dependency vulnerability audit" in PUBLISH_WORKFLOW_TEXT
|
|
65
|
+
assert "uv run pip-audit --requirement /tmp/runtime-requirements.txt" in PUBLISH_WORKFLOW_TEXT
|
|
57
66
|
assert "uv build --no-sources" in PUBLISH_WORKFLOW_TEXT
|
|
58
67
|
assert "bash ./scripts/smoke_test_built_cli.sh" in PUBLISH_WORKFLOW_TEXT
|
|
59
68
|
assert "gh-action-pypi-publish" in PUBLISH_WORKFLOW_TEXT
|
|
60
69
|
|
|
61
70
|
|
|
62
71
|
def test_ci_workflow_deduplicates_full_gate_and_runtime_matrix() -> None:
|
|
72
|
+
assert "name: Validation" in CI_WORKFLOW_TEXT
|
|
63
73
|
assert "quality-gate:" in CI_WORKFLOW_TEXT
|
|
74
|
+
assert "name: Validation Baseline" in CI_WORKFLOW_TEXT
|
|
64
75
|
assert 'python-version: "3.13"' in CI_WORKFLOW_TEXT
|
|
65
76
|
assert "bash ./scripts/validate_baseline.sh" in CI_WORKFLOW_TEXT
|
|
66
77
|
assert "runtime-matrix:" in CI_WORKFLOW_TEXT
|
|
78
|
+
assert "name: Runtime Matrix (Python ${{ matrix.python-version }})" in CI_WORKFLOW_TEXT
|
|
67
79
|
assert 'python-version: ["3.11", "3.12"]' in CI_WORKFLOW_TEXT
|
|
68
80
|
assert "bash ./scripts/validate_runtime_matrix.sh" in CI_WORKFLOW_TEXT
|
|
69
81
|
|
|
70
82
|
|
|
83
|
+
def test_dependency_health_workflow_runs_as_a_standalone_check() -> None:
|
|
84
|
+
assert "name: Dependency Health" in DEPENDENCY_HEALTH_WORKFLOW_TEXT
|
|
85
|
+
assert "workflow_dispatch" in DEPENDENCY_HEALTH_WORKFLOW_TEXT
|
|
86
|
+
assert 'cron: "0 3 1 * *"' in DEPENDENCY_HEALTH_WORKFLOW_TEXT
|
|
87
|
+
assert "dependency-health:" in DEPENDENCY_HEALTH_WORKFLOW_TEXT
|
|
88
|
+
assert "name: Dependency Health Audit" in DEPENDENCY_HEALTH_WORKFLOW_TEXT
|
|
89
|
+
assert 'python-version: "3.13"' in DEPENDENCY_HEALTH_WORKFLOW_TEXT
|
|
90
|
+
assert "enable-cache: false" in DEPENDENCY_HEALTH_WORKFLOW_TEXT
|
|
91
|
+
assert "bash ./scripts/dependency_health.sh" in DEPENDENCY_HEALTH_WORKFLOW_TEXT
|
|
92
|
+
assert "uv pip list --outdated" in DEPENDENCY_HEALTH_SCRIPT_TEXT
|
|
93
|
+
assert "uv run pip-audit" in DEPENDENCY_HEALTH_SCRIPT_TEXT
|
|
94
|
+
|
|
95
|
+
|
|
71
96
|
def test_scripts_index_exposes_built_cli_smoke_test() -> None:
|
|
72
97
|
assert "validate_runtime_matrix.sh" in SCRIPTS_README_TEXT
|
|
98
|
+
assert "dependency_health.sh" in SCRIPTS_README_TEXT
|
|
73
99
|
assert "smoke_test_built_cli.sh" in SCRIPTS_README_TEXT
|
|
74
100
|
assert "`uv tool`" in SCRIPTS_README_TEXT
|
|
75
101
|
assert "runtime entrypoints live in the released `codex-a2a` CLI" in SCRIPTS_README_TEXT
|
|
@@ -137,6 +163,7 @@ def test_validation_and_publish_paths_filter_known_build_warnings() -> None:
|
|
|
137
163
|
validate_baseline_text = Path("scripts/validate_baseline.sh").read_text()
|
|
138
164
|
assert "vcs_versioning._backends._git" in validate_baseline_text
|
|
139
165
|
assert "vcs_versioning.overrides" in validate_baseline_text
|
|
166
|
+
assert "uv run pip-audit --requirement" in validate_baseline_text
|
|
140
167
|
assert "vcs_versioning._backends._git" in PUBLISH_WORKFLOW_TEXT
|
|
141
168
|
assert "vcs_versioning.overrides" in PUBLISH_WORKFLOW_TEXT
|
|
142
169
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Script contract tests."""
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
|
|
3
|
+
DEPENDENCY_HEALTH_TEXT = Path("scripts/dependency_health.sh").read_text()
|
|
4
|
+
HEALTH_COMMON_TEXT = Path("scripts/health_common.sh").read_text()
|
|
5
|
+
SCRIPTS_INDEX_TEXT = Path("scripts/README.md").read_text()
|
|
6
|
+
VALIDATE_BASELINE_TEXT = Path("scripts/validate_baseline.sh").read_text()
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def test_shared_repo_health_prerequisites_live_in_common_helper() -> None:
|
|
10
|
+
assert "run_shared_repo_health_prerequisites()" in HEALTH_COMMON_TEXT
|
|
11
|
+
assert 'echo "[${label}] sync locked environment"' in HEALTH_COMMON_TEXT
|
|
12
|
+
assert 'echo "[${label}] verify dependency compatibility"' in HEALTH_COMMON_TEXT
|
|
13
|
+
assert "uv sync --all-extras --frozen" in HEALTH_COMMON_TEXT
|
|
14
|
+
assert "uv pip check" in HEALTH_COMMON_TEXT
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def test_validate_baseline_keeps_local_regression_scope() -> None:
|
|
18
|
+
assert "uv run pre-commit run --all-files" in VALIDATE_BASELINE_TEXT
|
|
19
|
+
assert "uv run mypy --config-file mypy.ini" in VALIDATE_BASELINE_TEXT
|
|
20
|
+
assert "uv run pytest" in VALIDATE_BASELINE_TEXT
|
|
21
|
+
assert "uv export" in VALIDATE_BASELINE_TEXT
|
|
22
|
+
assert "uv run pip-audit" in VALIDATE_BASELINE_TEXT
|
|
23
|
+
assert "uv pip list --outdated" not in VALIDATE_BASELINE_TEXT
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def test_dependency_health_keeps_dependency_review_scope() -> None:
|
|
27
|
+
assert (
|
|
28
|
+
'source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/health_common.sh"'
|
|
29
|
+
in DEPENDENCY_HEALTH_TEXT
|
|
30
|
+
)
|
|
31
|
+
assert 'run_shared_repo_health_prerequisites "dependency-health"' in DEPENDENCY_HEALTH_TEXT
|
|
32
|
+
assert "uv pip list --outdated" in DEPENDENCY_HEALTH_TEXT
|
|
33
|
+
assert "uv run pip-audit" in DEPENDENCY_HEALTH_TEXT
|
|
34
|
+
assert "uv run pytest" not in DEPENDENCY_HEALTH_TEXT
|
|
35
|
+
assert "uv run mypy" not in DEPENDENCY_HEALTH_TEXT
|
|
36
|
+
assert "uv run pre-commit run --all-files" not in DEPENDENCY_HEALTH_TEXT
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def test_scripts_index_documents_split_health_entrypoints() -> None:
|
|
40
|
+
assert "default local validation baseline used by contributors and CI" in SCRIPTS_INDEX_TEXT
|
|
41
|
+
assert "standalone dependency review flow" in SCRIPTS_INDEX_TEXT
|
|
42
|
+
assert "health_common.sh" in SCRIPTS_INDEX_TEXT
|
|
43
|
+
assert "intentionally remain separate entrypoints" in SCRIPTS_INDEX_TEXT
|