asap-protocol 2.5.2__tar.gz → 2.5.3__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 (239) hide show
  1. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/.gitignore +2 -0
  2. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/CHANGELOG.md +47 -2
  3. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/PKG-INFO +10 -10
  4. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/README.md +9 -9
  5. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/pyproject.toml +7 -3
  6. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/__init__.py +1 -1
  7. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/README.md +4 -3
  8. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/_request_handler.py +44 -16
  9. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/client/_discovery.py +5 -3
  10. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/LICENSE +0 -0
  11. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/entities/agent.schema.json +0 -0
  12. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/entities/artifact.schema.json +0 -0
  13. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/entities/conversation.schema.json +0 -0
  14. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/entities/manifest.schema.json +0 -0
  15. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/entities/message.schema.json +0 -0
  16. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/entities/state_snapshot.schema.json +0 -0
  17. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/entities/task.schema.json +0 -0
  18. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/envelope.schema.json +0 -0
  19. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/examples/shellclaw-jetson-capabilities.json +0 -0
  20. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/parts/data_part.schema.json +0 -0
  21. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/parts/file_part.schema.json +0 -0
  22. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/parts/resource_part.schema.json +0 -0
  23. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/parts/template_part.schema.json +0 -0
  24. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/parts/text_part.schema.json +0 -0
  25. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/payloads/artifact_notify.schema.json +0 -0
  26. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/payloads/mcp_resource_data.schema.json +0 -0
  27. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/payloads/mcp_resource_fetch.schema.json +0 -0
  28. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/payloads/mcp_tool_call.schema.json +0 -0
  29. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/payloads/mcp_tool_result.schema.json +0 -0
  30. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/payloads/message_send.schema.json +0 -0
  31. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/payloads/state_query.schema.json +0 -0
  32. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/payloads/state_restore.schema.json +0 -0
  33. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/payloads/task_cancel.schema.json +0 -0
  34. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/payloads/task_request.schema.json +0 -0
  35. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/payloads/task_response.schema.json +0 -0
  36. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/payloads/task_update.schema.json +0 -0
  37. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/__init__.py +0 -0
  38. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/mcp/__init__.py +0 -0
  39. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/mcp/auth_middleware.py +0 -0
  40. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/mcp/capability_map.py +0 -0
  41. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/mcp/config.py +0 -0
  42. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/mcp/errors.py +0 -0
  43. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/mcp/jwt_extractor.py +0 -0
  44. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/mcp/protected_server.py +0 -0
  45. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/openapi/__init__.py +0 -0
  46. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/openapi/approval.py +0 -0
  47. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/openapi/capability_mapper.py +0 -0
  48. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/openapi/factory.py +0 -0
  49. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/openapi/handler.py +0 -0
  50. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/openapi/spec_loader.py +0 -0
  51. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/__init__.py +0 -0
  52. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/_scope_parse.py +0 -0
  53. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/agent_jwt.py +0 -0
  54. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/approval.py +0 -0
  55. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/capabilities.py +0 -0
  56. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/identity.py +0 -0
  57. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/introspection.py +0 -0
  58. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/jti_replay_cache.py +0 -0
  59. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/jwks.py +0 -0
  60. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/middleware.py +0 -0
  61. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/oauth2.py +0 -0
  62. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/oidc.py +0 -0
  63. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/scopes.py +0 -0
  64. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/self_auth.py +0 -0
  65. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/webauthn.py +0 -0
  66. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/webauthn_store.py +0 -0
  67. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/cli/__init__.py +0 -0
  68. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/cli/_compat.py +0 -0
  69. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/cli/audit_export.py +0 -0
  70. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/cli/compliance_check.py +0 -0
  71. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/cli/delegation.py +0 -0
  72. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/cli/keys.py +0 -0
  73. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/cli/manifest.py +0 -0
  74. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/cli/repl.py +0 -0
  75. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/cli/schemas.py +0 -0
  76. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/cli/trace.py +0 -0
  77. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/client/__init__.py +0 -0
  78. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/client/cache.py +0 -0
  79. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/client/http_client.py +0 -0
  80. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/client/market.py +0 -0
  81. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/client/revocation.py +0 -0
  82. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/client/trust.py +0 -0
  83. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/crypto/__init__.py +0 -0
  84. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/crypto/keys.py +0 -0
  85. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/crypto/models.py +0 -0
  86. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/crypto/signing.py +0 -0
  87. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/crypto/trust.py +0 -0
  88. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/crypto/trust_levels.py +0 -0
  89. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/discovery/__init__.py +0 -0
  90. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/discovery/dnssd.py +0 -0
  91. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/discovery/health.py +0 -0
  92. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/discovery/registry.py +0 -0
  93. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/discovery/validation.py +0 -0
  94. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/discovery/wellknown.py +0 -0
  95. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/economics/__init__.py +0 -0
  96. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/economics/audit.py +0 -0
  97. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/economics/delegation.py +0 -0
  98. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/economics/delegation_storage.py +0 -0
  99. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/economics/hooks.py +0 -0
  100. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/economics/metering.py +0 -0
  101. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/economics/sla.py +0 -0
  102. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/economics/sla_storage.py +0 -0
  103. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/economics/storage.py +0 -0
  104. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/errors.py +0 -0
  105. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/__init__.py +0 -0
  106. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/a2h_approval.py +0 -0
  107. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/agent_failover.py +0 -0
  108. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/auth_patterns.py +0 -0
  109. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/coordinator.py +0 -0
  110. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/echo_agent.py +0 -0
  111. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/error_recovery.py +0 -0
  112. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/long_running.py +0 -0
  113. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/mcp_client_demo.py +0 -0
  114. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/mcp_integration.py +0 -0
  115. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/multi_step_workflow.py +0 -0
  116. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/orchestration.py +0 -0
  117. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/rate_limiting.py +0 -0
  118. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/run_demo.py +0 -0
  119. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/secure_agent.py +0 -0
  120. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/secure_handler.py +0 -0
  121. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/state_migration.py +0 -0
  122. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/storage_backends.py +0 -0
  123. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/streaming_agent.py +0 -0
  124. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/streaming_response.py +0 -0
  125. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/v1_3_0_showcase.py +0 -0
  126. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/v1_4_0_showcase.py +0 -0
  127. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/websocket_concept.py +0 -0
  128. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/handlers/__init__.py +0 -0
  129. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/handlers/hitl.py +0 -0
  130. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/integrations/__init__.py +0 -0
  131. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/integrations/_base.py +0 -0
  132. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/integrations/a2h.py +0 -0
  133. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/integrations/crewai.py +0 -0
  134. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/integrations/langchain.py +0 -0
  135. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/integrations/llamaindex.py +0 -0
  136. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/integrations/openclaw.py +0 -0
  137. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/integrations/pydanticai.py +0 -0
  138. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/integrations/smolagents.py +0 -0
  139. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/integrations/vercel_ai.py +0 -0
  140. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/mcp/__init__.py +0 -0
  141. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/mcp/auth/__init__.py +0 -0
  142. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/mcp/auth/auth_middleware.py +0 -0
  143. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/mcp/auth/capability_map.py +0 -0
  144. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/mcp/auth/config.py +0 -0
  145. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/mcp/auth/errors.py +0 -0
  146. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/mcp/auth/jwt_extractor.py +0 -0
  147. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/mcp/auth/protected_server.py +0 -0
  148. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/mcp/client.py +0 -0
  149. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/mcp/protocol.py +0 -0
  150. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/mcp/serve.py +0 -0
  151. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/mcp/server.py +0 -0
  152. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/mcp/server_runner.py +0 -0
  153. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/models/__init__.py +0 -0
  154. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/models/base.py +0 -0
  155. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/models/constants.py +0 -0
  156. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/models/entities.py +0 -0
  157. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/models/enums.py +0 -0
  158. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/models/envelope.py +0 -0
  159. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/models/ids.py +0 -0
  160. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/models/parts.py +0 -0
  161. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/models/payloads.py +0 -0
  162. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/models/types.py +0 -0
  163. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/models/validators.py +0 -0
  164. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/observability/__init__.py +0 -0
  165. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/observability/dashboards/README.md +0 -0
  166. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/observability/dashboards/asap-detailed.json +0 -0
  167. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/observability/dashboards/asap-red.json +0 -0
  168. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/observability/logging.py +0 -0
  169. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/observability/metrics.py +0 -0
  170. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/observability/trace_parser.py +0 -0
  171. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/observability/trace_ui.py +0 -0
  172. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/observability/tracing.py +0 -0
  173. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/registry/__init__.py +0 -0
  174. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/registry/anti_spam.py +0 -0
  175. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/registry/auto_registration.py +0 -0
  176. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/registry/bot_pr.py +0 -0
  177. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/registry/receipt_cache.py +0 -0
  178. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/schemas.py +0 -0
  179. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/state/__init__.py +0 -0
  180. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/state/machine.py +0 -0
  181. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/state/metering.py +0 -0
  182. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/state/snapshot.py +0 -0
  183. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/state/stores/__init__.py +0 -0
  184. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/state/stores/_sqlite_base.py +0 -0
  185. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/state/stores/_sync_bridge.py +0 -0
  186. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/state/stores/memory.py +0 -0
  187. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/state/stores/sqlite.py +0 -0
  188. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/testing/__init__.py +0 -0
  189. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/testing/asgi_factory.py +0 -0
  190. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/testing/assertions.py +0 -0
  191. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/testing/compliance.py +0 -0
  192. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/testing/fixtures.py +0 -0
  193. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/testing/mocks.py +0 -0
  194. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/__init__.py +0 -0
  195. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/_auth_helpers.py +0 -0
  196. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/_state_deps.py +0 -0
  197. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/agent_routes.py +0 -0
  198. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/cache.py +0 -0
  199. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/capability_routes.py +0 -0
  200. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/challenge.py +0 -0
  201. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/circuit_breaker.py +0 -0
  202. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/client/__init__.py +0 -0
  203. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/client/_core.py +0 -0
  204. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/client/_helpers.py +0 -0
  205. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/client/_send.py +0 -0
  206. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/compression.py +0 -0
  207. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/delegation_api.py +0 -0
  208. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/errors.py +0 -0
  209. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/escalation_routes.py +0 -0
  210. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/executors.py +0 -0
  211. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/handlers.py +0 -0
  212. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/jsonrpc.py +0 -0
  213. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/lambda_codec.py +0 -0
  214. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/middleware.py +0 -0
  215. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/mtls.py +0 -0
  216. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/rate_limit.py +0 -0
  217. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/routes/__init__.py +0 -0
  218. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/routes/audit.py +0 -0
  219. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/routes/health.py +0 -0
  220. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/routes/jsonrpc.py +0 -0
  221. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/routes/websocket.py +0 -0
  222. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/server.py +0 -0
  223. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/sla_api.py +0 -0
  224. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/usage_api.py +0 -0
  225. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/validators.py +0 -0
  226. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/webhook.py +0 -0
  227. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/websocket.py +0 -0
  228. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/ws/__init__.py +0 -0
  229. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/ws/_ack.py +0 -0
  230. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/ws/_actions.py +0 -0
  231. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/ws/_dispatch.py +0 -0
  232. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/ws/_errors.py +0 -0
  233. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/ws/_recv.py +0 -0
  234. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/ws/client.py +0 -0
  235. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/ws/codecs.py +0 -0
  236. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/ws/pool.py +0 -0
  237. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/ws/server.py +0 -0
  238. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/utils/__init__.py +0 -0
  239. {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/utils/sanitization.py +0 -0
@@ -177,6 +177,8 @@ cython_debug/
177
177
 
178
178
  # Project specific
179
179
  !/.cursor/
180
+ # Local Cursor slash-command workflows (dev process; keep on disk, do not commit)
181
+ .cursor/commands/
180
182
  /drafts/
181
183
  /.claude/
182
184
  # Local agent state / tooling (ignore everywhere, not only repo root)
@@ -7,9 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
- ### Follow-up (planned v2.5.3+)
10
+ ### Follow-up (planned v2.5.4+)
11
11
 
12
- - **Adapter Lab II** — enterprise/workflow adapters ([prd-v2.5.3-adapter-lab-ii.md](product/prd/prd-v2.5.3-adapter-lab-ii.md)).
13
12
  - **Distribution Loop** — homepage, templates, metrics ([prd-v2.5.4-distribution-loop.md](product/prd/prd-v2.5.4-distribution-loop.md)).
14
13
  - **Formal Spec & Interop** — RFC spec, introspection, privacy ([prd-v2.5.5-formal-spec-interop.md](product/prd/prd-v2.5.5-formal-spec-interop.md)).
15
14
  - `@asap-protocol/mcp-auth` HTTP/SSE middleware (deferred from v2.5.0 — see [2.5.0] TypeScript note and [typescript-mcp-auth-spike.md](engineering/tasks/v2.5.0/typescript-mcp-auth-spike.md)).
@@ -18,6 +17,52 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
18
17
 
19
18
  ---
20
19
 
20
+ ## [2.5.3] - 2026-07-14
21
+
22
+ > **Status:** merged to `main` ([#291](https://github.com/adriannoes/asap-protocol/pull/291), 2026-07-15);
23
+ > **pending tag/publish**. PyPI still serves **2.5.2** until `v2.5.3` is tagged and the
24
+ > release workflow completes.
25
+
26
+ **Adapter Lab II** — workflow / enterprise adapters as **docs + examples** (no wire-format
27
+ change). Scope: [prd-v2.5.3-adapter-lab-ii.md](product/prd/prd-v2.5.3-adapter-lab-ii.md).
28
+ npm `@asap-protocol/*` packages remain at **2.4.1**.
29
+
30
+ ### Added
31
+
32
+ - **Workflow connectors**: OpenAPI → ASAP skills for n8n-/Activepieces-shaped workflow
33
+ HTTP APIs — [guide](docs/integrations/workflow-connectors.md) +
34
+ `examples/workflow_asap_connector/` (Compliance Harness v2 score **1.0**).
35
+ - **Automation connector security**: production baseline for OpenAPI-backed connectors
36
+ ([guide](docs/guides/automation-connector-security.md)).
37
+ - **Microsoft Agent Framework**: research / experimental interop guide
38
+ ([guide](docs/integrations/microsoft-agent-framework.md)); no .NET SDK / NuGet sample.
39
+ - **NeMo Agent Toolkit**: experimental Path A stdio demo
40
+ ([guide](docs/integrations/nemo-agent-toolkit.md),
41
+ `examples/nemo_agent_toolkit_asap/`); Path C third-party plugin remains deferred.
42
+ - **Docs / web surface**: MkDocs Adapters + Lab II nav; marketplace WhatsNew ribbon and
43
+ developer-experience CTAs for Lab II guides.
44
+
45
+ ### Fixed
46
+
47
+ - **Invalid envelope JSON-RPC errors**: URN / structure validation failures return
48
+ JSON-safe `-32602` with `validation_errors` (no longer escalate to `-32603` when
49
+ Pydantic embeds `ValueError` in `ctx`).
50
+ - **MCP Auth Bridge example client**: self-contained path captures the demo Agent JWT
51
+ from the spawned child stderr (cross-process paste no longer required).
52
+ - **`ASAPClient.health_check`**: `base_url` defaults to the client's HTTP base URL.
53
+
54
+ ### Security (deps)
55
+
56
+ - Override `setuptools>=83.0.0` for **PYSEC-2026-3447** (transitive build/tooling path).
57
+ See [SECURITY.md](SECURITY.md).
58
+
59
+ ### Migration
60
+
61
+ - **v2.5.2 → v2.5.3**: See [migration guide](docs/migration.md#upgrading-from-v252-to-v253).
62
+ No breaking wire-protocol changes; adopt new guides/examples as needed.
63
+
64
+ ---
65
+
21
66
  ## [2.5.2] - 2026-07-08
22
67
 
23
68
  **Security & correctness follow-up** — operator API auth, tighter ingress
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: asap-protocol
3
- Version: 2.5.2
3
+ Version: 2.5.3
4
4
  Summary: Async Simple Agent Protocol - A streamlined protocol for agent-to-agent communication
5
5
  Project-URL: Homepage, https://github.com/adriannoes/asap-protocol
6
6
  Project-URL: Documentation, https://adriannoes.github.io/asap-protocol
@@ -99,9 +99,9 @@ Description-Content-Type: text/markdown
99
99
 
100
100
  > A production-ready protocol for agent-to-agent communication and task coordination.
101
101
 
102
- **Quick Info**: [`v2.5.2`](https://github.com/adriannoes/asap-protocol/releases/tag/v2.5.2) | `Apache 2.0` | `Python 3.13+` | [Documentation](docs/index.md) | [Changelog](CHANGELOG.md)
102
+ **Quick Info**: [`v2.5.3`](https://github.com/adriannoes/asap-protocol/blob/main/CHANGELOG.md#253---2026-07-14) (merged · pending tag/publish) · PyPI [`v2.5.2`](https://pypi.org/project/asap-protocol/) | `Apache 2.0` | `Python 3.13+` | [Documentation](docs/index.md) | [Changelog](CHANGELOG.md)
103
103
 
104
- > 📦 **Install** — [`asap-protocol` on PyPI](https://pypi.org/project/asap-protocol/) (Python) · [`@asap-protocol/client` on npm](https://www.npmjs.com/package/@asap-protocol/client) (TypeScript)
104
+ > 📦 **Install** — [`asap-protocol` **2.5.2** on PyPI](https://pypi.org/project/asap-protocol/) (Python; **2.5.3** merged to `main`, pending tag/publish) · [`@asap-protocol/client` on npm](https://www.npmjs.com/package/@asap-protocol/client) (TypeScript)
105
105
 
106
106
  🚀 **Live now** our [**agentic marketplace**](https://asap-protocol.com/) — browse agents, register yours, request verification.
107
107
 
@@ -148,24 +148,24 @@ ASAP meets agents where they run — optional Python extras, npm tool bridges, a
148
148
 
149
149
  | Runtime | Integrations | Docs |
150
150
  | --- | --- | --- |
151
- | **Python** | LangChain, CrewAI, LlamaIndex, PydanticAI, SmolAgents, OpenClaw (`pip install "asap-protocol[extra]"`); Vercel AI SDK router; MCP; MCP Auth Bridge; A2H | [OpenClaw](docs/guides/openclaw-integration.md) · [Vercel AI SDK](docs/guides/vercel-ai-sdk.md) · [MCP](docs/mcp-integration.md) · [MCP Auth Bridge](docs/adapters/mcp-auth-bridge.md) |
152
- | **TypeScript** (npm) | `@asap-protocol/client` (Vercel AI / OpenAI / Anthropic adapters), `@asap-protocol/mastra`, `@asap-protocol/openai-agents` | [TypeScript SDK](docs/sdks/typescript.md) · [Mastra](docs/integrations/mastra.md) · [OpenAI Agents](docs/integrations/openai-agents.md) |
151
+ | **Python** | LangChain, CrewAI, LlamaIndex, PydanticAI, SmolAgents, OpenClaw (`pip install "asap-protocol[extra]"`); Vercel AI SDK router; MCP; MCP Auth Bridge; A2H; OpenAPI workflow connectors (Lab II) | [OpenClaw](docs/guides/openclaw-integration.md) · [Vercel AI SDK](docs/guides/vercel-ai-sdk.md) · [MCP](docs/mcp-integration.md) · [MCP Auth Bridge](docs/adapters/mcp-auth-bridge.md) · [Workflow connectors](docs/integrations/workflow-connectors.md) · [NeMo Agent Toolkit](docs/integrations/nemo-agent-toolkit.md) (experimental) |
152
+ | **TypeScript** (npm) | `@asap-protocol/client` (Vercel AI / OpenAI / Anthropic adapters), `@asap-protocol/mastra`, `@asap-protocol/openai-agents` | [TypeScript SDK](docs/sdks/typescript.md) · [Mastra](docs/integrations/mastra.md) · [OpenAI Agents](docs/integrations/openai-agents.md) · [Microsoft Agent Framework](docs/integrations/microsoft-agent-framework.md) (research) |
153
153
 
154
154
  ## Installation
155
155
 
156
156
  We recommend using [uv](https://github.com/astral-sh/uv) for dependency management:
157
157
 
158
158
  ```bash
159
- uv add asap-protocol
159
+ uv add asap-protocol # latest on PyPI (currently 2.5.2)
160
160
  ```
161
161
 
162
162
  Or with pip:
163
163
 
164
164
  ```bash
165
- pip install asap-protocol
165
+ pip install asap-protocol==2.5.2
166
166
  ```
167
167
 
168
- **TypeScript** (npm, **`2.4.1`** — unchanged for v2.5.2; `@asap-protocol/mcp-auth` HTTP middleware still deferred):
168
+ **TypeScript** (npm, **`2.4.1`** — unchanged for v2.5.3; `@asap-protocol/mcp-auth` HTTP middleware still deferred):
169
169
 
170
170
  - [`@asap-protocol/client`](https://www.npmjs.com/package/@asap-protocol/client) — [SDK docs](docs/sdks/typescript.md)
171
171
  - [`@asap-protocol/mastra`](https://www.npmjs.com/package/@asap-protocol/mastra) — [docs](docs/integrations/mastra.md) · [demo](apps/example-mastra/README.md)
@@ -177,7 +177,7 @@ npm install @asap-protocol/mastra@2.4.1 @asap-protocol/client @mastra/core zod
177
177
  npm install @asap-protocol/openai-agents@2.4.1 @asap-protocol/client @openai/agents zod
178
178
  ```
179
179
 
180
- **Python v2.5.2** (security follow-up): `uv add asap-protocol` or `pip install asap-protocol==2.5.2` — see [Migration (v2.5.1 → v2.5.2)](docs/migration.md#upgrading-from-v251).
180
+ **Python v2.5.3** (Adapter Lab II) is **merged to `main`** and **pending tag/publish** — stay on `asap-protocol==2.5.2` from PyPI until the release is published; then see [Migration (v2.5.2 → v2.5.3)](docs/migration.md#upgrading-from-v252-to-v253).
181
181
 
182
182
  ## Quick Start
183
183
 
@@ -265,6 +265,7 @@ High-level only — see **[Changelog](https://github.com/adriannoes/asap-protoco
265
265
 
266
266
  | Version | What shipped |
267
267
  | :-- | :-- |
268
+ | **v2.5.3** | **Adapter Lab II** — **merged · pending tag/publish**. Workflow OpenAPI connectors + security guide, experimental MAF / NeMo guides, JSON-safe `-32602`, MCP example client DX. PyPI still **2.5.2**. See [CHANGELOG](CHANGELOG.md#253---2026-07-14), [PRD](product/prd/prd-v2.5.3-adapter-lab-ii.md), and [Migration (v2.5.2 → v2.5.3)](docs/migration.md#upgrading-from-v252-to-v253) |
268
269
  | **v2.5.2** | **Security & correctness follow-up** — opt-in operator API auth, `extra="forbid"` ingress, Redis JTI replay, web distributed rate limits, v2.5.1 CR follow-ups (#245–#249), registry signed-manifest/400 fixes. See [CHANGELOG](CHANGELOG.md#252---2026-07-08), [PRD](product/prd/prd-v2.5.2-security-follow-up.md), and [Migration (v2.5.1 → v2.5.2)](docs/migration.md#upgrading-from-v251) |
269
270
  | **v2.5.1** | **Code quality patch** — behavior-preserving refactor (transport/server, client, websocket, SQLite storage, auth, integrations) + six correctness/security fixes (atomic `revoke_cascade`, `usage_events` DDL, unified Host-JWT verifier, **WS now enforces OAuth2**, OpenAPI handler cleanup, client `correlation_id` binding). Deprecated import paths removed in v2.6.0. See [CHANGELOG](CHANGELOG.md#251---2026-06-25) and [Migration (v2.5.0 → v2.5.1)](docs/migration.md#upgrading-from-v250-to-v251) |
270
271
  | **v2.5.0.1** | **Compliance publish** — **[GitHub Release `v2.5.0.1`](https://github.com/adriannoes/asap-protocol/releases/tag/v2.5.0.1)** · PyPI **`asap-compliance` 1.3.0** (`mcp-auth-bridge` profile; requires `asap-protocol>=2.5.0`). No `asap-protocol` API change. See [CHANGELOG](CHANGELOG.md#2501---2026-06-24) |
@@ -286,7 +287,6 @@ High-level only — see **[Changelog](https://github.com/adriannoes/asap-protoco
286
287
 
287
288
  The [agentic marketplace](https://asap-protocol.com/) and Lite Registry are live. The **v2.5.x train** focuses on interop and adoption:
288
289
 
289
- - **v2.5.3** — enterprise/workflow adapter spikes (Adapter Lab II)
290
290
  - **v2.5.4** — distribution loop (homepage templates, starter kits, adoption metrics)
291
291
  - **`@asap-protocol/mcp-auth`** (npm) — HTTP/SSE MCP middleware
292
292
  - **Formal spec track** (v2.5.5) — introspection, privacy, cross-protocol interop on the path to v3.0 economy
@@ -7,9 +7,9 @@
7
7
 
8
8
  > A production-ready protocol for agent-to-agent communication and task coordination.
9
9
 
10
- **Quick Info**: [`v2.5.2`](https://github.com/adriannoes/asap-protocol/releases/tag/v2.5.2) | `Apache 2.0` | `Python 3.13+` | [Documentation](docs/index.md) | [Changelog](CHANGELOG.md)
10
+ **Quick Info**: [`v2.5.3`](https://github.com/adriannoes/asap-protocol/blob/main/CHANGELOG.md#253---2026-07-14) (merged · pending tag/publish) · PyPI [`v2.5.2`](https://pypi.org/project/asap-protocol/) | `Apache 2.0` | `Python 3.13+` | [Documentation](docs/index.md) | [Changelog](CHANGELOG.md)
11
11
 
12
- > 📦 **Install** — [`asap-protocol` on PyPI](https://pypi.org/project/asap-protocol/) (Python) · [`@asap-protocol/client` on npm](https://www.npmjs.com/package/@asap-protocol/client) (TypeScript)
12
+ > 📦 **Install** — [`asap-protocol` **2.5.2** on PyPI](https://pypi.org/project/asap-protocol/) (Python; **2.5.3** merged to `main`, pending tag/publish) · [`@asap-protocol/client` on npm](https://www.npmjs.com/package/@asap-protocol/client) (TypeScript)
13
13
 
14
14
  🚀 **Live now** our [**agentic marketplace**](https://asap-protocol.com/) — browse agents, register yours, request verification.
15
15
 
@@ -56,24 +56,24 @@ ASAP meets agents where they run — optional Python extras, npm tool bridges, a
56
56
 
57
57
  | Runtime | Integrations | Docs |
58
58
  | --- | --- | --- |
59
- | **Python** | LangChain, CrewAI, LlamaIndex, PydanticAI, SmolAgents, OpenClaw (`pip install "asap-protocol[extra]"`); Vercel AI SDK router; MCP; MCP Auth Bridge; A2H | [OpenClaw](docs/guides/openclaw-integration.md) · [Vercel AI SDK](docs/guides/vercel-ai-sdk.md) · [MCP](docs/mcp-integration.md) · [MCP Auth Bridge](docs/adapters/mcp-auth-bridge.md) |
60
- | **TypeScript** (npm) | `@asap-protocol/client` (Vercel AI / OpenAI / Anthropic adapters), `@asap-protocol/mastra`, `@asap-protocol/openai-agents` | [TypeScript SDK](docs/sdks/typescript.md) · [Mastra](docs/integrations/mastra.md) · [OpenAI Agents](docs/integrations/openai-agents.md) |
59
+ | **Python** | LangChain, CrewAI, LlamaIndex, PydanticAI, SmolAgents, OpenClaw (`pip install "asap-protocol[extra]"`); Vercel AI SDK router; MCP; MCP Auth Bridge; A2H; OpenAPI workflow connectors (Lab II) | [OpenClaw](docs/guides/openclaw-integration.md) · [Vercel AI SDK](docs/guides/vercel-ai-sdk.md) · [MCP](docs/mcp-integration.md) · [MCP Auth Bridge](docs/adapters/mcp-auth-bridge.md) · [Workflow connectors](docs/integrations/workflow-connectors.md) · [NeMo Agent Toolkit](docs/integrations/nemo-agent-toolkit.md) (experimental) |
60
+ | **TypeScript** (npm) | `@asap-protocol/client` (Vercel AI / OpenAI / Anthropic adapters), `@asap-protocol/mastra`, `@asap-protocol/openai-agents` | [TypeScript SDK](docs/sdks/typescript.md) · [Mastra](docs/integrations/mastra.md) · [OpenAI Agents](docs/integrations/openai-agents.md) · [Microsoft Agent Framework](docs/integrations/microsoft-agent-framework.md) (research) |
61
61
 
62
62
  ## Installation
63
63
 
64
64
  We recommend using [uv](https://github.com/astral-sh/uv) for dependency management:
65
65
 
66
66
  ```bash
67
- uv add asap-protocol
67
+ uv add asap-protocol # latest on PyPI (currently 2.5.2)
68
68
  ```
69
69
 
70
70
  Or with pip:
71
71
 
72
72
  ```bash
73
- pip install asap-protocol
73
+ pip install asap-protocol==2.5.2
74
74
  ```
75
75
 
76
- **TypeScript** (npm, **`2.4.1`** — unchanged for v2.5.2; `@asap-protocol/mcp-auth` HTTP middleware still deferred):
76
+ **TypeScript** (npm, **`2.4.1`** — unchanged for v2.5.3; `@asap-protocol/mcp-auth` HTTP middleware still deferred):
77
77
 
78
78
  - [`@asap-protocol/client`](https://www.npmjs.com/package/@asap-protocol/client) — [SDK docs](docs/sdks/typescript.md)
79
79
  - [`@asap-protocol/mastra`](https://www.npmjs.com/package/@asap-protocol/mastra) — [docs](docs/integrations/mastra.md) · [demo](apps/example-mastra/README.md)
@@ -85,7 +85,7 @@ npm install @asap-protocol/mastra@2.4.1 @asap-protocol/client @mastra/core zod
85
85
  npm install @asap-protocol/openai-agents@2.4.1 @asap-protocol/client @openai/agents zod
86
86
  ```
87
87
 
88
- **Python v2.5.2** (security follow-up): `uv add asap-protocol` or `pip install asap-protocol==2.5.2` — see [Migration (v2.5.1 → v2.5.2)](docs/migration.md#upgrading-from-v251).
88
+ **Python v2.5.3** (Adapter Lab II) is **merged to `main`** and **pending tag/publish** — stay on `asap-protocol==2.5.2` from PyPI until the release is published; then see [Migration (v2.5.2 → v2.5.3)](docs/migration.md#upgrading-from-v252-to-v253).
89
89
 
90
90
  ## Quick Start
91
91
 
@@ -173,6 +173,7 @@ High-level only — see **[Changelog](https://github.com/adriannoes/asap-protoco
173
173
 
174
174
  | Version | What shipped |
175
175
  | :-- | :-- |
176
+ | **v2.5.3** | **Adapter Lab II** — **merged · pending tag/publish**. Workflow OpenAPI connectors + security guide, experimental MAF / NeMo guides, JSON-safe `-32602`, MCP example client DX. PyPI still **2.5.2**. See [CHANGELOG](CHANGELOG.md#253---2026-07-14), [PRD](product/prd/prd-v2.5.3-adapter-lab-ii.md), and [Migration (v2.5.2 → v2.5.3)](docs/migration.md#upgrading-from-v252-to-v253) |
176
177
  | **v2.5.2** | **Security & correctness follow-up** — opt-in operator API auth, `extra="forbid"` ingress, Redis JTI replay, web distributed rate limits, v2.5.1 CR follow-ups (#245–#249), registry signed-manifest/400 fixes. See [CHANGELOG](CHANGELOG.md#252---2026-07-08), [PRD](product/prd/prd-v2.5.2-security-follow-up.md), and [Migration (v2.5.1 → v2.5.2)](docs/migration.md#upgrading-from-v251) |
177
178
  | **v2.5.1** | **Code quality patch** — behavior-preserving refactor (transport/server, client, websocket, SQLite storage, auth, integrations) + six correctness/security fixes (atomic `revoke_cascade`, `usage_events` DDL, unified Host-JWT verifier, **WS now enforces OAuth2**, OpenAPI handler cleanup, client `correlation_id` binding). Deprecated import paths removed in v2.6.0. See [CHANGELOG](CHANGELOG.md#251---2026-06-25) and [Migration (v2.5.0 → v2.5.1)](docs/migration.md#upgrading-from-v250-to-v251) |
178
179
  | **v2.5.0.1** | **Compliance publish** — **[GitHub Release `v2.5.0.1`](https://github.com/adriannoes/asap-protocol/releases/tag/v2.5.0.1)** · PyPI **`asap-compliance` 1.3.0** (`mcp-auth-bridge` profile; requires `asap-protocol>=2.5.0`). No `asap-protocol` API change. See [CHANGELOG](CHANGELOG.md#2501---2026-06-24) |
@@ -194,7 +195,6 @@ High-level only — see **[Changelog](https://github.com/adriannoes/asap-protoco
194
195
 
195
196
  The [agentic marketplace](https://asap-protocol.com/) and Lite Registry are live. The **v2.5.x train** focuses on interop and adoption:
196
197
 
197
- - **v2.5.3** — enterprise/workflow adapter spikes (Adapter Lab II)
198
198
  - **v2.5.4** — distribution loop (homepage templates, starter kits, adoption metrics)
199
199
  - **`@asap-protocol/mcp-auth`** (npm) — HTTP/SSE MCP middleware
200
200
  - **Formal spec track** (v2.5.5) — introspection, privacy, cross-protocol interop on the path to v3.0 economy
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "asap-protocol"
3
- version = "2.5.2"
3
+ version = "2.5.3"
4
4
  description = "Async Simple Agent Protocol - A streamlined protocol for agent-to-agent communication"
5
5
  authors = [
6
6
  {name = "ASAP Protocol Contributors"}
@@ -127,7 +127,8 @@ Issues = "https://github.com/adriannoes/asap-protocol/issues"
127
127
  # - tinytag>=2.2.1 for CVE-2026-32889
128
128
  # - cryptography>=48.0.1 for GHSA-537c-gmf6-5ccf (CVE-2026-39892 / CVE-2026-34073 baseline at 46.0.7)
129
129
  # - requests>=2.33.0 for CVE-2026-25645 (extract_zipped_paths temp file)
130
- # - pillow>=12.2.0 for CVE-2026-40192 (transitive, e.g. pdf/vision stacks)
130
+ # - pillow>=12.3.0 for PYSEC-2026-2253–2257 (prior: CVE-2026-40192 at >=12.2.0; transitive, e.g. pdf/vision stacks)
131
+ # - click>=8.3.3 for PYSEC-2026-2132 (transitive, e.g. typer / uvicorn / mkdocs stacks)
131
132
  # - pytest>=9.0.3 for CVE-2025-71176 (dev)
132
133
  # - python-multipart>=0.0.31 for CVE-2026-53538–53540 (FastAPI stack; prior floor 0.0.27)
133
134
  # - starlette>=1.3.1 for CVE-2026-54282 / CVE-2026-54283 (FastAPI stack)
@@ -145,6 +146,7 @@ Issues = "https://github.com/adriannoes/asap-protocol/issues"
145
146
  # - joserfc>=1.6.7 for CVE-2026-48990 (JWT/JWS primitives; direct + override)
146
147
  # - python-engineio>=4.13.2 for CVE-2026-48802 / CVE-2026-48809 (transitive, locust stack)
147
148
  # - python-socketio>=5.16.2 for CVE-2026-48804 (transitive, locust stack)
149
+ # - setuptools>=83.0.0 for PYSEC-2026-3447 (transitive build/tooling path)
148
150
  [tool.uv]
149
151
  override-dependencies = [
150
152
  "aiohttp>=3.14.0,<4",
@@ -153,7 +155,8 @@ override-dependencies = [
153
155
  "tinytag>=2.2.1",
154
156
  "cryptography>=48.0.1,<49",
155
157
  "requests>=2.33.0",
156
- "pillow>=12.2.0",
158
+ "pillow>=12.3.0",
159
+ "click>=8.3.3",
157
160
  "pytest>=9.0.3",
158
161
  "python-multipart>=0.0.31",
159
162
  "starlette>=1.3.1",
@@ -172,6 +175,7 @@ override-dependencies = [
172
175
  "joserfc>=1.6.7,<2",
173
176
  "python-engineio>=4.13.2",
174
177
  "python-socketio>=5.16.2",
178
+ "setuptools>=83.0.0",
175
179
  ]
176
180
 
177
181
  [project.scripts]
@@ -8,7 +8,7 @@ from __future__ import annotations
8
8
 
9
9
  from typing import Any
10
10
 
11
- __version__ = "2.5.2"
11
+ __version__ = "2.5.3"
12
12
 
13
13
  __all__ = ["__version__", "create_from_openapi"]
14
14
 
@@ -8,7 +8,7 @@ Examples cover:
8
8
 
9
9
  - **Core flow**: Echo agent, coordinator, and a full demo (run_demo).
10
10
  - **Advanced patterns**: Multi-agent orchestration, long-running tasks with checkpoints, error recovery, MCP integration, state migration, auth, rate limiting.
11
- - **Concepts**: WebSocket (not implemented), streaming responses, multi-step workflows.
11
+ - **Concepts**: WebSocket (`/asap/ws` on `create_app`), streaming responses (`streaming_agent`), multi-step workflows.
12
12
 
13
13
  Run any example from the repository root with:
14
14
 
@@ -97,16 +97,17 @@ Run agents individually:
97
97
  | **auth_patterns** | Bearer auth, custom token validators, OAuth2 concept (manifest + create_app) | `uv run python -m asap.examples.auth_patterns` |
98
98
  | **rate_limiting** | Per-sender and per-endpoint rate limit patterns (create_limiter, ASAP_RATE_LIMIT) | `uv run python -m asap.examples.rate_limiting` |
99
99
 
100
- ### Concepts (no full implementation)
100
+ ### Concepts
101
101
 
102
102
  | Module | Description | Usage |
103
103
  |--------|-------------|--------|
104
- | **websocket_concept** | How WebSocket would work with ASAP (comments/pseudocode only) | `uv run python -m asap.examples.websocket_concept` |
104
+ | **websocket_concept** | Educational notes; live transport is WebSocket `/asap/ws` (see `docs/transport.md`) | `uv run python -m asap.examples.websocket_concept` |
105
105
 
106
106
  ### Streaming and workflows
107
107
 
108
108
  | Module | Description | Usage |
109
109
  |--------|-------------|--------|
110
+ | **streaming_agent** | Live agent with SSE `TaskStream` chunks over HTTP | `uv run python -m asap.examples.streaming_agent` |
110
111
  | **streaming_response** | Stream TaskUpdate progress chunks (simulated streaming) | `uv run python -m asap.examples.streaming_response [--chunks N]` |
111
112
  | **multi_step_workflow** | Multi-step pipeline: fetch → transform → summarize (WorkflowState, run_workflow) | `uv run python -m asap.examples.multi_step_workflow` |
112
113
 
@@ -79,7 +79,38 @@ T = TypeVar("T")
79
79
  HandlerResult = tuple[T | None, JSONResponse | None]
80
80
  EnvelopeOrError = Union[JSONResponse, tuple[Envelope, str]]
81
81
 
82
- __all__ = ["ASAPRequestHandler", "_audit_log_operation", "_fallback_context"]
82
+ __all__ = [
83
+ "ASAPRequestHandler",
84
+ "_audit_log_operation",
85
+ "_fallback_context",
86
+ "json_safe_validation_errors",
87
+ ]
88
+
89
+
90
+ def json_safe_validation_errors(exc: ValidationError) -> list[dict[str, Any]]:
91
+ """Return Pydantic validation errors that are JSON-serializable.
92
+
93
+ ``ValidationError.errors()`` may embed non-JSON types in ``ctx`` (e.g. a
94
+ raw ``ValueError`` from a field validator). Putting that into
95
+ ``JSONResponse`` raises during Starlette encoding and the client sees
96
+ JSON-RPC ``-32603`` instead of ``-32602``.
97
+
98
+ Uses ``exc.json()`` so ``ctx`` values are stringified while locations and
99
+ messages stay intact.
100
+
101
+ Example:
102
+ >>> from pydantic import BaseModel, ValidationError
103
+ >>> class M(BaseModel):
104
+ ... x: int
105
+ >>> try:
106
+ ... M(x="bad")
107
+ ... except ValidationError as err:
108
+ ... errs = json_safe_validation_errors(err)
109
+ >>> isinstance(errs[0]["loc"], list)
110
+ True
111
+ """
112
+ loaded: list[dict[str, Any]] = json.loads(exc.json())
113
+ return loaded
83
114
 
84
115
 
85
116
  def _fallback_context(start_time: float) -> RequestContext:
@@ -309,9 +340,10 @@ class ASAPRequestHandler:
309
340
  payload_type = envelope.payload_type
310
341
  return envelope, payload_type
311
342
  except ValidationError as e:
343
+ validation_errors = json_safe_validation_errors(e)
312
344
  log_data: dict[str, Any] = {
313
345
  "error": "Invalid envelope structure",
314
- "validation_errors": e.errors(),
346
+ "validation_errors": validation_errors,
315
347
  }
316
348
  if not is_debug_mode():
317
349
  log_data = sanitize_for_logging(log_data)
@@ -322,7 +354,7 @@ class ASAPRequestHandler:
322
354
  INVALID_PARAMS,
323
355
  data={
324
356
  "error": "Invalid envelope structure",
325
- "validation_errors": e.errors(),
357
+ "validation_errors": validation_errors,
326
358
  },
327
359
  request_id=ctx.request_id,
328
360
  )
@@ -820,22 +852,22 @@ class ASAPRequestHandler:
820
852
  error_code = INVALID_REQUEST
821
853
  error_message = "Invalid JSON-RPC structure"
822
854
  if isinstance(e, ValidationError):
823
- errors = e.errors()
855
+ validation_errors = json_safe_validation_errors(e)
824
856
  # If params validation failed with dict_type error, use INVALID_PARAMS
825
- for error in errors:
826
- if error.get("loc") == ("params",) and error.get("type") == "dict_type":
857
+ for error in validation_errors:
858
+ if error.get("loc") == ["params"] and error.get("type") == "dict_type":
827
859
  error_code = INVALID_PARAMS
828
860
  error_message = "JSON-RPC 'params' must be an object"
829
861
  break
862
+ else:
863
+ validation_errors = [
864
+ {"type": "type_error", "loc": [], "msg": str(e), "input": None}
865
+ ]
830
866
 
831
867
  log_struct: dict[str, Any] = {
832
868
  "error": error_message,
833
869
  "error_type": type(e).__name__,
834
- "validation_errors": (
835
- e.errors()
836
- if isinstance(e, ValidationError)
837
- else [{"type": "type_error", "loc": (), "msg": str(e), "input": None}]
838
- ),
870
+ "validation_errors": validation_errors,
839
871
  }
840
872
  if not is_debug_mode():
841
873
  log_struct = sanitize_for_logging(log_struct)
@@ -844,11 +876,7 @@ class ASAPRequestHandler:
844
876
  error_code,
845
877
  data={
846
878
  "error": error_message,
847
- "validation_errors": (
848
- e.errors()
849
- if isinstance(e, ValidationError)
850
- else [{"type": "type_error", "loc": (), "msg": str(e), "input": None}]
851
- ),
879
+ "validation_errors": validation_errors,
852
880
  },
853
881
  request_id=body.get("id") if isinstance(body, dict) else None,
854
882
  )
@@ -418,7 +418,7 @@ class _DiscoveryMixin:
418
418
  url=sanitize_url(url),
419
419
  ) from e
420
420
 
421
- async def health_check(self, base_url: str) -> HealthStatus:
421
+ async def health_check(self, base_url: str | None = None) -> HealthStatus:
422
422
  """Check agent health/liveness at the given base URL.
423
423
 
424
424
  Fetches GET {base_url}/.well-known/asap/health and parses the
@@ -426,6 +426,7 @@ class _DiscoveryMixin:
426
426
 
427
427
  Args:
428
428
  base_url: Agent base URL (e.g. "https://agent.example.com").
429
+ Defaults to this client's HTTP base URL when omitted.
429
430
 
430
431
  Returns:
431
432
  HealthStatus with status, agent_id, version, uptime_seconds, etc.
@@ -437,10 +438,11 @@ class _DiscoveryMixin:
437
438
 
438
439
  Example:
439
440
  >>> async with ASAPClient("http://localhost:8000") as client:
440
- ... health = await client.health_check("https://other-agent.example.com")
441
+ ... health = await client.health_check()
441
442
  ... print(health.status, health.uptime_seconds)
442
443
  """
443
- health_url = base_url.rstrip("/") + WELLKNOWN_HEALTH_PATH
444
+ resolved = self._http_base_url if base_url is None else base_url
445
+ health_url = resolved.rstrip("/") + WELLKNOWN_HEALTH_PATH
444
446
  if not self._client:
445
447
  raise ASAPConnectionError(
446
448
  "Client not connected. Use 'async with' context.",
File without changes