voice: wire observer.start_listening to action queue + /api/voice/observer-actions
Promotes the Wave-2a observer.start_listening stub to an action-emit
pattern. handle_observer_start_listening now returns the public
{status,mode,note} shape plus an internal _observer_action sentinel that
dispatch_tool_call strips and enqueues onto a per-call_id
ObserverActionQueue (TTL 60s, cap 8, FIFO drop, drain-clears). New route
GET /api/voice/observer-actions drains the queue; lenient on
missing/blank/unknown call_id (always 200 empty) -- divergent by design
from nav-hints. No changes to the observer ingest pipeline; existing
/app/observer/ingest already accepts the planned iOS multipart shape
(compatibility verdict captured in docs/design/observer-actions.md).