export interface AutomationInput { schemaVersion: 1; mode: 'synthetic-twap'; chainId: string | number; tokenIn: string; tokenOut: string; amount: string; splits: string | number; windowHours: string | number; taker: string; slippageBps: string | number; } export interface AutomationDraft { schemaVersion: 1; mode: 'synthetic-twap'; status: 'draft'; active: false; actionMode: 'preview_only'; persisted: false; ownerBinding: null; tenantBinding: null; backendSigner: false; executionReady: false; signingReady: false; broadcastReady: false; plan: { planId: string; mode: 'synthetic-twap'; executionReady: false; params: { chainId: number; tokenIn: string; tokenOut: string; amount: string; splits: number; taker: string; slippageBps: number; createdAt: string; windowSec: number; windowHours: number; chunkSize: string; remainder: string; intervalSec: number; status: 'planned' }; schedule: Array<{ splitIndex: number; chunkSize: string; executeAfter: string }>; }; windowEndsAt: string; minimumOutput: null; capabilities: { syntheticTwapPreview: true; venueNativeTwap: false; limitOrders: false; execute: false; pause: false; cancel: false; enforcedLimits: false }; costs: Array<{ category: string; status: 'unknown'; amountRaw: null; asset: null; amountUsd: null; source: null; asOf: null }>; unavailableControls: string[]; warnings: string[]; } export interface DiscoveryCandidate { id: string; label: string; chainId: number | null; tokenAddress: string | null; observedAt: string | null; venue: string; status: string; whyBlocked: string[]; previewEligible: boolean; unavailableReason: string | null; } export interface DiscoverySnapshot { source: string; evidence: string; status: 'ready' | 'empty' | 'unavailable'; reason: string | null; fetchedAt: string; freshness: string; coverage: string; candidates: DiscoveryCandidate[]; } export function buildAutomationDraft(input: unknown, options?: { now?: () => number }): AutomationDraft; export function discoverySnapshot(durable: unknown, options?: { now?: () => number }): DiscoverySnapshot;