TCP and gRPC front-ends for AstraeaDB.
AstraeaServer runs a newline-delimited JSON request loop over TCP
(one protocol::Request per line, one protocol::Response per
line); the grpc::AstraeaGrpcService provides a parallel tonic
adapter. Both transports are thin and must route through a single
RequestHandler::handle(Request) -> Response so feature parity is
preserved. Cross-cutting concerns live in AuthManager,
ConnectionManager, ServerMetrics, and TlsConfig.
Invariants: request_type_name in server.rs must have an arm for
every Request variant — it drives metrics and RBAC. Vector-aware
requests (VectorSearch, HybridSearch, SemanticNeighbors,
SemanticWalk, anchor-less GraphRag) require constructing the
server with Some(vector_index); otherwise they return an error
rather than panic. collect_graph_stats and resolve_node_ids(None, ...) probe IDs 1..10_000 sequentially and silently truncate.