import os # Service URLs (Docker internal network) STOCK_URL = os.getenv("STOCK_URL", "http://localhost:18500") MUSIC_LAB_URL = os.getenv("MUSIC_LAB_URL", "http://localhost:18600") INSTA_LAB_URL = os.getenv("INSTA_LAB_URL", "http://localhost:18700") REALESTATE_LAB_URL = os.getenv("REALESTATE_LAB_URL", "http://localhost:18800") # Telegram TELEGRAM_BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN", "") TELEGRAM_CHAT_ID = os.getenv("TELEGRAM_CHAT_ID", "") TELEGRAM_WEBHOOK_URL = os.getenv("TELEGRAM_WEBHOOK_URL", "") TELEGRAM_WIFE_CHAT_ID = os.getenv("TELEGRAM_WIFE_CHAT_ID", "") # Anthropic (conversational) ANTHROPIC_API_KEY = os.getenv("ANTHROPIC_API_KEY", "") CONVERSATION_MODEL = os.getenv("CONVERSATION_MODEL", "claude-haiku-4-5-20251001") CONVERSATION_HISTORY_LIMIT = int(os.getenv("CONVERSATION_HISTORY_LIMIT", "20")) CONVERSATION_RATE_PER_MIN = int(os.getenv("CONVERSATION_RATE_PER_MIN", "6")) # Database DB_PATH = os.getenv("AGENT_OFFICE_DB_PATH", "/app/data/agent_office.db") # CORS CORS_ALLOW_ORIGINS = os.getenv( "CORS_ALLOW_ORIGINS", "http://localhost:3007,http://localhost:8080" ) # Lotto Curator LOTTO_BACKEND_URL = os.getenv("LOTTO_BACKEND_URL", "http://lotto:8000") LOTTO_CURATOR_MODEL = os.getenv("LOTTO_CURATOR_MODEL", "claude-sonnet-4-5") # Lotto Active Signals LOTTO_SIGNAL_WINDOW = int(os.getenv("LOTTO_SIGNAL_WINDOW", "8")) LOTTO_Z_NORMAL = float(os.getenv("LOTTO_Z_NORMAL", "1.5")) LOTTO_Z_URGENT = float(os.getenv("LOTTO_Z_URGENT", "2.5")) LOTTO_DIGEST_HOUR = int(os.getenv("LOTTO_DIGEST_HOUR", "9")) LOTTO_DIGEST_MIN = int(os.getenv("LOTTO_DIGEST_MIN", "25")) LOTTO_THROTTLE_HOURS = int(os.getenv("LOTTO_THROTTLE_HOURS", "6")) LOTTO_URGENT_DAILY_MAX = int(os.getenv("LOTTO_URGENT_DAILY_MAX", "3")) import re as _re # 에이전트 → (container_host, port, path_prefix_regex) # path_prefix_regex: lotto 컨테이너에 personal/blog/todo 도 같이 있어 # /api/lotto 만 골라내기 위한 정규식. business log (source='log') 는 모두 통과. AGENT_CONTAINER_MAP: dict[str, tuple[str, int, _re.Pattern]] = { "lotto": ("lotto", 8000, _re.compile(r"^/api/lotto")), # Phase 2 에서 추가: # "stock": ("stock", 8000, _re.compile(r"^/api/(stock|trade|portfolio)")), # "music": ("music-lab", 8000, _re.compile(r"^/api/music")), # "insta": ("insta-lab", 8000, _re.compile(r"^/api/insta")), # "realestate": ("realestate-lab", 8000, _re.compile(r"^/api/realestate")), }