/** * HoloScript Pipeline Parser * * Parses .hs pipeline definitions into a structured AST. * Pipelines describe declarative data flows: source → transform → filter → sink. * * Compilation targets: Node.js, Python, Lambda, Cloudflare Worker, Docker, K8s CronJob. * * @module PipelineParser */ export interface PipelineDuration { value: number; unit: 's' | 'm' | 'h' | 'd'; } export interface PipelineRetry { max: number; backoff: 'none' | 'linear' | 'exponential'; } export interface PipelineAuth { type: 'bearer' | 'oauth2' | 'api_key' | 'basic'; token?: string; key?: string; header?: string; } export interface PipelinePagination { type: 'cursor' | 'offset'; param: string; limit: number; } export interface PipelineBatch { size: number; parallel?: number; } export interface PipelineOnError { action: 'log' | 'retry' | 'dead_letter'; continue: boolean; } export interface PipelineSource { kind: 'source'; name: string; type: 'rest' | 'webhook' | 'stream' | 'filesystem' | 'database' | 'mcp' | 'list' | 'stdout' | 'user_input'; endpoint?: string; path?: string; pattern?: string; since?: string; method?: string; auth?: PipelineAuth; pagination?: PipelinePagination; items?: Record[]; properties: Record; } export interface FieldMapping { from: string; to: string; transforms: string[]; } export interface PipelineTransform { kind: 'transform'; name: string; type?: 'llm' | 'mcp' | 'http' | 'field_mapping'; mappings?: FieldMapping[]; model?: string; prompt?: string; input?: string; output?: string | Record; server?: string; tool?: string; args?: Record; method?: string; url?: string; timeout?: PipelineDuration; where?: string; properties: Record; } export interface PipelineFilter { kind: 'filter'; name: string; where: string; } export interface PipelineValidateField { field: string; rules: string[]; } export interface PipelineValidate { kind: 'validate'; name: string; fields: PipelineValidateField[]; } export interface PipelineMerge { kind: 'merge'; name: string; from: string[]; dedup?: { key: string; window: string; }; strategy?: 'concat' | 'zip' | 'latest'; } export interface BranchRoute { condition: string | 'default'; sinkName: string; } export interface PipelineBranch { kind: 'branch'; name: string; routes: BranchRoute[]; } export interface PipelineSink { kind: 'sink'; name: string; type: 'rest' | 'webhook' | 'mcp' | 'filesystem' | 'database' | 'stdout' | 'holo'; endpoint?: string; path?: string; method?: string; auth?: PipelineAuth; body?: Record; batch?: PipelineBatch; onError?: PipelineOnError; format?: 'json' | 'jsonl' | 'csv'; append?: boolean; server?: string; tool?: string; args?: Record; then?: PipelineSink; template?: string; hash?: string; properties: Record; } export type PipelineStep = PipelineSource | PipelineTransform | PipelineFilter | PipelineValidate | PipelineMerge | PipelineBranch | PipelineSink; export interface Pipeline { name: string; schedule?: string; timeout?: PipelineDuration; retry?: PipelineRetry; params?: Record; steps: PipelineStep[]; sources: PipelineSource[]; transforms: PipelineTransform[]; filters: PipelineFilter[]; validates: PipelineValidate[]; merges: PipelineMerge[]; branches: PipelineBranch[]; sinks: PipelineSink[]; } export interface PipelineParseResult { success: boolean; pipeline?: Pipeline; errors: PipelineParseError[]; } export interface PipelineParseError { message: string; line?: number; block?: string; } /** * Parse a .hs pipeline source string into a structured Pipeline AST. */ export declare function parsePipeline(source: string): PipelineParseResult; /** * Check if source content contains a pipeline definition. */ export declare function isPipelineSource(source: string): boolean;