export interface ExecutionOptions {
  maxRetries?: number;
  retryDelayMs?: number;
  timeoutMs?: number;
  statePersistenceDir?: string;
}

export interface ExecutionState {
  id: string;
  variables: Record<string, any>;
  history: Array<{ prompt: string; response: any }>;
  currentPrompt: string;
}

export interface ActionLoop {
  execute(initialState: ExecutionState): Promise<ExecutionState>;
  addStep(step: ActionLoopStep): void;
  removeStep(stepName: string): void;
}

export interface ActionLoopStep {
  name: string;
  execute(state: ExecutionState): Promise<ExecutionState>;
}

export interface ActionLoopOptions {
  maxIterations?: number;
  timeoutMs?: number;
}

export interface ActionLoopPlugin {
  onBeforeStep?(state: ExecutionState): Promise<void>;
  onAfterStep?(state: ExecutionState): Promise<void>;
  onLoopComplete?(finalState: ExecutionState): Promise<void>;
}

export interface RetryStrategy {
  shouldRetry(error: Error, attemptNumber: number): boolean;
  getDelay(attemptNumber: number): number;
}