chore(mma): Checkpoint progress on visual simulation and UI refresh before sub-agent delegation
This commit is contained in:
66
gui_2.py
66
gui_2.py
@@ -896,6 +896,8 @@ class App:
|
||||
user_data = task.get("user_data")
|
||||
if item == "btn_project_new_automated":
|
||||
self._cb_new_project_automated(user_data)
|
||||
elif item == "btn_mma_load_track":
|
||||
self._cb_load_track(user_data)
|
||||
elif item in self._clickable_actions:
|
||||
# Check if it's a method that accepts user_data
|
||||
import inspect
|
||||
@@ -1961,11 +1963,36 @@ class App:
|
||||
|
||||
def _cb_accept_tracks(self) -> None:
|
||||
def _bg_task():
|
||||
for track_data in self.proposed_tracks:
|
||||
self._start_track_logic(track_data)
|
||||
# Generate skeletons once
|
||||
self.ai_status = "Phase 2: Generating skeletons for all tracks..."
|
||||
parser = ASTParser(language="python")
|
||||
generated_skeletons = ""
|
||||
try:
|
||||
for i, file_path in enumerate(self.files):
|
||||
try:
|
||||
self.ai_status = f"Phase 2: Scanning files ({i+1}/{len(self.files)})..."
|
||||
abs_path = Path(self.ui_files_base_dir) / file_path
|
||||
if abs_path.exists() and abs_path.suffix == ".py":
|
||||
with open(abs_path, "r", encoding="utf-8") as f:
|
||||
code = f.read()
|
||||
generated_skeletons += f"\\nFile: {file_path}\\n{parser.get_skeleton(code)}\\n"
|
||||
except Exception as e:
|
||||
print(f"Error parsing skeleton for {file_path}: {e}")
|
||||
except Exception as e:
|
||||
self.ai_status = f"Error generating skeletons: {e}"
|
||||
print(f"Error generating skeletons: {e}")
|
||||
return # Exit if skeleton generation fails
|
||||
|
||||
# Now loop through tracks and call _start_track_logic with generated skeletons
|
||||
total_tracks = len(self.proposed_tracks)
|
||||
for i, track_data in enumerate(self.proposed_tracks):
|
||||
title = track_data.get("title") or track_data.get("goal", "Untitled Track")
|
||||
self.ai_status = f"Processing track {i+1} of {total_tracks}: '{title}'..."
|
||||
self._start_track_logic(track_data, skeletons_str=generated_skeletons) # Pass skeletons
|
||||
|
||||
with self._pending_gui_tasks_lock:
|
||||
self._pending_gui_tasks.append({'action': 'refresh_from_project'}) # Ensure UI refresh after tracks are started
|
||||
self.ai_status = "Tracks accepted and execution started."
|
||||
self.ai_status = f"All {total_tracks} tracks accepted and execution started."
|
||||
threading.Thread(target=_bg_task, daemon=True).start()
|
||||
|
||||
def _cb_start_track(self, user_data: Any = None) -> None:
|
||||
@@ -1980,24 +2007,29 @@ class App:
|
||||
threading.Thread(target=lambda: self._start_track_logic(track_data), daemon=True).start()
|
||||
self.ai_status = f"Track '{title}' started."
|
||||
|
||||
def _start_track_logic(self, track_data: dict[str, Any]) -> None:
|
||||
def _start_track_logic(self, track_data: dict[str, Any], skeletons_str: str | None = None) -> None:
|
||||
try:
|
||||
goal = track_data.get("goal", "")
|
||||
title = track_data.get("title") or track_data.get("goal", "Untitled Track")
|
||||
self.ai_status = f"Phase 2: Generating tickets for {title}..."
|
||||
# 1. Get skeletons for context
|
||||
parser = ASTParser(language="python")
|
||||
skeletons = ""
|
||||
for i, file_path in enumerate(self.files):
|
||||
try:
|
||||
self.ai_status = f"Phase 2: Scanning files ({i+1}/{len(self.files)})..."
|
||||
abs_path = Path(self.ui_files_base_dir) / file_path
|
||||
if abs_path.exists() and abs_path.suffix == ".py":
|
||||
with open(abs_path, "r", encoding="utf-8") as f:
|
||||
code = f.read()
|
||||
skeletons += f"\nFile: {file_path}\n{parser.get_skeleton(code)}\n"
|
||||
except Exception as e:
|
||||
print(f"Error parsing skeleton for {file_path}: {e}")
|
||||
|
||||
skeletons = "" # Initialize skeletons variable
|
||||
if skeletons_str is None: # Only generate if not provided
|
||||
# 1. Get skeletons for context
|
||||
parser = ASTParser(language="python")
|
||||
for i, file_path in enumerate(self.files):
|
||||
try:
|
||||
self.ai_status = f"Phase 2: Scanning files ({i+1}/{len(self.files)})..."
|
||||
abs_path = Path(self.ui_files_base_dir) / file_path
|
||||
if abs_path.exists() and abs_path.suffix == ".py":
|
||||
with open(abs_path, "r", encoding="utf-8") as f:
|
||||
code = f.read()
|
||||
skeletons += f"\\nFile: {file_path}\\n{parser.get_skeleton(code)}\\n"
|
||||
except Exception as e:
|
||||
print(f"Error parsing skeleton for {file_path}: {e}")
|
||||
else:
|
||||
skeletons = skeletons_str # Use provided skeletons
|
||||
|
||||
self.ai_status = "Phase 2: Calling Tech Lead..."
|
||||
raw_tickets = conductor_tech_lead.generate_tickets(goal, skeletons)
|
||||
if not raw_tickets:
|
||||
|
||||
Reference in New Issue
Block a user