asap-protocol 0.5.0__tar.gz → 1.0.0__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-0.5.0 → asap_protocol-1.0.0}/.cursor/commands/code-quality-review.md +1 -5
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/commands/create-prd.md +1 -6
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/commands/generate-tasks.md +1 -6
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/commands/reflect.md +3 -5
- asap_protocol-1.0.0/.cursor/commands/remove-ai-slop.md +11 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/commands/security-pr-review.md +1 -5
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/commands/security-review.md +1 -5
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/commands/task-list-development.md +0 -5
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/commands/test-coverage-review.md +1 -5
- asap_protocol-1.0.0/.cursor/dev-planning/architecture/ADR.md +486 -0
- asap_protocol-1.0.0/.cursor/dev-planning/architecture/patterns/rate-limiting.md +411 -0
- asap_protocol-1.0.0/.cursor/dev-planning/code-review/v1.0.0/PR-23-security-review.md +531 -0
- asap_protocol-1.0.0/.cursor/dev-planning/code-review/v1.0.0/PR-25-performance-optimizations-review.md +725 -0
- asap_protocol-1.0.0/.cursor/dev-planning/code-review/v1.0.0/PR-26-review.md +92 -0
- asap_protocol-1.0.0/.cursor/dev-planning/code-review/v1.0.0/PR-27-review.md +85 -0
- asap_protocol-1.0.0/.cursor/dev-planning/code-review/v1.0.0/PR-30-review.md +63 -0
- asap_protocol-1.0.0/.cursor/dev-planning/code-review/v1.0.0/PR-31-observability-review.md +656 -0
- asap_protocol-1.0.0/.cursor/dev-planning/code-review/v1.0.0/PR-32-review.md +125 -0
- asap_protocol-1.0.0/.cursor/dev-planning/code-review/v1.0.0/PR-33-review.md +42 -0
- asap_protocol-1.0.0/.cursor/dev-planning/code-review/v1.0.0/PR-34-review.md +721 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/dev-planning/prd/prd-review-schedule.md +6 -6
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/dev-planning/prd/prd-v1-roadmap.md +175 -29
- asap_protocol-1.0.0/.cursor/dev-planning/prd/prd-v1.1-planning.md +269 -0
- asap_protocol-1.0.0/.cursor/dev-planning/references/mcp-specs.md +81 -0
- asap_protocol-1.0.0/.cursor/dev-planning/retrospectives/v1.0.0-retro.md +61 -0
- asap_protocol-1.0.0/.cursor/dev-planning/tasks/v0.5.0/tasks-v0.5.0-roadmap.md +195 -0
- asap_protocol-1.0.0/.cursor/dev-planning/tasks/v0.5.0/tasks-v0.5.0-s1-detailed.md +231 -0
- asap_protocol-1.0.0/.cursor/dev-planning/tasks/v0.5.0/tasks-v0.5.0-s2-detailed.md +253 -0
- asap_protocol-1.0.0/.cursor/dev-planning/tasks/v0.5.0/tasks-v0.5.0-s2.5-detailed.md +174 -0
- asap_protocol-1.0.0/.cursor/dev-planning/tasks/v0.5.0/tasks-v0.5.0-s3-detailed.md +146 -0
- asap_protocol-1.0.0/.cursor/dev-planning/tasks/v0.5.0/tasks-v0.5.0-s4-detailed.md +108 -0
- asap_protocol-1.0.0/.cursor/dev-planning/tasks/v0.5.0/tasks-v0.5.0-s5-detailed.md +102 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/dev-planning/tasks/v1.0.0/tasks-v1.0.0-docs-detailed.md +76 -56
- asap_protocol-1.0.0/.cursor/dev-planning/tasks/v1.0.0/tasks-v1.0.0-dx-detailed.md +306 -0
- asap_protocol-1.0.0/.cursor/dev-planning/tasks/v1.0.0/tasks-v1.0.0-observability-detailed.md +201 -0
- asap_protocol-1.0.0/.cursor/dev-planning/tasks/v1.0.0/tasks-v1.0.0-performance-detailed.md +251 -0
- asap_protocol-1.0.0/.cursor/dev-planning/tasks/v1.0.0/tasks-v1.0.0-release-detailed.md +244 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/dev-planning/tasks/v1.0.0/tasks-v1.0.0-roadmap.md +148 -121
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/dev-planning/tasks/v1.0.0/tasks-v1.0.0-security-detailed.md +55 -47
- asap_protocol-1.0.0/.cursor/dev-planning/tasks/v1.0.0/tasks-v1.0.0-testing-detailed.md +262 -0
- asap_protocol-1.0.0/.cursor/dev-planning/tasks/v1.0.0/upstream-slowapi-deprecation.md +55 -0
- asap_protocol-1.0.0/.cursor/dev-planning/tasks/v1.1.0/backlog-v1.1.md +124 -0
- asap_protocol-1.0.0/.cursor/product-specs/README.md +21 -0
- asap_protocol-1.0.0/.cursor/product-specs/roadmap-to-marketplace.md +307 -0
- asap_protocol-1.0.0/.cursor/product-specs/vision-agent-marketplace.md +342 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/rules/git-commits.mdc +1 -1
- asap_protocol-1.0.0/.cursor/rules/testing-rate-limiting.mdc +157 -0
- asap_protocol-1.0.0/.cursor/rules/testing-standards.mdc +38 -0
- asap_protocol-1.0.0/.github/actions/setup-python/action.yml +20 -0
- asap_protocol-1.0.0/.github/assets/asap-protocol-banner.png +0 -0
- asap_protocol-1.0.0/.github/release-notes-v1.0.0.md +121 -0
- asap_protocol-1.0.0/.github/workflows/ci.yml +125 -0
- asap_protocol-1.0.0/.github/workflows/docs.yml +32 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.github/workflows/release.yml +74 -3
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.gitignore +8 -4
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/CHANGELOG.md +74 -2
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/CONTRIBUTING.md +10 -7
- asap_protocol-1.0.0/Dockerfile +98 -0
- asap_protocol-1.0.0/PKG-INFO +264 -0
- asap_protocol-1.0.0/README.md +209 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/SECURITY.md +1 -0
- asap_protocol-1.0.0/benchmarks/README.md +391 -0
- asap_protocol-1.0.0/benchmarks/RESULTS.md +195 -0
- asap_protocol-1.0.0/benchmarks/benchmark_transport.py +806 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/benchmarks/conftest.py +26 -7
- asap_protocol-1.0.0/benchmarks/load_test.py +451 -0
- asap_protocol-1.0.0/benchmarks/memory_test.py +504 -0
- asap_protocol-1.0.0/benchmarks/stress_test.py +507 -0
- asap_protocol-1.0.0/docs/adr/ADR-001-ulid-for-id-generation.md +60 -0
- asap_protocol-1.0.0/docs/adr/ADR-002-async-first-api-design.md +52 -0
- asap_protocol-1.0.0/docs/adr/ADR-003-jsonrpc20-binding.md +58 -0
- asap_protocol-1.0.0/docs/adr/ADR-004-pydantic-for-models.md +58 -0
- asap_protocol-1.0.0/docs/adr/ADR-005-state-machine-design.md +53 -0
- asap_protocol-1.0.0/docs/adr/ADR-006-security-defaults.md +51 -0
- asap_protocol-1.0.0/docs/adr/ADR-007-fastapi-for-server.md +59 -0
- asap_protocol-1.0.0/docs/adr/ADR-008-httpx-for-client.md +59 -0
- asap_protocol-1.0.0/docs/adr/ADR-009-snapshot-vs-event-sourced.md +59 -0
- asap_protocol-1.0.0/docs/adr/ADR-010-python-313-requirement.md +52 -0
- asap_protocol-1.0.0/docs/adr/ADR-011-per-sender-rate-limiting.md +53 -0
- asap_protocol-1.0.0/docs/adr/ADR-012-error-taxonomy.md +53 -0
- asap_protocol-1.0.0/docs/adr/ADR-013-mcp-integration-approach.md +53 -0
- asap_protocol-1.0.0/docs/adr/ADR-014-testing-strategy.md +52 -0
- asap_protocol-1.0.0/docs/adr/ADR-015-observability-design.md +53 -0
- asap_protocol-1.0.0/docs/adr/ADR-016-versioning-policy.md +52 -0
- asap_protocol-1.0.0/docs/adr/ADR-017-failure-injection-strategy.md +58 -0
- asap_protocol-1.0.0/docs/adr/README.md +42 -0
- asap_protocol-1.0.0/docs/adr/template.md +51 -0
- asap_protocol-1.0.0/docs/deployment/kubernetes.md +161 -0
- asap_protocol-1.0.0/docs/mcp-integration.md +96 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/docs/migration.md +1 -1
- asap_protocol-1.0.0/docs/observability.md +127 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/docs/security.md +105 -4
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/docs/testing.md +317 -0
- asap_protocol-1.0.0/docs/troubleshooting.md +405 -0
- asap_protocol-1.0.0/docs/tutorials/first-agent.md +163 -0
- asap_protocol-1.0.0/docs/tutorials/multi-agent.md +253 -0
- asap_protocol-1.0.0/docs/tutorials/production-checklist.md +141 -0
- asap_protocol-1.0.0/docs/tutorials/resilience.md +255 -0
- asap_protocol-1.0.0/docs/tutorials/stateful-workflows.md +253 -0
- asap_protocol-1.0.0/examples/mcp_demo.py +63 -0
- asap_protocol-1.0.0/helm/asap-agent/Chart.yaml +17 -0
- asap_protocol-1.0.0/helm/asap-agent/README.md +69 -0
- asap_protocol-1.0.0/helm/asap-agent/templates/NOTES.txt +16 -0
- asap_protocol-1.0.0/helm/asap-agent/templates/_helpers.tpl +24 -0
- asap_protocol-1.0.0/helm/asap-agent/templates/deployment.yaml +78 -0
- asap_protocol-1.0.0/helm/asap-agent/templates/ingress.yaml +41 -0
- asap_protocol-1.0.0/helm/asap-agent/templates/service.yaml +15 -0
- asap_protocol-1.0.0/helm/asap-agent/values.yaml +87 -0
- asap_protocol-1.0.0/k8s/README.md +40 -0
- asap_protocol-1.0.0/k8s/deployment.yaml +81 -0
- asap_protocol-1.0.0/k8s/ingress.yaml +37 -0
- asap_protocol-1.0.0/k8s/service.yaml +22 -0
- asap_protocol-1.0.0/mkdocs.yml +89 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/pyproject.toml +60 -8
- asap_protocol-1.0.0/scripts/observability-stack/README.md +27 -0
- asap_protocol-1.0.0/scripts/observability-stack/docker-compose.yml +35 -0
- asap_protocol-1.0.0/scripts/observability-stack/grafana/provisioning/dashboards/dashboards.yaml +11 -0
- asap_protocol-1.0.0/scripts/observability-stack/grafana/provisioning/datasources/datasources.yaml +9 -0
- asap_protocol-1.0.0/scripts/observability-stack/prometheus.yml +13 -0
- asap_protocol-1.0.0/scripts/test_k8s_deploy.sh +84 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/__init__.py +1 -1
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/cli.py +137 -2
- asap_protocol-1.0.0/src/asap/examples/README.md +96 -0
- asap_protocol-1.0.0/src/asap/examples/auth_patterns.py +212 -0
- asap_protocol-1.0.0/src/asap/examples/error_recovery.py +248 -0
- asap_protocol-1.0.0/src/asap/examples/long_running.py +287 -0
- asap_protocol-1.0.0/src/asap/examples/mcp_integration.py +240 -0
- asap_protocol-1.0.0/src/asap/examples/multi_step_workflow.py +134 -0
- asap_protocol-1.0.0/src/asap/examples/orchestration.py +293 -0
- asap_protocol-1.0.0/src/asap/examples/rate_limiting.py +137 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/examples/run_demo.py +0 -2
- asap_protocol-1.0.0/src/asap/examples/secure_handler.py +84 -0
- asap_protocol-1.0.0/src/asap/examples/state_migration.py +240 -0
- asap_protocol-1.0.0/src/asap/examples/streaming_response.py +108 -0
- asap_protocol-1.0.0/src/asap/examples/websocket_concept.py +129 -0
- asap_protocol-1.0.0/src/asap/mcp/__init__.py +43 -0
- asap_protocol-1.0.0/src/asap/mcp/client.py +224 -0
- asap_protocol-1.0.0/src/asap/mcp/protocol.py +179 -0
- asap_protocol-1.0.0/src/asap/mcp/server.py +333 -0
- asap_protocol-1.0.0/src/asap/mcp/server_runner.py +40 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/models/base.py +0 -3
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/models/constants.py +3 -1
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/models/entities.py +21 -6
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/models/envelope.py +7 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/models/ids.py +8 -4
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/models/parts.py +33 -3
- asap_protocol-1.0.0/src/asap/models/validators.py +16 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/observability/__init__.py +6 -0
- asap_protocol-1.0.0/src/asap/observability/dashboards/README.md +24 -0
- asap_protocol-1.0.0/src/asap/observability/dashboards/asap-detailed.json +131 -0
- asap_protocol-1.0.0/src/asap/observability/dashboards/asap-red.json +129 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/observability/logging.py +81 -1
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/observability/metrics.py +15 -1
- asap_protocol-1.0.0/src/asap/observability/trace_parser.py +238 -0
- asap_protocol-1.0.0/src/asap/observability/trace_ui.py +218 -0
- asap_protocol-1.0.0/src/asap/observability/tracing.py +293 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/state/machine.py +15 -2
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/state/snapshot.py +0 -9
- asap_protocol-1.0.0/src/asap/testing/__init__.py +31 -0
- asap_protocol-1.0.0/src/asap/testing/assertions.py +108 -0
- asap_protocol-1.0.0/src/asap/testing/fixtures.py +113 -0
- asap_protocol-1.0.0/src/asap/testing/mocks.py +152 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/transport/__init__.py +28 -0
- asap_protocol-1.0.0/src/asap/transport/cache.py +180 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/transport/circuit_breaker.py +9 -8
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/transport/client.py +418 -36
- asap_protocol-1.0.0/src/asap/transport/compression.py +389 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/transport/handlers.py +106 -53
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/transport/middleware.py +58 -34
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/transport/server.py +429 -139
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/transport/validators.py +0 -4
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/utils/sanitization.py +0 -5
- asap_protocol-1.0.0/tests/chaos/__init__.py +17 -0
- asap_protocol-1.0.0/tests/chaos/conftest.py +79 -0
- asap_protocol-1.0.0/tests/chaos/test_clock_skew.py +738 -0
- asap_protocol-1.0.0/tests/chaos/test_crashes.py +506 -0
- asap_protocol-1.0.0/tests/chaos/test_message_reliability.py +721 -0
- asap_protocol-1.0.0/tests/chaos/test_network_partition.py +487 -0
- asap_protocol-1.0.0/tests/conftest.py +142 -0
- asap_protocol-1.0.0/tests/contract/__init__.py +9 -0
- asap_protocol-1.0.0/tests/contract/conftest.py +56 -0
- asap_protocol-1.0.0/tests/contract/test_schema_evolution.py +601 -0
- asap_protocol-1.0.0/tests/contract/test_v0_1_to_v1_0.py +674 -0
- asap_protocol-1.0.0/tests/contract/test_v0_5_to_v1_0.py +819 -0
- asap_protocol-1.0.0/tests/contract/test_v1_0_to_v0_5.py +891 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/e2e/test_two_agents.py +8 -3
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/examples/test_coordinator.py +2 -2
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/examples/test_echo_agent.py +5 -4
- asap_protocol-1.0.0/tests/examples/test_examples_dx.py +599 -0
- asap_protocol-1.0.0/tests/factories.py +97 -0
- asap_protocol-1.0.0/tests/fuzz/__init__.py +1 -0
- asap_protocol-1.0.0/tests/fuzz/test_envelope_fuzz.py +147 -0
- asap_protocol-1.0.0/tests/mcp/__init__.py +1 -0
- asap_protocol-1.0.0/tests/mcp/test_asap_integration.py +540 -0
- asap_protocol-1.0.0/tests/mcp/test_client.py +335 -0
- asap_protocol-1.0.0/tests/mcp/test_protocol.py +119 -0
- asap_protocol-1.0.0/tests/mcp/test_server_client.py +329 -0
- asap_protocol-1.0.0/tests/mcp/test_server_runner.py +122 -0
- asap_protocol-1.0.0/tests/mcp/test_server_stdio.py +129 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/models/test_base.py +0 -3
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/models/test_entities.py +126 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/models/test_enums.py +0 -4
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/models/test_ids.py +22 -12
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/models/test_parts.py +90 -11
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/models/test_payloads.py +28 -21
- asap_protocol-1.0.0/tests/observability/test_grafana_dashboards.py +80 -0
- asap_protocol-1.0.0/tests/observability/test_jaeger_tracing.py +245 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/observability/test_logging.py +138 -0
- asap_protocol-1.0.0/tests/observability/test_logging_integration.py +258 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/observability/test_metrics.py +5 -16
- asap_protocol-1.0.0/tests/observability/test_trace_parser.py +441 -0
- asap_protocol-1.0.0/tests/observability/test_trace_ui.py +89 -0
- asap_protocol-1.0.0/tests/observability/test_tracing.py +376 -0
- asap_protocol-1.0.0/tests/properties/__init__.py +1 -0
- asap_protocol-1.0.0/tests/properties/test_model_properties.py +667 -0
- asap_protocol-1.0.0/tests/properties/test_state_machine_properties.py +72 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/state/test_machine.py +0 -2
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/state/test_snapshot.py +58 -6
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/test_cli.py +112 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/test_cli_edge_cases.py +64 -21
- asap_protocol-1.0.0/tests/test_docs_links.py +131 -0
- asap_protocol-1.0.0/tests/test_docs_troubleshooting_smoke.py +64 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/test_errors.py +0 -2
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/test_version.py +1 -1
- asap_protocol-1.0.0/tests/testing/__init__.py +3 -0
- asap_protocol-1.0.0/tests/testing/test_assertions.py +171 -0
- asap_protocol-1.0.0/tests/testing/test_fixtures.py +101 -0
- asap_protocol-1.0.0/tests/testing/test_mocks.py +178 -0
- asap_protocol-1.0.0/tests/transport/e2e/test_circuit_breaker_e2e.py +283 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/transport/e2e/test_full_agent_flow.py +37 -9
- asap_protocol-1.0.0/tests/transport/integration/test_batch_auth_pooling.py +545 -0
- asap_protocol-1.0.0/tests/transport/integration/test_compression_server.py +642 -0
- asap_protocol-1.0.0/tests/transport/integration/test_health_probes.py +47 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/transport/integration/test_rate_limiting.py +56 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/transport/integration/test_server_core.py +24 -43
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/transport/test_client.py +427 -5
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/transport/test_handlers.py +99 -11
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/transport/test_middleware.py +61 -2
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/transport/test_server.py +150 -54
- asap_protocol-1.0.0/tests/transport/unit/test_cache.py +482 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/transport/unit/test_circuit_breaker.py +41 -1
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/transport/unit/test_client_coverage_gaps.py +282 -1
- asap_protocol-1.0.0/tests/transport/unit/test_compression.py +427 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/transport/unit/test_validators.py +0 -3
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/transport/unit/test_validators_edge_cases.py +21 -12
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/utils/test_sanitization.py +10 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/uv.lock +1045 -56
- asap_protocol-0.5.0/.cursor/dev-planning/tasks/v0.5.0/tasks-v0.5.0-roadmap.md +0 -440
- asap_protocol-0.5.0/.cursor/dev-planning/tasks/v0.5.0/tasks-v0.5.0-s1-detailed.md +0 -319
- asap_protocol-0.5.0/.cursor/dev-planning/tasks/v0.5.0/tasks-v0.5.0-s2-detailed.md +0 -316
- asap_protocol-0.5.0/.cursor/dev-planning/tasks/v0.5.0/tasks-v0.5.0-s2.5-detailed.md +0 -942
- asap_protocol-0.5.0/.cursor/dev-planning/tasks/v0.5.0/tasks-v0.5.0-s3-detailed.md +0 -307
- asap_protocol-0.5.0/.cursor/dev-planning/tasks/v0.5.0/tasks-v0.5.0-s4-detailed.md +0 -323
- asap_protocol-0.5.0/.cursor/dev-planning/tasks/v0.5.0/tasks-v0.5.0-s5-detailed.md +0 -561
- asap_protocol-0.5.0/.cursor/dev-planning/tasks/v1.0.0/tasks-v1.0.0-dx-detailed.md +0 -248
- asap_protocol-0.5.0/.cursor/dev-planning/tasks/v1.0.0/tasks-v1.0.0-observability-detailed.md +0 -179
- asap_protocol-0.5.0/.cursor/dev-planning/tasks/v1.0.0/tasks-v1.0.0-performance-detailed.md +0 -179
- asap_protocol-0.5.0/.cursor/dev-planning/tasks/v1.0.0/tasks-v1.0.0-release-detailed.md +0 -208
- asap_protocol-0.5.0/.cursor/dev-planning/tasks/v1.0.0/tasks-v1.0.0-testing-detailed.md +0 -210
- asap_protocol-0.5.0/.cursor/docs/asap-protocol-banner.png +0 -0
- asap_protocol-0.5.0/.cursor/docs/sprint-planning-v0.1.0.md +0 -240
- asap_protocol-0.5.0/.github/README.md +0 -95
- asap_protocol-0.5.0/.github/release-notes-v0.5.0.md +0 -61
- asap_protocol-0.5.0/.github/workflows/ci.yml +0 -89
- asap_protocol-0.5.0/.github/workflows/docs.yml +0 -32
- asap_protocol-0.5.0/PKG-INFO +0 -244
- asap_protocol-0.5.0/README.md +0 -199
- asap_protocol-0.5.0/benchmarks/README.md +0 -167
- asap_protocol-0.5.0/benchmarks/benchmark_transport.py +0 -239
- asap_protocol-0.5.0/docs/observability.md +0 -53
- asap_protocol-0.5.0/mkdocs.yml +0 -62
- asap_protocol-0.5.0/src/asap/examples/README.md +0 -28
- asap_protocol-0.5.0/tests/conftest.py +0 -73
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/dev-planning/code-review/security-review-report.md +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/dev-planning/code-review/v0.1.0/pre-pypi-release-review.md +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/dev-planning/code-review/v0.1.0/sprint3-code-review.md +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/dev-planning/code-review/v0.1.0/sprint4-code-review.md +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/dev-planning/code-review/v0.1.0/sprint5-code-review.md +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/dev-planning/code-review/v0.5.0/sprint-s1-code-review.md +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/dev-planning/code-review/v0.5.0/sprint-s2-code-review.md +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/dev-planning/code-review/v0.5.0/sprint-s2.5-code-review.md +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/dev-planning/code-review/v0.5.0/sprint-s3-code-review.md +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/dev-planning/code-review/v0.5.0/sprint-s4-code-review.md +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/dev-planning/code-review/v0.5.0/sprint-s5-code-review.md +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/dev-planning/prd/prd-asap-implementation.md +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/dev-planning/tasks/v0.1.0/sprint-planning-v0.1.0.md +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/dev-planning/tasks/v0.1.0/tasks-prd-asap-implementation.md +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/dev-planning/tasks/v0.1.0/tasks-security-review-report.md +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/dev-planning/tasks/v0.1.0/tasks-sprint3-improvements.md +0 -0
- /asap_protocol-0.5.0/.cursor/docs/general-specs.md → /asap_protocol-1.0.0/.cursor/product-specs/v0-original-specs.md +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/rules/architecture-principles.mdc +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.cursor/rules/python-best-practices.mdc +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/.github/dependabot.yml +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/CODE_OF_CONDUCT.md +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/LICENSE +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/benchmarks/__init__.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/benchmarks/benchmark_models.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/docs/api-reference.md +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/docs/error-handling.md +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/docs/index.md +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/docs/metrics.md +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/docs/state-management.md +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/docs/transport.md +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/schemas/entities/agent.schema.json +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/schemas/entities/artifact.schema.json +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/schemas/entities/conversation.schema.json +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/schemas/entities/manifest.schema.json +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/schemas/entities/message.schema.json +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/schemas/entities/state_snapshot.schema.json +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/schemas/entities/task.schema.json +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/schemas/envelope.schema.json +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/schemas/parts/data_part.schema.json +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/schemas/parts/file_part.schema.json +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/schemas/parts/resource_part.schema.json +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/schemas/parts/template_part.schema.json +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/schemas/parts/text_part.schema.json +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/schemas/payloads/artifact_notify.schema.json +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/schemas/payloads/mcp_resource_data.schema.json +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/schemas/payloads/mcp_resource_fetch.schema.json +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/schemas/payloads/mcp_tool_call.schema.json +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/schemas/payloads/mcp_tool_result.schema.json +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/schemas/payloads/message_send.schema.json +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/schemas/payloads/state_query.schema.json +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/schemas/payloads/state_restore.schema.json +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/schemas/payloads/task_cancel.schema.json +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/schemas/payloads/task_request.schema.json +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/schemas/payloads/task_response.schema.json +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/schemas/payloads/task_update.schema.json +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/scripts/export_schemas.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/errors.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/examples/__init__.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/examples/coordinator.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/examples/echo_agent.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/models/__init__.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/models/enums.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/models/payloads.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/models/types.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/schemas.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/state/__init__.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/transport/executors.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/transport/jsonrpc.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/src/asap/utils/__init__.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/compatibility/__init__.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/compatibility/test_v0_1_0_compatibility.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/compatibility/test_v0_3_0_compatibility.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/e2e/__init__.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/examples/__init__.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/examples/test_run_demo.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/models/test_envelope.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/models/test_payloads_validation.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/observability/__init__.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/state/__init__.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/test_schemas.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/transport/__init__.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/transport/conftest.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/transport/e2e/__init__.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/transport/integration/__init__.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/transport/integration/test_metrics_cardinality.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/transport/integration/test_request_size_limits.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/transport/integration/test_thread_pool_bounds.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/transport/integration/test_validation_order.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/transport/test_jsonrpc.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/transport/unit/__init__.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/transport/unit/test_bounded_executor.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/transport/unit/test_circuit_breaker_persistence.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/transport/unit/test_retry_backoff.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/transport/unit/test_retry_edge_cases.py +0 -0
- {asap_protocol-0.5.0 → asap_protocol-1.0.0}/tests/utils/__init__.py +0 -0
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
description:
|
|
3
|
-
globs:
|
|
4
|
-
alwaysApply: false
|
|
5
|
-
---
|
|
1
|
+
# Code Quality Review
|
|
6
2
|
|
|
7
3
|
You are an expert code quality reviewer with deep expertise in software engineering best practices, clean code principles, and maintainable architecture. Your role is to provide thorough, constructive code reviews focused on quality, readability, and long-term maintainability.
|
|
8
4
|
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
description:
|
|
3
|
-
globs:
|
|
4
|
-
alwaysApply: false
|
|
5
|
-
---
|
|
1
|
+
# Reflect about the codebase
|
|
6
2
|
|
|
7
3
|
Based on the given area of interest, please:
|
|
8
4
|
|
|
9
5
|
1. Dig around the codebase in terms of that given area of interest, gather general information such as keywords and architecture overview.
|
|
6
|
+
|
|
10
7
|
2. Spawn off n=10 (unless specified otherwise) task agents to dig deeper into the codebase in terms of that given area of interest, some of them should be out of the box for variance.
|
|
8
|
+
|
|
11
9
|
3. Once the task agents are done, use the information to do what the user wants.
|
|
12
10
|
|
|
13
11
|
If user is in plan mode, use the information to create the plan.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Remove AI code slop
|
|
2
|
+
|
|
3
|
+
Check the diff against main and remove all AI generated slop introduced in this branch.
|
|
4
|
+
|
|
5
|
+
This includes:
|
|
6
|
+
- Extra comments that a human wouldn't add or is inconsistent with the rest of the file
|
|
7
|
+
- Extra defensive checks or try/catch blocks that are abnormal for that area of the codebase (especially if called by trusted / validated codepaths)
|
|
8
|
+
- Casts to `any` to get around type issues
|
|
9
|
+
- Any other style that is inconsistent with the file
|
|
10
|
+
|
|
11
|
+
Report at the end with only a 1-3 sentence summary of what you changed.
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
description:
|
|
3
|
-
globs:
|
|
4
|
-
alwaysApply: false
|
|
5
|
-
---
|
|
1
|
+
# Security Review
|
|
6
2
|
|
|
7
3
|
You are an elite security code reviewer with deep expertise in application security, threat modeling, and secure coding practices. Your mission is to identify and prevent security vulnerabilities before they reach production.
|
|
8
4
|
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
description:
|
|
3
|
-
globs:
|
|
4
|
-
alwaysApply: false
|
|
5
|
-
---
|
|
1
|
+
# Test Coverage Review
|
|
6
2
|
|
|
7
3
|
You are an expert QA engineer and testing specialist with deep expertise in test-driven development, code coverage analysis, and quality assurance best practices. Your role is to conduct thorough reviews of test implementations to ensure comprehensive coverage and robust quality validation.
|
|
8
4
|
|
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
# ASAP Protocol: Critical Analysis & Design Decisions
|
|
2
|
+
|
|
3
|
+
> Expert self-review identifying unclear points, analyzing trade-offs, and documenting decisions.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
- [Analysis Methodology](#analysis-methodology)
|
|
8
|
+
- [Question 1: Is Event-Sourced State Necessary for MVP?](#question-1-is-event-sourced-state-necessary-for-mvp)
|
|
9
|
+
- [Question 2: Why JSON-RPC Over REST for Primary Binding?](#question-2-why-json-rpc-over-rest-for-primary-binding)
|
|
10
|
+
- [Question 3: Is Peer-to-Peer Default Practical?](#question-3-is-peer-to-peer-default-practical)
|
|
11
|
+
- [Question 4: What Consistency Model for Shared State?](#question-4-what-consistency-model-for-shared-state)
|
|
12
|
+
- [Question 5: Is MCP Envelope Approach Optimal?](#question-5-is-mcp-envelope-approach-optimal)
|
|
13
|
+
- [Question 6: Is CalVer Appropriate for Protocol Versioning?](#question-6-is-calver-appropriate-for-protocol-versioning)
|
|
14
|
+
- [Question 7: Is Error Model Complete?](#question-7-is-error-model-complete)
|
|
15
|
+
- [Question 8: Is MVP Security Sufficient?](#question-8-is-mvp-security-sufficient)
|
|
16
|
+
- [Question 9: Should Any Module Use C or Rust?](#question-9-should-any-module-use-c-or-rust)
|
|
17
|
+
- [Summary of Amendments](#summary-of-amendments)
|
|
18
|
+
- [Next Steps](#next-steps)
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Analysis Methodology
|
|
23
|
+
|
|
24
|
+
As an expert in agentic architecture, I'll examine the ASAP specification through these lenses:
|
|
25
|
+
1. **Consistency Model** – Event-sourced vs simpler alternatives
|
|
26
|
+
2. **Transport Binding** – JSON-RPC priority vs alternatives
|
|
27
|
+
3. **Topology Assumptions** – P2P default viability
|
|
28
|
+
4. **State Semantics** – Strong vs eventual consistency
|
|
29
|
+
5. **MCP Integration** – Envelope approach vs deeper integration
|
|
30
|
+
6. **Versioning Strategy** – CalVer implications
|
|
31
|
+
7. **Error Handling** – Completeness of error model
|
|
32
|
+
8. **Security Model** – MVP adequacy
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Question 1: Is Event-Sourced State Necessary for MVP?
|
|
37
|
+
|
|
38
|
+
### The Question
|
|
39
|
+
The spec proposes an **event-sourced state model** (Section 5.3). Is this over-engineering for an MVP, or a justified architectural investment?
|
|
40
|
+
|
|
41
|
+
### Analysis
|
|
42
|
+
|
|
43
|
+
| Aspect | Event-Sourced | Simple Mutable State |
|
|
44
|
+
|--------|---------------|---------------------|
|
|
45
|
+
| **Complexity** | Higher (events, reducers, snapshots) | Lower (CRUD operations) |
|
|
46
|
+
| **Auditability** | Full history preserved | Manual logging required |
|
|
47
|
+
| **Recovery** | Deterministic replay | Checkpoint restore only |
|
|
48
|
+
| **Storage** | Grows unbounded without compaction | Fixed size per task |
|
|
49
|
+
| **Implementation** | Specialized knowledge needed | Common patterns |
|
|
50
|
+
|
|
51
|
+
### Expert Assessment
|
|
52
|
+
|
|
53
|
+
**Pros of Event-Sourcing**:
|
|
54
|
+
- Natural fit for long-running agent tasks (hours/days)
|
|
55
|
+
- Debugging distributed failures requires understanding "what happened"
|
|
56
|
+
- Aligns with industry trend toward observability-first design
|
|
57
|
+
- Supports time-travel debugging critical for agent development
|
|
58
|
+
|
|
59
|
+
**Cons**:
|
|
60
|
+
- Adds significant implementation complexity
|
|
61
|
+
- May discourage adoption by teams unfamiliar with pattern
|
|
62
|
+
- Overkill for simple, short-lived tasks
|
|
63
|
+
|
|
64
|
+
### Recommendation: **MODIFY**
|
|
65
|
+
|
|
66
|
+
Reframe as **optional capability**, not requirement:
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
State persistence modes:
|
|
70
|
+
1. "snapshot" (default) – Simple checkpoint/restore
|
|
71
|
+
2. "event-sourced" (opt-in) – Full event history with replay
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Spec Amendment
|
|
75
|
+
|
|
76
|
+
> [!NOTE]
|
|
77
|
+
> Added to Section 5.3: State persistence is **mode-selectable**. Implementations MUST support `snapshot` mode. Event-sourced mode is RECOMMENDED for tasks exceeding 1 hour or requiring audit trails.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Question 2: Why JSON-RPC Over REST for Primary Binding?
|
|
82
|
+
|
|
83
|
+
### The Question
|
|
84
|
+
The spec recommends HTTP + JSON-RPC as the canonical binding (Section 13.1). Is this the right choice given REST's ubiquity?
|
|
85
|
+
|
|
86
|
+
### Analysis
|
|
87
|
+
|
|
88
|
+
| Criterion | JSON-RPC | REST | gRPC |
|
|
89
|
+
|-----------|----------|------|------|
|
|
90
|
+
| A2A/MCP alignment | ✅ Native match | ❌ Paradigm mismatch | ⚠️ Partial (A2A supports) |
|
|
91
|
+
| Browser support | ✅ Full | ✅ Full | ❌ Requires proxy |
|
|
92
|
+
| Streaming | ⚠️ Needs SSE/WS | ⚠️ Needs SSE/WS | ✅ Native |
|
|
93
|
+
| Method semantics | ✅ Explicit methods | ⚠️ Resource-oriented | ✅ Explicit methods |
|
|
94
|
+
| Schema validation | ⚠️ Manual | ⚠️ OpenAPI | ✅ Protobuf |
|
|
95
|
+
| Performance | Medium | Medium | High |
|
|
96
|
+
| Learning curve | Low | Very low | Medium-high |
|
|
97
|
+
|
|
98
|
+
### Expert Assessment
|
|
99
|
+
|
|
100
|
+
**Why JSON-RPC wins for ASAP**:
|
|
101
|
+
1. **A2A compatibility**: A2A uses JSON-RPC 2.0; alignment reduces bridging friction
|
|
102
|
+
2. **Method-centric**: Agents think in terms of "actions" (TaskRequest, TaskCancel), not "resources"
|
|
103
|
+
3. **Simpler async semantics**: JSON-RPC's request/response model maps cleanly to our async patterns
|
|
104
|
+
4. **MCP consistency**: MCP also uses JSON-RPC
|
|
105
|
+
|
|
106
|
+
**Why not REST**:
|
|
107
|
+
- Resource-oriented design feels forced for agent coordination
|
|
108
|
+
- Mapping task state machines to HTTP verbs (GET/PUT/PATCH) is awkward
|
|
109
|
+
- Over-fetching/under-fetching issues irrelevant for structured agent messages
|
|
110
|
+
|
|
111
|
+
**Why defer gRPC**:
|
|
112
|
+
- Adds Protobuf toolchain requirement
|
|
113
|
+
- Limited browser support complicates demos/debugging
|
|
114
|
+
- Performance gains matter less than adoption barriers for MVP
|
|
115
|
+
|
|
116
|
+
### Recommendation: **KEEP**
|
|
117
|
+
|
|
118
|
+
JSON-RPC is the correct choice. Add explicit rationale to spec.
|
|
119
|
+
|
|
120
|
+
### Spec Amendment
|
|
121
|
+
|
|
122
|
+
> [!NOTE]
|
|
123
|
+
> Added to Section 13.1: JSON-RPC selected for A2A/MCP ecosystem alignment and method-centric semantics that match agent interaction patterns. gRPC binding deferred to v0.2 for performance-critical deployments.
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Question 3: Is Peer-to-Peer Default Practical?
|
|
128
|
+
|
|
129
|
+
### The Question
|
|
130
|
+
Section 7.1 defaults to P2P topology. Is this practical given discovery/trust challenges?
|
|
131
|
+
|
|
132
|
+
### Analysis
|
|
133
|
+
|
|
134
|
+
**P2P Challenges Identified**:
|
|
135
|
+
1. **N² connections**: 10 agents = 90 potential connections
|
|
136
|
+
2. **Discovery**: How do agents find each other initially?
|
|
137
|
+
3. **Trust bootstrap**: No central authority to vouch for agents
|
|
138
|
+
4. **NAT traversal**: Agents behind firewalls cannot receive connections
|
|
139
|
+
|
|
140
|
+
**Industry Context**:
|
|
141
|
+
- A2A assumes direct HTTP connections (client → server)
|
|
142
|
+
- Most production systems use hub/orchestrator patterns
|
|
143
|
+
- Message meshes (NATS, Kafka) increasingly common for scale
|
|
144
|
+
|
|
145
|
+
### Expert Assessment
|
|
146
|
+
|
|
147
|
+
**P2P makes sense when**:
|
|
148
|
+
- Small teams (≤5 agents)
|
|
149
|
+
- Single trust domain
|
|
150
|
+
- Development/testing scenarios
|
|
151
|
+
- Low-latency requirements
|
|
152
|
+
|
|
153
|
+
**Hub/Mesh better when**:
|
|
154
|
+
- Enterprise deployments
|
|
155
|
+
- Cross-organization coordination
|
|
156
|
+
- Audit/compliance requirements
|
|
157
|
+
- Scale beyond 10 agents
|
|
158
|
+
|
|
159
|
+
### Recommendation: **MODIFY**
|
|
160
|
+
|
|
161
|
+
Reframe as **deployment patterns** rather than topology choice:
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
Deployment Patterns:
|
|
165
|
+
1. "direct" – Agent-to-agent HTTP (dev, small teams)
|
|
166
|
+
2. "orchestrated" – Via coordinator agent (enterprise)
|
|
167
|
+
3. "mesh" – Via message broker (scale)
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Default recommendation should be **context-dependent**, not universal.
|
|
171
|
+
|
|
172
|
+
### Spec Amendment
|
|
173
|
+
|
|
174
|
+
> [!IMPORTANT]
|
|
175
|
+
> Modified Section 7.1: Removed "default" designation from P2P. Added deployment pattern recommendations based on scale and trust requirements. Direct connections recommended for ≤5 agents in single trust domain.
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Question 4: What Consistency Model for Shared State?
|
|
180
|
+
|
|
181
|
+
### The Question
|
|
182
|
+
When multiple agents coordinate on a task, what consistency guarantees apply to shared state?
|
|
183
|
+
|
|
184
|
+
### Analysis
|
|
185
|
+
|
|
186
|
+
The current spec doesn't explicitly address this. This is a gap.
|
|
187
|
+
|
|
188
|
+
**Consistency Options**:
|
|
189
|
+
|
|
190
|
+
| Model | Guarantee | Agent Impact |
|
|
191
|
+
|-------|-----------|--------------|
|
|
192
|
+
| **Strong** | All agents see same state instantly | Requires coordination overhead |
|
|
193
|
+
| **Eventual** | State converges eventually | Agents may make decisions on stale data |
|
|
194
|
+
| **Causal** | Respects happened-before | Good middle ground |
|
|
195
|
+
|
|
196
|
+
**Agent Coordination Scenarios**:
|
|
197
|
+
1. **Handoff**: Agent A completes, Agent B starts → Sequential, no conflict
|
|
198
|
+
2. **Parallel work**: Agents A & B work simultaneously → May conflict
|
|
199
|
+
3. **Observation**: Agent A watches Agent B's progress → Staleness acceptable
|
|
200
|
+
|
|
201
|
+
### Expert Assessment
|
|
202
|
+
|
|
203
|
+
For agent coordination:
|
|
204
|
+
- **Strong consistency** rarely needed (agents aren't databases)
|
|
205
|
+
- **Eventual consistency** acceptable for most workflows
|
|
206
|
+
- **Causal consistency** ideal for task dependencies
|
|
207
|
+
|
|
208
|
+
Most agent interactions are **naturally sequential** (delegation chains), reducing consistency concerns.
|
|
209
|
+
|
|
210
|
+
### Recommendation: **ADD**
|
|
211
|
+
|
|
212
|
+
Explicitly declare consistency model in spec.
|
|
213
|
+
|
|
214
|
+
### Spec Amendment
|
|
215
|
+
|
|
216
|
+
> [!NOTE]
|
|
217
|
+
> Added to Section 5: ASAP uses **causal consistency** for task state. Agents observing a task see updates in causal order (a task cannot be "completed" before it was "working"). Implementations MAY offer stronger guarantees. Cross-agent state sharing uses eventual consistency with version vectors for conflict detection.
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## Question 5: Is MCP Envelope Approach Optimal?
|
|
222
|
+
|
|
223
|
+
### The Question
|
|
224
|
+
Section 8 wraps MCP calls in ASAP envelopes (`McpToolCall`, `McpToolResult`). Is this the right integration pattern?
|
|
225
|
+
|
|
226
|
+
### Analysis
|
|
227
|
+
|
|
228
|
+
**Integration Patterns Considered**:
|
|
229
|
+
|
|
230
|
+
| Pattern | Description | Pros | Cons |
|
|
231
|
+
|---------|-------------|------|------|
|
|
232
|
+
| **Envelope** (current) | ASAP wraps MCP | Clean separation, routing flexibility | Extra layer, translation overhead |
|
|
233
|
+
| **Passthrough** | Forward MCP unchanged | Zero overhead | Loses ASAP tracing/correlation |
|
|
234
|
+
| **Unified** | Merge into single protocol | Simplest conceptually | Massive spec, A2A/MCP conflict |
|
|
235
|
+
| **Sidecar** | MCP as separate channel | Independent scaling | Coordination complexity |
|
|
236
|
+
|
|
237
|
+
### Expert Assessment
|
|
238
|
+
|
|
239
|
+
**Envelope approach is correct because**:
|
|
240
|
+
1. **Correlation**: ASAP envelope carries `trace_id`, `correlation_id`
|
|
241
|
+
2. **Routing**: ASAP handles agent-to-agent routing; MCP handles tool execution
|
|
242
|
+
3. **Auth boundary**: ASAP auth may differ from MCP tool auth
|
|
243
|
+
4. **Observability**: Unified logging across both protocols
|
|
244
|
+
|
|
245
|
+
**Edge case concern**: What if MCP tool returns large binary data?
|
|
246
|
+
|
|
247
|
+
### Recommendation: **KEEP with clarification**
|
|
248
|
+
|
|
249
|
+
Add streaming support for large MCP responses.
|
|
250
|
+
|
|
251
|
+
### Spec Amendment
|
|
252
|
+
|
|
253
|
+
> [!NOTE]
|
|
254
|
+
> Added to Section 8.2: For large MCP tool results, the `McpToolResult` payload MAY contain a `stream_uri` instead of inline `result`, enabling chunked delivery via ASAP streaming mechanisms.
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## Question 6: Is CalVer Appropriate for Protocol Versioning?
|
|
259
|
+
|
|
260
|
+
### The Question
|
|
261
|
+
Section 9.3 proposes CalVer (2025.01 format). Is this suitable for a protocol spec?
|
|
262
|
+
|
|
263
|
+
### Analysis
|
|
264
|
+
|
|
265
|
+
**Versioning Strategies**:
|
|
266
|
+
|
|
267
|
+
| Strategy | Example | When to Use |
|
|
268
|
+
|----------|---------|-------------|
|
|
269
|
+
| **SemVer** | 1.2.3 | Breaking change clarity |
|
|
270
|
+
| **CalVer** | 2025.01 | Time-based releases |
|
|
271
|
+
| **Hybrid** | 1.2025.01 | Both dimensions |
|
|
272
|
+
|
|
273
|
+
**Industry Practice**:
|
|
274
|
+
- HTTP: Version numbers (1.0, 1.1, 2, 3)
|
|
275
|
+
- JSON-RPC: 2.0 (static for 15+ years)
|
|
276
|
+
- GraphQL: No versioning (evolved carefully)
|
|
277
|
+
- MCP: Date-based (2025-11-25)
|
|
278
|
+
- A2A: Semantic-ish (v1.0 DRAFT)
|
|
279
|
+
|
|
280
|
+
### Expert Assessment
|
|
281
|
+
|
|
282
|
+
**CalVer advantages**:
|
|
283
|
+
- Communicates recency (2025.06 obviously newer than 2024.01)
|
|
284
|
+
- Encourages regular spec reviews
|
|
285
|
+
- Aligns with MCP's date-based approach
|
|
286
|
+
|
|
287
|
+
**CalVer disadvantages**:
|
|
288
|
+
- Doesn't communicate breaking vs non-breaking
|
|
289
|
+
- May create pressure for unnecessary annual changes
|
|
290
|
+
- Protocol users prefer stability signals
|
|
291
|
+
|
|
292
|
+
### Recommendation: **MODIFY**
|
|
293
|
+
|
|
294
|
+
Adopt **hybrid approach**: Major.CalVer
|
|
295
|
+
|
|
296
|
+
```
|
|
297
|
+
Format: <major>.<YYYY>.<MM>
|
|
298
|
+
Examples:
|
|
299
|
+
1.2025.01 – Initial stable release
|
|
300
|
+
1.2025.06 – Additive update
|
|
301
|
+
2.2026.01 – Breaking changes
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
### Spec Amendment
|
|
305
|
+
|
|
306
|
+
> [!NOTE]
|
|
307
|
+
> Modified Section 9.3: Adopted hybrid versioning `Major.YYYY.MM`. Major version indicates breaking changes; CalVer portion indicates release timing. v1.2025.01 is target for first stable release.
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
## Question 7: Is Error Model Complete?
|
|
312
|
+
|
|
313
|
+
### The Question
|
|
314
|
+
Section 13.4 mentions namespaced error codes but doesn't define core errors. Is the error model complete?
|
|
315
|
+
|
|
316
|
+
### Analysis
|
|
317
|
+
|
|
318
|
+
**Essential Error Categories**:
|
|
319
|
+
1. **Protocol errors** (malformed messages)
|
|
320
|
+
2. **Routing errors** (agent not found)
|
|
321
|
+
3. **Capability errors** (skill not available)
|
|
322
|
+
4. **Execution errors** (task failed)
|
|
323
|
+
5. **Resource errors** (quota exceeded)
|
|
324
|
+
6. **Security errors** (auth failed)
|
|
325
|
+
|
|
326
|
+
**A2A Error Codes** (for reference):
|
|
327
|
+
- `ContentTypeNotSupportedError`
|
|
328
|
+
- `UnsupportedOperationError`
|
|
329
|
+
- `TaskNotFoundError`
|
|
330
|
+
- `InvalidRequestError`
|
|
331
|
+
|
|
332
|
+
### Recommendation: **ADD**
|
|
333
|
+
|
|
334
|
+
Define core error taxonomy.
|
|
335
|
+
|
|
336
|
+
### Spec Amendment
|
|
337
|
+
|
|
338
|
+
> [!NOTE]
|
|
339
|
+
> Added Error Taxonomy to spec:
|
|
340
|
+
|
|
341
|
+
```
|
|
342
|
+
Core Error Codes:
|
|
343
|
+
├── asap:protocol
|
|
344
|
+
│ ├── malformed_envelope
|
|
345
|
+
│ ├── invalid_payload_type
|
|
346
|
+
│ └── version_mismatch
|
|
347
|
+
├── asap:routing
|
|
348
|
+
│ ├── agent_not_found
|
|
349
|
+
│ ├── agent_unreachable
|
|
350
|
+
│ └── conversation_expired
|
|
351
|
+
├── asap:capability
|
|
352
|
+
│ ├── skill_not_found
|
|
353
|
+
│ ├── skill_unavailable
|
|
354
|
+
│ └── input_validation_failed
|
|
355
|
+
├── asap:execution
|
|
356
|
+
│ ├── task_failed
|
|
357
|
+
│ ├── task_timeout
|
|
358
|
+
│ └── task_cancelled
|
|
359
|
+
├── asap:resource
|
|
360
|
+
│ ├── quota_exceeded
|
|
361
|
+
│ ├── rate_limited
|
|
362
|
+
│ └── storage_full
|
|
363
|
+
└── asap:security
|
|
364
|
+
├── auth_required
|
|
365
|
+
├── auth_invalid
|
|
366
|
+
└── permission_denied
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
|
|
371
|
+
## Question 8: Is MVP Security Sufficient?
|
|
372
|
+
|
|
373
|
+
### The Question
|
|
374
|
+
Section 10.1 defines MVP security (TLS, bearer tokens, scopes). Is this adequate for initial deployments?
|
|
375
|
+
|
|
376
|
+
### Analysis
|
|
377
|
+
|
|
378
|
+
**Threat Assessment for MVP**:
|
|
379
|
+
|
|
380
|
+
| Threat | MVP Mitigation | Gap |
|
|
381
|
+
|--------|----------------|-----|
|
|
382
|
+
| Eavesdropping | TLS 1.3 | ✅ Covered |
|
|
383
|
+
| Replay attacks | Idempotency keys | ⚠️ Keys expire, not cryptographic |
|
|
384
|
+
| Spoofing | Bearer tokens | ⚠️ Token theft risk |
|
|
385
|
+
| Man-in-middle | TLS | ✅ Covered |
|
|
386
|
+
| Privilege escalation | Scopes | ⚠️ Scope enforcement in spec, not protocol |
|
|
387
|
+
|
|
388
|
+
**Industry Baseline** (2025):
|
|
389
|
+
- mTLS becoming standard for service-to-service
|
|
390
|
+
- Signed JWTs preferred over opaque tokens
|
|
391
|
+
- Zero-trust architecture expected for enterprise
|
|
392
|
+
|
|
393
|
+
### Expert Assessment
|
|
394
|
+
|
|
395
|
+
**MVP security is adequate IF**:
|
|
396
|
+
- Deployments are within trust boundaries
|
|
397
|
+
- Network security complements protocol security
|
|
398
|
+
- Token management follows best practices
|
|
399
|
+
|
|
400
|
+
**Upgrade urgency**:
|
|
401
|
+
- Signed messages: High (v0.2)
|
|
402
|
+
- mTLS: Medium (v0.3)
|
|
403
|
+
- Zero-trust: Low (v1.1)
|
|
404
|
+
|
|
405
|
+
### Recommendation: **KEEP with enhancement**
|
|
406
|
+
|
|
407
|
+
Add HMAC-signed request bodies as optional MVP feature.
|
|
408
|
+
|
|
409
|
+
### Spec Amendment
|
|
410
|
+
|
|
411
|
+
> [!NOTE]
|
|
412
|
+
> Added to Section 10.1: Optional request signing via `X-ASAP-Signature` header using HMAC-SHA256. Enables integrity verification without full PKI. Recommended for production deployments.
|
|
413
|
+
|
|
414
|
+
---
|
|
415
|
+
|
|
416
|
+
## Question 9: Should Any Module Use C or Rust?
|
|
417
|
+
|
|
418
|
+
### The Question
|
|
419
|
+
Would any ASAP module benefit from being implemented in C or Rust instead of pure Python for performance reasons?
|
|
420
|
+
|
|
421
|
+
### Analysis
|
|
422
|
+
|
|
423
|
+
**Module Assessment**:
|
|
424
|
+
|
|
425
|
+
| Module | Performance Needs | Current Solution |
|
|
426
|
+
|--------|------------------|------------------|
|
|
427
|
+
| Models/Schemas | JSON parsing, validation | `pydantic-core` (Rust) ✅ |
|
|
428
|
+
| State Machine | Simple transitions | Pure Python sufficient |
|
|
429
|
+
| Snapshot Store | I/O bound | Async I/O, no CPU bottleneck |
|
|
430
|
+
| HTTP Transport | Network I/O | `uvloop` (C), `httpx` (optimized) ✅ |
|
|
431
|
+
| JSON-RPC | Serialization | `orjson` available (Rust) ✅ |
|
|
432
|
+
| ULID Generation | ID creation | `python-ulid` 3.0 (Rust) ✅ |
|
|
433
|
+
|
|
434
|
+
**Key Insight**: Critical performance paths already use Rust/C internally via our dependencies.
|
|
435
|
+
|
|
436
|
+
### Expert Assessment
|
|
437
|
+
|
|
438
|
+
**ASAP is I/O bound, not CPU bound**:
|
|
439
|
+
- Agent communication is network-limited
|
|
440
|
+
- JSON serialization is already Rust-optimized (pydantic-core, orjson)
|
|
441
|
+
- Async event loop uses libuv (C) via uvloop
|
|
442
|
+
|
|
443
|
+
**Cost of custom C/Rust**:
|
|
444
|
+
- Build complexity (manylinux, macOS, Windows wheels)
|
|
445
|
+
- Debugging difficulty across FFI boundaries
|
|
446
|
+
- Maintenance burden for bindings
|
|
447
|
+
|
|
448
|
+
**When C/Rust would matter (future)**:
|
|
449
|
+
- Cryptographic signing of manifests at scale
|
|
450
|
+
- Binary protocol (Protobuf/MessagePack)
|
|
451
|
+
- Native message broker clients
|
|
452
|
+
|
|
453
|
+
### Recommendation: **KEEP Pure Python**
|
|
454
|
+
|
|
455
|
+
Leverage Rust-based dependencies; avoid custom native extensions for MVP.
|
|
456
|
+
|
|
457
|
+
### Spec Amendment
|
|
458
|
+
|
|
459
|
+
> [!NOTE]
|
|
460
|
+
> Added architectural decision: ASAP SDK uses pure Python with Rust-accelerated dependencies (pydantic-core, orjson, python-ulid). Custom C/Rust extensions deferred until profiling identifies specific bottlenecks. This maximizes developer accessibility while maintaining competitive performance.
|
|
461
|
+
|
|
462
|
+
---
|
|
463
|
+
|
|
464
|
+
## Summary of Amendments
|
|
465
|
+
|
|
466
|
+
| Question | Decision | Change Type |
|
|
467
|
+
|----------|----------|-------------|
|
|
468
|
+
| Q1: Event-sourced state | Make optional, default to snapshots | **Modified** |
|
|
469
|
+
| Q2: JSON-RPC binding | Keep, add explicit rationale | **Kept + Documented** |
|
|
470
|
+
| Q3: P2P topology | Remove as default, add deployment patterns | **Modified** |
|
|
471
|
+
| Q4: Consistency model | Add explicit causal consistency | **Added** |
|
|
472
|
+
| Q5: MCP envelope | Keep, add streaming for large results | **Kept + Enhanced** |
|
|
473
|
+
| Q6: CalVer versioning | Adopt hybrid Major.CalVer | **Modified** |
|
|
474
|
+
| Q7: Error model | Add complete error taxonomy | **Added** |
|
|
475
|
+
| Q8: MVP security | Add optional request signing | **Enhanced** |
|
|
476
|
+
| Q9: Python vs C/Rust | Keep pure Python, use Rust deps | **Documented** |
|
|
477
|
+
|
|
478
|
+
---
|
|
479
|
+
|
|
480
|
+
## Next Steps
|
|
481
|
+
|
|
482
|
+
1. ✅ Questions analyzed
|
|
483
|
+
2. ✅ Decisions documented
|
|
484
|
+
3. ⏳ Apply amendments to main specification
|
|
485
|
+
4. ⏳ Request user review of changes
|
|
486
|
+
|