asap-protocol 2.5.2__tar.gz → 2.5.4__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.4}/.gitignore +2 -0
  2. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/CHANGELOG.md +77 -3
  3. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/PKG-INFO +13 -12
  4. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/README.md +11 -10
  5. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/pyproject.toml +9 -4
  6. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/__init__.py +1 -1
  7. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/examples/README.md +4 -3
  8. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/_request_handler.py +44 -16
  9. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/client/_discovery.py +5 -3
  10. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/LICENSE +0 -0
  11. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/schemas/entities/agent.schema.json +0 -0
  12. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/schemas/entities/artifact.schema.json +0 -0
  13. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/schemas/entities/conversation.schema.json +0 -0
  14. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/schemas/entities/manifest.schema.json +0 -0
  15. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/schemas/entities/message.schema.json +0 -0
  16. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/schemas/entities/state_snapshot.schema.json +0 -0
  17. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/schemas/entities/task.schema.json +0 -0
  18. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/schemas/envelope.schema.json +0 -0
  19. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/schemas/examples/shellclaw-jetson-capabilities.json +0 -0
  20. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/schemas/parts/data_part.schema.json +0 -0
  21. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/schemas/parts/file_part.schema.json +0 -0
  22. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/schemas/parts/resource_part.schema.json +0 -0
  23. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/schemas/parts/template_part.schema.json +0 -0
  24. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/schemas/parts/text_part.schema.json +0 -0
  25. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/schemas/payloads/artifact_notify.schema.json +0 -0
  26. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/schemas/payloads/mcp_resource_data.schema.json +0 -0
  27. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/schemas/payloads/mcp_resource_fetch.schema.json +0 -0
  28. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/schemas/payloads/mcp_tool_call.schema.json +0 -0
  29. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/schemas/payloads/mcp_tool_result.schema.json +0 -0
  30. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/schemas/payloads/message_send.schema.json +0 -0
  31. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/schemas/payloads/state_query.schema.json +0 -0
  32. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/schemas/payloads/state_restore.schema.json +0 -0
  33. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/schemas/payloads/task_cancel.schema.json +0 -0
  34. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/schemas/payloads/task_request.schema.json +0 -0
  35. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/schemas/payloads/task_response.schema.json +0 -0
  36. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/schemas/payloads/task_update.schema.json +0 -0
  37. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/adapters/__init__.py +0 -0
  38. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/adapters/mcp/__init__.py +0 -0
  39. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/adapters/mcp/auth_middleware.py +0 -0
  40. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/adapters/mcp/capability_map.py +0 -0
  41. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/adapters/mcp/config.py +0 -0
  42. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/adapters/mcp/errors.py +0 -0
  43. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/adapters/mcp/jwt_extractor.py +0 -0
  44. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/adapters/mcp/protected_server.py +0 -0
  45. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/adapters/openapi/__init__.py +0 -0
  46. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/adapters/openapi/approval.py +0 -0
  47. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/adapters/openapi/capability_mapper.py +0 -0
  48. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/adapters/openapi/factory.py +0 -0
  49. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/adapters/openapi/handler.py +0 -0
  50. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/adapters/openapi/spec_loader.py +0 -0
  51. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/auth/__init__.py +0 -0
  52. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/auth/_scope_parse.py +0 -0
  53. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/auth/agent_jwt.py +0 -0
  54. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/auth/approval.py +0 -0
  55. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/auth/capabilities.py +0 -0
  56. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/auth/identity.py +0 -0
  57. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/auth/introspection.py +0 -0
  58. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/auth/jti_replay_cache.py +0 -0
  59. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/auth/jwks.py +0 -0
  60. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/auth/middleware.py +0 -0
  61. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/auth/oauth2.py +0 -0
  62. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/auth/oidc.py +0 -0
  63. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/auth/scopes.py +0 -0
  64. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/auth/self_auth.py +0 -0
  65. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/auth/webauthn.py +0 -0
  66. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/auth/webauthn_store.py +0 -0
  67. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/cli/__init__.py +0 -0
  68. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/cli/_compat.py +0 -0
  69. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/cli/audit_export.py +0 -0
  70. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/cli/compliance_check.py +0 -0
  71. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/cli/delegation.py +0 -0
  72. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/cli/keys.py +0 -0
  73. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/cli/manifest.py +0 -0
  74. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/cli/repl.py +0 -0
  75. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/cli/schemas.py +0 -0
  76. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/cli/trace.py +0 -0
  77. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/client/__init__.py +0 -0
  78. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/client/cache.py +0 -0
  79. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/client/http_client.py +0 -0
  80. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/client/market.py +0 -0
  81. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/client/revocation.py +0 -0
  82. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/client/trust.py +0 -0
  83. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/crypto/__init__.py +0 -0
  84. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/crypto/keys.py +0 -0
  85. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/crypto/models.py +0 -0
  86. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/crypto/signing.py +0 -0
  87. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/crypto/trust.py +0 -0
  88. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/crypto/trust_levels.py +0 -0
  89. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/discovery/__init__.py +0 -0
  90. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/discovery/dnssd.py +0 -0
  91. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/discovery/health.py +0 -0
  92. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/discovery/registry.py +0 -0
  93. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/discovery/validation.py +0 -0
  94. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/discovery/wellknown.py +0 -0
  95. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/economics/__init__.py +0 -0
  96. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/economics/audit.py +0 -0
  97. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/economics/delegation.py +0 -0
  98. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/economics/delegation_storage.py +0 -0
  99. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/economics/hooks.py +0 -0
  100. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/economics/metering.py +0 -0
  101. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/economics/sla.py +0 -0
  102. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/economics/sla_storage.py +0 -0
  103. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/economics/storage.py +0 -0
  104. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/errors.py +0 -0
  105. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/examples/__init__.py +0 -0
  106. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/examples/a2h_approval.py +0 -0
  107. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/examples/agent_failover.py +0 -0
  108. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/examples/auth_patterns.py +0 -0
  109. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/examples/coordinator.py +0 -0
  110. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/examples/echo_agent.py +0 -0
  111. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/examples/error_recovery.py +0 -0
  112. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/examples/long_running.py +0 -0
  113. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/examples/mcp_client_demo.py +0 -0
  114. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/examples/mcp_integration.py +0 -0
  115. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/examples/multi_step_workflow.py +0 -0
  116. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/examples/orchestration.py +0 -0
  117. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/examples/rate_limiting.py +0 -0
  118. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/examples/run_demo.py +0 -0
  119. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/examples/secure_agent.py +0 -0
  120. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/examples/secure_handler.py +0 -0
  121. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/examples/state_migration.py +0 -0
  122. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/examples/storage_backends.py +0 -0
  123. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/examples/streaming_agent.py +0 -0
  124. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/examples/streaming_response.py +0 -0
  125. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/examples/v1_3_0_showcase.py +0 -0
  126. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/examples/v1_4_0_showcase.py +0 -0
  127. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/examples/websocket_concept.py +0 -0
  128. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/handlers/__init__.py +0 -0
  129. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/handlers/hitl.py +0 -0
  130. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/integrations/__init__.py +0 -0
  131. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/integrations/_base.py +0 -0
  132. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/integrations/a2h.py +0 -0
  133. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/integrations/crewai.py +0 -0
  134. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/integrations/langchain.py +0 -0
  135. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/integrations/llamaindex.py +0 -0
  136. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/integrations/openclaw.py +0 -0
  137. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/integrations/pydanticai.py +0 -0
  138. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/integrations/smolagents.py +0 -0
  139. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/integrations/vercel_ai.py +0 -0
  140. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/mcp/__init__.py +0 -0
  141. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/mcp/auth/__init__.py +0 -0
  142. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/mcp/auth/auth_middleware.py +0 -0
  143. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/mcp/auth/capability_map.py +0 -0
  144. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/mcp/auth/config.py +0 -0
  145. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/mcp/auth/errors.py +0 -0
  146. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/mcp/auth/jwt_extractor.py +0 -0
  147. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/mcp/auth/protected_server.py +0 -0
  148. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/mcp/client.py +0 -0
  149. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/mcp/protocol.py +0 -0
  150. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/mcp/serve.py +0 -0
  151. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/mcp/server.py +0 -0
  152. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/mcp/server_runner.py +0 -0
  153. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/models/__init__.py +0 -0
  154. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/models/base.py +0 -0
  155. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/models/constants.py +0 -0
  156. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/models/entities.py +0 -0
  157. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/models/enums.py +0 -0
  158. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/models/envelope.py +0 -0
  159. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/models/ids.py +0 -0
  160. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/models/parts.py +0 -0
  161. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/models/payloads.py +0 -0
  162. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/models/types.py +0 -0
  163. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/models/validators.py +0 -0
  164. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/observability/__init__.py +0 -0
  165. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/observability/dashboards/README.md +0 -0
  166. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/observability/dashboards/asap-detailed.json +0 -0
  167. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/observability/dashboards/asap-red.json +0 -0
  168. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/observability/logging.py +0 -0
  169. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/observability/metrics.py +0 -0
  170. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/observability/trace_parser.py +0 -0
  171. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/observability/trace_ui.py +0 -0
  172. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/observability/tracing.py +0 -0
  173. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/registry/__init__.py +0 -0
  174. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/registry/anti_spam.py +0 -0
  175. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/registry/auto_registration.py +0 -0
  176. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/registry/bot_pr.py +0 -0
  177. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/registry/receipt_cache.py +0 -0
  178. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/schemas.py +0 -0
  179. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/state/__init__.py +0 -0
  180. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/state/machine.py +0 -0
  181. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/state/metering.py +0 -0
  182. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/state/snapshot.py +0 -0
  183. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/state/stores/__init__.py +0 -0
  184. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/state/stores/_sqlite_base.py +0 -0
  185. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/state/stores/_sync_bridge.py +0 -0
  186. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/state/stores/memory.py +0 -0
  187. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/state/stores/sqlite.py +0 -0
  188. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/testing/__init__.py +0 -0
  189. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/testing/asgi_factory.py +0 -0
  190. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/testing/assertions.py +0 -0
  191. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/testing/compliance.py +0 -0
  192. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/testing/fixtures.py +0 -0
  193. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/testing/mocks.py +0 -0
  194. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/__init__.py +0 -0
  195. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/_auth_helpers.py +0 -0
  196. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/_state_deps.py +0 -0
  197. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/agent_routes.py +0 -0
  198. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/cache.py +0 -0
  199. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/capability_routes.py +0 -0
  200. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/challenge.py +0 -0
  201. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/circuit_breaker.py +0 -0
  202. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/client/__init__.py +0 -0
  203. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/client/_core.py +0 -0
  204. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/client/_helpers.py +0 -0
  205. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/client/_send.py +0 -0
  206. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/compression.py +0 -0
  207. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/delegation_api.py +0 -0
  208. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/errors.py +0 -0
  209. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/escalation_routes.py +0 -0
  210. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/executors.py +0 -0
  211. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/handlers.py +0 -0
  212. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/jsonrpc.py +0 -0
  213. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/lambda_codec.py +0 -0
  214. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/middleware.py +0 -0
  215. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/mtls.py +0 -0
  216. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/rate_limit.py +0 -0
  217. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/routes/__init__.py +0 -0
  218. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/routes/audit.py +0 -0
  219. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/routes/health.py +0 -0
  220. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/routes/jsonrpc.py +0 -0
  221. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/routes/websocket.py +0 -0
  222. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/server.py +0 -0
  223. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/sla_api.py +0 -0
  224. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/usage_api.py +0 -0
  225. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/validators.py +0 -0
  226. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/webhook.py +0 -0
  227. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/websocket.py +0 -0
  228. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/ws/__init__.py +0 -0
  229. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/ws/_ack.py +0 -0
  230. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/ws/_actions.py +0 -0
  231. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/ws/_dispatch.py +0 -0
  232. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/ws/_errors.py +0 -0
  233. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/ws/_recv.py +0 -0
  234. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/ws/client.py +0 -0
  235. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/ws/codecs.py +0 -0
  236. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/ws/pool.py +0 -0
  237. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/transport/ws/server.py +0 -0
  238. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/src/asap/utils/__init__.py +0 -0
  239. {asap_protocol-2.5.2 → asap_protocol-2.5.4}/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,10 +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.5+)
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
- - **Distribution Loop** — homepage, templates, metrics ([prd-v2.5.4-distribution-loop.md](product/prd/prd-v2.5.4-distribution-loop.md)).
14
12
  - **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
13
  - `@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)).
16
14
  - Collapse the dual `UsageMetrics`/`InMemoryMeteringStore` pair retained in S1 for API stability.
@@ -18,6 +16,82 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
18
16
 
19
17
  ---
20
18
 
19
+ ## [2.5.4] - 2026-07-18
20
+
21
+ > **Status:** pending tag `v2.5.4` / PyPI publish (S5 prep). Merge → tag → publish runs after this train lands on `main` via `release/2.5.4`.
22
+
23
+ **Distribution Loop** — homepage, thin starters, Build for agents guide, and maintainer
24
+ telemetry ops (no public metrics UI). Scope:
25
+ [prd-v2.5.4-distribution-loop.md](product/prd/prd-v2.5.4-distribution-loop.md).
26
+ npm `@asap-protocol/*` packages remain at **2.4.1**.
27
+
28
+ ### Added
29
+
30
+ - **Thin starters** under `examples/starters/`:
31
+ - `openapi-provider/` — OpenAPI → ASAP skills wrapper
32
+ - `typescript-consumer/` — `@asap-protocol/client` consumer smoke
33
+ - `mcp-auth-bridge/` — MCP Auth Bridge (`protect_server`) wrapper
34
+ - **Build for agents guide** — [docs/guides/build-for-agents.md](docs/guides/build-for-agents.md)
35
+ (agent-first onboarding into the three starters).
36
+ - **Homepage agent-first narrative** — hero / CTAs route to docs, starters, and
37
+ examples (marketplace browse/register remain secondary).
38
+ - **Telemetry ops** — collector defaults expanded (npm ≥3 scoped packages,
39
+ PyPI ≥2); maintainer runbook; **no** public live metrics UI (PRD D4).
40
+
41
+ ### Security (deps)
42
+
43
+ - Raise optional `[mcp]` floor to `mcp>=1.28.1` for **CVE-2026-52869**,
44
+ **CVE-2026-52870**, and **CVE-2026-59950**. See [SECURITY.md](SECURITY.md).
45
+
46
+ ### Migration
47
+
48
+ - **v2.5.3 → v2.5.4**: See [migration guide](docs/migration.md#upgrading-from-v253-to-v254).
49
+ No breaking wire-protocol changes; adopt starters/guide as needed.
50
+
51
+ ---
52
+
53
+ ## [2.5.3] - 2026-07-14
54
+
55
+ **Adapter Lab II** — workflow / enterprise adapters as **docs + examples** (no wire-format
56
+ change). Scope: [prd-v2.5.3-adapter-lab-ii.md](product/prd/prd-v2.5.3-adapter-lab-ii.md).
57
+ npm `@asap-protocol/*` packages remain at **2.4.1**. Tag [`v2.5.3`](https://github.com/adriannoes/asap-protocol/releases/tag/v2.5.3) · PyPI `asap-protocol==2.5.3`.
58
+
59
+ ### Added
60
+
61
+ - **Workflow connectors**: OpenAPI → ASAP skills for n8n-/Activepieces-shaped workflow
62
+ HTTP APIs — [guide](docs/integrations/workflow-connectors.md) +
63
+ `examples/workflow_asap_connector/` (Compliance Harness v2 score **1.0**).
64
+ - **Automation connector security**: production baseline for OpenAPI-backed connectors
65
+ ([guide](docs/guides/automation-connector-security.md)).
66
+ - **Microsoft Agent Framework**: research / experimental interop guide
67
+ ([guide](docs/integrations/microsoft-agent-framework.md)); no .NET SDK / NuGet sample.
68
+ - **NeMo Agent Toolkit**: experimental Path A stdio demo
69
+ ([guide](docs/integrations/nemo-agent-toolkit.md),
70
+ `examples/nemo_agent_toolkit_asap/`); Path C third-party plugin remains deferred.
71
+ - **Docs / web surface**: MkDocs Adapters + Lab II nav; marketplace WhatsNew ribbon and
72
+ developer-experience CTAs for Lab II guides.
73
+
74
+ ### Fixed
75
+
76
+ - **Invalid envelope JSON-RPC errors**: URN / structure validation failures return
77
+ JSON-safe `-32602` with `validation_errors` (no longer escalate to `-32603` when
78
+ Pydantic embeds `ValueError` in `ctx`).
79
+ - **MCP Auth Bridge example client**: self-contained path captures the demo Agent JWT
80
+ from the spawned child stderr (cross-process paste no longer required).
81
+ - **`ASAPClient.health_check`**: `base_url` defaults to the client's HTTP base URL.
82
+
83
+ ### Security (deps)
84
+
85
+ - Override `setuptools>=83.0.0` for **PYSEC-2026-3447** (transitive build/tooling path).
86
+ See [SECURITY.md](SECURITY.md).
87
+
88
+ ### Migration
89
+
90
+ - **v2.5.2 → v2.5.3**: See [migration guide](docs/migration.md#upgrading-from-v252-to-v253).
91
+ No breaking wire-protocol changes; adopt new guides/examples as needed.
92
+
93
+ ---
94
+
21
95
  ## [2.5.2] - 2026-07-08
22
96
 
23
97
  **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.4
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
@@ -73,7 +73,7 @@ Requires-Dist: langchain-core>=1.3.3; extra == 'langchain'
73
73
  Provides-Extra: llamaindex
74
74
  Requires-Dist: llama-index-core>=0.10; extra == 'llamaindex'
75
75
  Provides-Extra: mcp
76
- Requires-Dist: mcp>=1.0.0; extra == 'mcp'
76
+ Requires-Dist: mcp>=1.28.1; extra == 'mcp'
77
77
  Provides-Extra: openapi
78
78
  Requires-Dist: openapi-pydantic>=0.5; extra == 'openapi'
79
79
  Provides-Extra: openclaw
@@ -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/releases/tag/v2.5.3) on PyPI · in-tree **v2.5.4** pending tag · PyPI [`asap-protocol`](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.3** on PyPI](https://pypi.org/project/asap-protocol/) (Python; **2.5.4** pending 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.3; in-tree 2.5.4 pending publish)
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.3
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.4; `@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.4** (Distribution Loop) is **pending tag/PyPI** — see [Migration (v2.5.3 → v2.5.4)](docs/migration.md#upgrading-from-v253-to-v254). Start here: [Build for agents](docs/guides/build-for-agents.md) · [starters](examples/starters/README.md).
181
181
 
182
182
  ## Quick Start
183
183
 
@@ -265,6 +265,8 @@ High-level only — see **[Changelog](https://github.com/adriannoes/asap-protoco
265
265
 
266
266
  | Version | What shipped |
267
267
  | :-- | :-- |
268
+ | **v2.5.4** | **Distribution Loop** — pending tag/PyPI · thin starters (`examples/starters/`), [Build for agents](docs/guides/build-for-agents.md), homepage agent-first CTAs, telemetry ops (no public metrics UI). See [CHANGELOG](CHANGELOG.md#254---2026-07-18), [PRD](product/prd/prd-v2.5.4-distribution-loop.md), and [Migration (v2.5.3 → v2.5.4)](docs/migration.md#upgrading-from-v253-to-v254) |
269
+ | **v2.5.3** | **Adapter Lab II** — **[GitHub Release `v2.5.3`](https://github.com/adriannoes/asap-protocol/releases/tag/v2.5.3)** · workflow OpenAPI connectors + security guide, experimental MAF / NeMo guides, JSON-safe `-32602`, MCP example client DX. 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
270
  | **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
271
  | **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
272
  | **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,8 +288,7 @@ High-level only — see **[Changelog](https://github.com/adriannoes/asap-protoco
286
288
 
287
289
  The [agentic marketplace](https://asap-protocol.com/) and Lite Registry are live. The **v2.5.x train** focuses on interop and adoption:
288
290
 
289
- - **v2.5.3** — enterprise/workflow adapter spikes (Adapter Lab II)
290
- - **v2.5.4** — distribution loop (homepage templates, starter kits, adoption metrics)
291
+ - **v2.5.5** — Formal Spec & Interop (RFC, introspection, privacy)
291
292
  - **`@asap-protocol/mcp-auth`** (npm) — HTTP/SSE MCP middleware
292
293
  - **Formal spec track** (v2.5.5) — introspection, privacy, cross-protocol interop on the path to v3.0 economy
293
294
 
@@ -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/releases/tag/v2.5.3) on PyPI · in-tree **v2.5.4** pending tag · PyPI [`asap-protocol`](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.3** on PyPI](https://pypi.org/project/asap-protocol/) (Python; **2.5.4** pending 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.3; in-tree 2.5.4 pending publish)
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.3
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.4; `@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.4** (Distribution Loop) is **pending tag/PyPI** — see [Migration (v2.5.3 → v2.5.4)](docs/migration.md#upgrading-from-v253-to-v254). Start here: [Build for agents](docs/guides/build-for-agents.md) · [starters](examples/starters/README.md).
89
89
 
90
90
  ## Quick Start
91
91
 
@@ -173,6 +173,8 @@ High-level only — see **[Changelog](https://github.com/adriannoes/asap-protoco
173
173
 
174
174
  | Version | What shipped |
175
175
  | :-- | :-- |
176
+ | **v2.5.4** | **Distribution Loop** — pending tag/PyPI · thin starters (`examples/starters/`), [Build for agents](docs/guides/build-for-agents.md), homepage agent-first CTAs, telemetry ops (no public metrics UI). See [CHANGELOG](CHANGELOG.md#254---2026-07-18), [PRD](product/prd/prd-v2.5.4-distribution-loop.md), and [Migration (v2.5.3 → v2.5.4)](docs/migration.md#upgrading-from-v253-to-v254) |
177
+ | **v2.5.3** | **Adapter Lab II** — **[GitHub Release `v2.5.3`](https://github.com/adriannoes/asap-protocol/releases/tag/v2.5.3)** · workflow OpenAPI connectors + security guide, experimental MAF / NeMo guides, JSON-safe `-32602`, MCP example client DX. 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
178
  | **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
179
  | **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
180
  | **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,8 +196,7 @@ High-level only — see **[Changelog](https://github.com/adriannoes/asap-protoco
194
196
 
195
197
  The [agentic marketplace](https://asap-protocol.com/) and Lite Registry are live. The **v2.5.x train** focuses on interop and adoption:
196
198
 
197
- - **v2.5.3** — enterprise/workflow adapter spikes (Adapter Lab II)
198
- - **v2.5.4** — distribution loop (homepage templates, starter kits, adoption metrics)
199
+ - **v2.5.5** — Formal Spec & Interop (RFC, introspection, privacy)
199
200
  - **`@asap-protocol/mcp-auth`** (npm) — HTTP/SSE MCP middleware
200
201
  - **Formal spec track** (v2.5.5) — introspection, privacy, cross-protocol interop on the path to v3.0 economy
201
202
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "asap-protocol"
3
- version = "2.5.2"
3
+ version = "2.5.4"
4
4
  description = "Async Simple Agent Protocol - A streamlined protocol for agent-to-agent communication"
5
5
  authors = [
6
6
  {name = "ASAP Protocol Contributors"}
@@ -84,7 +84,8 @@ webauthn = [
84
84
  ]
85
85
  # Framework integrations (Sprint E3 — PKG-003).
86
86
  mcp = [
87
- "mcp>=1.0.0",
87
+ # Floor 1.28.1 for CVE-2026-52869 / CVE-2026-52870 / CVE-2026-59950.
88
+ "mcp>=1.28.1",
88
89
  ]
89
90
  langchain = [
90
91
  "langchain-core>=1.3.3",
@@ -127,7 +128,8 @@ Issues = "https://github.com/adriannoes/asap-protocol/issues"
127
128
  # - tinytag>=2.2.1 for CVE-2026-32889
128
129
  # - cryptography>=48.0.1 for GHSA-537c-gmf6-5ccf (CVE-2026-39892 / CVE-2026-34073 baseline at 46.0.7)
129
130
  # - 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)
131
+ # - pillow>=12.3.0 for PYSEC-2026-2253–2257 (prior: CVE-2026-40192 at >=12.2.0; transitive, e.g. pdf/vision stacks)
132
+ # - click>=8.3.3 for PYSEC-2026-2132 (transitive, e.g. typer / uvicorn / mkdocs stacks)
131
133
  # - pytest>=9.0.3 for CVE-2025-71176 (dev)
132
134
  # - python-multipart>=0.0.31 for CVE-2026-53538–53540 (FastAPI stack; prior floor 0.0.27)
133
135
  # - starlette>=1.3.1 for CVE-2026-54282 / CVE-2026-54283 (FastAPI stack)
@@ -145,6 +147,7 @@ Issues = "https://github.com/adriannoes/asap-protocol/issues"
145
147
  # - joserfc>=1.6.7 for CVE-2026-48990 (JWT/JWS primitives; direct + override)
146
148
  # - python-engineio>=4.13.2 for CVE-2026-48802 / CVE-2026-48809 (transitive, locust stack)
147
149
  # - python-socketio>=5.16.2 for CVE-2026-48804 (transitive, locust stack)
150
+ # - setuptools>=83.0.0 for PYSEC-2026-3447 (transitive build/tooling path)
148
151
  [tool.uv]
149
152
  override-dependencies = [
150
153
  "aiohttp>=3.14.0,<4",
@@ -153,7 +156,8 @@ override-dependencies = [
153
156
  "tinytag>=2.2.1",
154
157
  "cryptography>=48.0.1,<49",
155
158
  "requests>=2.33.0",
156
- "pillow>=12.2.0",
159
+ "pillow>=12.3.0",
160
+ "click>=8.3.3",
157
161
  "pytest>=9.0.3",
158
162
  "python-multipart>=0.0.31",
159
163
  "starlette>=1.3.1",
@@ -172,6 +176,7 @@ override-dependencies = [
172
176
  "joserfc>=1.6.7,<2",
173
177
  "python-engineio>=4.13.2",
174
178
  "python-socketio>=5.16.2",
179
+ "setuptools>=83.0.0",
175
180
  ]
176
181
 
177
182
  [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.4"
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