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.
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/.gitignore +2 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/CHANGELOG.md +47 -2
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/PKG-INFO +10 -10
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/README.md +9 -9
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/pyproject.toml +7 -3
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/__init__.py +1 -1
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/README.md +4 -3
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/_request_handler.py +44 -16
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/client/_discovery.py +5 -3
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/LICENSE +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/entities/agent.schema.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/entities/artifact.schema.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/entities/conversation.schema.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/entities/manifest.schema.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/entities/message.schema.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/entities/state_snapshot.schema.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/entities/task.schema.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/envelope.schema.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/examples/shellclaw-jetson-capabilities.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/parts/data_part.schema.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/parts/file_part.schema.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/parts/resource_part.schema.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/parts/template_part.schema.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/parts/text_part.schema.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/payloads/artifact_notify.schema.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/payloads/mcp_resource_data.schema.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/payloads/mcp_resource_fetch.schema.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/payloads/mcp_tool_call.schema.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/payloads/mcp_tool_result.schema.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/payloads/message_send.schema.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/payloads/state_query.schema.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/payloads/state_restore.schema.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/payloads/task_cancel.schema.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/payloads/task_request.schema.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/payloads/task_response.schema.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/payloads/task_update.schema.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/__init__.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/mcp/__init__.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/mcp/auth_middleware.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/mcp/capability_map.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/mcp/config.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/mcp/errors.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/mcp/jwt_extractor.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/mcp/protected_server.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/openapi/__init__.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/openapi/approval.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/openapi/capability_mapper.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/openapi/factory.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/openapi/handler.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/adapters/openapi/spec_loader.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/__init__.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/_scope_parse.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/agent_jwt.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/approval.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/capabilities.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/identity.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/introspection.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/jti_replay_cache.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/jwks.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/middleware.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/oauth2.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/oidc.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/scopes.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/self_auth.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/webauthn.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/auth/webauthn_store.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/cli/__init__.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/cli/_compat.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/cli/audit_export.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/cli/compliance_check.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/cli/delegation.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/cli/keys.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/cli/manifest.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/cli/repl.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/cli/schemas.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/cli/trace.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/client/__init__.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/client/cache.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/client/http_client.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/client/market.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/client/revocation.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/client/trust.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/crypto/__init__.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/crypto/keys.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/crypto/models.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/crypto/signing.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/crypto/trust.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/crypto/trust_levels.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/discovery/__init__.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/discovery/dnssd.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/discovery/health.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/discovery/registry.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/discovery/validation.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/discovery/wellknown.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/economics/__init__.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/economics/audit.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/economics/delegation.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/economics/delegation_storage.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/economics/hooks.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/economics/metering.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/economics/sla.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/economics/sla_storage.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/economics/storage.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/errors.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/__init__.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/a2h_approval.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/agent_failover.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/auth_patterns.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/coordinator.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/echo_agent.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/error_recovery.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/long_running.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/mcp_client_demo.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/mcp_integration.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/multi_step_workflow.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/orchestration.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/rate_limiting.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/run_demo.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/secure_agent.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/secure_handler.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/state_migration.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/storage_backends.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/streaming_agent.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/streaming_response.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/v1_3_0_showcase.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/v1_4_0_showcase.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/examples/websocket_concept.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/handlers/__init__.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/handlers/hitl.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/integrations/__init__.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/integrations/_base.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/integrations/a2h.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/integrations/crewai.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/integrations/langchain.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/integrations/llamaindex.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/integrations/openclaw.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/integrations/pydanticai.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/integrations/smolagents.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/integrations/vercel_ai.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/mcp/__init__.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/mcp/auth/__init__.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/mcp/auth/auth_middleware.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/mcp/auth/capability_map.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/mcp/auth/config.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/mcp/auth/errors.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/mcp/auth/jwt_extractor.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/mcp/auth/protected_server.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/mcp/client.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/mcp/protocol.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/mcp/serve.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/mcp/server.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/mcp/server_runner.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/models/__init__.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/models/base.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/models/constants.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/models/entities.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/models/enums.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/models/envelope.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/models/ids.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/models/parts.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/models/payloads.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/models/types.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/models/validators.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/observability/__init__.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/observability/dashboards/README.md +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/observability/dashboards/asap-detailed.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/observability/dashboards/asap-red.json +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/observability/logging.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/observability/metrics.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/observability/trace_parser.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/observability/trace_ui.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/observability/tracing.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/registry/__init__.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/registry/anti_spam.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/registry/auto_registration.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/registry/bot_pr.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/registry/receipt_cache.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/schemas.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/state/__init__.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/state/machine.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/state/metering.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/state/snapshot.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/state/stores/__init__.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/state/stores/_sqlite_base.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/state/stores/_sync_bridge.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/state/stores/memory.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/state/stores/sqlite.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/testing/__init__.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/testing/asgi_factory.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/testing/assertions.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/testing/compliance.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/testing/fixtures.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/testing/mocks.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/__init__.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/_auth_helpers.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/_state_deps.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/agent_routes.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/cache.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/capability_routes.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/challenge.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/circuit_breaker.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/client/__init__.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/client/_core.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/client/_helpers.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/client/_send.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/compression.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/delegation_api.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/errors.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/escalation_routes.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/executors.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/handlers.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/jsonrpc.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/lambda_codec.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/middleware.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/mtls.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/rate_limit.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/routes/__init__.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/routes/audit.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/routes/health.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/routes/jsonrpc.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/routes/websocket.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/server.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/sla_api.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/usage_api.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/validators.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/webhook.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/websocket.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/ws/__init__.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/ws/_ack.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/ws/_actions.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/ws/_dispatch.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/ws/_errors.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/ws/_recv.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/ws/client.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/ws/codecs.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/ws/pool.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/transport/ws/server.py +0 -0
- {asap_protocol-2.5.2 → asap_protocol-2.5.3}/src/asap/utils/__init__.py +0 -0
- {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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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 @@ 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 (
|
|
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
|
|
100
|
+
### Concepts
|
|
101
101
|
|
|
102
102
|
| Module | Description | Usage |
|
|
103
103
|
|--------|-------------|--------|
|
|
104
|
-
| **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__ = [
|
|
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":
|
|
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":
|
|
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
|
-
|
|
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
|
|
826
|
-
if error.get("loc") ==
|
|
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(
|
|
441
|
+
... health = await client.health_check()
|
|
441
442
|
... print(health.status, health.uptime_seconds)
|
|
442
443
|
"""
|
|
443
|
-
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{asap_protocol-2.5.2 → asap_protocol-2.5.3}/schemas/examples/shellclaw-jetson-capabilities.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|