feat(server): ASGI endpoint via uvicorn #1107

Closed
freemo wants to merge 2 commits from feature/m9-asgi-endpoint into master

2 Commits

Author SHA1 Message Date
freemo e1ad21e7b3 fix(server): address ASGI endpoint review findings
CI / benchmark-publish (pull_request) Has been skipped
CI / build (pull_request) Successful in 32s
CI / lint (pull_request) Successful in 3m19s
CI / quality (pull_request) Successful in 4m27s
CI / typecheck (pull_request) Successful in 4m42s
CI / security (pull_request) Successful in 4m46s
CI / unit_tests (pull_request) Successful in 8m9s
CI / integration_tests (pull_request) Successful in 8m11s
CI / docker (pull_request) Successful in 1m8s
CI / e2e_tests (pull_request) Successful in 9m40s
CI / coverage (pull_request) Successful in 10m9s
CI / status-check (pull_request) Successful in 3s
CI / benchmark-regression (pull_request) Successful in 52m27s
- Narrow request-parsing exception to pydantic.ValidationError
- Add JSON-RPC -32603 catch-all for dispatch errors
- Move imports to module top per CONTRIBUTING.md
- Add JSON-RPC id field to all error responses
- Make Agent Card URL scheme configurable
- Tighten _COMMANDS type annotation to Callable[[], None]
- Add nosec B104 to 0.0.0.0 defaults
- Add TODO comments for deferred security items (CORS, auth, rate limiting, body size)
- Add comment explaining intentionally empty skills list
2026-03-24 20:34:26 +00:00
freemo ad51fc07e7 feat(server): ASGI endpoint via uvicorn
Implement FastAPI-based ASGI application served by uvicorn for
the CleverAgents server mode. Add health check endpoint, A2A
JSON-RPC routing, configurable host:port binding, and graceful
shutdown handling. Server launches via `agents server start`.

- Add FastAPI ASGI app factory at infrastructure/server/asgi_app.py
  with /.well-known/agent.json (Agent Card), /health (liveness),
  and /a2a (A2A JSON-RPC 2.0 dispatch via A2aLocalFacade)
- Add ServerLifecycle class at infrastructure/server/server_lifecycle.py
  wrapping uvicorn.Server with SIGTERM/SIGINT graceful shutdown
- Add `agents server start` CLI command with --host, --port, --log-level
  options, resolving defaults from Settings
- Add fastapi>=0.115.0 dependency to pyproject.toml (uvicorn already present)
- Add Behave BDD tests (features/server_lifecycle.feature, 20 scenarios)
- Add Robot Framework integration tests (robot/server_lifecycle.robot)
- Update CHANGELOG.md and vulture_whitelist.py

ISSUES CLOSED: #862
2026-03-24 20:34:26 +00:00