add ObserverClient, convert linux and tmux observers to HTTP upload
Phase 3 of observer decoupling: replace direct journal writes and
Callosum events with HTTP upload through a shared ObserverClient.
Both observers now upload segments to the Convey ingest server and
relay status events through the event endpoint. CallosumConnection,
update_stream(), and write_segment_stream() removed from both
observers — the server handles stream identity and event emission.
Includes formatting fixes for pre-existing issues in remote_cli.py
and gemini.py.