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.
Files changed (207) hide show
  1. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/.github/workflows/ci.yml +3 -1
  2. codex_a2a-0.6.2/.github/workflows/dependency-health.yml +32 -0
  3. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/.github/workflows/publish.yml +15 -1
  4. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/PKG-INFO +7 -2
  5. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/pyproject.toml +6 -1
  6. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/scripts/README.md +3 -0
  7. codex_a2a-0.6.2/scripts/dependency_health.sh +26 -0
  8. codex_a2a-0.6.2/scripts/health_common.sh +23 -0
  9. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/scripts/validate_baseline.sh +12 -0
  10. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a.egg-info/PKG-INFO +7 -2
  11. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a.egg-info/SOURCES.txt +5 -0
  12. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a.egg-info/requires.txt +6 -1
  13. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/package/test_release_distribution_contract.py +27 -0
  14. codex_a2a-0.6.2/tests/scripts/__init__.py +1 -0
  15. codex_a2a-0.6.2/tests/scripts/test_script_health_contract.py +43 -0
  16. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/uv.lock +300 -25
  17. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/.gitignore +0 -0
  18. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/.pre-commit-config.yaml +0 -0
  19. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/.secrets.baseline +0 -0
  20. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/AGENTS.md +0 -0
  21. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/CONTRIBUTING.md +0 -0
  22. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/LICENSE +0 -0
  23. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/README.md +0 -0
  24. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/SECURITY.md +0 -0
  25. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/docs/architecture.md +0 -0
  26. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/docs/compatibility.md +0 -0
  27. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/docs/extension-specifications.md +0 -0
  28. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/docs/guide.md +0 -0
  29. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/docs/maintainer-architecture.md +0 -0
  30. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/mypy.ini +0 -0
  31. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/scripts/publish_github_release.sh +0 -0
  32. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/scripts/smoke_test_built_cli.sh +0 -0
  33. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/scripts/sync_codex_docs.sh +0 -0
  34. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/scripts/validate_runtime_matrix.sh +0 -0
  35. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/setup.cfg +0 -0
  36. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/__init__.py +0 -0
  37. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/auth.py +0 -0
  38. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/cli.py +0 -0
  39. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/client/__init__.py +0 -0
  40. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/client/agent_card.py +0 -0
  41. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/client/auth.py +0 -0
  42. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/client/client.py +0 -0
  43. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/client/config.py +0 -0
  44. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/client/errors.py +0 -0
  45. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/client/manager.py +0 -0
  46. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/client/payload_text.py +0 -0
  47. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/client/request_context.py +0 -0
  48. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/client/types.py +0 -0
  49. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/config.py +0 -0
  50. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/contracts/__init__.py +0 -0
  51. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/contracts/extensions.py +0 -0
  52. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/contracts/runtime_output.py +0 -0
  53. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/__init__.py +0 -0
  54. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/cancellation.py +0 -0
  55. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/directory_policy.py +0 -0
  56. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/discovery_runtime.py +0 -0
  57. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/exec_runtime.py +0 -0
  58. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/executor.py +0 -0
  59. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/output_mapping.py +0 -0
  60. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/request_metadata.py +0 -0
  61. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/request_overrides.py +0 -0
  62. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/response_emitter.py +0 -0
  63. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/review_runtime.py +0 -0
  64. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/session_runtime.py +0 -0
  65. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/stream_chunks.py +0 -0
  66. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/stream_interrupts.py +0 -0
  67. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/stream_processor.py +0 -0
  68. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/stream_state.py +0 -0
  69. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/streaming.py +0 -0
  70. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/thread_lifecycle_runtime.py +0 -0
  71. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/execution/tool_call_payloads.py +0 -0
  72. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/input_mapping.py +0 -0
  73. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/__init__.py +0 -0
  74. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/application.py +0 -0
  75. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/control_params.py +0 -0
  76. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/discovery_control.py +0 -0
  77. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/discovery_params.py +0 -0
  78. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/discovery_payload_mapping.py +0 -0
  79. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/discovery_query.py +0 -0
  80. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/dispatch.py +0 -0
  81. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/errors.py +0 -0
  82. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/exec_control.py +0 -0
  83. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/hooks.py +0 -0
  84. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/interrupt_lifecycle.py +0 -0
  85. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/interrupt_params.py +0 -0
  86. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/interrupt_recovery.py +0 -0
  87. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/interrupt_recovery_params.py +0 -0
  88. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/interrupts.py +0 -0
  89. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/params.py +0 -0
  90. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/params_common.py +0 -0
  91. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/payload_mapping.py +0 -0
  92. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/query_params.py +0 -0
  93. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/review_control.py +0 -0
  94. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/review_control_params.py +0 -0
  95. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/session_control.py +0 -0
  96. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/session_query.py +0 -0
  97. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/thread_lifecycle_control.py +0 -0
  98. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/thread_lifecycle_params.py +0 -0
  99. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/turn_control.py +0 -0
  100. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/jsonrpc/turn_control_params.py +0 -0
  101. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/logging_context.py +0 -0
  102. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/media_modes.py +0 -0
  103. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/metrics.py +0 -0
  104. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/parts/text.py +0 -0
  105. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/profile/__init__.py +0 -0
  106. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/profile/runtime.py +0 -0
  107. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/py.typed +0 -0
  108. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/server/__init__.py +0 -0
  109. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/server/agent_card.py +0 -0
  110. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/server/application.py +0 -0
  111. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/server/call_context.py +0 -0
  112. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/server/database.py +0 -0
  113. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/server/http_middlewares.py +0 -0
  114. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/server/migrations.py +0 -0
  115. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/server/openapi.py +0 -0
  116. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/server/output_negotiation.py +0 -0
  117. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/server/request_handler.py +0 -0
  118. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/server/runtime_state.py +0 -0
  119. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/server/task_store.py +0 -0
  120. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/upstream/__init__.py +0 -0
  121. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/upstream/client.py +0 -0
  122. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/upstream/conversation_facade.py +0 -0
  123. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/upstream/exec_facade.py +0 -0
  124. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/upstream/interrupt_bridge.py +0 -0
  125. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/upstream/interrupts.py +0 -0
  126. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/upstream/models.py +0 -0
  127. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/upstream/notification_mapping.py +0 -0
  128. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/upstream/request_mapping.py +0 -0
  129. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/upstream/startup.py +0 -0
  130. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/upstream/stream_bridge.py +0 -0
  131. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a/upstream/transport.py +0 -0
  132. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a.egg-info/dependency_links.txt +0 -0
  133. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a.egg-info/entry_points.txt +0 -0
  134. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/src/codex_a2a.egg-info/top_level.txt +0 -0
  135. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/__init__.py +0 -0
  136. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/client/__init__.py +0 -0
  137. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/client/test_agent_card.py +0 -0
  138. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/client/test_cli.py +0 -0
  139. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/client/test_client_flow.py +0 -0
  140. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/client/test_client_manager.py +0 -0
  141. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/client/test_errors.py +0 -0
  142. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/client/test_lifecycle.py +0 -0
  143. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/client/test_payload_text.py +0 -0
  144. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/client/test_request_context.py +0 -0
  145. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/client/test_types.py +0 -0
  146. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/config/__init__.py +0 -0
  147. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/config/test_settings.py +0 -0
  148. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/contracts/__init__.py +0 -0
  149. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/contracts/test_extension_contract_consistency.py +0 -0
  150. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/__init__.py +0 -0
  151. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_agent_errors.py +0 -0
  152. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_cancellation.py +0 -0
  153. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_codex_agent_session_binding.py +0 -0
  154. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_directory_validation.py +0 -0
  155. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_discovery_exec_runtime.py +0 -0
  156. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_metrics.py +0 -0
  157. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_review_runtime.py +0 -0
  158. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_session_ownership.py +0 -0
  159. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_session_persistence.py +0 -0
  160. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_session_runtime.py +0 -0
  161. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_stream_chunks.py +0 -0
  162. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_stream_interrupts.py +0 -0
  163. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_streaming_output_contract.py +0 -0
  164. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_thread_lifecycle_runtime.py +0 -0
  165. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/execution/test_tool_call_payloads.py +0 -0
  166. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/fixtures/codex_app_server/command_execution_output_delta.json +0 -0
  167. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/fixtures/codex_app_server/file_change_output_delta.json +0 -0
  168. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/jsonrpc/__init__.py +0 -0
  169. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/jsonrpc/test_codex_discovery_extension.py +0 -0
  170. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/jsonrpc/test_codex_exec_extension.py +0 -0
  171. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/jsonrpc/test_codex_session_extension.py +0 -0
  172. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/jsonrpc/test_codex_thread_lifecycle_extension.py +0 -0
  173. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/jsonrpc/test_codex_turn_review_extension.py +0 -0
  174. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/jsonrpc/test_dispatch.py +0 -0
  175. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/jsonrpc/test_guard_hooks.py +0 -0
  176. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/jsonrpc/test_jsonrpc_models.py +0 -0
  177. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/package/__init__.py +0 -0
  178. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/package/test_logging.py +0 -0
  179. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/package/test_publish_github_release_script.py +0 -0
  180. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/package/test_typing_contract.py +0 -0
  181. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/package/test_version.py +0 -0
  182. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/parts/__init__.py +0 -0
  183. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/parts/test_text.py +0 -0
  184. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/profile/__init__.py +0 -0
  185. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/profile/test_profile.py +0 -0
  186. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/server/__init__.py +0 -0
  187. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/server/test_agent_card.py +0 -0
  188. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/server/test_auth.py +0 -0
  189. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/server/test_call_context_builder.py +0 -0
  190. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/server/test_cli.py +0 -0
  191. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/server/test_database.py +0 -0
  192. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/server/test_database_app_persistence.py +0 -0
  193. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/server/test_migrations.py +0 -0
  194. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/server/test_request_handler.py +0 -0
  195. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/server/test_runtime_state.py +0 -0
  196. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/server/test_task_store.py +0 -0
  197. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/server/test_transport_contract.py +0 -0
  198. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/support/__init__.py +0 -0
  199. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/support/context.py +0 -0
  200. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/support/dummy_clients.py +0 -0
  201. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/support/fixtures.py +0 -0
  202. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/support/settings.py +0 -0
  203. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/test_input_mapping.py +0 -0
  204. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/upstream/__init__.py +0 -0
  205. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/upstream/test_codex_client_params.py +0 -0
  206. {codex_a2a-0.6.1 → codex_a2a-0.6.2}/tests/upstream/test_interrupt_persistence.py +0 -0
  207. {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: CI
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.1
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.111,>=0.110
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.110,<0.111",
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.1
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.111,>=0.110
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.111,>=0.110
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