UNPKG

@fiveohhwon/workflows-mcp

Version:

A Model Context Protocol (MCP) implementation for workflow management and automation.

139 lines 4.39 kB
import { z } from 'zod'; export const ActionType = z.enum([ 'tool_call', 'analyze', 'consider', 'research', 'validate', 'summarize', 'decide', 'wait_for_input', 'transform', 'extract', 'compose', 'branch', 'loop', 'parallel', 'checkpoint', 'notify', 'assert', 'retry' ]); export const ErrorHandling = z.enum(['stop', 'continue', 'retry']); export const BaseStep = z.object({ id: z.number().positive(), action: ActionType, description: z.string(), save_result_as: z.string().optional(), error_handling: ErrorHandling.default('stop'), timeout_ms: z.number().positive().optional(), retry_count: z.number().nonnegative().default(0).optional(), dependencies: z.array(z.number().positive()).optional(), show_all_variables: z.boolean().optional(), }); export const ToolCallStep = BaseStep.extend({ action: z.literal('tool_call'), tool_name: z.string(), parameters: z.record(z.any()).default({}), }); export const CognitiveStep = BaseStep.extend({ action: z.enum(['analyze', 'consider', 'research', 'validate', 'summarize', 'decide', 'extract', 'compose']), input_from: z.array(z.string()).optional(), criteria: z.string().optional(), }); export const WaitForInputStep = BaseStep.extend({ action: z.literal('wait_for_input'), prompt: z.string(), input_type: z.enum(['text', 'number', 'boolean', 'json']).default('text'), validation: z.string().optional(), }); export const TransformStep = BaseStep.extend({ action: z.literal('transform'), input_from: z.array(z.string()), transformation: z.string(), }); export const BranchCondition = z.object({ if: z.string(), goto_step: z.number().positive(), }); export const BranchStep = BaseStep.extend({ action: z.literal('branch'), conditions: z.array(BranchCondition), default_step: z.number().positive().optional(), }); export const LoopStep = BaseStep.extend({ action: z.literal('loop'), over: z.string(), as: z.string(), steps: z.array(z.number().positive()), max_iterations: z.number().positive().optional(), }); export const ParallelStep = BaseStep.extend({ action: z.literal('parallel'), parallel_steps: z.array(z.number().positive()), wait_for_all: z.boolean().default(true), }); export const CheckpointStep = BaseStep.extend({ action: z.literal('checkpoint'), checkpoint_name: z.string(), }); export const NotifyStep = BaseStep.extend({ action: z.literal('notify'), message: z.string(), channel: z.string().optional(), }); export const AssertStep = BaseStep.extend({ action: z.literal('assert'), condition: z.string(), message: z.string().optional(), }); export const RetryStep = BaseStep.extend({ action: z.literal('retry'), step_id: z.number().positive(), max_attempts: z.number().positive().default(3), }); export const Step = z.discriminatedUnion('action', [ ToolCallStep, CognitiveStep, WaitForInputStep, TransformStep, BranchStep, LoopStep, ParallelStep, CheckpointStep, NotifyStep, AssertStep, RetryStep, ]); export const InputParameter = z.object({ type: z.enum(['string', 'number', 'boolean', 'array', 'object']), description: z.string(), required: z.boolean().default(true), default: z.any().optional(), validation: z.string().optional(), }); export const WorkflowMetadata = z.object({ created_at: z.string().datetime(), updated_at: z.string().datetime(), created_by: z.string().optional(), times_run: z.number().nonnegative().default(0), average_duration_ms: z.number().nonnegative().optional(), success_rate: z.number().min(0).max(1).optional(), last_run_at: z.string().datetime().optional(), }); export const Workflow = z.object({ id: z.string().uuid(), name: z.string().min(1), description: z.string(), goal: z.string(), version: z.string().regex(/^\d+\.\d+\.\d+$/), tags: z.array(z.string()).default([]), inputs: z.record(InputParameter).default({}), outputs: z.array(z.string()).optional(), required_tools: z.array(z.string()).optional(), steps: z.array(Step).min(1), metadata: WorkflowMetadata.optional(), is_deleted: z.boolean().default(false), strict_dependencies: z.boolean().optional(), }); //# sourceMappingURL=workflow.js.map