import type { CanonicalMessage, CanonicalToolCall, CanonicalUsage } from "../../model/index.js";
import type { AgentPermissionDenial } from "./result.js";
export type AgentLoopTransitionReason =
| "next_turn"
| "model_error"
| "max_turns"
| "aborted_streaming"
| "aborted_tools"
| "auto_compact";
export type AgentLoopTransition = {
reason: AgentLoopTransitionReason;
};
export type AgentSessionState = {
sessionId: string;
messages: CanonicalMessage[];
usage: CanonicalUsage;
permissionDenials: AgentPermissionDenial[];
status: "idle" | "running" | "aborted" | "failed";
currentTurnId?: string;
abortController: AbortController;
};
export type AgentLoopState = {
sessionId: string;
turnId: string;
messages: CanonicalMessage[];
turnCount: number;
maxTurns?: number;
pendingToolCalls: CanonicalToolCall[];
lastAssistantMessage?: CanonicalMessage;
usage: CanonicalUsage;
transition?: AgentLoopTransition;
};