from __future__ import annotations from typing import Annotated from typing_extensions import TypedDict from langchain_core.messages import BaseMessage try: from langgraph.graph.message import add_messages except ImportError: from langgraph.graph import add_messages class AgentState(TypedDict, total=False): # Conversation history — append-only via add_messages reducer messages: Annotated[list[BaseMessage], add_messages] # Set on session start, carried through every turn session_id: str # Rolling summary of old messages (updated when history grows too long) conversation_summary: str # Raw graph payload (contains copyrighted definitions) # Populated by masker_node after graph tool calls finish graph_data: dict # External definitions: { concept_name → plain-text definition } # Sourced from Wikipedia or Tavily tool calls external_defs: dict[str, str] # graph_data with book definitions stripped / replaced by external_defs # This is what gets forwarded to response_node masked_data: dict