6a306f310d
Resolves KI-009. Both loops now accept a threading.Event that, when set, causes immediate clean exit with return value "stopped". The check is ordered before max_iterations so a signal always wins. New tests: - test_run_loop_exits_on_stop_event: event set before loop — 0 iterations - test_run_loop_respects_stop_event_between_iterations: event set mid-run - test_run_agent_loop_exits_on_stop_event: same for run_agent_loop Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>