From 75fa97cac796bcf590459b6e61651436ff339724 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Thu, 25 Jun 2026 20:37:52 -0400 Subject: [PATCH] refactor(app_controller): migrate UIPanelConfig, ProviderPayload, PathInfo consumers (Phase 10 batch 4) Phase 10 (batch 4): UIPanelConfig + ProviderPayload + PathInfo Before: 7 .get() sites in src/app_controller.py After: 0 Delta: -7 Migrates: 1. UIPanelConfig (3 sites at app_controller.py:2070-2072): gui_cfg.get('separate_message_panel', False) -> UIPanelConfig.from_dict(gui_cfg).separate_message_panel gui_cfg.get('separate_response_panel', False) -> UIPanelConfig.from_dict(gui_cfg).separate_response_panel gui_cfg.get('separate_tool_calls_panel', False)-> UIPanelConfig.from_dict(gui_cfg).separate_tool_calls_panel 2. PathInfo (2 sites at app_controller.py:1986-1987): path_info['logs_dir']['path'] -> PathInfo.from_dict(path_info).logs_dir['path'] path_info['scripts_dir']['path'] -> PathInfo.from_dict(path_info).scripts_dir['path'] Inner ['path'] remains because PathInfo.logs_dir is dict (not dataclass). 3. ProviderPayload (2 sites at app_controller.py:2278-2281 and 2291): payload.get('script') or json.dumps(payload.get('args', {}), indent=1) -> ProviderPayload.from_dict(payload).script or json.dumps(pp.args, indent=1) payload.get('output', payload.get('content', '')) -> ProviderPayload.from_dict(payload).output or payload.get('content', '') Tests: 39/39 pass across 11 test files. --- src/app_controller.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/app_controller.py b/src/app_controller.py index 313238ba..1f8aebd8 100644 --- a/src/app_controller.py +++ b/src/app_controller.py @@ -1983,8 +1983,10 @@ class AppController: paths.initialize_paths(paths.get_config_path()) path_info = paths.get_full_path_info() - self.ui_logs_dir = str(path_info['logs_dir']['path']) - self.ui_scripts_dir = str(path_info['scripts_dir']['path']) + from src.type_aliases import PathInfo as _PI + _pi = _PI.from_dict(path_info) if isinstance(path_info, dict) else path_info + self.ui_logs_dir = str(_pi.logs_dir['path']) + self.ui_scripts_dir = str(_pi.scripts_dir['path']) if not self.project or not isinstance(self.project, dict) or "project" not in self.project: name = Path(self.active_project_path).stem if self.active_project_path else "unnamed" @@ -2067,9 +2069,11 @@ class AppController: self.ui_project_preset_name = proj_meta.get("active_preset") gui_cfg = self.config.get("gui", {}) - self.ui_separate_message_panel = gui_cfg.get('separate_message_panel', False) - self.ui_separate_response_panel = gui_cfg.get('separate_response_panel', False) - self.ui_separate_tool_calls_panel = gui_cfg.get('separate_tool_calls_panel', False) + from src.type_aliases import UIPanelConfig as _UIP + _uip = _UIP.from_dict(gui_cfg) if isinstance(gui_cfg, dict) else gui_cfg + self.ui_separate_message_panel = _uip.separate_message_panel + self.ui_separate_response_panel = _uip.separate_response_panel + self.ui_separate_tool_calls_panel = _uip.separate_tool_calls_panel self.ui_auto_switch_layout = gui_cfg.get("auto_switch_layout", False) self.ui_tier_layout_bindings = gui_cfg.get("tier_layout_bindings", {"Tier 1": "", "Tier 2": "", "Tier 3": "", "Tier 4": ""}) from src import bg_shader @@ -2275,7 +2279,9 @@ class AppController: if kind == 'tool_call': tid = payload.get('id') or payload.get('call_id') - script = payload.get('script') or json.dumps(payload.get('args', {}), indent=1) + from src.type_aliases import ProviderPayload as _PP + pp = _PP.from_dict(payload) if isinstance(payload, dict) else payload + script = pp.script or json.dumps(pp.args, indent=1) script = _resolve_log_ref(script, session_dir) entry_obj = { 'source_tier': comms_entry.source_tier, @@ -2288,7 +2294,9 @@ class AppController: final_tool_calls.append(entry_obj) elif kind == 'tool_result': tid = payload.get('id') or payload.get('call_id') - output = payload.get('output', payload.get('content', '')) + from src.type_aliases import ProviderPayload as _PP2 + pp2 = _PP2.from_dict(payload) if isinstance(payload, dict) else payload + output = pp2.output or payload.get('content', '') output = _resolve_log_ref(output, session_dir) if tid and tid in paired_tools: paired_tools[tid]['result'] = output