import sys import re def restore(): file_path = "src/gui_2.py" with open(file_path, "r", encoding="utf-8") as f: lines = f.read().splitlines() # Regions and their member functions (module-level) region_map = { "Diagnostics & Analytics": ["render_usage_analytics_panel", "render_diagnostics_panel"], "Logging": ["render_log_management"], "Project Management": ["render_project_settings_hub"], "AI Settings": ["render_ai_settings_hub", "render_preset_manager_content", "render_preset_manager_window", "render_tool_preset_manager_content", "render_tool_preset_manager_window", "render_persona_editor_window"], "Context Management": ["render_files_and_media", "render_files_panel", "render_screenshots_panel", "render_context_batch_actions", "render_add_context_files_modal"], "Discussions": ["render_discussion_hub", "render_discussion_entry", "render_discussion_entry_read_mode"], "Operations Monitor": ["render_operations_hub", "render_message_panel", "render_response_panel", "render_tool_calls_panel", "render_external_tools_panel"], "Misc Tools": ["render_text_viewer", "render_heavy_text", "render_thinking_trace", "render_selectable_label", "render_window_if_open"], "MMA": ["render_mma_dashboard", "render_mma_modals", "render_mma_track_summary", "render_mma_epic_planner", "render_mma_conductor_setup", "render_mma_track_browser", "render_mma_global_controls", "render_mma_usage_section", "render_mma_ticket_editor", "render_mma_agent_streams", "render_tier_stream_panel", "render_track_proposal_modal"] } # 1. Find where extracted functions start start_idx = -1 for i, line in enumerate(lines): if line.startswith("def render_") and not "render_error_tint" in line: start_idx = i break if start_idx == -1: return prefix = lines[:start_idx] func_lines = lines[start_idx:] # 2. Extract each function block func_blocks = {} i = 0 while i < len(func_lines): if func_lines[i].startswith("def "): m = re.match(r"def (\w+)\(", func_lines[i]) if m: f_name = m.group(1) f_start = i f_end = len(func_lines) for j in range(i + 1, len(func_lines)): if func_lines[j].startswith("def "): f_end = j break func_blocks[f_name] = "\n".join(func_lines[f_start:f_end]) i = f_end - 1 i += 1 # 3. Re-assemble with regions assembled = [] assigned = set() for r_name, funcs in region_map.items(): group = [] for f in funcs: if f in func_blocks: group.append(func_blocks[f]) assigned.add(f) if group: assembled.append(f"#region: {r_name}\n\n" + "\n\n".join(group) + f"\n\n#endregion: {r_name}") # 4. Append unassigned (like render_error_tint) for f_name, block in func_blocks.items(): if f_name not in assigned: assembled.append(block) final_content = "\n".join(prefix) + "\n\n" + "\n\n".join(assembled) + "\n" with open(file_path, "w", encoding="utf-8") as f: f.write(final_content) print("Regions restored successfully.") if __name__ == "__main__": restore()