import os from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from api.bot_config_router import router as bot_config_router from api.bot_management_router import router as bot_management_router from api.bot_router import router as bot_router from api.bot_runtime_router import router as bot_runtime_router from api.bot_speech_router import router as bot_speech_router from api.chat_history_router import router as chat_history_router from api.chat_router import router as chat_router from api.image_router import router as image_router from api.platform_router import router as platform_router from api.skill_router import router as skill_router from api.system_router import router as system_router from api.topic_router import router as topic_router from api.workspace_router import router as workspace_router from bootstrap.app_runtime import register_app_runtime from core.auth_middleware import PasswordProtectionMiddleware from core.docker_instance import docker_manager from core.settings import BOTS_WORKSPACE_ROOT, CORS_ALLOWED_ORIGINS, DATA_ROOT from core.speech_service import WhisperSpeechService def create_app() -> FastAPI: app = FastAPI(title="Dashboard Nanobot API") speech_service = WhisperSpeechService() app.state.docker_manager = docker_manager app.state.speech_service = speech_service app.add_middleware(PasswordProtectionMiddleware) app.add_middleware( CORSMiddleware, allow_origins=list(CORS_ALLOWED_ORIGINS), allow_methods=["*"], allow_headers=["*"], allow_credentials=True, ) app.include_router(platform_router) app.include_router(topic_router) app.include_router(system_router) app.include_router(image_router) app.include_router(skill_router) app.include_router(chat_router) app.include_router(chat_history_router) app.include_router(bot_speech_router) app.include_router(workspace_router) app.include_router(bot_config_router) app.include_router(bot_runtime_router) app.include_router(bot_management_router) app.include_router(bot_router) os.makedirs(BOTS_WORKSPACE_ROOT, exist_ok=True) os.makedirs(DATA_ROOT, exist_ok=True) register_app_runtime(app) return app