diff --git a/conductor/tracks/mma_agent_focus_ux_20260302/plan.md b/conductor/tracks/mma_agent_focus_ux_20260302/plan.md index 5dcba6a..d7cfb14 100644 --- a/conductor/tracks/mma_agent_focus_ux_20260302/plan.md +++ b/conductor/tracks/mma_agent_focus_ux_20260302/plan.md @@ -45,16 +45,11 @@ Focus: Update `_render_tool_calls_panel` to read dicts. No UI change — just fi --- -## Phase 3: Focus Agent UI + Filter Logic +## Phase 3: Focus Agent UI + Filter Logic [checkpoint: b30e563] Focus: Add the combo selector and filter the two log panels. -- [ ] Task 3.1: Add `ui_focus_agent` state var to `App.__init__`. - - **Location**: `gui_2.py` `__init__`, after `self.active_tier: str | None = None` (line ~283 — confirm with `grep -n "self.active_tier" gui_2.py`). - - **What**: Insert `self.ui_focus_agent: str | None = None`. - - **How**: Use `Edit`. - - **Verify**: `grep -n "ui_focus_agent" gui_2.py` returns exactly 1 hit (the new line, before Phase 3.3 adds more). - -- [ ] Task 3.2: Add Focus Agent selector widget in Operations Hub. +- [x] Task 3.1: Add `ui_focus_agent` state var to `App.__init__`. b30e563 +- [x] Task 3.2: Add Focus Agent selector widget in Operations Hub. b30e563 - **Location**: `gui_2.py` `_gui_func`, Operations Hub block (line ~1774). Confirm with `get_file_slice(1774, 1792)`. Current content: ```python if imgui.begin_tab_bar("OperationsTabs"): @@ -80,7 +75,7 @@ Focus: Add the combo selector and filter the two log panels. - **Note**: Tier 1 omitted — Tier 1 (Claude Code) never calls `ai_client.send()`, so it produces no comms entries. - **How**: Use `Edit`. -- [ ] Task 3.3: Add filter logic to `_render_comms_history_panel`. +- [x] Task 3.3: Add filter logic to `_render_comms_history_panel`. b30e563 - **Location**: `gui_2.py` `_render_comms_history_panel` (after bleed cleanup, line ~3400). Confirm with `py_get_definition`. - **What**: After the `log_to_render = self.prior_session_entries if self.is_viewing_prior_session else list(self._comms_log)` line, add: ```python @@ -96,7 +91,7 @@ Focus: Add the combo selector and filter the two log panels. Insert this after the `imgui.text_colored(C_LBL, f"{entry.get('provider', '?')}/{entry.get('model', '?')}")` line. - **How**: Use `Edit` for each insertion. -- [ ] Task 3.4: Add filter logic to `_render_tool_calls_panel`. +- [x] Task 3.4: Add filter logic to `_render_tool_calls_panel`. b30e563 - **Location**: `gui_2.py:2989`. Confirm with `get_file_slice(2989, 3000)`. - **What**: After `imgui.begin_child("scroll_area")` + clipper setup, change the render source: - Replace `clipper.begin(len(self._tool_log))` with a pre-filtered list: @@ -109,11 +104,11 @@ Focus: Add the combo selector and filter the two log panels. - Inside the loop use `tool_log_filtered[i_minus_one]` instead of `self._tool_log[i_minus_one]`. - **How**: Use `Edit`. -- [ ] Task 3.5: Write tests for Phase 3. +- [x] Task 3.5: Write tests for Phase 3. 6 tests, 18/18 passed. b30e563 - Test that `ui_focus_agent = "Tier 3"` filters out entries with `source_tier = "Tier 2"`. - Run `uv run pytest tests/ -x -q`. -- [ ] Task 3.6: Conductor — User Manual Verification +- [x] Task 3.6: Conductor — User Manual Verification. UI confirmed by user. b30e563 - Launch app. Open Operations Hub. - Confirm "Focus Agent:" combo appears above tabs with options: All, Tier 2, Tier 3, Tier 4. - With "All" selected: all entries show with `[main]` or `[Tier N]` labels in comms history.