Newer
Older
navi-1 / navi / core / agent_run_context.py
"""Turn-level execution state for the Agent streaming loop."""

from __future__ import annotations

from dataclasses import dataclass, field
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    pass


@dataclass
class AgentTurnContext:
    """Mutable container for state that lives across iterations of a single run_stream() turn.

    Extracting these variables from run_stream() makes the method readable and lets
    services (AntiStallMonitor, Compressor) receive the turn state explicitly instead
    of returning tuples.
    """

    turn_start: float
    tool_call_count: int = 0
    turn_tokens: int = 0
    subagent_tokens: int = 0
    stall_no_todo: int = 0
    stall_repeat_tools: int = 0
    prev_tool_sigs: frozenset = field(default_factory=frozenset)
    known_failed: frozenset = field(default_factory=frozenset)
    replan_msg: str | None = None
    injected_fact_ids: set[str] = field(default_factory=set)