import type { SessionTokenBudget } from '../../store/budget/index.js' import type { SessionId, TurnId } from '../ids/index.js' import type { LLMProvider } from '../provider/index.js' import type { BaseAgentConfig, BaseAgentResult } from './base.js' export interface StepContext { /** Shared authority; reserve a child scope before invoking another agent. */ budget: SessionTokenBudget sessionId: SessionId turnId: TurnId stepIndex: number totalSteps: number previousResults: Map provider?: LLMProvider signal?: AbortSignal env: Record } export interface PipelineStep { name: string description?: string execute(input: TInput, context: StepContext): Promise rollback?(input: TInput, context: StepContext): Promise validate?(input: TInput): boolean } export interface PipelineAgentConfig extends BaseAgentConfig { steps: PipelineStep[] provider?: LLMProvider continueOnError?: boolean } export interface PipelineStepResult { stepName: string status: 'completed' | 'failed' | 'skipped' output?: unknown error?: string durationMs: number } export interface PipelineAgentResult extends BaseAgentResult { stepResults: PipelineStepResult[] completedSteps: number totalSteps: number }