SYMBOL INDEX (49 symbols across 4 files) FILE: api_server.py function startup_event (line 44) | async def startup_event(): class WorkflowSummary (line 57) | class WorkflowSummary(BaseModel): class Config (line 71) | class Config: method convert_active (line 77) | def convert_active(cls, v): class SearchResponse (line 83) | class SearchResponse(BaseModel): class StatsResponse (line 92) | class StatsResponse(BaseModel): function root (line 103) | async def root(): function health_check (line 118) | async def health_check(): function get_stats (line 123) | async def get_stats(): function search_workflows (line 132) | async def search_workflows( function get_workflow_detail (line 197) | async def get_workflow_detail(filename: str): function download_workflow (line 226) | async def download_workflow(filename: str): function get_workflow_diagram (line 246) | async def get_workflow_diagram(filename: str): function generate_mermaid_diagram (line 275) | def generate_mermaid_diagram(nodes: List[Dict], connections: Dict) -> str: function reindex_workflows (line 344) | async def reindex_workflows(background_tasks: BackgroundTasks, force: bo... function get_integrations (line 353) | async def get_integrations(): function get_categories (line 363) | async def get_categories(): function search_workflows_by_category (line 372) | async def search_workflows_by_category( function global_exception_handler (line 426) | async def global_exception_handler(request, exc): function create_static_directory (line 440) | def create_static_directory(): function run_server (line 446) | def run_server(host: str = "127.0.0.1", port: int = 8000, reload: bool =... FILE: import_workflows.py class WorkflowImporter (line 14) | class WorkflowImporter: method __init__ (line 17) | def __init__(self, workflows_dir: str = "workflows"): method validate_workflow (line 23) | def validate_workflow(self, file_path: Path) -> bool: method import_workflow (line 43) | def import_workflow(self, file_path: Path) -> bool: method get_workflow_files (line 75) | def get_workflow_files(self) -> List[Path]: method import_all (line 88) | def import_all(self) -> Dict[str, Any]: function check_n8n_available (line 130) | def check_n8n_available() -> bool: function main (line 142) | def main(): FILE: run.py function print_banner (line 13) | def print_banner(): function check_requirements (line 19) | def check_requirements() -> bool: function setup_directories (line 47) | def setup_directories(): function setup_database (line 57) | def setup_database(force_reindex: bool = False) -> str: function start_server (line 82) | def start_server(host: str = "127.0.0.1", port: int = 8000, reload: bool... function main (line 106) | def main(): FILE: workflow_db.py class WorkflowDatabase (line 16) | class WorkflowDatabase: method __init__ (line 19) | def __init__(self, db_path: str = None): method init_database (line 27) | def init_database(self): method get_file_hash (line 104) | def get_file_hash(self, file_path: str) -> str: method format_workflow_name (line 112) | def format_workflow_name(self, filename: str) -> str: method analyze_workflow_file (line 150) | def analyze_workflow_file(self, file_path: str) -> Optional[Dict[str, ... method analyze_nodes (line 207) | def analyze_nodes(self, nodes: List[Dict]) -> Tuple[str, set]: method generate_description (line 386) | def generate_description(self, workflow: Dict, trigger_type: str, inte... method index_all_workflows (line 432) | def index_all_workflows(self, force_reindex: bool = False) -> Dict[str... method search_workflows (line 510) | def search_workflows(self, query: str = "", trigger_filter: str = "all", method get_stats (line 591) | def get_stats(self) -> Dict[str, Any]: method get_service_categories (line 643) | def get_service_categories(self) -> Dict[str, List[str]]: method search_by_category (line 660) | def search_by_category(self, category: str, limit: int = 50, offset: i... function main (line 714) | def main():