from typing import Literal, NotRequired, TypedDict from app.schemas.base import JsonObject from app.schemas.input_context import InputContext from app.schemas.decision import DecisionResponse from app.schemas.requirement import Intent, Requirement from app.schemas.clarification import Clarification from app.schemas.clarification_reply import ClarificationReply class QueryState(TypedDict): request: JsonObject input_context: NotRequired[InputContext] intent_decision: NotRequired[DecisionResponse | None] intent: NotRequired[Intent | None] requirement: NotRequired[Requirement | None] clarification: NotRequired[Clarification | None] clarification_reply: NotRequired[ClarificationReply | None] status: NotRequired[Literal["running", "cancelled"]]