import type { JsonValue, ProjectDocument, RevisionContent, TriggerNode } from '@oomol-lab/open-flow/project-change'; import type { EngineContract } from './engine-contract.js'; import type { RuntimeProgram } from './runtime-contract.js'; export interface SemanticClosure { readonly dependencies: { readonly bindings: ReadonlySet; readonly inputBindings: ReadonlySet; readonly modules: ReadonlySet; readonly subflows: ReadonlySet; readonly tasks: ReadonlySet; }; readonly digest: string; } export declare function flowClosure(content: RevisionContent, flowId: string): Promise; export interface Diagnostic { readonly code: string; readonly column: number; readonly line: number; readonly message: string; readonly path: string; } export interface FlowValidation { readonly closure: SemanticClosure; readonly diagnostics: readonly Diagnostic[]; readonly valid: boolean; } export declare function triggerPayloadSchema(trigger: TriggerNode): JsonValue; export declare function matchesSchema(value: JsonValue, schema: JsonValue): boolean; export type FlowInputsValidation = 'flow-not-found' | 'invalid' | 'valid'; export declare function validateFlowInputs(revision: RevisionContent, flowId: string, value: unknown): FlowInputsValidation; export declare function validateModules(revision: RevisionContent, moduleIds: readonly string[], engine: EngineContract): readonly Diagnostic[]; export declare function validateFlow(revision: RevisionContent, flowId: string, engine: EngineContract): Promise; export interface PreparedFlow { readonly closureDigest: string; readonly engineContract: string; readonly flow: ProjectDocument['flows'][string]; readonly flowId: string; readonly modules: RevisionContent['modules']; readonly subflows: ProjectDocument['subflows']; readonly tasks: ProjectDocument['tasks']; } export type PrepareFlowResult = { readonly kind: 'engine-unsupported'; } | { readonly kind: 'flow-invalid'; readonly validation: FlowValidation; } | { readonly kind: 'flow-not-found'; } | { readonly flow: PreparedFlow; readonly kind: 'prepared'; readonly validation: FlowValidation; }; export declare function prepareFlow(revision: RevisionContent, flowId: string, engineContract: string): Promise; export declare function createRuntimeProgram(prepared: PreparedFlow, entryModuleId: string, engineDigest: string): RuntimeProgram | undefined;