Spaces:
Sleeping
Sleeping
| from typing import List | |
| import streamlit as st | |
| from tkinter import Tk, filedialog | |
| from streamlit.components.v1 import html | |
| from autogen import ConversableAgent | |
| from ui.introductory_page import IntroductoryPage | |
| from ui.analysis_page import NavigationPanel, CodePreview, ResultsDisplay | |
| from agents.code_overview_agents import CodeSummarizerAgent, CodeSmellDetectorAgent | |
| from agents.code_structure_agents import DesignPatternDetectorAgent, DesignPatternRecommenderAgent, SOLIDPrinciplesManagerAgent | |
| from agents.code_visualization_agents import MermaideDiagramAgent | |
| from config import DefaultSettings | |
| from utils.utils import load_config, load_css | |
| # Configuration and Agent Initialization | |
| llm_config = load_config(DefaultSettings().default_model_type) | |
| agents = [ | |
| CodeSummarizerAgent().make_agent(llm_config), | |
| CodeSmellDetectorAgent().make_agent(llm_config), | |
| DesignPatternDetectorAgent().make_agent(llm_config), | |
| DesignPatternRecommenderAgent().make_agent(llm_config), | |
| SOLIDPrinciplesManagerAgent().make_agent(llm_config), | |
| MermaideDiagramAgent().make_agent(llm_config) | |
| ] | |
| class AnalysisManager: | |
| """Manages and provides access to analysis results.""" | |
| def __init__(self, results): | |
| load_css("./ui/styles.css") | |
| self.results = results | |
| def get_file_data(self, file_path): | |
| return self.results.get(file_path, {}) | |
| def list_files(self): | |
| return list(self.results.keys()) | |
| class CodeAnalysisApp: | |
| """Main application orchestrator.""" | |
| def __init__(self, agents: List[ConversableAgent]) -> None: | |
| self.agents = agents | |
| def run(self): | |
| """Main application entry point.""" | |
| st.set_page_config( | |
| layout="wide", | |
| initial_sidebar_state="expanded", | |
| page_icon="🔍" | |
| ) | |
| if not self._check_analysis_state(): | |
| IntroductoryPage(self.agents).render() | |
| return | |
| self._setup_interface() | |
| self._render_main_view() | |
| self._add_reset_button() | |
| def _check_analysis_state(self): | |
| """Validate analysis completion status.""" | |
| if 'analysis_done' not in st.session_state: | |
| st.session_state.analysis_done = False | |
| return st.session_state.get('results') and st.session_state.analysis_done | |
| def _setup_interface(self): | |
| """Initialize application components.""" | |
| load_css("./ui/styles.css") | |
| self.analysis = AnalysisManager(st.session_state.results) | |
| self.nav = NavigationPanel(self.analysis.list_files()) | |
| def _render_main_view(self): | |
| """Display main two-column interface.""" | |
| selected_file = self.nav.render() | |
| file_data = self.analysis.get_file_data(selected_file) | |
| col1, col2 = st.columns([0.5, 0.5]) | |
| with col1: | |
| CodePreview( | |
| file_path=selected_file, | |
| language=file_data['language'] | |
| ).render() | |
| with col2: | |
| ResultsDisplay( | |
| file_data['analysis_results'] | |
| ).render() | |
| def _add_reset_button(self): | |
| """Add sidebar reset functionality.""" | |
| st.sidebar.button( | |
| "New Analysis", | |
| on_click=self._reset_state | |
| ) | |
| def _reset_state(self): | |
| """Clear analysis-related session state.""" | |
| state_keys = ['results', 'analysis_done', 'selected_dir', 'prev_dir'] | |
| for key in state_keys: | |
| if key in st.session_state: | |
| del st.session_state[key] | |
| st.rerun() | |
| if __name__ == "__main__": | |
| CodeAnalysisApp(agents).run() |