feat: replace REST API with gRPC service
Complete migration from FastAPI/HTTP to gRPC:
Proto definition (proto/daena/v1/daena.proto):
- Daena service with 9 RPCs: GetStatus, GetHealth, GetConfig,
ListPlugins, GetQueueState, ListPendingRecords, ListDeadRecords,
ListSinks, ReloadConfig
- Messages for all request/response types with proper field types
gRPC server (src/daena/api/grpc_server.py):
- Async gRPC aio server with DaenaServicer implementation
- DaenaGRPCServer with start/stop/serve_forever lifecycle
- All endpoints delegate to DaenaRuntime
gRPC client (src/daena/cli/main.py):
- CLI now uses grpc.insecure_channel + DaenaStub
- Same commands: status, health, queue, sinks, plugins, config, version
Config changes:
- Remove FastAPI/uvicorn/http config, replace with grpc config
- GRPCConfig with host/port/max_workers
Dependency changes:
- Remove fastapi, uvicorn, starlette, anyio
- Add grpcio, grpcio-tools, protobuf
- Keep httpx for HTTP sink forwarding (separate from management API)
Tests:
- 8 new gRPC integration tests (test_grpc.py)
- All 31 tests passing, ruff clean