7575
7676# Rebuild Pydantic models early to resolve forward references before tool registration
7777try :
78- from mcp_as_a_judge .models .enhanced_responses import rebuild_models
7978 from mcp_as_a_judge .models import rebuild_plan_approval_model
79+ from mcp_as_a_judge .models .enhanced_responses import rebuild_models
8080 rebuild_models ()
8181 rebuild_plan_approval_model ()
82- except Exception :
82+ except Exception as e :
8383 # Non-critical - server can still function without rebuilt models
84- pass
84+ import logging
85+ logging .debug (f"Server model rebuild failed (non-critical): { e } " )
8586initialize_llm_configuration ()
8687
8788config = load_config ()
@@ -427,10 +428,26 @@ async def request_plan_approval(
427428 )
428429
429430 if not task_metadata :
431+ # Create a minimal task metadata for error response
432+ from mcp_as_a_judge .models .task_metadata import TaskSize
433+ from mcp_as_a_judge .workflow .workflow_guidance import WorkflowGuidance
434+ error_task_metadata = TaskMetadata (
435+ title = "Error Task" ,
436+ description = "Task not found" ,
437+ task_size = TaskSize .M
438+ )
439+ error_guidance = WorkflowGuidance (
440+ next_tool = "set_coding_task" ,
441+ reasoning = "Task not found, need to create a new task" ,
442+ preparation_needed = ["Create a new task" ],
443+ guidance = "Call set_coding_task to create a new task"
444+ )
430445 return PlanApprovalResult (
431446 approved = False ,
432447 user_feedback = "Task not found. Please call set_coding_task first." ,
433- next_action = "Call set_coding_task to create a new task"
448+ next_action = "Call set_coding_task to create a new task" ,
449+ current_task_metadata = error_task_metadata ,
450+ workflow_guidance = error_guidance
434451 )
435452
436453 # Update task state to PLAN_PENDING_APPROVAL
@@ -454,25 +471,25 @@ async def request_plan_approval(
454471"""
455472
456473 if research_urls :
457- plan_presentation += f "\n ## Research Sources\n "
474+ plan_presentation += "\n ## Research Sources\n "
458475 for url in research_urls :
459476 plan_presentation += f"- { url } \n "
460477
461478 if problem_domain :
462479 plan_presentation += f"\n ## Problem Domain\n { problem_domain } \n "
463480
464481 if problem_non_goals :
465- plan_presentation += f "\n ## Non-Goals\n "
482+ plan_presentation += "\n ## Non-Goals\n "
466483 for goal in problem_non_goals :
467484 plan_presentation += f"- { goal } \n "
468485
469486 if library_plan :
470- plan_presentation += f "\n ## Library Plan\n "
487+ plan_presentation += "\n ## Library Plan\n "
471488 for lib in library_plan :
472489 plan_presentation += f"- **{ lib .get ('purpose' , 'Unknown' )} **: { lib .get ('selection' , 'Unknown' )} ({ lib .get ('source' , 'Unknown' )} )\n "
473490
474491 if internal_reuse_components :
475- plan_presentation += f "\n ## Internal Components to Reuse\n "
492+ plan_presentation += "\n ## Internal Components to Reuse\n "
476493 for comp in internal_reuse_components :
477494 plan_presentation += f"- **{ comp .get ('path' , 'Unknown' )} **: { comp .get ('purpose' , 'Unknown' )} \n "
478495
@@ -494,10 +511,18 @@ async def request_plan_approval(
494511 )
495512
496513 if not elicitation_result .success :
514+ error_guidance = WorkflowGuidance (
515+ next_tool = "request_plan_approval" ,
516+ reasoning = "Failed to get user input for plan approval" ,
517+ preparation_needed = ["Check elicitation system" , "Retry plan approval" ],
518+ guidance = "Retry plan approval or proceed without user input"
519+ )
497520 return PlanApprovalResult (
498521 approved = False ,
499522 user_feedback = "Failed to get user input: " + elicitation_result .message ,
500- next_action = "Retry plan approval or proceed without user input"
523+ next_action = "Retry plan approval or proceed without user input" ,
524+ current_task_metadata = task_metadata ,
525+ workflow_guidance = error_guidance
501526 )
502527
503528 # Process user response
@@ -665,15 +690,17 @@ async def request_plan_approval(
665690
666691 # Try to get task metadata for error response
667692 try :
668- from mcp_as_a_judge .tasks .manager import load_task_metadata_from_history
669693 from mcp_as_a_judge .models .task_metadata import TaskSize
670- error_task_metadata = await load_task_metadata_from_history (task_id , conversation_service )
671- if not error_task_metadata :
694+ from mcp_as_a_judge .tasks .manager import load_task_metadata_from_history
695+ error_task_metadata_maybe = await load_task_metadata_from_history (task_id , conversation_service )
696+ if not error_task_metadata_maybe :
672697 error_task_metadata = TaskMetadata (
673698 title = "Error Task" ,
674699 description = "Error occurred during plan approval" ,
675700 task_size = TaskSize .M
676701 )
702+ else :
703+ error_task_metadata = error_task_metadata_maybe
677704 except Exception :
678705 from mcp_as_a_judge .models .task_metadata import TaskSize
679706 error_task_metadata = TaskMetadata (
0 commit comments