The WebChat API runs shell, touches the filesystem and spends model tokens.
Bound to 127.0.0.1 that is safe; with /webchat lan on, a container or a cloud
host it was fully open with no credential. A before_request gate now covers
every endpoint, so routes added later are protected by default.
DULUS_WEBCHAT_TOKEN sets the secret (auto-generated and printed once if unset).
DULUS_WEBCHAT_AUTH: auto (default, on once exposed) | always | off.
Accepts X-Dulus-Token, Authorization: Bearer, or ?token=.
/api/health and the static UI stay reachable; loopback behaviour is unchanged
except that cross-site browser requests are now refused.