66"""
77
88import json
9- import logging
109import time
11- from typing import Optional
1210
1311from mcp_as_a_judge .db .conversation_history_service import ConversationHistoryService
12+ from mcp_as_a_judge .logging_config import get_logger
1413from mcp_as_a_judge .models .task_metadata import TaskMetadata , TaskState
1514
16- # Set up logger directly to avoid circular imports
17- logger = logging . getLogger (__name__ )
15+ # Set up logger using custom get_logger function
16+ logger = get_logger (__name__ )
1817
1918
2019async def create_new_coding_task (
@@ -40,7 +39,7 @@ async def create_new_coding_task(
4039 New TaskMetadata instance
4140 """
4241 logger .info (f"📝 Creating new coding task: { task_title } " )
43-
42+
4443 # Create new TaskMetadata with auto-generated UUID
4544 task_metadata = TaskMetadata (
4645 title = task_title ,
@@ -49,11 +48,11 @@ async def create_new_coding_task(
4948 state = TaskState .CREATED , # Default state for new tasks
5049 tags = tags ,
5150 )
52-
51+
5352 # Add initial requirements to history if provided
5453 if user_requirements :
5554 task_metadata .update_requirements (user_requirements , source = "initial" )
56-
55+
5756 logger .info (f"✅ Created new task metadata: { task_metadata .task_id } " )
5857 return task_metadata
5958
@@ -63,8 +62,8 @@ async def update_existing_coding_task(
6362 user_request : str ,
6463 task_title : str ,
6564 task_description : str ,
66- user_requirements : Optional [ str ] ,
67- state : Optional [ TaskState ] ,
65+ user_requirements : str | None ,
66+ state : TaskState | None ,
6867 tags : list [str ],
6968 conversation_service : ConversationHistoryService ,
7069) -> TaskMetadata :
@@ -88,46 +87,46 @@ async def update_existing_coding_task(
8887 ValueError: If task not found or invalid state transition
8988 """
9089 logger .info (f"📝 Updating existing coding task: { task_id } " )
91-
90+
9291 # Load existing task metadata from conversation history
9392 existing_metadata = await load_task_metadata_from_history (
9493 task_id = task_id ,
9594 conversation_service = conversation_service ,
9695 )
97-
96+
9897 if not existing_metadata :
9998 raise ValueError (f"Task not found: { task_id } " )
100-
99+
101100 # Update mutable fields
102101 existing_metadata .title = task_title
103102 existing_metadata .description = task_description
104103 existing_metadata .tags = tags
105104 existing_metadata .updated_at = int (time .time ())
106-
105+
107106 # Update requirements if provided
108107 if user_requirements is not None :
109108 existing_metadata .update_requirements (user_requirements , source = "update" )
110-
109+
111110 # Update state if provided (with validation)
112111 if state is not None :
113112 validate_state_transition (existing_metadata .state , state )
114113 existing_metadata .update_state (state )
115-
114+
116115 logger .info (f"✅ Updated task metadata: { task_id } " )
117116 return existing_metadata
118117
119118
120119async def load_task_metadata_from_history (
121120 task_id : str ,
122121 conversation_service : ConversationHistoryService ,
123- ) -> Optional [ TaskMetadata ] :
122+ ) -> TaskMetadata | None :
124123 """
125124 Load TaskMetadata from conversation history using task_id as primary key.
126-
125+
127126 Args:
128127 task_id: Task ID to load
129128 conversation_service: Conversation service
130-
129+
131130 Returns:
132131 TaskMetadata if found, None otherwise
133132 """
@@ -136,7 +135,7 @@ async def load_task_metadata_from_history(
136135 conversation_history = await conversation_service .get_conversation_history (
137136 session_id = task_id
138137 )
139-
138+
140139 # Look for the most recent task metadata record
141140 for record in reversed (conversation_history ):
142141 if record .source == "set_coding_task" and "task_metadata" in record .output :
@@ -145,9 +144,9 @@ async def load_task_metadata_from_history(
145144 if "current_task_metadata" in output_data :
146145 metadata_dict = output_data ["current_task_metadata" ]
147146 return TaskMetadata .model_validate (metadata_dict )
148-
147+
149148 return None
150-
149+
151150 except Exception as e :
152151 logger .warning (f"⚠️ Failed to load task metadata from history: { e } " )
153152 return None
@@ -161,7 +160,7 @@ async def save_task_metadata_to_history(
161160) -> None :
162161 """
163162 Save TaskMetadata to conversation history using task_id as primary key.
164-
163+
165164 Args:
166165 task_metadata: Task metadata to save
167166 user_request: Original user request
@@ -180,9 +179,9 @@ async def save_task_metadata_to_history(
180179 "timestamp" : int (time .time ()),
181180 }),
182181 )
183-
182+
184183 logger .info (f"💾 Saved task metadata to conversation history: { task_metadata .task_id } " )
185-
184+
186185 except Exception as e :
187186 logger .error (f"❌ Failed to save task metadata to history: { e } " )
188187 # Don't raise - this is not critical for tool operation
@@ -191,11 +190,11 @@ async def save_task_metadata_to_history(
191190def validate_state_transition (current_state : TaskState , new_state : TaskState ) -> None :
192191 """
193192 Validate that the state transition is allowed.
194-
193+
195194 Args:
196195 current_state: Current TaskState
197196 new_state: Requested new TaskState
198-
197+
199198 Raises:
200199 ValueError: If transition is not allowed
201200 """
@@ -210,7 +209,7 @@ def validate_state_transition(current_state: TaskState, new_state: TaskState) ->
210209 TaskState .BLOCKED : [TaskState .CREATED , TaskState .PLANNING , TaskState .PLAN_APPROVED , TaskState .IMPLEMENTING , TaskState .REVIEW_READY , TaskState .CANCELLED ],
211210 TaskState .CANCELLED : [], # No transitions from cancelled state
212211 }
213-
212+
214213 if new_state not in valid_transitions .get (current_state , []):
215214 raise ValueError (
216215 f"Invalid state transition: { current_state .value } → { new_state .value } . "
0 commit comments