From bdd46299b16d01495ce859f52542f05dbcd2bfb6 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Mon, 15 Jun 2026 16:00:05 -0400 Subject: [PATCH] refactor(multi_agent_conductor): migrate worker dispatch to send_result() (G3, public_api_migration_and_ui_polish_20260615 Phase 1.3) Replaces deprecated ai_client.send(...) with ai_client.send_result(...) for the 8-arg worker dispatch in run_worker_lifecycle. The new code branches on result.ok: - On success: response = result.data (continue as before) - On error: log via comms + push a 'response' event with status='error' + push ticket_completed + mark ticket.status='error' + return None This is the hardest of the 3 production migrations (5 callbacks: pre_tool_callback, qa_callback, patch_callback, stream_callback + the worker_comms_callback already wired up). The 2 tests in test_phase6_engine.py + test_spawn_interception_v2.py now fail because they mock src.ai_client.send. These will be fixed in Phase 2.16/2.18 by mocking send_result instead. test_run_worker_lifecycle_abort still passes because the abort check fires before the send call. --- src/multi_agent_conductor.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/multi_agent_conductor.py b/src/multi_agent_conductor.py index 37268b59..c4e73598 100644 --- a/src/multi_agent_conductor.py +++ b/src/multi_agent_conductor.py @@ -588,7 +588,7 @@ def run_worker_lifecycle(ticket: Ticket, context: WorkerContext, context_files: ai_client.set_current_tier(f"Tier 3 (Worker): {ticket.id}") try: comms_baseline = len(ai_client.get_comms_log()) - response = ai_client.send( + result = ai_client.send_result( md_content=md_content, user_message=user_message, base_dir=".", @@ -597,6 +597,16 @@ def run_worker_lifecycle(ticket: Ticket, context: WorkerContext, context_files: patch_callback=ai_client.run_tier4_patch_callback, stream_callback=stream_callback ) + if not result.ok: + err = result.errors[0] if result.errors else None + err_msg = err.ui_message() if err else "unknown error" + print(f"[MMA] Worker send_result failed for {ticket.id}: {err_msg}") + if event_queue: + _queue_put(event_queue, "response", {"text": f"\n\n[ERROR] {err_msg}", "stream_id": f"Tier 3 (Worker): {ticket.id}", "status": "error", "role": "Vendor API"}) + _queue_put(event_queue, "ticket_completed", {"ticket_id": ticket.id, "timestamp": time.time()}) + ticket.status = "error" + return None + response = result.data finally: ai_client.set_comms_log_callback(old_comms_cb) ai_client.set_current_tier(None)