graph TD

    subgraph ClientAgent[Client Agent]
        HTTPEndpoint
        DNSEndpoint
        rpcClient.Health
        AgentCache
        MaterializedView
    end

    subgraph ServerAgent[Server Agent]
        RPCEndpoint
        raft.Apply
        FSM.applyRegistration
        state.Store.Register
        SubscribeEndpoint
        EventPublisher
    end

    Read --> HTTPEndpoint & DNSEndpoint

    HTTPEndpoint & DNSEndpoint --> rpcClient.Health
    rpcClient.Health --> AgentCache
    AgentCache --> MaterializedView
    MaterializedView --> SubscribeEndpoint
    SubscribeEndpoint -->|Subscribe to topic| EventPublisher

    Write --> RPCEndpoint
    RPCEndpoint --> raft.Apply
    raft.Apply --> FSM.applyRegistration
    FSM.applyRegistration --> state.Store.Register
    state.Store.Register -->|Publish event| EventPublisher

    class Read,Write start
    classDef start fill:transparent,stroke:transparent

