From cd4fb27d5a5c6f7d74de45d05bb4d33c318ff806 Mon Sep 17 00:00:00 2001 From: gahusb Date: Sun, 31 May 2026 22:28:12 +0900 Subject: [PATCH] =?UTF-8?q?fix(agent-office):=20EOD=2016:50=20stagger(?= =?UTF-8?q?=EB=B6=80=EB=B6=84=EC=9D=BC=EB=B4=89=20=EB=B0=A9=EC=A7=80)?= =?UTF-8?q?=C2=B7idle=EA=B0=80=EB=93=9C=20=EB=AC=B8=EC=84=9C=ED=99=94?= =?UTF-8?q?=C2=B7proxy/import=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- agent-office/app/agents/stock.py | 4 +++- agent-office/app/notifiers/telegram_stock.py | 3 ++- agent-office/app/scheduler.py | 2 +- agent-office/app/service_proxy.py | 5 +++-- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/agent-office/app/agents/stock.py b/agent-office/app/agents/stock.py index 35eab93..4520d69 100644 --- a/agent-office/app/agents/stock.py +++ b/agent-office/app/agents/stock.py @@ -337,7 +337,8 @@ class StockAgent(BaseAgent): await self.transition("idle", "AI 뉴스 완료") async def run_holdings_eod(self) -> dict: - """평일 16:40 — 보유종목 시그널 계산·저장.""" + """평일 16:50 — 보유종목 시그널 계산·저장.""" + # idle 가드 없음(의도적): 스크리너 진행 중에도 EOD/브리핑은 독립적으로 실행되어야 함 from ..service_proxy import stock_holdings_run from ..db import create_task, update_task_status, add_log task_id = create_task(self.agent_id, "holdings_eod", {}) @@ -353,6 +354,7 @@ class StockAgent(BaseAgent): async def run_holdings_brief(self) -> dict: """평일 08:30 — 저장된 시그널 브리핑 텔레그램.""" + # idle 가드 없음(의도적): 스크리너 진행 중에도 EOD/브리핑은 독립적으로 실행되어야 함 from ..service_proxy import stock_holdings_brief from ..notifiers.telegram_stock import send_holdings_brief from ..db import create_task, update_task_status, add_log diff --git a/agent-office/app/notifiers/telegram_stock.py b/agent-office/app/notifiers/telegram_stock.py index 00e619b..0a14844 100644 --- a/agent-office/app/notifiers/telegram_stock.py +++ b/agent-office/app/notifiers/telegram_stock.py @@ -2,6 +2,8 @@ import logging from typing import Any, Dict +from ..telegram.messaging import send_raw + logger = logging.getLogger("agent-office") _ACTION_KR = {"add": "🟢 추가매수", "hold": "⚪ 보유", "trim": "🟡 축소", "sell": "🔴 매도"} @@ -33,7 +35,6 @@ def format_holdings_brief(payload: Dict[str, Any]) -> str: async def send_holdings_brief(payload: Dict[str, Any]) -> None: - from ..telegram.messaging import send_raw text = format_holdings_brief(payload) try: await send_raw(text) diff --git a/agent-office/app/scheduler.py b/agent-office/app/scheduler.py index e599c3f..e937da3 100644 --- a/agent-office/app/scheduler.py +++ b/agent-office/app/scheduler.py @@ -121,7 +121,7 @@ def init_scheduler(): minute=0, id="stock_ai_news_sentiment", ) - scheduler.add_job(_run_stock_holdings_eod, "cron", day_of_week="mon-fri", hour=16, minute=40, id="stock_holdings_eod") + scheduler.add_job(_run_stock_holdings_eod, "cron", day_of_week="mon-fri", hour=16, minute=50, id="stock_holdings_eod") # 16:50: 스크리너 snapshot(16:30) 완료 후 — 부분 일봉 읽기 방지 scheduler.add_job(_run_stock_holdings_brief, "cron", day_of_week="mon-fri", hour=8, minute=30, id="stock_holdings_brief") scheduler.add_job(_run_insta_schedule, "cron", hour=9, minute=30, id="insta_pipeline") # 외부 트렌드 수집은 장 마감 후 16:40 — 9시 주식 활발 시간대 NAS 자원 회피. diff --git a/agent-office/app/service_proxy.py b/agent-office/app/service_proxy.py index c8b0886..c49237e 100644 --- a/agent-office/app/service_proxy.py +++ b/agent-office/app/service_proxy.py @@ -100,8 +100,8 @@ async def stock_holdings_run() -> Dict[str, Any]: f"{STOCK_URL}/api/stock/holdings/intel/run", params={"use_llm": True}, ) - resp.raise_for_status() - return resp.json() + resp.raise_for_status() + return resp.json() async def stock_holdings_brief() -> Dict[str, Any]: @@ -110,6 +110,7 @@ async def stock_holdings_brief() -> Dict[str, Any]: resp.raise_for_status() return resp.json() + async def generate_music(payload: dict) -> Dict[str, Any]: resp = await _client.post(f"{MUSIC_LAB_URL}/api/music/generate", json=payload) resp.raise_for_status()