Switch agent completion tracking from polling to event-based
Replace file-based polling in wait_for_agents() with Callosum event
listening for cortex.finish and cortex.error events. This eliminates
the 1-second polling loop in favor of a fully event-driven approach.
Key changes:
- Rename get_agent_status() to get_agent_log_status() to clarify it's
file-based
- Add new wait_for_agents() to cortex_client.py using CallosumConnection
- Remove old polling-based wait_for_agents() from dream.py
- Initial file check as shortcut, final file check at timeout as backstop
- Log INFO message when event is missed but file check recovers
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>