import asyncio from apscheduler.schedulers.asyncio import AsyncIOScheduler from .agents import AGENT_REGISTRY scheduler = AsyncIOScheduler(timezone="Asia/Seoul") async def _check_idle_breaks(): for agent in AGENT_REGISTRY.values(): await agent.check_idle_break() async def _run_stock_schedule(): agent = AGENT_REGISTRY.get("stock") if agent: await agent.on_schedule() async def _run_stock_screener(): agent = AGENT_REGISTRY.get("stock") if agent: await agent.on_screener_schedule() async def _run_stock_ai_news(): agent = AGENT_REGISTRY.get("stock") if agent: await agent.on_ai_news_schedule() async def _run_insta_schedule(): agent = AGENT_REGISTRY.get("insta") if agent: await agent.on_schedule() async def _run_insta_trends_collect(): agent = AGENT_REGISTRY.get("insta") if agent: await agent.on_command("collect_trends", {}) async def _run_lotto_schedule(): agent = AGENT_REGISTRY.get("lotto") if agent: await agent.on_schedule() async def _run_youtube_research(): agent = AGENT_REGISTRY.get("youtube") if agent: await agent.on_schedule() async def _send_youtube_weekly_report(): agent = AGENT_REGISTRY.get("youtube") if agent: await agent.send_weekly_report() async def _poll_pipelines(): agent = AGENT_REGISTRY.get("youtube_publisher") if agent: await agent.poll_state_changes() def init_scheduler(): scheduler.add_job(_run_stock_schedule, "cron", hour=7, minute=30, id="stock_news") scheduler.add_job( _run_stock_screener, "cron", day_of_week="mon-fri", hour=16, minute=30, id="stock_screener", ) scheduler.add_job( _run_stock_ai_news, "cron", day_of_week="mon-fri", hour=8, minute=0, id="stock_ai_news_sentiment", ) scheduler.add_job(_run_insta_schedule, "cron", hour=9, minute=30, id="insta_pipeline") scheduler.add_job(_run_insta_trends_collect, "cron", hour=9, minute=0, id="insta_trends_collect") scheduler.add_job(_run_lotto_schedule, "cron", day_of_week="mon", hour=9, minute=0, id="lotto_curate") scheduler.add_job(_run_youtube_research, "cron", hour=9, minute=0, id="youtube_research") scheduler.add_job(_send_youtube_weekly_report, "cron", day_of_week="mon", hour=8, minute=0, id="youtube_weekly_report") scheduler.add_job(_check_idle_breaks, "interval", seconds=60, id="idle_check") scheduler.add_job(_poll_pipelines, "interval", seconds=30, id="pipeline_poll") scheduler.start()