From 7d521239acdc692e2184af419fc5b8579ca384e2 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Thu, 26 Feb 2026 09:12:58 -0500 Subject: [PATCH] feat(gui): Add Log Management panel with manual whitelisting --- gui_2.py | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/gui_2.py b/gui_2.py index 8f600bb..896cea0 100644 --- a/gui_2.py +++ b/gui_2.py @@ -181,6 +181,7 @@ class App: "Discussion Hub": True, "Operations Hub": True, "Theme": True, + "Log Management": False, "Diagnostics": False, } saved = self.config.get("gui", {}).get("show_windows", {}) @@ -1407,6 +1408,9 @@ class App: imgui.end_tab_bar() imgui.end() + if self.show_windows.get("Log Management", False): + self._render_log_management() + if self.show_windows["Diagnostics"]: exp, self.show_windows["Diagnostics"] = imgui.begin("Diagnostics", self.show_windows["Diagnostics"]) if exp: @@ -1712,6 +1716,75 @@ class App: if ch: self.ui_agent_tools[t_name] = val + def _render_log_management(self): + exp, self.show_windows["Log Management"] = imgui.begin("Log Management", self.show_windows["Log Management"]) + if not exp: + imgui.end() + return + + registry = LogRegistry("logs/log_registry.toml") + sessions = registry.data + + if imgui.begin_table("sessions_table", 7, imgui.TableFlags_.borders | imgui.TableFlags_.row_bg | imgui.TableFlags_.resizable): + imgui.table_setup_column("Session ID") + imgui.table_setup_column("Start Time") + imgui.table_setup_column("Star") + imgui.table_setup_column("Reason") + imgui.table_setup_column("Size (KB)") + imgui.table_setup_column("Msgs") + imgui.table_setup_column("Actions") + imgui.table_headers_row() + + for session_id, s_data in sessions.items(): + imgui.table_next_row() + imgui.table_next_column() + imgui.text(session_id) + + imgui.table_next_column() + imgui.text(s_data.get("start_time", "")) + + imgui.table_next_column() + whitelisted = s_data.get("whitelisted", False) + if whitelisted: + imgui.text_colored(vec4(255, 215, 0), "YES") + else: + imgui.text("NO") + + metadata = s_data.get("metadata") or {} + + imgui.table_next_column() + imgui.text(metadata.get("reason", "")) + + imgui.table_next_column() + imgui.text(str(metadata.get("size_kb", ""))) + + imgui.table_next_column() + imgui.text(str(metadata.get("message_count", ""))) + + imgui.table_next_column() + if whitelisted: + if imgui.button(f"Unstar##{session_id}"): + registry.update_session_metadata( + session_id, + message_count=metadata.get("message_count"), + errors=metadata.get("errors"), + size_kb=metadata.get("size_kb"), + whitelisted=False, + reason=metadata.get("reason") + ) + else: + if imgui.button(f"Star##{session_id}"): + registry.update_session_metadata( + session_id, + message_count=metadata.get("message_count"), + errors=metadata.get("errors"), + size_kb=metadata.get("size_kb"), + whitelisted=True, + reason="Manually whitelisted" + ) + imgui.end_table() + imgui.end() + def _render_files_panel(self): imgui.text("Base Dir") ch, self.ui_files_base_dir = imgui.input_text("##f_base", self.ui_files_base_dir)