""" Context manager — assembles the conversation history for a bot's prompt. Ensures bots only see messages, never foreign system prompts. Handles context summarization when enabled. """ import logging from typing import TYPE_CHECKING if TYPE_CHECKING: from fellowship.core.session import Session, BotConfig logger = logging.getLogger(__name__) class ContextManager: def __init__(self, session: "Session") -> None: self.session = session def build_context(self, bot: "BotConfig") -> list[dict]: """ Return the conversation history formatted as LLM messages for the given bot. Uses shared_context or scoped_context based on session options. Skips any slots with content=None (reserved but not yet filled). """ raise NotImplementedError def estimate_tokens(self, messages: list[dict]) -> int: """ Estimate total token count for a list of messages. Used to check against max_context_tokens. """ raise NotImplementedError async def summarize(self) -> None: """ Summarize the older portion of history to reduce context size. Retains a recent tail of messages intact. Stores the summary in session state; future context builds use summary + tail. Full history list is preserved unchanged. """ raise NotImplementedError