FocusFlowAI / app.py
avaliev's picture
Update app.py
0bdf0d8 verified
"""
FocusFlow: AI Accountability Agent with Gradio 5 Interface.
Configurable via environment variables for HuggingFace Spaces or local use.
"""
import gradio as gr
import os
from dotenv import load_dotenv
from shared import task_manager, metrics_tracker
from monitor import FileMonitor
from voice import voice_generator
from linear_client import LinearClient
from core.pomodoro import PomodoroTimer
from core.focus_check import FocusMonitor
from ui.handlers import UIHandlers
from ui.layout import create_app
# Load environment variables
load_dotenv()
# Import MCP tools to register them with Gradio
try:
import mcp_tools
MCP_AVAILABLE = True
except Exception as e:
print(f"⚠️ MCP tools not available: {e}")
MCP_AVAILABLE = False
# Configuration from environment
LAUNCH_MODE = os.getenv("LAUNCH_MODE", "demo").lower() # 'demo' or 'local'
AI_PROVIDER = os.getenv("AI_PROVIDER", "openai").lower() # 'openai', 'anthropic', or 'vllm'
MONITOR_INTERVAL = int(os.getenv("MONITOR_INTERVAL", "30")) # seconds
# Initialize Core Components
# task_manager and metrics_tracker are imported from shared.py
file_monitor = FileMonitor()
linear_client = LinearClient()
# Initialize Logic Modules
focus_monitor = FocusMonitor(task_manager, file_monitor, metrics_tracker, voice_generator)
focus_monitor.set_launch_mode(LAUNCH_MODE)
pomodoro_timer = PomodoroTimer()
# Initialize UI Handlers
ui_handlers = UIHandlers(task_manager, file_monitor, metrics_tracker, focus_monitor, linear_client)
# Create App
app = create_app(ui_handlers, pomodoro_timer, LAUNCH_MODE, AI_PROVIDER, MONITOR_INTERVAL)
if __name__ == "__main__":
# Enable MCP server if available
mcp_enabled = os.getenv("ENABLE_MCP", "true").lower() == "true"
if MCP_AVAILABLE and mcp_enabled:
print("πŸ”— MCP Server enabled! Connect via Claude Desktop or other MCP clients.")
app.launch(server_name="0.0.0.0", server_port=7860, share=False, mcp_server=True)
else:
print("πŸ“± Running without MCP integration")
app.launch(server_name="0.0.0.0", server_port=7860, share=False)