The way I understand it is that the RoboSats app on Umbrel has a local webserver and that sends API requests (websocket, over Tor) to that webserver. The chat doesn't work on websocket so it uses Rest, or something to that effect.
Escrow on LN is handled by way of a "hold invoice".
RoboSats is "minimized custody" but not "fully custodyless".
At any given time, robosats node most likely holds no funds of any user. It is for ~1sec that it charges the seller's escrow and sends the Sats to the buyer. Making this step atomic is a priority, yet unclear whether if possible at all: so it needs to be a mutually trusted node who does it atm.
We'll have to open PRs for Citadel, Embassy, mynode... I have the runCitadel ready, but I wasn't able to test it as I need to install the node.
https://github.com/reckless-satoshi/citadel-apps
thattheir (i.e., RoboSats's) webserver"