# Topic 5: Inter-File Connections (Call Graph) **Audit Date**: 2026-02-01 **Auditor**: Agent Antigravity **Scope**: Call Dependency Analysis --- ## 1. Primary Execution Chain (The "Happy Path") ### A. Ingress (API Layer) * **`app/main.py`** * Imports `app/api/routes.py` -> `api_router` * Imports `app/agents/orchestrator.py` -> `orchestrator.initialize()` * **`app/api/routes.py`** * Calls `app/utils/guvi_handler.py` -> `GUVIHandler.process_guvi_message()` * Dependencies: `settings.GUVI_API_KEY`, `GUVIInputRequest` schema. ### B. Logic Controller (The Orchestrator) * **`app/utils/guvi_handler.py`** * Calls **`app/agents/orchestrator.py`** -> `Orchestrator.process_message()` * Calls **`app/utils/callback_client.py`** -> `guvi_callback.send_final_result()` * **`app/agents/orchestrator.py`** * Calls **`scam_detector.py`** -> `detect()` * Calls **`intelligence_extractor.py`** -> `extract()` * Calls **`conversation_manager.py`** -> `get_or_create()`, `update()` * Calls **`adaptive_strategy.py`** -> `analyze_scammer_behavior()` * Calls **`persona_engine.py`** -> `generate_response()` * Calls **`threat_engine.py`** -> `analyze()` ### C. The Generators (Core Logic) * **`app/agents/scam_detector.py`** * Calls **`app/core/llm_client.py`** -> `generate_with_cot()` * Calls **`app/intelligence/emotional_analyzer.py`** -> `analyze()` * **`app/agents/persona_engine.py`** * Calls **`app/core/llm_client.py`** -> `generate()` * Calls **`app/decoys/victim_profiles.py`** -> `profile_generator.generate_profile()` * Calls **`app/core/engagement_delay.py`** -> `simulate_typing()` (Simulated Latency) --- ## 2. Intelligence & Persistence Links ### A. Intelligence Chain * **`app/agents/orchestrator.py`** * Calls **`app/intelligence/scammer_profiler.py`** -> `analyze_behavior()` * Calls **`app/intelligence/graph_threat_intel.py`** -> `add_intelligence()` * Calls **`app/intelligence/risk_scorer.py`** -> `calculate_risk_score()` ### B. Persistence Chain * **`app/agents/conversation_manager.py`** * Calls **`app/database/db.py`** -> `get_session()`, `commit()` * Calls **`app/database/models.py`** -> `Conversation`, `Message` tables. --- ## 3. Dependency Visualization ```mermaid graph TD Main[main.py] --> Routes[api/routes.py] Routes --> Handler[utils/guvi_handler.py] Handler --> Orchestrator[agents/orchestrator.py] subgraph Agents Orchestrator --> Detector[scam_detector.py] Orchestrator --> Extractor[intel_extractor.py] Orchestrator --> Strategy[adaptive_strategy.py] Orchestrator --> Persona[persona_engine.py] end subgraph Intelligence Orchestrator --> Threat[threat_engine.py] Orchestrator --> Scorer[risk_scorer.py] Detector --> Emotional[emotional_analyzer.py] end subgraph Core Detector --> LLM[core/llm_client.py] Persona --> LLM Extractor --> LLM end Handler -.-> Callback[utils/callback_client.py] ``` ## 4. Key Findings * **Centralization**: `Orchestrator` is the absolute center of the graph. No sub-agent calls another sub-agent directly; they all return to the Orchestrator. This prevents "Spaghetti Code". * **Isolation**: `api/routes.py` never imports `llm_client` directly. It MUST go through `guvi_handler` -> `orchestrator`. * **Utility Independence**: `callback_client.py` is independent of the agents, ensuring reporting works even if agents crash.