chore(mma): Deterministic track IDs, worker spawn hooks, and improved simulation reliability

This commit is contained in:
2026-02-28 22:09:18 -05:00
parent cb0e14e1c0
commit 37df4c8003
8 changed files with 140 additions and 83 deletions

View File

@@ -387,6 +387,8 @@ class App:
'btn_mma_plan_epic': self._cb_plan_epic,
'btn_mma_accept_tracks': self._cb_accept_tracks,
'btn_mma_start_track': self._cb_start_track,
'btn_approve_tool': self._handle_approve_tool,
'btn_approve_spawn': self._handle_approve_spawn,
}
self._predefined_callbacks: dict[str, Callable[..., Any]] = {
'_test_callback_func_write_to_file': self._test_callback_func_write_to_file
@@ -886,6 +888,8 @@ class App:
if item in self._settable_fields:
attr_name = self._settable_fields[item]
setattr(self, attr_name, value)
if item == "current_provider" or item == "current_model":
ai_client.set_provider(self.current_provider, self.current_model)
if item == "gcli_path":
if not ai_client._gemini_cli_adapter:
ai_client._gemini_cli_adapter = ai_client.GeminiCliAdapter(binary_path=value)
@@ -984,6 +988,22 @@ class App:
else:
print("[DEBUG] No pending dialog to reject")
def _handle_approve_tool(self) -> None:
"""Logic for approving a pending tool execution via API hooks."""
print("[DEBUG] _handle_approve_tool called")
if self._pending_ask:
self._handle_approve_ask()
else:
print("[DEBUG] No pending tool approval found")
def _handle_approve_spawn(self) -> None:
"""Logic for approving a pending sub-agent spawn via API hooks."""
print("[DEBUG] _handle_approve_spawn called")
if self._pending_mma_spawn:
self._handle_mma_respond(approved=True, prompt=self._mma_spawn_prompt, context_md=self._mma_spawn_context)
else:
print("[DEBUG] No pending spawn approval found")
def _handle_mma_respond(self, approved: bool, payload: str = None, abort: bool = False, prompt: str = None, context_md: str = None) -> None:
if self._pending_mma_approval:
dlg = self._pending_mma_approval.get("dialog_container", [None])[0]
@@ -2054,7 +2074,7 @@ class App:
step_mode=t_data.get("step_mode", False)
)
tickets.append(ticket)
track_id = f"track_{uuid.uuid4().hex[:8]}"
track_id = f"track_{uuid.uuid5(uuid.NAMESPACE_DNS, f'{self.active_project_path}_{title}_{now.isoformat()}').hex[:12]}"
track = Track(id=track_id, description=title, tickets=tickets)
# Initialize track state in the filesystem
from models import TrackState, Metadata