import type { AgentOverrides } from "../../config"; import type { TopLevelTaskRef } from "../../features/boulder-state"; export type ModelInfo = { providerID: string; modelID: string; variant?: string; }; export interface BackgroundTaskStatusProvider { getTasksByParentSession: (sessionID: string) => Array<{ status: string; }>; } export interface AtlasHookOptions { directory: string; backgroundManager?: BackgroundTaskStatusProvider; isContinuationStopped?: (sessionID: string) => boolean; isCallerOrchestrator?: (sessionID: string | undefined) => Promise; agentOverrides?: AgentOverrides; idleSettleMs?: number; /** Enable auto-commit after each atomic task completion (default: true) */ autoCommit?: boolean; } export interface ToolExecuteAfterInput { tool: string; sessionID?: string; callID?: string; } export interface ToolExecuteAfterOutput { title: string; output: string; metadata: Record; } export type TrackedTopLevelTaskRef = Pick; export type PendingTaskRef = { kind: "track"; task: TrackedTopLevelTaskRef; } | { kind: "skip"; reason: "explicit_resume"; } | { kind: "skip"; reason: "ambiguous_task_key"; task: TrackedTopLevelTaskRef; }; export interface SessionState { lastEventWasAbortError?: boolean; skipNextIdleAfterRuntimeErrorRetry?: boolean; lastContinuationInjectedAt?: number; isInjectingContinuation?: boolean; promptFailureCount: number; lastFailureAt?: number; pendingRetryTimer?: ReturnType; waitingForFinalWaveApproval?: boolean; pendingFinalWaveTaskCount?: number; approvedFinalWaveTaskCount?: number; boulderCompletionNudgedAt?: Record; awaitingToolProgressAfterContinuation?: boolean; iterationsSinceLastToolProgress?: number; lastToolProgressAt?: number; stalledContinuationReason?: string; stalledContinuationPlanPath?: string; /** The plan path the in-progress no-tool-progress counter is keyed to. Changes here reset the counter. */ activeContinuationPlanPath?: string; /** Top-level task keys whose completion gate already fired, used to suppress repeat 4-phase reminders. */ verifiedTaskKeys?: Set; }