From 414379da4fdec43025f31591259a41f82ebccda2 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Thu, 12 Mar 2026 20:54:47 -0400 Subject: [PATCH] more fixes --- conductor/product.md | 2 +- src/app_controller.py | 2 ++ src/gui_2.py | 19 ++++++++++++++++--- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/conductor/product.md b/conductor/product.md index a8908d6..37bbcfd 100644 --- a/conductor/product.md +++ b/conductor/product.md @@ -49,7 +49,7 @@ For deep implementation details when planning or implementing tracks, consult `d - **Multi-Server Lifecycle Management:** Orchestrates multiple concurrent MCP server sessions (Stdio for local subprocesses and SSE for remote servers). - **Flexible Configuration:** Supports global (`config.toml`) and project-specific (`manual_slop.toml`) paths for `mcp_config.json` (standard MCP configuration format). - **Auto-Start & Discovery:** Automatically initializes configured servers on project load and dynamically aggregates their tools into the agent's capability declarations. - - **Dedicated Operations UI:** Features a new **External Tools** section within the Operations Hub for monitoring server status (idle, starting, running, error) and browsing discovered tool schemas. + - **Dedicated Operations UI:** Features a new **External Tools** section within the Operations Hub for monitoring server status (idle, starting, running, error) and browsing discovered tool schemas. Supports **Pop-Out Panel functionality**, allowing the External Tools interface to be detached into a standalone window for optimized multi-monitor workflows. - **Strict HITL Safety:** All external tool calls are intercepted and require explicit human-in-the-loop approval via the standard confirmation dialog before execution. - **High-Fidelity Selectable UI:** Most read-only labels and logs across the interface (including discussion history, comms payloads, tool outputs, and telemetry metrics) are now implemented as selectable text fields. This enables standard OS-level text selection and copying (Ctrl+C) while maintaining a high-density, non-editable aesthetic. - **High-Fidelity UI Rendering:** Employs advanced 3x font oversampling and sub-pixel positioning to ensure crisp, high-clarity text rendering across all resolutions, enhancing readability for dense logs and complex code fragments. diff --git a/src/app_controller.py b/src/app_controller.py index 87433b7..8188450 100644 --- a/src/app_controller.py +++ b/src/app_controller.py @@ -851,6 +851,7 @@ class AppController: self.ui_separate_tier2 = False self.ui_separate_tier3 = False self.ui_separate_tier4 = False + self.ui_separate_external_tools = False self.config = models.load_config() path_info = paths.get_full_path_info() self.ui_logs_dir = str(path_info['logs_dir']['path']) @@ -2346,6 +2347,7 @@ class AppController: "separate_message_panel": getattr(self, "ui_separate_message_panel", False), "separate_response_panel": getattr(self, "ui_separate_response_panel", False), "separate_tool_calls_panel": getattr(self, "ui_separate_tool_calls_panel", False), + "separate_external_tools": getattr(self, "ui_separate_external_tools", False), "separate_task_dag": self.ui_separate_task_dag, "separate_usage_analytics": self.ui_separate_usage_analytics, "separate_tier1": self.ui_separate_tier1, diff --git a/src/gui_2.py b/src/gui_2.py index a32d98b..1825d8d 100644 --- a/src/gui_2.py +++ b/src/gui_2.py @@ -178,11 +178,13 @@ class App: self.ui_separate_tier2 = gui_cfg.get("separate_tier2", False) self.ui_separate_tier3 = gui_cfg.get("separate_tier3", False) self.ui_separate_tier4 = gui_cfg.get("separate_tier4", False) + self.ui_separate_external_tools = gui_cfg.get('separate_external_tools', False) self.show_windows.setdefault("Usage Analytics", False) self.show_windows.setdefault("Tier 1: Strategy", False) self.show_windows.setdefault("Tier 2: Tech Lead", False) self.show_windows.setdefault("Tier 3: Workers", False) self.show_windows.setdefault("Tier 4: QA", False) + self.show_windows.setdefault('External Tools', False) self.ui_multi_viewport = gui_cfg.get("multi_viewport", False) self.layout_presets = self.config.get("layout_presets", {}) self._new_preset_name = "" @@ -597,6 +599,9 @@ class App: imgui.same_line() ch2, self.ui_separate_usage_analytics = imgui.checkbox("Pop Out Usage Analytics", self.ui_separate_usage_analytics) if ch2: self.show_windows["Usage Analytics"] = self.ui_separate_usage_analytics + imgui.same_line() + ch3, self.ui_separate_external_tools = imgui.checkbox('Pop Out External Tools', self.ui_separate_external_tools) + if ch3: self.show_windows['External Tools'] = self.ui_separate_external_tools imgui.pop_style_var() show_tc_tab = not self.ui_separate_tool_calls_panel @@ -614,9 +619,10 @@ class App: if imgui.begin_tab_item("Usage Analytics")[0]: self._render_usage_analytics_panel() imgui.end_tab_item() - if imgui.begin_tab_item("External Tools")[0]: - self._render_external_tools_panel() - imgui.end_tab_item() + if not self.ui_separate_external_tools: + if imgui.begin_tab_item("External Tools")[0]: + self._render_external_tools_panel() + imgui.end_tab_item() imgui.end_tab_bar() imgui.end() @@ -641,6 +647,13 @@ class App: self._render_tool_calls_panel() imgui.end() + if self.ui_separate_external_tools and self.show_windows.get('External Tools', False): + exp, opened = imgui.begin('External Tools', self.show_windows['External Tools']) + self.show_windows['External Tools'] = bool(opened) + if exp: + self._render_external_tools_panel() + imgui.end() + if self.show_windows.get("Log Management", False): if self.perf_profiling_enabled: self.perf_monitor.start_component("_render_log_management") self._render_log_management()