"""에이전트 메시지 포맷팅.""" from html import escape as _h from typing import Literal, Optional from .agent_registry import get_agent_meta MessageKind = Literal["report", "alert", "approval", "error", "info"] KIND_ICONS = { "report": "📊", "alert": "🔔", "approval": "✋", "error": "⚠️", "info": "ℹ️", } def format_agent_message( agent_id: str, kind: MessageKind, title: str, body: str, metadata: Optional[dict] = None, ) -> str: meta = get_agent_meta(agent_id) icon = KIND_ICONS.get(kind, "") header = f"{icon} [{_h(meta['emoji'])} {_h(meta['display_name'])}] {_h(title)}" # Telegram 단일 메시지 4096자 제한 대응 (헤더/푸터 여유 512자 확보) safe_body = _h(body) if len(safe_body) > 3500: safe_body = safe_body[:3500] + "\n…(생략)" lines = [header, "━" * 20, safe_body] if metadata: footer_parts = [] if "tokens" in metadata: footer_parts.append(f"🧮 {metadata['tokens']:,} tokens") if "duration_ms" in metadata: seconds = metadata["duration_ms"] / 1000 footer_parts.append(f"⏱ {seconds:.1f}s") if "model" in metadata: footer_parts.append(f"🤖 {metadata['model']}") if footer_parts: lines.append("") lines.append(f"{_h(' · '.join(footer_parts))}") return "\n".join(lines)