diff --git a/config.toml b/config.toml index 3921e96..7c8bfee 100644 --- a/config.toml +++ b/config.toml @@ -24,28 +24,28 @@ separate_response_panel = false separate_tool_calls_panel = false bg_shader_enabled = true crt_filter_enabled = false -separate_task_dag = false -separate_usage_analytics = false +separate_task_dag = true +separate_usage_analytics = true [gui.show_windows] "Context Hub" = true "Files & Media" = true "AI Settings" = true "MMA Dashboard" = true -"Task DAG" = false -"Usage Analytics" = false +"Task DAG" = true +"Usage Analytics" = true "Tier 1: Strategy" = true "Tier 2: Tech Lead" = true "Tier 3: Workers" = true "Tier 4: QA" = true "Discussion Hub" = true "Operations Hub" = true -Message = false -Response = false -"Tool Calls" = false +Message = true +Response = true +"Tool Calls" = true Theme = true "Log Management" = true -Diagnostics = true +Diagnostics = false [theme] palette = "Nord Dark" diff --git a/manualslop_layout.ini b/manualslop_layout.ini index c274e87..92f508b 100644 --- a/manualslop_layout.ini +++ b/manualslop_layout.ini @@ -73,8 +73,8 @@ Collapsed=0 DockId=0xAFC85805,2 [Window][Theme] -Pos=0,1164 -Size=760,973 +Pos=0,1079 +Size=629,1058 Collapsed=0 DockId=0x00000002,2 @@ -84,14 +84,14 @@ Size=900,700 Collapsed=0 [Window][Diagnostics] -Pos=2719,28 -Size=1121,1686 +Pos=2833,28 +Size=1007,1695 Collapsed=0 DockId=0x0000000C,2 [Window][Context Hub] -Pos=0,1164 -Size=760,973 +Pos=0,1079 +Size=629,1058 Collapsed=0 DockId=0x00000002,1 @@ -102,26 +102,26 @@ Collapsed=0 DockId=0x0000000D,0 [Window][Discussion Hub] -Pos=1606,28 -Size=1111,2109 +Pos=1701,28 +Size=1130,2109 Collapsed=0 DockId=0x00000013,0 [Window][Operations Hub] -Pos=762,28 -Size=842,2109 +Pos=631,28 +Size=1068,2109 Collapsed=0 DockId=0x00000012,0 [Window][Files & Media] -Pos=0,1164 -Size=760,973 +Pos=0,1079 +Size=629,1058 Collapsed=0 DockId=0x00000002,0 [Window][AI Settings] Pos=0,28 -Size=760,1134 +Size=629,1049 Collapsed=0 DockId=0x00000001,0 @@ -131,14 +131,14 @@ Size=416,325 Collapsed=0 [Window][MMA Dashboard] -Pos=2719,28 -Size=1121,1686 +Pos=2833,28 +Size=1007,1695 Collapsed=0 DockId=0x0000000C,0 [Window][Log Management] -Pos=2719,28 -Size=1121,1686 +Pos=2833,28 +Size=1007,1695 Collapsed=0 DockId=0x0000000C,1 @@ -148,26 +148,26 @@ Size=262,209 Collapsed=0 [Window][Tier 1: Strategy] -Pos=2719,1716 -Size=1121,421 +Pos=2833,1725 +Size=1007,412 Collapsed=0 DockId=0x0000000F,0 [Window][Tier 2: Tech Lead] -Pos=2719,1716 -Size=1121,421 +Pos=2833,1725 +Size=1007,412 Collapsed=0 DockId=0x0000000F,1 [Window][Tier 4: QA] -Pos=2719,1716 -Size=1121,421 +Pos=2833,1725 +Size=1007,412 Collapsed=0 DockId=0x0000000F,2 [Window][Tier 3: Workers] -Pos=762,28 -Size=842,2109 +Pos=631,28 +Size=1068,2109 Collapsed=0 DockId=0x00000012,1 @@ -331,6 +331,11 @@ Pos=1461,823 Size=1190,872 Collapsed=0 +[Window][Usage Analytics] +Pos=1636,680 +Size=644,666 +Collapsed=0 + [Table][0xFB6E3870,4] RefScale=13 Column 0 Width=80 @@ -420,18 +425,18 @@ DockNode ID=0x00000008 Pos=3125,170 Size=593,1157 Split=Y DockNode ID=0x00000009 Parent=0x00000008 SizeRef=1029,147 Selected=0x0469CA7A DockNode ID=0x0000000A Parent=0x00000008 SizeRef=1029,145 Selected=0xDF822E02 DockSpace ID=0xAFC85805 Window=0x079D3A04 Pos=0,28 Size=3840,2109 Split=X - DockNode ID=0x00000003 Parent=0xAFC85805 SizeRef=2717,1183 Split=X + DockNode ID=0x00000003 Parent=0xAFC85805 SizeRef=2831,1183 Split=X DockNode ID=0x0000000B Parent=0x00000003 SizeRef=404,1186 Split=X Selected=0xF4139CA2 - DockNode ID=0x00000007 Parent=0x0000000B SizeRef=760,858 Split=Y Selected=0x8CA2375C - DockNode ID=0x00000001 Parent=0x00000007 SizeRef=824,1134 CentralNode=1 Selected=0x7BD57D6A - DockNode ID=0x00000002 Parent=0x00000007 SizeRef=824,973 Selected=0x1DCB2623 - DockNode ID=0x0000000E Parent=0x0000000B SizeRef=1955,858 Split=X Selected=0x418C7449 - DockNode ID=0x00000012 Parent=0x0000000E SizeRef=842,402 Selected=0x418C7449 - DockNode ID=0x00000013 Parent=0x0000000E SizeRef=1111,402 Selected=0x6F2B5B04 + DockNode ID=0x00000007 Parent=0x0000000B SizeRef=629,858 Split=Y Selected=0x8CA2375C + DockNode ID=0x00000001 Parent=0x00000007 SizeRef=824,1049 CentralNode=1 Selected=0x7BD57D6A + DockNode ID=0x00000002 Parent=0x00000007 SizeRef=824,1058 Selected=0x1DCB2623 + DockNode ID=0x0000000E Parent=0x0000000B SizeRef=2200,858 Split=X Selected=0x418C7449 + DockNode ID=0x00000012 Parent=0x0000000E SizeRef=1068,402 Selected=0x418C7449 + DockNode ID=0x00000013 Parent=0x0000000E SizeRef=1130,402 Selected=0x6F2B5B04 DockNode ID=0x0000000D Parent=0x00000003 SizeRef=435,1186 Selected=0x363E93D6 - DockNode ID=0x00000004 Parent=0xAFC85805 SizeRef=1121,1183 Split=Y Selected=0x3AEC3498 - DockNode ID=0x0000000C Parent=0x00000004 SizeRef=1074,1681 Selected=0x3AEC3498 - DockNode ID=0x0000000F Parent=0x00000004 SizeRef=1074,420 Selected=0xBB346584 + DockNode ID=0x00000004 Parent=0xAFC85805 SizeRef=1007,1183 Split=Y Selected=0x3AEC3498 + DockNode ID=0x0000000C Parent=0x00000004 SizeRef=1074,1695 Selected=0x3AEC3498 + DockNode ID=0x0000000F Parent=0x00000004 SizeRef=1074,412 Selected=0xBB346584 ;;;<<>>;;; ;;;<<>>;;; diff --git a/scripts/tasks/popout_tiers.toml b/scripts/tasks/popout_tiers.toml new file mode 100644 index 0000000..37b1ef2 --- /dev/null +++ b/scripts/tasks/popout_tiers.toml @@ -0,0 +1,12 @@ +prompt = """ +In src/gui_2.py: +1. In '__init__', initialize 'self.ui_separate_tier1' through 'self.ui_separate_tier4' from 'gui_cfg'. +2. In '_gui_func', replace the existing Tier window rendering (around line 480) with logic that checks 'self.ui_separate_tierN' and 'self.show_windows.get("Tier N", False)'. +3. At the end of '_render_mma_dashboard', add a 'Agent Streams' tab bar. +4. For each Tier (1-4), add a tab. +5. Inside each tab: + - Add a 'Pop Out Tier [N]' checkbox. If changed, update 'self.show_windows["Tier [N]"]'. + - If 'not self.ui_separate_tierN', call 'self._render_tier_stream_panel("Tier N", "Display Name")'. + - If 'self.ui_separate_tierN', show 'imgui.text_disabled("Tier [N] stream is detached.")'. +Use 1-space indentation. +""" diff --git a/src/app_controller.py b/src/app_controller.py index ef85f38..c475cba 100644 --- a/src/app_controller.py +++ b/src/app_controller.py @@ -345,7 +345,11 @@ class AppController: '_editing_preset_scope': '_editing_preset_scope', 'show_windows': 'show_windows', 'ui_separate_task_dag': 'ui_separate_task_dag', - 'ui_separate_usage_analytics': 'ui_separate_usage_analytics' + 'ui_separate_usage_analytics': 'ui_separate_usage_analytics', + 'ui_separate_tier1': 'ui_separate_tier1', + 'ui_separate_tier2': 'ui_separate_tier2', + 'ui_separate_tier3': 'ui_separate_tier3', + 'ui_separate_tier4': 'ui_separate_tier4' } self._gettable_fields = dict(self._settable_fields) self._gettable_fields.update({ @@ -384,7 +388,11 @@ class AppController: '_editing_preset_max_output_tokens': '_editing_preset_max_output_tokens', '_editing_preset_scope': '_editing_preset_scope', 'ui_separate_task_dag': 'ui_separate_task_dag', - 'ui_separate_usage_analytics': 'ui_separate_usage_analytics' + 'ui_separate_usage_analytics': 'ui_separate_usage_analytics', + 'ui_separate_tier1': 'ui_separate_tier1', + 'ui_separate_tier2': 'ui_separate_tier2', + 'ui_separate_tier3': 'ui_separate_tier3', + 'ui_separate_tier4': 'ui_separate_tier4' }) self.perf_monitor = performance_monitor.get_monitor() self._perf_profiling_enabled = False @@ -786,6 +794,10 @@ class AppController: """Initializes the application state from configurations.""" self.ui_separate_task_dag = False self.ui_separate_usage_analytics = False + self.ui_separate_tier1 = False + self.ui_separate_tier2 = False + self.ui_separate_tier3 = False + self.ui_separate_tier4 = False self.config = models.load_config() theme.load_from_config(self.config) ai_cfg = self.config.get("ai", {}) @@ -846,6 +858,10 @@ class AppController: "MMA Dashboard": True, "Task DAG": False, "Usage Analytics": False, + "Tier 1": False, + "Tier 2": False, + "Tier 3": False, + "Tier 4": False, "Tier 1: Strategy": True, "Tier 2: Tech Lead": True, "Tier 3: Workers": True, @@ -2189,6 +2205,10 @@ class AppController: "separate_tool_calls_panel": getattr(self, "ui_separate_tool_calls_panel", False), "separate_task_dag": self.ui_separate_task_dag, "separate_usage_analytics": self.ui_separate_usage_analytics, + "separate_tier1": self.ui_separate_tier1, + "separate_tier2": self.ui_separate_tier2, + "separate_tier3": self.ui_separate_tier3, + "separate_tier4": self.ui_separate_tier4, "bg_shader_enabled": bg_shader.get_bg().enabled }) self.config["gui"] = gui_cfg diff --git a/src/gui_2.py b/src/gui_2.py index a64e273..5784bd6 100644 --- a/src/gui_2.py +++ b/src/gui_2.py @@ -128,7 +128,15 @@ class App: self.ui_separate_tool_calls_panel = gui_cfg.get("separate_tool_calls_panel", False) self.ui_separate_task_dag = gui_cfg.get("separate_task_dag", False) self.ui_separate_usage_analytics = gui_cfg.get("separate_usage_analytics", False) + self.ui_separate_tier1 = gui_cfg.get("separate_tier1", False) + 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.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.ui_multi_viewport = gui_cfg.get("multi_viewport", False) self.layout_presets = self.config.get("layout_presets", {}) self._new_preset_name = "" @@ -438,25 +446,25 @@ class App: if exp: self._render_task_dag_panel() imgui.end() - if self.show_windows.get("Tier 1: Strategy", False): + if self.ui_separate_tier1 and self.show_windows.get("Tier 1: Strategy", False): exp, opened = imgui.begin("Tier 1: Strategy", self.show_windows["Tier 1: Strategy"]) self.show_windows["Tier 1: Strategy"] = bool(opened) if exp: self._render_tier_stream_panel("Tier 1", "Tier 1") imgui.end() - if self.show_windows.get("Tier 2: Tech Lead", False): + if self.ui_separate_tier2 and self.show_windows.get("Tier 2: Tech Lead", False): exp, opened = imgui.begin("Tier 2: Tech Lead", self.show_windows["Tier 2: Tech Lead"]) self.show_windows["Tier 2: Tech Lead"] = bool(opened) if exp: self._render_tier_stream_panel("Tier 2", "Tier 2 (Tech Lead)") imgui.end() - if self.show_windows.get("Tier 3: Workers", False): + if self.ui_separate_tier3 and self.show_windows.get("Tier 3: Workers", False): exp, opened = imgui.begin("Tier 3: Workers", self.show_windows["Tier 3: Workers"]) self.show_windows["Tier 3: Workers"] = bool(opened) if exp: self._render_tier_stream_panel("Tier 3", None) imgui.end() - if self.show_windows.get("Tier 4: QA", False): + if self.ui_separate_tier4 and self.show_windows.get("Tier 4: QA", False): exp, opened = imgui.begin("Tier 4: QA", self.show_windows["Tier 4: QA"]) self.show_windows["Tier 4: QA"] = bool(opened) if exp: @@ -2771,6 +2779,47 @@ def hello(): self.ui_selected_ticket_id = None self._push_mma_state_update() + imgui.separator() + imgui.text("Agent Streams") + if imgui.begin_tab_bar("mma_streams_tabs"): + # Tier 1 + if imgui.begin_tab_item("Tier 1")[0]: + ch, self.ui_separate_tier1 = imgui.checkbox("Pop Out Tier 1", self.ui_separate_tier1) + if ch: self.show_windows["Tier 1: Strategy"] = self.ui_separate_tier1 + if not self.ui_separate_tier1: + self._render_tier_stream_panel("Tier 1", "Tier 1") + else: + imgui.text_disabled("Tier 1 stream is detached.") + imgui.end_tab_item() + # Tier 2 + if imgui.begin_tab_item("Tier 2")[0]: + ch, self.ui_separate_tier2 = imgui.checkbox("Pop Out Tier 2", self.ui_separate_tier2) + if ch: self.show_windows["Tier 2: Tech Lead"] = self.ui_separate_tier2 + if not self.ui_separate_tier2: + self._render_tier_stream_panel("Tier 2", "Tier 2 (Tech Lead)") + else: + imgui.text_disabled("Tier 2 stream is detached.") + imgui.end_tab_item() + # Tier 3 + if imgui.begin_tab_item("Tier 3")[0]: + ch, self.ui_separate_tier3 = imgui.checkbox("Pop Out Tier 3", self.ui_separate_tier3) + if ch: self.show_windows["Tier 3: Workers"] = self.ui_separate_tier3 + if not self.ui_separate_tier3: + self._render_tier_stream_panel("Tier 3", None) + else: + imgui.text_disabled("Tier 3 stream is detached.") + imgui.end_tab_item() + # Tier 4 + if imgui.begin_tab_item("Tier 4")[0]: + ch, self.ui_separate_tier4 = imgui.checkbox("Pop Out Tier 4", self.ui_separate_tier4) + if ch: self.show_windows["Tier 4: QA"] = self.ui_separate_tier4 + if not self.ui_separate_tier4: + self._render_tier_stream_panel("Tier 4", "Tier 4 (QA)") + else: + imgui.text_disabled("Tier 4 stream is detached.") + imgui.end_tab_item() + imgui.end_tab_bar() + def _render_task_dag_panel(self) -> None: # 4. Task DAG Visualizer imgui.text("Task DAG")