import { type JobPermission, type JobRetryConfig } from './job.metadata'; import { type ToolInputType, type ToolOutputType } from './tool.metadata'; declare global { /** * Declarative metadata extends to the Workflow decorator. */ interface ExtendFrontMcpWorkflowMetadata { } } export interface WorkflowStepResult { outputs: Record; state: 'completed' | 'failed' | 'skipped'; } export interface WorkflowStepContext { get(alias: string): WorkflowStepResult; } export interface WorkflowStep { /** Step identifier (like GitHub Actions `id`). */ id: string; /** Reference to a registered job name. */ jobName: string; /** Static input or dynamic callback from previous steps. */ input?: Record | ((steps: WorkflowStepContext) => Record); /** Step IDs that must complete before this step. */ dependsOn?: string[]; /** Condition callback. Skip if returns false. */ condition?: (steps: WorkflowStepContext) => boolean; /** Continue workflow even if this step fails. Default: false */ continueOnError?: boolean; /** Per-step timeout override in ms. */ timeout?: number; /** Per-step retry override. */ retry?: JobRetryConfig; } export type WorkflowTriggerType = 'manual' | 'webhook' | 'event'; export interface WorkflowWebhookConfig { /** Custom webhook path. Default: /workflows/webhook/{name} */ path?: string; /** Webhook secret for validation. */ secret?: string; /** Allowed HTTP methods. Default: ['POST'] */ methods?: ('GET' | 'POST')[]; } /** * Declarative metadata describing a Workflow. * Workflows connect jobs into managed steps with triggers. */ export interface WorkflowMetadata extends ExtendFrontMcpWorkflowMetadata { /** * Optional unique identifier for the workflow. */ id?: string; /** * Human-readable name of the workflow. */ name: string; /** * Short summary describing what the workflow does. */ description?: string; /** * Ordered step definitions. */ steps: WorkflowStep[]; /** * Trigger type. Default: 'manual' */ trigger?: WorkflowTriggerType; /** * Webhook configuration (when trigger is 'webhook'). */ webhook?: WorkflowWebhookConfig; /** * Maximum total execution time in ms. Default: 600000 (10 min). */ timeout?: number; /** * Maximum parallel step concurrency. Default: 5 */ maxConcurrency?: number; /** * Tags for categorization and filtering. */ tags?: string[]; /** * Labels for fine-grained categorization. */ labels?: Record; /** * If true, the workflow will not be shown in discovery/listing. * Default: false */ hideFromDiscovery?: boolean; /** * Permission rules for this workflow. */ permissions?: JobPermission[]; /** * Workflow-level input schema (passed to first steps). */ inputSchema?: ToolInputType; /** * Workflow-level output schema (from final steps). */ outputSchema?: ToolOutputType; } export declare const frontMcpWorkflowMetadataSchema: import("@frontmcp/lazy-zod").ZodObject<{ id: import("@frontmcp/lazy-zod").ZodOptional; name: import("@frontmcp/lazy-zod").ZodString; description: import("@frontmcp/lazy-zod").ZodOptional; steps: import("@frontmcp/lazy-zod").ZodArray, import("zod").ZodFunction]>>; dependsOn: import("@frontmcp/lazy-zod").ZodOptional>; condition: import("@frontmcp/lazy-zod").ZodOptional>; continueOnError: import("@frontmcp/lazy-zod").ZodDefault>; timeout: import("@frontmcp/lazy-zod").ZodOptional; retry: import("@frontmcp/lazy-zod").ZodOptional>; backoffMs: import("@frontmcp/lazy-zod").ZodDefault>; backoffMultiplier: import("@frontmcp/lazy-zod").ZodDefault>; maxBackoffMs: import("@frontmcp/lazy-zod").ZodDefault>; }, import("zod/v4/core").$strip>>; }, import("zod/v4/core").$strip>>; trigger: import("@frontmcp/lazy-zod").ZodDefault>>; webhook: import("@frontmcp/lazy-zod").ZodOptional; secret: import("@frontmcp/lazy-zod").ZodOptional; methods: import("@frontmcp/lazy-zod").ZodDefault>>>; }, import("zod/v4/core").$strip>>; timeout: import("@frontmcp/lazy-zod").ZodDefault>; maxConcurrency: import("@frontmcp/lazy-zod").ZodDefault>; tags: import("@frontmcp/lazy-zod").ZodOptional>; labels: import("@frontmcp/lazy-zod").ZodOptional>; hideFromDiscovery: import("@frontmcp/lazy-zod").ZodDefault>; permissions: import("@frontmcp/lazy-zod").ZodOptional; roles: import("@frontmcp/lazy-zod").ZodOptional>; scopes: import("@frontmcp/lazy-zod").ZodOptional>; custom: import("@frontmcp/lazy-zod").ZodOptional>; }, import("zod/v4/core").$strip>>>; inputSchema: import("@frontmcp/lazy-zod").ZodOptional>; outputSchema: import("@frontmcp/lazy-zod").ZodOptional>; }, import("zod/v4/core").$loose>; //# sourceMappingURL=workflow.metadata.d.ts.map