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