@geenius/ai-workflow 0.5.0 β†’ 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../shared/src/utils/interpolation.ts","../../shared/src/errors.ts","../../shared/src/utils/expression.ts","../../shared/src/utils/cost.ts","../../shared/src/engine.ts","../../shared/src/validators.ts","../../shared/src/templates.ts","../src/hooks/useWorkflow.ts","../src/hooks/useWorkflowBuilder.ts","../src/hooks/useWorkflowRun.ts","../src/hooks/useWorkflowStep.ts","../src/hooks/useApprovalGate.ts","../src/hooks/useWorkflowTemplates.ts","../src/lib/cn.ts","../src/lib/cva.ts","../src/components/StepNode.tsx","../src/components/StepConnector.tsx","../src/components/WorkflowCanvas.tsx","../src/components/StepConfigPanel.tsx","../src/components/WorkflowRunPanel.tsx","../src/components/ApprovalModal.tsx","../src/components/WorkflowToolbar.tsx","../src/components/StepPalette.tsx","../src/pages/WorkflowBuilderPage.tsx","../src/pages/WorkflowRunsPage.tsx"],"names":["isRecord","useState","useCallback","useMemo","jsxs","jsx","motion","AnimatePresence","useRef","useEffect","result","STATUS_ICONS"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @module WorkflowInterpolationUtils\n * @package @geenius/ai-workflow-shared\n * @description Template-variable interpolation helpers for workflow prompts,\n * webhook bodies, and approval copy. These functions resolve dot paths and\n * replace `{{variable}}` markers using the workflow runtime context.\n */\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object')\n}\n\n/** Resolve a dot-path like \"user.name\" from a nested object */\nfunction resolvePath(obj: Record<string, unknown>, path: string): unknown {\n return path.split('.').reduce<unknown>((acc, key) => {\n if (isRecord(acc)) {\n return acc[key]\n }\n return undefined\n }, obj)\n}\n\n/**\n * Interpolate {{variable}} or {{nested.path}} references in a string.\n * Supports optional default values: {{varName|default}}.\n */\nexport function interpolate(template: string, vars: Record<string, unknown>): string {\n return template.replace(/\\{\\{([^}]+)\\}\\}/g, (match, expr: string) => {\n const [path, defaultValue] = expr.trim().split('|').map((s: string) => s.trim())\n const val = resolvePath(vars, path)\n if (val !== undefined && val !== null) {\n return typeof val === 'object' ? JSON.stringify(val) : String(val)\n }\n return defaultValue ?? ''\n })\n}\n\n/**\n * Extract all variable references from a template string.\n * Returns unique variable names (without defaults).\n */\nexport function extractVariables(template: string): string[] {\n const vars = new Set<string>()\n const re = /\\{\\{([^}]+)\\}\\}/g\n let m: RegExpExecArray | null\n while ((m = re.exec(template)) !== null) {\n const path = m[1].trim().split('|')[0].trim()\n vars.add(path.split('.')[0]) // add root variable name\n }\n return [...vars]\n}\n\n/**\n * Check if all required variables in a template are present in the vars object.\n * Returns missing variable names.\n */\nexport function findMissingVariables(template: string, vars: Record<string, unknown>): string[] {\n const required = extractVariables(template)\n return required.filter(v => vars[v] === undefined || vars[v] === null)\n}\n","/**\n * @module WorkflowErrors\n * @package @geenius/ai-workflow-shared\n * @description Package-specific typed error classes for workflow configuration,\n * execution, graph validation, and expression evaluation. These errors extend\n * the shared Geenius error base so consumers can discriminate failures safely.\n */\n\nimport { ErrorCode, GeeniusError } from '@geenius/tools/errors'\n\n/**\n * Shared context payload for workflow failures.\n *\n * @property stepId Optional workflow step identifier related to the failure.\n * @property workflowId Optional workflow identifier related to the failure.\n * @property expression Optional expression string that failed to parse or evaluate.\n * @property details Arbitrary structured metadata that helps consumers debug failures.\n */\nexport interface WorkflowErrorContext {\n [key: string]: unknown\n stepId?: string\n workflowId?: string\n expression?: string\n details?: Record<string, unknown>\n}\n\n/**\n * Base typed error for the AI workflow package.\n */\nexport class WorkflowError extends GeeniusError {\n /**\n * Create a structured workflow error.\n *\n * @param options Error metadata, message, and optional structured context.\n * @returns A typed workflow error instance.\n */\n constructor(options: {\n code?: ErrorCode\n message: string\n cause?: unknown\n context?: WorkflowErrorContext\n }) {\n super({\n code: options.code ?? ErrorCode.INTERNAL,\n message: options.message,\n cause: options.cause,\n context: options.context,\n })\n this.name = 'WorkflowError'\n Object.setPrototypeOf(this, WorkflowError.prototype)\n }\n}\n\n/**\n * Error raised when workflow configuration is invalid or incomplete.\n */\nexport class WorkflowConfigurationError extends WorkflowError {\n /**\n * Create a configuration error for invalid workflow setup.\n *\n * @param message Human-readable explanation of the invalid configuration.\n * @param context Optional structured metadata describing the failing config area.\n * @returns A typed workflow configuration error.\n */\n constructor(message: string, context?: WorkflowErrorContext) {\n super({\n code: ErrorCode.INVALID_CONFIG,\n message,\n context,\n })\n this.name = 'WorkflowConfigurationError'\n Object.setPrototypeOf(this, WorkflowConfigurationError.prototype)\n }\n}\n\n/**\n * Error raised when workflow execution fails at runtime.\n */\nexport class WorkflowExecutionError extends WorkflowError {\n /**\n * Create an execution error for a workflow runtime failure.\n *\n * @param message Human-readable explanation of the runtime failure.\n * @param context Optional structured metadata describing the failing execution path.\n * @param cause Optional underlying exception that triggered the runtime failure.\n * @returns A typed workflow execution error.\n */\n constructor(message: string, context?: WorkflowErrorContext, cause?: unknown) {\n super({\n code: ErrorCode.INTERNAL,\n message,\n cause,\n context,\n })\n this.name = 'WorkflowExecutionError'\n Object.setPrototypeOf(this, WorkflowExecutionError.prototype)\n }\n}\n\n/**\n * Error raised when a workflow DAG is invalid.\n */\nexport class WorkflowGraphError extends WorkflowError {\n /**\n * Create a graph-validation error for an invalid workflow topology.\n *\n * @param message Human-readable explanation of the graph validation failure.\n * @param context Optional structured metadata describing the invalid topology.\n * @returns A typed workflow graph error.\n */\n constructor(message: string, context?: WorkflowErrorContext) {\n super({\n code: ErrorCode.VALIDATION,\n message,\n context,\n })\n this.name = 'WorkflowGraphError'\n Object.setPrototypeOf(this, WorkflowGraphError.prototype)\n }\n}\n\n/**\n * Error raised when workflow expressions fail to parse or evaluate safely.\n */\nexport class WorkflowExpressionError extends WorkflowError {\n /**\n * Create an expression error for a failed transform or condition expression.\n *\n * @param message Human-readable explanation of the expression failure.\n * @param context Optional structured metadata including the source expression.\n * @param cause Optional underlying parse or runtime error.\n * @returns A typed workflow expression error.\n */\n constructor(message: string, context?: WorkflowErrorContext, cause?: unknown) {\n super({\n code: ErrorCode.VALIDATION,\n message,\n cause,\n context,\n })\n this.name = 'WorkflowExpressionError'\n Object.setPrototypeOf(this, WorkflowExpressionError.prototype)\n }\n}\n\n/**\n * Normalize unknown thrown values into an exported workflow error type.\n *\n * @param error Unknown thrown value from workflow code.\n * @param fallbackMessage Message used when the original value is not informative.\n * @param context Optional structured context describing the failing workflow area.\n * @returns A typed workflow error instance suitable for rethrowing or storing.\n */\nexport function normalizeWorkflowError(\n error: unknown,\n fallbackMessage: string,\n context?: WorkflowErrorContext,\n): WorkflowError {\n if (error instanceof WorkflowError) {\n return error\n }\n\n if (error instanceof GeeniusError) {\n return new WorkflowError({\n code: error.code,\n message: error.message,\n cause: error,\n context,\n })\n }\n\n if (error instanceof Error) {\n return new WorkflowExecutionError(error.message, context, error)\n }\n\n return new WorkflowExecutionError(fallbackMessage, context, error)\n}\n","/**\n * @module WorkflowExpressionUtils\n * @package @geenius/ai-workflow-shared\n * @description Safe expression helpers for transform and condition steps. This\n * file implements the parser and evaluator used by the workflow engine to\n * support a constrained JavaScript-like expression language without `eval`.\n */\n\nimport { WorkflowExpressionError } from \"../errors\";\n\ntype TokenType =\n | \"number\"\n | \"string\"\n | \"identifier\"\n | \"operator\"\n | \"punctuator\"\n | \"eof\";\n\ntype ExpressionOperand = string | number | bigint | boolean | null | undefined;\ntype RelationalOperand = string | number | bigint | boolean;\n\ninterface Token {\n type: TokenType;\n value: string;\n}\n\ninterface Reference {\n __ref: true;\n base: unknown;\n key: string | number | symbol;\n value: unknown;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === \"object\");\n}\n\nfunction isExpressionOperand(value: unknown): value is ExpressionOperand {\n return (\n value === null ||\n value === undefined ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"bigint\" ||\n typeof value === \"boolean\"\n );\n}\n\nfunction isRelationalOperand(value: unknown): value is RelationalOperand {\n return (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"bigint\" ||\n typeof value === \"boolean\"\n );\n}\n\nfunction toPropertyKey(value: unknown): string | number | symbol {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"symbol\"\n ) {\n return value;\n }\n\n throw createExpressionError(\n \"Computed property access expects a string, number, or symbol key.\",\n );\n}\n\nfunction createExpressionError(\n message: string,\n expression?: string,\n cause?: unknown,\n): WorkflowExpressionError {\n return new WorkflowExpressionError(\n message,\n expression ? { expression } : undefined,\n cause,\n );\n}\n\nconst FORBIDDEN_PROPERTIES = new Set([\n \"__proto__\",\n \"prototype\",\n \"constructor\",\n \"caller\",\n \"callee\",\n \"arguments\",\n]);\n\nconst SAFE_GLOBALS: Record<string, unknown> = Object.freeze({\n Math,\n JSON: Object.freeze({\n parse: JSON.parse.bind(JSON),\n stringify: JSON.stringify.bind(JSON),\n }),\n Date: Object.freeze({\n now: Date.now.bind(Date),\n parse: Date.parse.bind(Date),\n UTC: Date.UTC.bind(Date),\n }),\n Number: (value: unknown) => Number(value),\n String: (value: unknown) => String(value),\n Boolean: (value: unknown) => Boolean(value),\n});\n\nfunction isIdentifierStart(char: string): boolean {\n return /[A-Za-z_$]/.test(char);\n}\n\nfunction isIdentifierPart(char: string): boolean {\n return /[A-Za-z0-9_$]/.test(char);\n}\n\nfunction isDigit(char: string): boolean {\n return /[0-9]/.test(char);\n}\n\nfunction tokenize(expression: string): Token[] {\n const tokens: Token[] = [];\n let index = 0;\n\n const push = (type: TokenType, value: string) => {\n tokens.push({ type, value });\n };\n\n while (index < expression.length) {\n const char = expression[index];\n\n if (/\\s/.test(char)) {\n index++;\n continue;\n }\n\n const three = expression.slice(index, index + 3);\n if (three === \"...\") {\n push(\"operator\", \"...\");\n index += 3;\n continue;\n }\n\n const multi = [\n \"===\",\n \"!==\",\n \">=\",\n \"<=\",\n \"&&\",\n \"||\",\n \"??\",\n \"==\",\n \"!=\",\n \"**\",\n ];\n const matched = multi.find((op) => expression.startsWith(op, index));\n if (matched) {\n push(\"operator\", matched);\n index += matched.length;\n continue;\n }\n\n if (\n isDigit(char) ||\n (char === \".\" && isDigit(expression[index + 1] ?? \"\"))\n ) {\n let end = index + 1;\n while (end < expression.length && /[0-9.]/.test(expression[end])) end++;\n push(\"number\", expression.slice(index, end));\n index = end;\n continue;\n }\n\n if (char === '\"' || char === \"'\") {\n const quote = char;\n let end = index + 1;\n let value = \"\";\n while (end < expression.length) {\n const current = expression[end];\n if (current === \"\\\\\") {\n const next = expression[end + 1];\n if (next === undefined)\n throw createExpressionError(\n \"Unterminated string literal.\",\n expression,\n );\n const escapes: Record<string, string> = {\n n: \"\\n\",\n r: \"\\r\",\n t: \"\\t\",\n b: \"\\b\",\n f: \"\\f\",\n \"\\\\\": \"\\\\\",\n '\"': '\"',\n \"'\": \"'\",\n };\n value += escapes[next] ?? next;\n end += 2;\n continue;\n }\n if (current === quote) break;\n value += current;\n end++;\n }\n if (expression[end] !== quote)\n throw createExpressionError(\"Unterminated string literal.\", expression);\n push(\"string\", value);\n index = end + 1;\n continue;\n }\n\n if (isIdentifierStart(char)) {\n let end = index + 1;\n while (end < expression.length && isIdentifierPart(expression[end]))\n end++;\n push(\"identifier\", expression.slice(index, end));\n index = end;\n continue;\n }\n\n const punctuators = [\"(\", \")\", \"{\", \"}\", \"[\", \"]\", \".\", \",\", \":\", \"?\"];\n if (punctuators.includes(char)) {\n push(\"punctuator\", char);\n index++;\n continue;\n }\n\n const operators = [\"+\", \"-\", \"*\", \"/\", \"%\", \"!\", \"<\", \">\", \"=\"];\n if (operators.includes(char)) {\n push(\"operator\", char);\n index++;\n continue;\n }\n\n throw createExpressionError(\n `Unsupported token in expression: ${char}`,\n expression,\n );\n }\n\n tokens.push({ type: \"eof\", value: \"\" });\n return tokens;\n}\n\nclass ExpressionParser {\n private readonly tokens: Token[];\n private index = 0;\n private readonly context: Record<string, unknown>;\n\n constructor(expression: string, context: Record<string, unknown>) {\n this.tokens = tokenize(expression);\n this.context = context;\n }\n\n evaluate(): unknown {\n const result = this.parseConditional();\n this.expect(\"eof\");\n return this.unwrap(result);\n }\n\n private current(): Token {\n return this.tokens[this.index] ?? { type: \"eof\", value: \"\" };\n }\n\n private advance(): Token {\n const token = this.current();\n this.index++;\n return token;\n }\n\n private match(type: TokenType, value?: string): boolean {\n const token = this.current();\n if (token.type !== type) return false;\n if (value !== undefined && token.value !== value) return false;\n this.index++;\n return true;\n }\n\n private expect(type: TokenType, value?: string): Token {\n const token = this.current();\n if (token.type !== type || (value !== undefined && token.value !== value)) {\n throw createExpressionError(\n `Unexpected token \"${token.value}\" in expression.`,\n );\n }\n this.index++;\n return token;\n }\n\n private unwrap(value: unknown): unknown {\n if (this.isReference(value)) return value.value;\n return value;\n }\n\n private unwrapOperand(value: unknown): ExpressionOperand {\n const operand = this.unwrap(value);\n\n if (!isExpressionOperand(operand)) {\n throw createExpressionError(\n \"Expression operand must resolve to a primitive value.\",\n );\n }\n\n return operand;\n }\n\n private relationalOperand(value: unknown): RelationalOperand {\n const operand = this.unwrap(value);\n\n if (!isRelationalOperand(operand)) {\n throw createExpressionError(\n \"Relational comparisons require primitive operands.\",\n );\n }\n\n return operand;\n }\n\n private isReference(value: unknown): value is Reference {\n return isRecord(value) && value.__ref === true;\n }\n\n private toReference(base: unknown, key: string | number | symbol): Reference {\n if (typeof key === \"string\" && FORBIDDEN_PROPERTIES.has(key)) {\n throw createExpressionError(\n `Access to property \"${key}\" is not allowed.`,\n );\n }\n if (base === null || base === undefined) {\n throw createExpressionError(\n `Cannot read property \"${String(key)}\" of ${base}.`,\n );\n }\n return {\n __ref: true,\n base,\n key,\n value: Reflect.get(Object(base), key),\n };\n }\n\n private resolveIdentifier(name: string): unknown {\n if (name === \"true\") return true;\n if (name === \"false\") return false;\n if (name === \"null\") return null;\n if (name === \"undefined\") return undefined;\n if (Object.prototype.hasOwnProperty.call(this.context, name)) {\n return this.context[name];\n }\n if (Object.prototype.hasOwnProperty.call(SAFE_GLOBALS, name)) {\n return SAFE_GLOBALS[name];\n }\n throw createExpressionError(`Unknown identifier in expression: ${name}.`);\n }\n\n private parseConditional(): unknown {\n let test = this.parseNullish();\n if (this.match(\"punctuator\", \"?\")) {\n const consequent = this.parseConditional();\n this.expect(\"punctuator\", \":\");\n const alternate = this.parseConditional();\n test = this.unwrap(test) ? consequent : alternate;\n }\n return test;\n }\n\n private parseNullish(): unknown {\n let left = this.parseLogicalOr();\n while (this.match(\"operator\", \"??\")) {\n const right = this.parseLogicalOr();\n left = this.unwrap(left) ?? right;\n }\n return left;\n }\n\n private parseLogicalOr(): unknown {\n let left = this.parseLogicalAnd();\n while (this.match(\"operator\", \"||\")) {\n const right = this.parseLogicalAnd();\n left = this.unwrap(left) || right;\n }\n return left;\n }\n\n private parseLogicalAnd(): unknown {\n let left = this.parseEquality();\n while (this.match(\"operator\", \"&&\")) {\n const right = this.parseEquality();\n left = this.unwrap(left) && right;\n }\n return left;\n }\n\n private parseEquality(): unknown {\n let left = this.parseComparison();\n while (true) {\n if (this.match(\"operator\", \"===\")) {\n const right = this.parseComparison();\n left = this.unwrap(left) === this.unwrap(right);\n continue;\n }\n if (this.match(\"operator\", \"!==\")) {\n const right = this.parseComparison();\n left = this.unwrap(left) !== this.unwrap(right);\n continue;\n }\n if (this.match(\"operator\", \"==\")) {\n const right = this.parseComparison();\n left = this.unwrap(left) == this.unwrap(right);\n continue;\n }\n if (this.match(\"operator\", \"!=\")) {\n const right = this.parseComparison();\n left = this.unwrap(left) != this.unwrap(right);\n continue;\n }\n return left;\n }\n }\n\n private compare(\n left: unknown,\n right: unknown,\n operator: \"<\" | \"<=\" | \">\" | \">=\",\n ): boolean {\n const leftValue = this.relationalOperand(left);\n const rightValue = this.relationalOperand(right);\n\n switch (operator) {\n case \"<\":\n return leftValue < rightValue;\n case \"<=\":\n return leftValue <= rightValue;\n case \">\":\n return leftValue > rightValue;\n case \">=\":\n return leftValue >= rightValue;\n }\n }\n\n private add(left: unknown, right: unknown): unknown {\n const leftValue = this.unwrapOperand(left);\n const rightValue = this.unwrapOperand(right);\n\n return typeof leftValue === \"string\" || typeof rightValue === \"string\"\n ? String(leftValue) + String(rightValue)\n : Number(leftValue) + Number(rightValue);\n }\n\n private subtract(left: unknown, right: unknown): number {\n return Number(this.unwrapOperand(left)) - Number(this.unwrapOperand(right));\n }\n\n private multiply(left: unknown, right: unknown): number {\n return Number(this.unwrapOperand(left)) * Number(this.unwrapOperand(right));\n }\n\n private divide(left: unknown, right: unknown): number {\n return Number(this.unwrapOperand(left)) / Number(this.unwrapOperand(right));\n }\n\n private remainder(left: unknown, right: unknown): number {\n return Number(this.unwrapOperand(left)) % Number(this.unwrapOperand(right));\n }\n\n private exponent(left: unknown, right: unknown): number {\n return (\n Number(this.unwrapOperand(left)) ** Number(this.unwrapOperand(right))\n );\n }\n\n private parseComparison(): unknown {\n let left = this.parseAdditive();\n while (true) {\n if (this.match(\"operator\", \"<\")) {\n const right = this.parseAdditive();\n left = this.compare(left, right, \"<\");\n continue;\n }\n if (this.match(\"operator\", \"<=\")) {\n const right = this.parseAdditive();\n left = this.compare(left, right, \"<=\");\n continue;\n }\n if (this.match(\"operator\", \">\")) {\n const right = this.parseAdditive();\n left = this.compare(left, right, \">\");\n continue;\n }\n if (this.match(\"operator\", \">=\")) {\n const right = this.parseAdditive();\n left = this.compare(left, right, \">=\");\n continue;\n }\n return left;\n }\n }\n\n private parseAdditive(): unknown {\n let left = this.parseMultiplicative();\n while (true) {\n if (this.match(\"operator\", \"+\")) {\n const right = this.parseMultiplicative();\n left = this.add(left, right);\n continue;\n }\n if (this.match(\"operator\", \"-\")) {\n const right = this.parseMultiplicative();\n left = this.subtract(left, right);\n continue;\n }\n return left;\n }\n }\n\n private parseMultiplicative(): unknown {\n let left = this.parseUnary();\n while (true) {\n if (this.match(\"operator\", \"*\")) {\n const right = this.parseUnary();\n left = this.multiply(left, right);\n continue;\n }\n if (this.match(\"operator\", \"/\")) {\n const right = this.parseUnary();\n left = this.divide(left, right);\n continue;\n }\n if (this.match(\"operator\", \"%\")) {\n const right = this.parseUnary();\n left = this.remainder(left, right);\n continue;\n }\n if (this.match(\"operator\", \"**\")) {\n const right = this.parseUnary();\n left = this.exponent(left, right);\n continue;\n }\n return left;\n }\n }\n\n private parseUnary(): unknown {\n if (this.match(\"operator\", \"!\")) {\n return !this.unwrap(this.parseUnary());\n }\n if (this.match(\"operator\", \"+\")) {\n return Number(this.unwrap(this.parseUnary()));\n }\n if (this.match(\"operator\", \"-\")) {\n return -Number(this.unwrap(this.parseUnary()));\n }\n if (\n this.current().type === \"identifier\" &&\n this.current().value === \"typeof\"\n ) {\n this.advance();\n return typeof this.unwrap(this.parseUnary());\n }\n return this.parseCallMember();\n }\n\n private parseCallMember(): unknown {\n let value = this.parsePrimary();\n\n while (true) {\n if (this.match(\"punctuator\", \".\")) {\n const property = this.expect(\"identifier\").value;\n const target = this.isReference(value) ? value.value : value;\n value = this.toReference(target, property);\n continue;\n }\n\n if (this.match(\"punctuator\", \"[\")) {\n const property = this.parseConditional();\n this.expect(\"punctuator\", \"]\");\n const target = this.isReference(value) ? value.value : value;\n value = this.toReference(target, toPropertyKey(this.unwrap(property)));\n continue;\n }\n\n if (this.match(\"punctuator\", \"(\")) {\n const args: unknown[] = [];\n if (!this.match(\"punctuator\", \")\")) {\n do {\n args.push(this.unwrap(this.parseConditional()));\n } while (this.match(\"punctuator\", \",\"));\n this.expect(\"punctuator\", \")\");\n }\n\n const callee = this.isReference(value) ? value.value : value;\n if (typeof callee !== \"function\") {\n throw createExpressionError(\n \"Expression attempted to call a non-function value.\",\n );\n }\n\n const thisArg = this.isReference(value) ? value.base : undefined;\n value = callee.apply(thisArg, args);\n continue;\n }\n\n return value;\n }\n }\n\n private parsePrimary(): unknown {\n const token = this.current();\n\n if (token.type === \"number\") {\n this.advance();\n return Number(token.value);\n }\n\n if (token.type === \"string\") {\n this.advance();\n return token.value;\n }\n\n if (token.type === \"identifier\") {\n this.advance();\n return this.resolveIdentifier(token.value);\n }\n\n if (this.match(\"punctuator\", \"(\")) {\n const value = this.parseConditional();\n this.expect(\"punctuator\", \")\");\n return value;\n }\n\n if (this.match(\"punctuator\", \"[\")) {\n const items: unknown[] = [];\n if (!this.match(\"punctuator\", \"]\")) {\n do {\n if (this.match(\"operator\", \"...\")) {\n const spread = this.unwrap(this.parseConditional());\n if (Array.isArray(spread)) {\n items.push(...spread);\n } else {\n throw createExpressionError(\n \"Array spread expects an array value.\",\n );\n }\n } else {\n items.push(this.unwrap(this.parseConditional()));\n }\n } while (this.match(\"punctuator\", \",\"));\n this.expect(\"punctuator\", \"]\");\n }\n return items;\n }\n\n if (this.match(\"punctuator\", \"{\")) {\n const out: Record<string, unknown> = {};\n if (!this.match(\"punctuator\", \"}\")) {\n do {\n if (this.match(\"operator\", \"...\")) {\n const spread = this.unwrap(this.parseConditional());\n if (spread && typeof spread === \"object\") {\n Object.assign(out, spread);\n } else {\n throw createExpressionError(\n \"Object spread expects an object value.\",\n );\n }\n } else {\n let key: string;\n if (\n this.current().type === \"string\" ||\n this.current().type === \"number\"\n ) {\n key = String(this.advance().value);\n } else {\n key = this.expect(\"identifier\").value;\n }\n\n if (this.match(\"punctuator\", \":\")) {\n out[key] = this.unwrap(this.parseConditional());\n } else {\n // Shorthand property\n out[key] = this.resolveIdentifier(key);\n }\n }\n } while (this.match(\"punctuator\", \",\"));\n this.expect(\"punctuator\", \"}\");\n }\n return out;\n }\n\n throw createExpressionError(\n `Unexpected token \"${token.value}\" in expression.`,\n );\n }\n}\n\n/**\n * Evaluate a workflow expression against the provided variables.\n */\nexport function evaluateExpression(\n expression: string,\n context: Record<string, unknown>,\n): unknown {\n const trimmed = expression.trim();\n if (!trimmed)\n throw createExpressionError(\"Expression cannot be empty.\", expression);\n\n try {\n return new ExpressionParser(trimmed, context).evaluate();\n } catch (error) {\n throw error instanceof WorkflowExpressionError\n ? error\n : createExpressionError(\n \"Failed to evaluate workflow expression.\",\n expression,\n error,\n );\n }\n}\n","/**\n * @module WorkflowCostUtils\n * @package @geenius/ai-workflow-shared\n * @description Cost and token estimation helpers for workflow definitions and\n * completed runs. These utilities keep LLM spend reporting consistent across\n * the builder, run panel, and Storybook surfaces.\n */\n\nimport type { WorkflowDefinition, LLMCallConfig, StepResult } from '../types'\n\n/** Cost-per-token rates by model (USD per 1K tokens) */\nexport const MODEL_RATES: Record<string, { input: number; output: number }> = {\n 'gpt-4o': { input: 0.0025, output: 0.01 },\n 'gpt-4o-mini': { input: 0.00015, output: 0.0006 },\n 'gpt-4-turbo': { input: 0.01, output: 0.03 },\n 'claude-3.5-sonnet': { input: 0.003, output: 0.015 },\n 'claude-3-haiku': { input: 0.00025, output: 0.00125 },\n 'gemini-pro': { input: 0.00025, output: 0.0005 },\n 'gemini-flash': { input: 0.000075, output: 0.0003 },\n default: { input: 0.001, output: 0.003 },\n}\n\n/** Rough token estimation (1 token β‰ˆ 4 chars for English text) */\nexport function estimateTokens(text: string): number {\n return Math.ceil(text.length / 4)\n}\n\n/** Estimate the token count for an LLM step */\nexport function estimateStepTokens(config: LLMCallConfig, vars: Record<string, unknown> = {}): { inputTokens: number; outputTokens: number } {\n const systemTokens = estimateTokens(config.systemPrompt)\n const templateTokens = estimateTokens(config.userPromptTemplate)\n // Estimate expanded template by adding variable content lengths\n const varTokens = Object.values(vars).reduce<number>((acc, v) => acc + estimateTokens(String(v ?? '')), 0)\n const inputTokens = systemTokens + templateTokens + varTokens\n const outputTokens = config.maxTokens ?? Math.ceil(inputTokens * 0.6)\n return { inputTokens, outputTokens }\n}\n\n/** Estimate cost for a single step */\nexport function estimateStepCost(config: LLMCallConfig, vars: Record<string, unknown> = {}): number {\n const { inputTokens, outputTokens } = estimateStepTokens(config, vars)\n const rates = MODEL_RATES[config.model ?? 'default'] ?? MODEL_RATES.default\n return (inputTokens / 1000) * rates.input + (outputTokens / 1000) * rates.output\n}\n\n/** Estimate total cost for an entire workflow definition */\nexport function estimateWorkflowCost(definition: WorkflowDefinition, vars: Record<string, unknown> = {}): { totalCostUsd: number; totalTokens: number; stepEstimates: Array<{ stepId: string; stepName: string; costUsd: number; tokens: number }> } {\n const stepEstimates: Array<{ stepId: string; stepName: string; costUsd: number; tokens: number }> = []\n let totalCostUsd = 0\n let totalTokens = 0\n\n for (const step of definition.steps) {\n if (step.config.type === 'llm-call') {\n const cost = estimateStepCost(step.config, vars)\n const { inputTokens, outputTokens } = estimateStepTokens(step.config, vars)\n const tokens = inputTokens + outputTokens\n stepEstimates.push({ stepId: step.id, stepName: step.name, costUsd: cost, tokens })\n totalCostUsd += cost\n totalTokens += tokens\n }\n }\n\n return { totalCostUsd, totalTokens, stepEstimates }\n}\n\n/** Calculate actual cost from completed step results */\nexport function calculateRunCost(results: StepResult[]): { totalCostUsd: number; totalTokens: number } {\n let totalCostUsd = 0\n let totalTokens = 0\n for (const r of results) {\n if (r.costUsd) totalCostUsd += r.costUsd\n if (r.tokens) totalTokens += r.tokens\n }\n return { totalCostUsd, totalTokens }\n}\n\n/** Format cost as a human-readable string */\nexport function formatCost(usd: number): string {\n if (usd < 0.01) return `$${(usd * 100).toFixed(2)}Β’`\n return `$${usd.toFixed(4)}`\n}\n","/**\n * @module WorkflowEngine\n * @package @geenius/ai-workflow-shared\n * @description Runtime execution engine for workflow definitions. This file\n * walks the declared DAG in execution order, normalizes retry/error handling,\n * and captures run state that every UI variant can render consistently.\n */\n\nimport type {\n DelayConfig,\n StepResult,\n WorkflowDefinition,\n WorkflowRun,\n WorkflowStepDef,\n} from \"./types\";\nimport { evaluateExpression, interpolate } from \"./utils\";\nimport {\n WorkflowConfigurationError,\n WorkflowExecutionError,\n WorkflowGraphError,\n normalizeWorkflowError,\n} from \"./errors\";\n\n/**\n * Runtime dependencies injected into the workflow engine.\n *\n * The engine stays framework-agnostic by requiring callers to provide LLM,\n * webhook, approval, and custom-step integrations explicitly.\n *\n * @property callLLM Optional callback used to execute `llm-call` steps.\n * @property callWebhook Optional callback used to execute `webhook` steps.\n * @property onApprovalRequired Optional callback used for `human-approval` steps.\n * @property onStepComplete Optional callback invoked after each step result is captured.\n * @property customHandlers Optional registry of named handlers for `custom` steps.\n */\nexport interface WorkflowEngineOptions {\n /** LLM call function for llm-call steps */\n callLLM?: (\n systemPrompt: string,\n userPrompt: string,\n model?: string,\n ) => Promise<{\n content: string;\n tokens?: number;\n costUsd?: number;\n }>;\n /** Webhook call function */\n callWebhook?: (\n url: string,\n method: string,\n body?: string,\n headers?: Record<string, string>,\n ) => Promise<string>;\n /** Human approval callback */\n onApprovalRequired?: (message: string, stepId: string) => Promise<boolean>;\n /** Step event callback */\n onStepComplete?: (result: StepResult) => void;\n /** Custom step handlers */\n customHandlers?: Record<\n string,\n (\n params: Record<string, unknown>,\n vars: Record<string, unknown>,\n ) => Promise<unknown>\n >;\n}\n\n/**\n * Executes workflow definitions against provided runtime integrations.\n */\nexport class WorkflowEngine {\n private options: WorkflowEngineOptions;\n private cancelled = false;\n\n constructor(options: WorkflowEngineOptions) {\n this.options = options;\n }\n\n /**\n * Cancel the in-flight execution loop before the next step begins.\n */\n cancel(): void {\n this.cancelled = true;\n }\n\n /**\n * Execute a workflow definition from start to finish and capture the full\n * run state for UI or persistence layers.\n */\n async execute(\n definition: WorkflowDefinition,\n input: Record<string, unknown> = {},\n ): Promise<WorkflowRun> {\n this.cancelled = false;\n\n const run: WorkflowRun = {\n id: crypto.randomUUID?.() ?? String(Date.now()),\n workflowId: definition.id,\n workflowVersion: definition.version,\n status: \"running\",\n input,\n variables: { ...definition.variables, ...input },\n stepResults: [],\n currentStepIndex: 0,\n triggeredBy: \"\",\n startedAt: Date.now(),\n };\n\n // Topologically sort steps once so step execution follows the declared DAG.\n const sortedSteps = this.topoSort(definition);\n\n for (let i = 0; i < sortedSteps.length; i++) {\n if (this.cancelled) {\n run.status = \"cancelled\";\n break;\n }\n\n run.currentStepIndex = i;\n const stepDef = sortedSteps[i];\n const result = await this.executeStep(stepDef, run.variables, definition);\n\n run.stepResults.push(result);\n this.options.onStepComplete?.(result);\n\n if (result.status === \"failed\" && !stepDef.optional) {\n run.status = \"failed\";\n run.error = result.error;\n break;\n }\n\n // Store output in the workflow variable bag for downstream steps.\n if (\n result.output !== undefined &&\n result.output !== null &&\n \"outputVar\" in stepDef.config\n ) {\n if (stepDef.config.outputVar) {\n run.variables[stepDef.config.outputVar] = result.output;\n }\n }\n\n // Condition steps can skip forward through branches in the sorted plan.\n if (stepDef.config.type === \"condition\") {\n const nextStepId = Boolean(result.output)\n ? stepDef.config.trueStepId\n : stepDef.config.falseStepId;\n\n // Skip to the target step\n const targetIndex = sortedSteps.findIndex((s) => s.id === nextStepId);\n if (targetIndex > i) {\n // Mark skipped steps\n for (let j = i + 1; j < targetIndex; j++) {\n run.stepResults.push({\n stepId: sortedSteps[j].id,\n stepName: sortedSteps[j].name,\n type: sortedSteps[j].type,\n status: \"skipped\",\n durationMs: 0,\n startedAt: Date.now(),\n });\n }\n i = targetIndex - 1; // Will be incremented by loop\n }\n }\n }\n\n if (run.status === \"running\") {\n run.status = \"completed\";\n }\n run.completedAt = Date.now();\n\n return run;\n }\n\n /**\n * Execute one step with retry handling and normalized result capture.\n */\n private async executeStep(\n stepDef: WorkflowStepDef,\n variables: Record<string, unknown>,\n _definition: WorkflowDefinition,\n ): Promise<StepResult> {\n const start = Date.now();\n const baseResult: StepResult = {\n stepId: stepDef.id,\n stepName: stepDef.name,\n type: stepDef.type,\n status: \"running\",\n durationMs: 0,\n startedAt: start,\n };\n\n let attempts = 0;\n const maxAttempts = stepDef.retries?.maxAttempts ?? 1;\n\n while (attempts < maxAttempts) {\n attempts++;\n try {\n const output = await this.runStepLogic(stepDef, variables);\n return {\n ...baseResult,\n status: \"completed\",\n output,\n durationMs: Date.now() - start,\n completedAt: Date.now(),\n };\n } catch (err) {\n if (attempts >= maxAttempts) {\n const workflowError = normalizeWorkflowError(\n err,\n `Workflow step \"${stepDef.name}\" failed.`,\n { stepId: stepDef.id, workflowId: _definition.id },\n );\n return {\n ...baseResult,\n status: \"failed\",\n error: workflowError.message,\n durationMs: Date.now() - start,\n completedAt: Date.now(),\n };\n }\n // Wait before retry\n const backoff = stepDef.retries?.backoffMs ?? 1000;\n await new Promise((r) => setTimeout(r, backoff * 2 ** (attempts - 1)));\n }\n }\n\n return {\n ...baseResult,\n status: \"failed\",\n error: \"Max retries exceeded\",\n durationMs: Date.now() - start,\n };\n }\n\n /**\n * Run the concrete logic for an individual step type.\n */\n private async runStepLogic(\n stepDef: WorkflowStepDef,\n variables: Record<string, unknown>,\n ): Promise<unknown> {\n const config = stepDef.config;\n\n switch (config.type) {\n case \"llm-call\": {\n if (!this.options.callLLM) {\n throw new WorkflowConfigurationError(\n \"No LLM function provided for llm-call steps.\",\n {\n stepId: stepDef.id,\n },\n );\n }\n const userPrompt = this.interpolate(\n config.userPromptTemplate,\n variables,\n );\n const result = await this.options.callLLM(\n config.systemPrompt,\n userPrompt,\n config.model,\n );\n if (config.parseJson) {\n try {\n return JSON.parse(result.content);\n } catch {\n return result.content;\n }\n }\n return result.content;\n }\n\n case \"transform\": {\n const scope = this.buildExpressionScope(config.inputVars, variables);\n return evaluateExpression(config.expression, scope);\n }\n\n case \"condition\": {\n return Boolean(evaluateExpression(config.expression, variables));\n }\n\n case \"human-approval\": {\n if (!this.options.onApprovalRequired) {\n // Auto-approve if no handler\n return true;\n }\n return this.options.onApprovalRequired(config.message, stepDef.id);\n }\n\n case \"webhook\": {\n if (!this.options.callWebhook) {\n throw new WorkflowConfigurationError(\n \"No webhook function provided for webhook steps.\",\n {\n stepId: stepDef.id,\n },\n );\n }\n const body = config.bodyTemplate\n ? interpolate(config.bodyTemplate, variables)\n : undefined;\n return this.options.callWebhook(\n config.url,\n config.method,\n body,\n config.headers,\n );\n }\n\n case \"delay\": {\n await new Promise((r) => setTimeout(r, config.durationMs));\n return null;\n }\n\n case \"custom\": {\n const handler = this.options.customHandlers?.[config.handler];\n if (!handler) {\n throw new WorkflowConfigurationError(\n `No handler registered for custom step \"${config.handler}\".`,\n { stepId: stepDef.id },\n );\n }\n return handler(config.params, variables);\n }\n\n default:\n throw new WorkflowExecutionError(\n `Unsupported step type \"${config.type}\".`,\n {\n stepId: stepDef.id,\n },\n );\n }\n }\n\n /** Interpolate `{{variable}}` references in a string. */\n private interpolate(template: string, vars: Record<string, unknown>): string {\n return interpolate(template, vars);\n }\n\n private buildExpressionScope(\n inputVars: string[],\n variables: Record<string, unknown>,\n ): Record<string, unknown> {\n const scope: Record<string, unknown> = {};\n for (const name of inputVars) {\n scope[name] = variables[name];\n }\n return scope;\n }\n\n /** Topological sort of steps based on declared workflow connections. */\n private topoSort(def: WorkflowDefinition): WorkflowStepDef[] {\n const stepMap = new Map(def.steps.map((s) => [s.id, s]));\n const inDegree = new Map<string, number>();\n const adjacency = new Map<string, string[]>();\n\n for (const step of def.steps) {\n inDegree.set(step.id, 0);\n adjacency.set(step.id, []);\n }\n\n for (const conn of def.connections) {\n adjacency.get(conn.fromStepId)?.push(conn.toStepId);\n inDegree.set(conn.toStepId, (inDegree.get(conn.toStepId) ?? 0) + 1);\n }\n\n const queue: string[] = [];\n for (const [id, degree] of inDegree) {\n if (degree === 0) queue.push(id);\n }\n\n const sorted: WorkflowStepDef[] = [];\n while (queue.length > 0) {\n const id = queue.shift()!;\n const step = stepMap.get(id);\n if (step) sorted.push(step);\n\n for (const neighbor of adjacency.get(id) ?? []) {\n const newDegree = (inDegree.get(neighbor) ?? 1) - 1;\n inDegree.set(neighbor, newDegree);\n if (newDegree === 0) queue.push(neighbor);\n }\n }\n\n if (sorted.length !== def.steps.length) {\n throw new WorkflowGraphError(\n \"Workflow definition contains a cycle and cannot be executed.\",\n {\n workflowId: def.id,\n },\n );\n }\n\n return sorted;\n }\n}\n","/**\n * @module WorkflowValidators\n * @package @geenius/ai-workflow-shared\n * @description Zod schemas and validation helpers for workflow definitions,\n * step configs, runtime results, and graph integrity checks.\n */\nimport { z } from 'zod/v4'\n\n// ============================================================================\n// Step Config Schemas\n// ============================================================================\n\n/**\n * Zod schema for `llm-call` step configs.\n */\nexport const llmCallConfigSchema = z.object({\n type: z.literal('llm-call'),\n model: z.string().optional(),\n systemPrompt: z.string().min(1, 'System prompt is required'),\n userPromptTemplate: z.string().min(1, 'User prompt template is required'),\n temperature: z.number().min(0).max(2).optional(),\n maxTokens: z.number().int().positive().optional(),\n parseJson: z.boolean().optional(),\n outputVar: z.string().min(1, 'Output variable name is required'),\n})\n\n/**\n * Zod schema for `transform` step configs.\n */\nexport const transformConfigSchema = z.object({\n type: z.literal('transform'),\n expression: z.string().min(1, 'Expression is required'),\n inputVars: z.array(z.string()).min(1, 'At least one input variable is required'),\n outputVar: z.string().min(1),\n})\n\n/**\n * Zod schema for `condition` step configs.\n */\nexport const conditionConfigSchema = z.object({\n type: z.literal('condition'),\n expression: z.string().min(1),\n trueStepId: z.string().min(1),\n falseStepId: z.string().min(1),\n})\n\n/**\n * Zod schema for `human-approval` step configs.\n */\nexport const humanApprovalConfigSchema = z.object({\n type: z.literal('human-approval'),\n message: z.string().min(1, 'Approval message is required'),\n approvers: z.array(z.string()).optional(),\n autoApproveAfterMs: z.number().positive().optional(),\n})\n\n/**\n * Zod schema for `webhook` step configs.\n */\nexport const webhookConfigSchema = z.object({\n type: z.literal('webhook'),\n url: z.string().url('Valid URL required'),\n method: z.enum(['GET', 'POST', 'PUT', 'DELETE']),\n headers: z.record(z.string(), z.string()).optional(),\n bodyTemplate: z.string().optional(),\n outputVar: z.string().min(1),\n})\n\n/**\n * Zod schema for `delay` step configs.\n */\nexport const delayConfigSchema = z.object({\n type: z.literal('delay'),\n durationMs: z.number().int().positive('Duration must be positive'),\n})\n\n/**\n * Zod schema for `parallel` step configs.\n */\nexport const parallelConfigSchema = z.object({\n type: z.literal('parallel'),\n stepIds: z.array(z.string()).min(2, 'Parallel needs at least 2 steps'),\n failurePolicy: z.enum(['fail-fast', 'continue']),\n})\n\n/**\n * Zod schema for `loop` step configs.\n */\nexport const loopConfigSchema = z.object({\n type: z.literal('loop'),\n stepIds: z.array(z.string()).min(1),\n iterateVar: z.string().min(1),\n itemVar: z.string().min(1),\n maxIterations: z.number().int().positive().optional(),\n})\n\n/**\n * Zod schema for `sub-workflow` step configs.\n */\nexport const subWorkflowConfigSchema = z.object({\n type: z.literal('sub-workflow'),\n workflowId: z.string().min(1),\n inputMapping: z.record(z.string(), z.string()),\n outputVar: z.string().min(1),\n})\n\n/**\n * Zod schema for `custom` step configs.\n */\nexport const customStepConfigSchema = z.object({\n type: z.literal('custom'),\n handler: z.string().min(1, 'Handler name is required'),\n params: z.record(z.string(), z.unknown()),\n outputVar: z.string().optional(),\n})\n\n/**\n * Discriminated union covering every supported step configuration schema.\n */\nexport const stepConfigSchema = z.discriminatedUnion('type', [\n llmCallConfigSchema,\n transformConfigSchema,\n conditionConfigSchema,\n humanApprovalConfigSchema,\n webhookConfigSchema,\n delayConfigSchema,\n parallelConfigSchema,\n loopConfigSchema,\n subWorkflowConfigSchema,\n customStepConfigSchema,\n])\n\n// ============================================================================\n// Step Definition Schema\n// ============================================================================\n\n/**\n * Zod schema for one workflow step definition.\n */\nexport const workflowStepDefSchema = z.object({\n id: z.string().min(1),\n name: z.string().min(1, 'Step name is required'),\n type: z.enum(['llm-call', 'transform', 'condition', 'human-approval', 'webhook', 'delay', 'parallel', 'loop', 'sub-workflow', 'custom']),\n config: stepConfigSchema,\n position: z.object({ x: z.number(), y: z.number() }).optional(),\n optional: z.boolean().optional(),\n retries: z.object({ maxAttempts: z.number().int().positive(), backoffMs: z.number().positive() }).optional(),\n})\n\n// ============================================================================\n// Connection Schema\n// ============================================================================\n\n/**\n * Zod schema for directed graph edges between workflow steps.\n */\nexport const stepConnectionSchema = z.object({\n fromStepId: z.string().min(1),\n toStepId: z.string().min(1),\n label: z.string().optional(),\n condition: z.string().optional(),\n})\n\n// ============================================================================\n// Variable Schema\n// ============================================================================\n\n/**\n * Zod schema for declared workflow inputs and variables.\n */\nexport const workflowVariableSchema = z.object({\n name: z.string().min(1),\n type: z.enum(['string', 'number', 'boolean', 'object', 'array']),\n description: z.string().optional(),\n required: z.boolean().optional(),\n default: z.unknown().optional(),\n})\n\n// ============================================================================\n// Workflow Definition Schema\n// ============================================================================\n\n/**\n * Zod schema for a persisted workflow definition.\n */\nexport const workflowDefinitionSchema = z.object({\n id: z.string().min(1),\n name: z.string().min(1, 'Workflow name is required').max(120, 'Name too long'),\n description: z.string().max(2000).optional(),\n version: z.number().int().positive(),\n status: z.enum(['draft', 'active', 'paused', 'archived']),\n steps: z.array(workflowStepDefSchema).min(1, 'At least one step is required'),\n connections: z.array(stepConnectionSchema),\n inputSchema: z.array(workflowVariableSchema).optional(),\n variables: z.record(z.string(), z.unknown()).optional(),\n tags: z.array(z.string()).optional(),\n createdBy: z.string(),\n createdAt: z.number(),\n updatedAt: z.number(),\n})\n\n// ============================================================================\n// Run Schema\n// ============================================================================\n\n/**\n * Zod schema for one captured step result inside a workflow run.\n */\nexport const stepResultSchema = z.object({\n stepId: z.string(),\n stepName: z.string(),\n type: z.enum(['llm-call', 'transform', 'condition', 'human-approval', 'webhook', 'delay', 'parallel', 'loop', 'sub-workflow', 'custom']),\n status: z.enum(['pending', 'running', 'completed', 'failed', 'skipped', 'waiting-approval']),\n input: z.record(z.string(), z.unknown()).optional(),\n output: z.unknown().optional(),\n error: z.string().optional(),\n durationMs: z.number(),\n tokens: z.number().optional(),\n costUsd: z.number().optional(),\n startedAt: z.number(),\n completedAt: z.number().optional(),\n})\n\n/**\n * Zod schema for a full workflow execution run snapshot.\n */\nexport const workflowRunSchema = z.object({\n id: z.string(),\n workflowId: z.string(),\n workflowVersion: z.number(),\n status: z.enum(['pending', 'running', 'paused', 'completed', 'failed', 'cancelled']),\n input: z.record(z.string(), z.unknown()),\n variables: z.record(z.string(), z.unknown()),\n stepResults: z.array(stepResultSchema),\n currentStepIndex: z.number(),\n error: z.string().optional(),\n triggeredBy: z.string(),\n startedAt: z.number(),\n completedAt: z.number().optional(),\n})\n\n// ============================================================================\n// Validation helpers\n// ============================================================================\n\n/**\n * Validate an unknown payload as a workflow definition.\n *\n * @param data Unknown payload to validate.\n * @returns A safe-parse result containing the validated definition or errors.\n */\nexport function validateWorkflow(\n data: unknown,\n): z.ZodSafeParseResult<z.infer<typeof workflowDefinitionSchema>> {\n return workflowDefinitionSchema.safeParse(data)\n}\n\n/**\n * Validate an unknown payload as a workflow run snapshot.\n *\n * @param data Unknown payload to validate.\n * @returns A safe-parse result containing the validated run or errors.\n */\nexport function validateRun(\n data: unknown,\n): z.ZodSafeParseResult<z.infer<typeof workflowRunSchema>> {\n return workflowRunSchema.safeParse(data)\n}\n\n/**\n * Validate that all connections reference known step identifiers.\n *\n * @param steps Declared workflow steps.\n * @param connections Directed edges between those steps.\n * @returns A list of integrity errors, empty when every reference is valid.\n */\nexport function validateConnectionIntegrity(\n steps: Array<{ id: string }>,\n connections: Array<{ fromStepId: string; toStepId: string }>,\n): string[] {\n const stepIds = new Set(steps.map(s => s.id))\n const errors: string[] = []\n for (const conn of connections) {\n if (!stepIds.has(conn.fromStepId)) errors.push(`Connection references unknown source step: ${conn.fromStepId}`)\n if (!stepIds.has(conn.toStepId)) errors.push(`Connection references unknown target step: ${conn.toStepId}`)\n }\n return errors\n}\n","/**\n * @module WorkflowTemplates\n * @package @geenius/ai-workflow-shared\n * @description Curated workflow templates for common AI and business patterns.\n * These templates seed the builder UI and provide canonical examples of the\n * shared workflow definition contract.\n */\nimport type { WorkflowDefinition, WorkflowStepDef, StepConnection } from './types'\n\n/**\n * Template metadata and factory for one reusable workflow starter.\n *\n * @property id Stable template identifier.\n * @property name Human-readable template name.\n * @property description Summary of the workflow pattern.\n * @property category Top-level template grouping used in browsers.\n * @property tags Searchable tags for discovery.\n * @property create Factory that returns a fresh workflow definition instance.\n */\nexport interface WorkflowTemplate {\n id: string\n name: string\n description: string\n category: 'content' | 'data' | 'approval' | 'research' | 'devops'\n tags: string[]\n /** Factory that creates a fresh WorkflowDefinition from this template */\n create: (createdBy: string) => WorkflowDefinition\n}\n\nfunction uid(): string { return `step_tpl_${Date.now()}_${Math.random().toString(36).slice(2, 8)}` }\nfunction wfId(): string { return `wf_${Date.now()}_${Math.random().toString(36).slice(2, 8)}` }\n\n// ============================================================================\n// 1. Content Pipeline\n// ============================================================================\n\nconst contentPipeline: WorkflowTemplate = {\n id: 'tpl-content-pipeline',\n name: 'Content Pipeline',\n description: 'Generate, review, and publish content with AI refinement and human approval.',\n category: 'content',\n tags: ['content', 'blog', 'marketing'],\n create: (createdBy) => {\n const draft = uid(), refine = uid(), approve = uid(), publish = uid()\n const steps: WorkflowStepDef[] = [\n { id: draft, name: 'Generate Draft', type: 'llm-call', config: { type: 'llm-call', systemPrompt: 'You are a content writer.', userPromptTemplate: 'Write a blog post about {{topic}}. Tone: {{tone}}.', outputVar: 'draft' }, position: { x: 100, y: 200 } },\n { id: refine, name: 'Refine Content', type: 'llm-call', config: { type: 'llm-call', systemPrompt: 'You are an editor. Improve clarity, grammar, and engagement.', userPromptTemplate: 'Polish this draft:\\n\\n{{draft}}', outputVar: 'polished' }, position: { x: 350, y: 200 } },\n { id: approve, name: 'Human Review', type: 'human-approval', config: { type: 'human-approval', message: 'Please review the polished content before publishing.' }, position: { x: 600, y: 200 } },\n { id: publish, name: 'Format for Publishing', type: 'transform', config: { type: 'transform', expression: '({ title: polished.split(\"\\\\n\")[0], body: polished, publishedAt: Date.now() })', inputVars: ['polished'], outputVar: 'publishData' }, position: { x: 850, y: 200 } },\n ]\n const connections: StepConnection[] = [\n { fromStepId: draft, toStepId: refine },\n { fromStepId: refine, toStepId: approve },\n { fromStepId: approve, toStepId: publish },\n ]\n return { id: wfId(), name: 'Content Pipeline', description: 'AI-powered content generation with editorial review.', version: 1, status: 'draft', steps, connections, inputSchema: [{ name: 'topic', type: 'string', required: true }, { name: 'tone', type: 'string', required: false, default: 'professional' }], tags: ['content'], createdBy, createdAt: Date.now(), updatedAt: Date.now() }\n },\n}\n\n// ============================================================================\n// 2. Data Enrichment\n// ============================================================================\n\nconst dataEnrichment: WorkflowTemplate = {\n id: 'tpl-data-enrichment',\n name: 'Data Enrichment',\n description: 'Fetch external data, enrich with AI analysis, and transform for downstream use.',\n category: 'data',\n tags: ['data', 'analytics', 'enrichment'],\n create: (createdBy) => {\n const fetch_ = uid(), analyze = uid(), transform = uid()\n const steps: WorkflowStepDef[] = [\n { id: fetch_, name: 'Fetch Data', type: 'webhook', config: { type: 'webhook', url: 'https://api.example.com/data-source', method: 'GET', outputVar: 'rawData' }, position: { x: 100, y: 200 } },\n { id: analyze, name: 'AI Analysis', type: 'llm-call', config: { type: 'llm-call', systemPrompt: 'You are a data analyst. Analyze the data and extract key insights.', userPromptTemplate: 'Analyze this dataset and return a JSON summary with key metrics:\\n\\n{{rawData}}', parseJson: true, outputVar: 'analysis' }, position: { x: 400, y: 200 } },\n { id: transform, name: 'Transform Output', type: 'transform', config: { type: 'transform', expression: '({ ...analysis, enrichedAt: Date.now(), source: dataSourceUrl })', inputVars: ['analysis', 'dataSourceUrl'], outputVar: 'enrichedData' }, position: { x: 700, y: 200 } },\n ]\n const connections: StepConnection[] = [\n { fromStepId: fetch_, toStepId: analyze },\n { fromStepId: analyze, toStepId: transform },\n ]\n return { id: wfId(), name: 'Data Enrichment', version: 1, status: 'draft', steps, connections, inputSchema: [{ name: 'dataSourceUrl', type: 'string', required: true }], tags: ['data'], createdBy, createdAt: Date.now(), updatedAt: Date.now() }\n },\n}\n\n// ============================================================================\n// 3. Approval Chain\n// ============================================================================\n\nconst approvalChain: WorkflowTemplate = {\n id: 'tpl-approval-chain',\n name: 'Approval Chain',\n description: 'Multi-level approval workflow with conditional escalation.',\n category: 'approval',\n tags: ['approval', 'governance', 'compliance'],\n create: (createdBy) => {\n const checkRisk = uid(), lowApproval = uid(), highApproval = uid(), finalize = uid()\n const steps: WorkflowStepDef[] = [\n { id: checkRisk, name: 'Assess Risk Level', type: 'llm-call', config: { type: 'llm-call', systemPrompt: 'Assess the risk level of this request. Respond with JSON: {\"riskLevel\": \"low\"|\"medium\"|\"high\", \"reason\": \"...\"}', userPromptTemplate: '{{request}}', parseJson: true, outputVar: 'riskAssessment' }, position: { x: 100, y: 200 } },\n { id: lowApproval, name: 'Manager Approval', type: 'human-approval', config: { type: 'human-approval', message: 'Low/medium risk: Manager approval needed for: {{request}}' }, position: { x: 400, y: 100 } },\n { id: highApproval, name: 'Executive Approval', type: 'human-approval', config: { type: 'human-approval', message: 'High risk: Executive approval required for: {{request}}' }, position: { x: 400, y: 300 } },\n { id: finalize, name: 'Record Decision', type: 'transform', config: { type: 'transform', expression: '({ approved: true, approvedAt: Date.now(), riskLevel: riskAssessment.riskLevel })', inputVars: ['riskAssessment'], outputVar: 'decision' }, position: { x: 700, y: 200 } },\n ]\n const connections: StepConnection[] = [\n { fromStepId: checkRisk, toStepId: lowApproval, condition: 'riskAssessment.riskLevel !== \"high\"' },\n { fromStepId: checkRisk, toStepId: highApproval, condition: 'riskAssessment.riskLevel === \"high\"' },\n { fromStepId: lowApproval, toStepId: finalize },\n { fromStepId: highApproval, toStepId: finalize },\n ]\n return { id: wfId(), name: 'Approval Chain', version: 1, status: 'draft', steps, connections, inputSchema: [{ name: 'request', type: 'string', required: true }], tags: ['approval'], createdBy, createdAt: Date.now(), updatedAt: Date.now() }\n },\n}\n\n// ============================================================================\n// 4. Research Pipeline\n// ============================================================================\n\nconst researchPipeline: WorkflowTemplate = {\n id: 'tpl-research',\n name: 'Research Pipeline',\n description: 'Multi-source research with AI synthesis and summary generation.',\n category: 'research',\n tags: ['research', 'analysis', 'summary'],\n create: (createdBy) => {\n const research = uid(), synthesize = uid(), summarize = uid()\n const steps: WorkflowStepDef[] = [\n { id: research, name: 'Deep Research', type: 'llm-call', config: { type: 'llm-call', systemPrompt: 'You are a research assistant. Provide comprehensive, well-sourced research on the given topic.', userPromptTemplate: 'Research the following topic in depth: {{topic}}\\n\\nFocus areas: {{focusAreas}}', outputVar: 'researchOutput' }, position: { x: 100, y: 200 } },\n { id: synthesize, name: 'Synthesize Findings', type: 'llm-call', config: { type: 'llm-call', systemPrompt: 'You are a synthesis expert. Combine research findings into structured insights with citations.', userPromptTemplate: 'Synthesize these research findings into key themes and actionable insights:\\n\\n{{researchOutput}}', parseJson: true, outputVar: 'synthesis' }, position: { x: 400, y: 200 } },\n { id: summarize, name: 'Executive Summary', type: 'llm-call', config: { type: 'llm-call', systemPrompt: 'Write a concise executive summary (3-5 paragraphs) suitable for senior leadership.', userPromptTemplate: 'Create an executive summary from:\\n\\n{{synthesis}}', outputVar: 'executiveSummary' }, position: { x: 700, y: 200 } },\n ]\n const connections: StepConnection[] = [\n { fromStepId: research, toStepId: synthesize },\n { fromStepId: synthesize, toStepId: summarize },\n ]\n return { id: wfId(), name: 'Research Pipeline', version: 1, status: 'draft', steps, connections, inputSchema: [{ name: 'topic', type: 'string', required: true }, { name: 'focusAreas', type: 'string', required: false, default: 'general overview' }], tags: ['research'], createdBy, createdAt: Date.now(), updatedAt: Date.now() }\n },\n}\n\n// ============================================================================\n// 5. Code Review Pipeline\n// ============================================================================\n\nconst codeReviewPipeline: WorkflowTemplate = {\n id: 'tpl-code-review',\n name: 'Code Review Pipeline',\n description: 'Automated code review with AI analysis, security check, and human approval.',\n category: 'devops',\n tags: ['code', 'review', 'security', 'devops'],\n create: (createdBy) => {\n const analyze = uid(), security = uid(), approve = uid(), report = uid()\n const steps: WorkflowStepDef[] = [\n { id: analyze, name: 'AI Code Review', type: 'llm-call', config: { type: 'llm-call', systemPrompt: 'You are a senior code reviewer. Analyze the code for bugs, performance issues, and best practices. Return JSON: {\"issues\": [], \"suggestions\": [], \"quality\": 1-10}', userPromptTemplate: 'Review this code:\\n\\n```{{language}}\\n{{code}}\\n```', parseJson: true, outputVar: 'codeReview' }, position: { x: 100, y: 200 } },\n { id: security, name: 'Security Scan', type: 'llm-call', config: { type: 'llm-call', systemPrompt: 'You are a security auditor. Check for vulnerabilities (XSS, SQL injection, secrets exposure, etc). Return JSON: {\"vulnerabilities\": [], \"riskLevel\": \"low\"|\"medium\"|\"high\"}', userPromptTemplate: 'Security audit for:\\n\\n```{{language}}\\n{{code}}\\n```', parseJson: true, outputVar: 'securityReport' }, position: { x: 100, y: 400 } },\n { id: approve, name: 'Developer Approval', type: 'human-approval', config: { type: 'human-approval', message: 'Review the AI code analysis and security scan before merging.' }, position: { x: 450, y: 300 } },\n { id: report, name: 'Generate Report', type: 'transform', config: { type: 'transform', expression: '({ codeQuality: codeReview.quality, issues: codeReview.issues.length, vulnerabilities: securityReport.vulnerabilities.length, riskLevel: securityReport.riskLevel, reviewedAt: Date.now() })', inputVars: ['codeReview', 'securityReport'], outputVar: 'finalReport' }, position: { x: 700, y: 300 } },\n ]\n const connections: StepConnection[] = [\n { fromStepId: analyze, toStepId: approve },\n { fromStepId: security, toStepId: approve },\n { fromStepId: approve, toStepId: report },\n ]\n return { id: wfId(), name: 'Code Review Pipeline', version: 1, status: 'draft', steps, connections, inputSchema: [{ name: 'code', type: 'string', required: true }, { name: 'language', type: 'string', required: false, default: 'typescript' }], tags: ['devops', 'review'], createdBy, createdAt: Date.now(), updatedAt: Date.now() }\n },\n}\n\n// ============================================================================\n// 6. Lead Qualification\n// ============================================================================\n\nconst leadQualification: WorkflowTemplate = {\n id: 'tpl-lead-qualification',\n name: 'Lead Qualification',\n description: 'Score incoming leads, prepare a summary, and route them for follow-up.',\n category: 'data',\n tags: ['sales', 'crm', 'lead-scoring'],\n create: (createdBy) => {\n const score = uid(), summarize = uid(), route = uid()\n const steps: WorkflowStepDef[] = [\n { id: score, name: 'Score Lead', type: 'llm-call', config: { type: 'llm-call', systemPrompt: 'You are a sales operations analyst. Score the lead from 1-10 and return JSON with score, rationale, and nextAction.', userPromptTemplate: 'Lead details:\\n\\n{{lead}}', parseJson: true, outputVar: 'leadScore' }, position: { x: 100, y: 200 } },\n { id: summarize, name: 'Summarize Lead', type: 'transform', config: { type: 'transform', expression: '({ score: leadScore.score, summary: leadScore.rationale, priority: leadScore.score >= 8 ? \"high\" : \"standard\", updatedAt: Date.now() })', inputVars: ['leadScore'], outputVar: 'leadSummary' }, position: { x: 400, y: 200 } },\n { id: route, name: 'Notify Sales', type: 'webhook', config: { type: 'webhook', url: 'https://api.example.com/crm/webhook', method: 'POST', bodyTemplate: 'Lead summary: {{leadSummary}}', outputVar: 'salesNotification' }, position: { x: 700, y: 200 } },\n ]\n const connections: StepConnection[] = [\n { fromStepId: score, toStepId: summarize },\n { fromStepId: summarize, toStepId: route },\n ]\n return {\n id: wfId(),\n name: 'Lead Qualification',\n description: 'AI-assisted lead scoring and sales handoff.',\n version: 1,\n status: 'draft',\n steps,\n connections,\n inputSchema: [\n { name: 'lead', type: 'string', required: true },\n { name: 'crmWebhookUrl', type: 'string', required: false, default: 'https://api.example.com/crm/webhook' },\n ],\n tags: ['sales', 'lead'],\n createdBy,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n }\n },\n}\n\n// ============================================================================\n// 7. Incident Triage\n// ============================================================================\n\nconst incidentTriage: WorkflowTemplate = {\n id: 'tpl-incident-triage',\n name: 'Incident Triage',\n description: 'Collect incident context, classify severity, and draft the response.',\n category: 'devops',\n tags: ['incident', 'ops', 'triage'],\n create: (createdBy) => {\n const fetchIncident = uid(), classify = uid(), draftResponse = uid()\n const steps: WorkflowStepDef[] = [\n { id: fetchIncident, name: 'Fetch Incident', type: 'webhook', config: { type: 'webhook', url: 'https://api.example.com/incidents', method: 'GET', outputVar: 'incidentData' }, position: { x: 100, y: 200 } },\n { id: classify, name: 'Classify Severity', type: 'llm-call', config: { type: 'llm-call', systemPrompt: 'You are an incident commander. Classify the incident severity and summarize the likely impact in JSON.', userPromptTemplate: 'Incident context:\\n\\n{{incidentData}}', parseJson: true, outputVar: 'classification' }, position: { x: 400, y: 200 } },\n { id: draftResponse, name: 'Draft Response', type: 'transform', config: { type: 'transform', expression: '({ severity: classification.severity, summary: classification.summary, draftedAt: Date.now() })', inputVars: ['classification'], outputVar: 'responseDraft' }, position: { x: 700, y: 200 } },\n ]\n const connections: StepConnection[] = [\n { fromStepId: fetchIncident, toStepId: classify },\n { fromStepId: classify, toStepId: draftResponse },\n ]\n return {\n id: wfId(),\n name: 'Incident Triage',\n description: 'Automated incident classification and response drafting.',\n version: 1,\n status: 'draft',\n steps,\n connections,\n inputSchema: [\n { name: 'incidentApiUrl', type: 'string', required: false, default: 'https://api.example.com/incidents' },\n ],\n tags: ['incident', 'ops'],\n createdBy,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n }\n },\n}\n\n// ============================================================================\n// 8. Launch Readiness\n// ============================================================================\n\nconst launchReadiness: WorkflowTemplate = {\n id: 'tpl-launch-readiness',\n name: 'Launch Readiness',\n description: 'Prepare launch notes, request approval, and publish the rollout payload.',\n category: 'approval',\n tags: ['launch', 'release', 'approval'],\n create: (createdBy) => {\n const prepare = uid(), approve = uid(), publish = uid()\n const steps: WorkflowStepDef[] = [\n { id: prepare, name: 'Prepare Launch Notes', type: 'llm-call', config: { type: 'llm-call', systemPrompt: 'You are a product marketing lead. Create concise launch notes with risks and highlights.', userPromptTemplate: 'Launch context:\\n\\n{{launchBrief}}', outputVar: 'launchNotes' }, position: { x: 100, y: 200 } },\n { id: approve, name: 'Approval Gate', type: 'human-approval', config: { type: 'human-approval', message: 'Review the launch notes before the rollout payload is published.' }, position: { x: 400, y: 200 } },\n { id: publish, name: 'Build Payload', type: 'transform', config: { type: 'transform', expression: '({ notes: launchNotes, approvedAt: Date.now(), releaseChannel: releaseChannel || \"stable\" })', inputVars: ['launchNotes', 'releaseChannel'], outputVar: 'launchPayload' }, position: { x: 700, y: 200 } },\n ]\n const connections: StepConnection[] = [\n { fromStepId: prepare, toStepId: approve },\n { fromStepId: approve, toStepId: publish },\n ]\n return {\n id: wfId(),\n name: 'Launch Readiness',\n description: 'Human-approved release preparation workflow.',\n version: 1,\n status: 'draft',\n steps,\n connections,\n inputSchema: [\n { name: 'launchBrief', type: 'string', required: true },\n { name: 'releaseChannel', type: 'string', required: false, default: 'stable' },\n ],\n tags: ['launch', 'release'],\n createdBy,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n }\n },\n}\n\n// ============================================================================\n// Template Registry\n// ============================================================================\n\n/**\n * Canonical template catalog shipped with the package.\n */\nexport const WORKFLOW_TEMPLATES: WorkflowTemplate[] = [\n contentPipeline,\n dataEnrichment,\n approvalChain,\n researchPipeline,\n codeReviewPipeline,\n leadQualification,\n incidentTriage,\n launchReadiness,\n]\n\n/**\n * Look up one workflow template by its stable identifier.\n *\n * @param id Template identifier to resolve.\n * @returns The matching workflow template when found.\n */\nexport function getTemplate(id: string): WorkflowTemplate | undefined {\n return WORKFLOW_TEMPLATES.find(t => t.id === id)\n}\n\n/**\n * Return every workflow template that belongs to one category.\n *\n * @param category Template category to filter by.\n * @returns Templates whose category matches the requested value.\n */\nexport function getTemplatesByCategory(category: WorkflowTemplate['category']): WorkflowTemplate[] {\n return WORKFLOW_TEMPLATES.filter(t => t.category === category)\n}\n","/**\n * @module UseWorkflow\n * @package @geenius/ai-workflow-react\n * @description React hook for executing workflow definitions with the shared\n * workflow engine. This file bridges engine lifecycle, run state, and typed\n * error propagation into a stable React-friendly API.\n */\n\nimport { useState, useCallback } from \"react\";\nimport type {\n StepResult,\n WorkflowDefinition,\n WorkflowEngineOptions,\n WorkflowError,\n WorkflowRun,\n} from \"@geenius/ai-workflow-shared\";\nimport {\n WorkflowEngine,\n normalizeWorkflowError,\n} from \"@geenius/ai-workflow-shared\";\n\n/**\n * Runtime integrations accepted by the React workflow hook.\n *\n * @property callLLM Optional LLM execution callback inherited from `WorkflowEngineOptions`.\n * @property callWebhook Optional webhook execution callback inherited from `WorkflowEngineOptions`.\n * @property onApprovalRequired Optional approval callback inherited from `WorkflowEngineOptions`.\n * @property onStepComplete Optional per-step completion callback inherited from `WorkflowEngineOptions`.\n * @property customHandlers Optional custom step-handler registry inherited from `WorkflowEngineOptions`.\n */\nexport interface UseWorkflowOptions extends WorkflowEngineOptions {}\n\n/**\n * Result returned by `useWorkflow`.\n *\n * @property execute Execute a workflow definition against optional input data.\n * @property cancel Cancel the current in-flight workflow run.\n * @property run Latest workflow run snapshot.\n * @property isRunning Whether a workflow run is currently in progress.\n * @property error Latest typed workflow error.\n * @property stepResults Step results emitted during the active run.\n * @property reset Clear local run, error, and step-result state.\n */\nexport interface UseWorkflowResult {\n execute: (\n definition: WorkflowDefinition,\n input?: Record<string, unknown>,\n ) => Promise<WorkflowRun>;\n cancel: () => void;\n run: WorkflowRun | null;\n isRunning: boolean;\n error: WorkflowError | null;\n stepResults: StepResult[];\n reset: () => void;\n}\n\n/**\n * Execute shared workflow definitions from React stateful components.\n *\n * @param options Runtime integrations and callbacks for the shared workflow engine.\n * @returns Run state, execution methods, and cancellation controls.\n */\nexport function useWorkflow(options: UseWorkflowOptions): UseWorkflowResult {\n const [run, setRun] = useState<WorkflowRun | null>(null);\n const [isRunning, setIsRunning] = useState(false);\n const [error, setError] = useState<WorkflowError | null>(null);\n const [stepResults, setStepResults] = useState<StepResult[]>([]);\n\n const engine = new WorkflowEngine({\n ...options,\n onStepComplete: (result) => {\n setStepResults((prev) => [...prev, result]);\n options.onStepComplete?.(result);\n },\n });\n\n const execute = useCallback(\n async (definition: WorkflowDefinition, input?: Record<string, unknown>) => {\n setIsRunning(true);\n setError(null);\n setStepResults([]);\n try {\n const result = await engine.execute(definition, input);\n setRun(result);\n return result;\n } catch (err) {\n const e = normalizeWorkflowError(err, \"Workflow execution failed.\", {\n workflowId: definition.id,\n });\n setError(e);\n throw e;\n } finally {\n setIsRunning(false);\n }\n },\n [],\n );\n\n const cancel = useCallback(() => engine.cancel(), []);\n const reset = useCallback(() => {\n setRun(null);\n setError(null);\n setStepResults([]);\n }, []);\n\n return { execute, cancel, run, isRunning, error, stepResults, reset };\n}\n","/**\n * @module UseWorkflowBuilder\n * @package @geenius/ai-workflow-react\n * @description React hook for building and editing workflow definitions in the\n * Tailwind workflow surface, including selection and undo/redo history.\n */\n\nimport { useState, useCallback } from 'react'\nimport type { WorkflowDefinition, WorkflowStepDef, StepConnection, WorkflowBuilderState } from '@geenius/ai-workflow-shared'\n\nconst emptyDef = (): WorkflowDefinition => ({\n id: crypto.randomUUID?.() ?? String(Date.now()),\n name: 'New Workflow',\n version: 1,\n status: 'draft',\n steps: [],\n connections: [],\n createdBy: '',\n createdAt: Date.now(),\n updatedAt: Date.now(),\n})\n\n/**\n * Create workflow-builder state and mutations for the React builder UI.\n *\n * @param initial Optional partial workflow definition used to seed the builder.\n * @returns Builder state, undo/redo status, and workflow mutation callbacks.\n */\nexport function useWorkflowBuilder(initial?: Partial<WorkflowDefinition>): {\n definition: WorkflowDefinition\n selectedStepId: string | null\n isDirty: boolean\n canUndo: boolean\n canRedo: boolean\n addStep: (step: WorkflowStepDef) => void\n removeStep: (stepId: string) => void\n updateStep: (stepId: string, updates: Partial<WorkflowStepDef>) => void\n addConnection: (conn: StepConnection) => void\n removeConnection: (fromStepId: string, toStepId: string) => void\n selectStep: (stepId: string | null) => void\n undo: () => void\n redo: () => void\n setDefinition: (def: WorkflowDefinition) => void\n} {\n const [state, setState] = useState<WorkflowBuilderState>({\n definition: { ...emptyDef(), ...initial },\n selectedStepId: null,\n isDirty: false,\n undoStack: [],\n redoStack: [],\n })\n\n const pushUndo = useCallback(() => {\n setState(prev => ({ ...prev, undoStack: [...prev.undoStack.slice(-20), prev.definition], redoStack: [] }))\n }, [])\n\n const addStep = useCallback((step: WorkflowStepDef) => {\n pushUndo()\n setState(prev => ({\n ...prev,\n isDirty: true,\n definition: { ...prev.definition, steps: [...prev.definition.steps, step], updatedAt: Date.now() },\n }))\n }, [pushUndo])\n\n const removeStep = useCallback((stepId: string) => {\n pushUndo()\n setState(prev => ({\n ...prev,\n isDirty: true,\n definition: {\n ...prev.definition,\n steps: prev.definition.steps.filter(s => s.id !== stepId),\n connections: prev.definition.connections.filter(c => c.fromStepId !== stepId && c.toStepId !== stepId),\n updatedAt: Date.now(),\n },\n selectedStepId: prev.selectedStepId === stepId ? null : prev.selectedStepId,\n }))\n }, [pushUndo])\n\n const updateStep = useCallback((stepId: string, updates: Partial<WorkflowStepDef>) => {\n pushUndo()\n setState(prev => ({\n ...prev,\n isDirty: true,\n definition: {\n ...prev.definition,\n steps: prev.definition.steps.map(s => s.id === stepId ? { ...s, ...updates } : s),\n updatedAt: Date.now(),\n },\n }))\n }, [pushUndo])\n\n const addConnection = useCallback((conn: StepConnection) => {\n pushUndo()\n setState(prev => ({\n ...prev,\n isDirty: true,\n definition: { ...prev.definition, connections: [...prev.definition.connections, conn], updatedAt: Date.now() },\n }))\n }, [pushUndo])\n\n const removeConnection = useCallback((fromStepId: string, toStepId: string) => {\n pushUndo()\n setState(prev => ({\n ...prev,\n isDirty: true,\n definition: {\n ...prev.definition,\n connections: prev.definition.connections.filter(c => !(c.fromStepId === fromStepId && c.toStepId === toStepId)),\n updatedAt: Date.now(),\n },\n }))\n }, [pushUndo])\n\n const selectStep = useCallback((stepId: string | null) => setState(prev => ({ ...prev, selectedStepId: stepId })), [])\n\n const undo = useCallback(() => {\n setState(prev => {\n if (prev.undoStack.length === 0) return prev\n const previous = prev.undoStack[prev.undoStack.length - 1]\n return { ...prev, definition: previous, undoStack: prev.undoStack.slice(0, -1), redoStack: [prev.definition, ...prev.redoStack] }\n })\n }, [])\n\n const redo = useCallback(() => {\n setState(prev => {\n if (prev.redoStack.length === 0) return prev\n const next = prev.redoStack[0]\n return { ...prev, definition: next, undoStack: [...prev.undoStack, prev.definition], redoStack: prev.redoStack.slice(1) }\n })\n }, [])\n\n const setDefinition = useCallback((def: WorkflowDefinition) => {\n setState(prev => ({ ...prev, definition: def, isDirty: false, undoStack: [], redoStack: [] }))\n }, [])\n\n return {\n definition: state.definition,\n selectedStepId: state.selectedStepId,\n isDirty: state.isDirty,\n canUndo: state.undoStack.length > 0,\n canRedo: state.redoStack.length > 0,\n addStep, removeStep, updateStep,\n addConnection, removeConnection,\n selectStep, undo, redo, setDefinition,\n }\n}\n","/**\n * @module UseWorkflowRun\n * @package @geenius/ai-workflow-react\n * @description React hook for tracking workflow execution progress, per-step\n * results, and completion callbacks in the Tailwind workflow surface.\n */\n\nimport { useState, useCallback, useRef, useEffect } from 'react'\nimport type { WorkflowRun, StepResult, RunStatus } from '@geenius/ai-workflow-shared'\n\n/**\n * Runtime options for workflow run tracking.\n *\n * @property pollIntervalMs Reserved polling interval for future remote sync.\n * @property onStepComplete Optional callback fired whenever a step result changes.\n * @property onRunComplete Optional callback fired when the run reaches a terminal state.\n */\nexport interface UseWorkflowRunOptions {\n /** Poll interval for checking run status (ms) */\n pollIntervalMs?: number\n /** Callback when a step completes */\n onStepComplete?: (result: StepResult) => void\n /** Callback when the run finishes */\n onRunComplete?: (run: WorkflowRun) => void\n}\n\n/**\n * Track workflow execution state and emit lifecycle callbacks.\n *\n * @param options Optional polling and lifecycle callbacks for run updates.\n * @returns Run state, derived flags, and update/reset helpers.\n */\nexport function useWorkflowRun(options: UseWorkflowRunOptions = {}): {\n run: WorkflowRun | null\n status: RunStatus\n currentStepIndex: number\n completedSteps: StepResult[]\n progress: number\n error: string | null\n trackRun: (workflowRun: WorkflowRun) => void\n updateStep: (result: StepResult) => void\n reset: () => void\n isRunning: boolean\n isComplete: boolean\n isFailed: boolean\n} {\n const [run, setRun] = useState<WorkflowRun | null>(null)\n const [currentStepIndex, setCurrentStepIndex] = useState(0)\n const [completedSteps, setCompletedSteps] = useState<StepResult[]>([])\n const [status, setStatus] = useState<RunStatus>('pending')\n const [progress, setProgress] = useState(0)\n const [error, setError] = useState<string | null>(null)\n const timerRef = useRef<ReturnType<typeof setInterval> | null>(null)\n\n const trackRun = useCallback((workflowRun: WorkflowRun) => {\n setRun(workflowRun)\n setStatus(workflowRun.status)\n setCurrentStepIndex(workflowRun.currentStepIndex)\n setCompletedSteps(workflowRun.stepResults)\n setError(workflowRun.error ?? null)\n\n const total = workflowRun.stepResults.length\n const done = workflowRun.stepResults.filter(s => s.status === 'completed' || s.status === 'skipped').length\n setProgress(total > 0 ? Math.round((done / total) * 100) : 0)\n\n if (workflowRun.status === 'completed' || workflowRun.status === 'failed') {\n options.onRunComplete?.(workflowRun)\n }\n }, [options.onRunComplete])\n\n const updateStep = useCallback((result: StepResult) => {\n setCompletedSteps(prev => {\n const existing = prev.findIndex(s => s.stepId === result.stepId)\n if (existing >= 0) {\n const updated = [...prev]\n updated[existing] = result\n return updated\n }\n return [...prev, result]\n })\n setCurrentStepIndex(prev => prev + 1)\n options.onStepComplete?.(result)\n }, [options.onStepComplete])\n\n const reset = useCallback(() => {\n setRun(null)\n setCurrentStepIndex(0)\n setCompletedSteps([])\n setStatus('pending')\n setProgress(0)\n setError(null)\n if (timerRef.current) clearInterval(timerRef.current)\n }, [])\n\n useEffect(() => {\n return () => { if (timerRef.current) clearInterval(timerRef.current) }\n }, [])\n\n return {\n run, status, currentStepIndex, completedSteps,\n progress, error,\n trackRun, updateStep, reset,\n isRunning: status === 'running',\n isComplete: status === 'completed',\n isFailed: status === 'failed',\n }\n}\n","/**\n * @module UseWorkflowStep\n * @package @geenius/ai-workflow-react\n * @description React hook for tracking a single workflow step within the\n * Tailwind workflow surface.\n */\n\nimport { useCallback, useMemo, useState } from \"react\";\nimport type {\n StepResult,\n StepStatus,\n WorkflowStepDef,\n} from \"@geenius/ai-workflow-shared\";\n\ninterface UseWorkflowStepResult {\n stepDef: WorkflowStepDef;\n status: StepStatus;\n output: unknown;\n error: string | null;\n durationMs: number;\n icon: string;\n statusColor: string;\n updateFromResult: (result: StepResult) => void;\n reset: () => void;\n isComplete: boolean;\n isRunning: boolean;\n isFailed: boolean;\n isWaiting: boolean;\n config: WorkflowStepDef[\"config\"];\n}\n\n/**\n * Track the transient execution state for a single workflow step.\n *\n * @param stepDef Shared workflow step definition to project into UI state.\n * @returns Step execution metadata, derived badges, and reset/update actions.\n */\nexport function useWorkflowStep(\n stepDef: WorkflowStepDef,\n): UseWorkflowStepResult {\n const [status, setStatus] = useState<StepStatus>(\"pending\");\n const [output, setOutput] = useState<unknown>(null);\n const [error, setError] = useState<string | null>(null);\n const [durationMs, setDurationMs] = useState<number>(0);\n\n const updateFromResult = useCallback((result: StepResult): void => {\n setStatus(result.status);\n setOutput(result.output ?? null);\n setError(result.error ?? null);\n setDurationMs(result.durationMs);\n }, []);\n\n const reset = useCallback((): void => {\n setStatus(\"pending\");\n setOutput(null);\n setError(null);\n setDurationMs(0);\n }, []);\n\n const icon = useMemo((): string => {\n const iconMap: Record<WorkflowStepDef[\"type\"], string> = {\n \"llm-call\": \"πŸ€–\",\n transform: \"βš™οΈ\",\n condition: \"πŸ”€\",\n \"human-approval\": \"πŸ‘€\",\n webhook: \"🌐\",\n delay: \"⏱️\",\n parallel: \"⚑\",\n loop: \"πŸ”„\",\n \"sub-workflow\": \"πŸ“‹\",\n custom: \"πŸ”§\",\n };\n\n return iconMap[stepDef.type] ?? \"πŸ“¦\";\n }, [stepDef.type]);\n\n const statusColor = useMemo((): string => {\n const colorMap: Record<StepStatus, string> = {\n pending: \"gray\",\n running: \"blue\",\n completed: \"green\",\n failed: \"red\",\n skipped: \"orange\",\n \"waiting-approval\": \"purple\",\n };\n\n return colorMap[status];\n }, [status]);\n\n return {\n stepDef,\n status,\n output,\n error,\n durationMs,\n icon,\n statusColor,\n updateFromResult,\n reset,\n isComplete: status === \"completed\",\n isRunning: status === \"running\",\n isFailed: status === \"failed\",\n isWaiting: status === \"waiting-approval\",\n config: stepDef.config,\n };\n}\n","/**\n * @module UseApprovalGate\n * @package @geenius/ai-workflow-react\n * @description React hook for managing human approval requests in the Tailwind\n * workflow variant.\n */\n\nimport { useState, useCallback } from 'react'\n\n/**\n * Pending approval request exposed to the UI layer.\n *\n * @property id Stable approval-request identifier.\n * @property stepId Workflow step awaiting the operator decision.\n * @property message Approval prompt shown to the operator.\n * @property requestedAt Unix timestamp for when the approval was created.\n * @property approvers Optional list of users or roles allowed to approve.\n */\nexport interface ApprovalRequest {\n id: string\n stepId: string\n message: string\n requestedAt: number\n approvers?: string[]\n}\n\n/**\n * Manage pending approval requests and completed approval history.\n *\n * @returns Approval state plus request, approve, reject, and reset helpers.\n */\nexport function useApprovalGate(): {\n pendingApprovals: ApprovalRequest[]\n history: Array<ApprovalRequest & { decision: 'approved' | 'rejected'; decidedAt: number }>\n hasPending: boolean\n requestApproval: (stepId: string, message: string, approvers?: string[]) => string\n approve: (approvalId: string) => void\n reject: (approvalId: string) => void\n clearHistory: () => void\n} {\n const [pendingApprovals, setPendingApprovals] = useState<ApprovalRequest[]>([])\n const [history, setHistory] = useState<Array<ApprovalRequest & { decision: 'approved' | 'rejected'; decidedAt: number }>>([])\n\n const requestApproval = useCallback((stepId: string, message: string, approvers?: string[]) => {\n const request: ApprovalRequest = {\n id: `approval_${Date.now()}_${Math.random().toString(36).slice(2, 6)}`,\n stepId,\n message,\n requestedAt: Date.now(),\n approvers,\n }\n setPendingApprovals(prev => [...prev, request])\n return request.id\n }, [])\n\n const approve = useCallback((approvalId: string) => {\n setPendingApprovals(prev => {\n const request = prev.find(a => a.id === approvalId)\n if (request) {\n setHistory(h => [...h, { ...request, decision: 'approved', decidedAt: Date.now() }])\n }\n return prev.filter(a => a.id !== approvalId)\n })\n }, [])\n\n const reject = useCallback((approvalId: string) => {\n setPendingApprovals(prev => {\n const request = prev.find(a => a.id === approvalId)\n if (request) {\n setHistory(h => [...h, { ...request, decision: 'rejected', decidedAt: Date.now() }])\n }\n return prev.filter(a => a.id !== approvalId)\n })\n }, [])\n\n const clearHistory = useCallback(() => setHistory([]), [])\n\n return {\n pendingApprovals,\n history,\n hasPending: pendingApprovals.length > 0,\n requestApproval,\n approve,\n reject,\n clearHistory,\n }\n}\n","/**\n * @module UseWorkflowTemplates\n * @package @geenius/ai-workflow-react\n * @description React hook for filtering and instantiating shared workflow\n * templates in the Tailwind workflow surface.\n */\n\nimport { useState, useCallback, useMemo } from 'react'\nimport type { WorkflowDefinition } from '@geenius/ai-workflow-shared'\nimport { WORKFLOW_TEMPLATES, getTemplate, getTemplatesByCategory } from '@geenius/ai-workflow-shared'\nimport type { WorkflowTemplate } from '@geenius/ai-workflow-shared'\n\n/**\n * Manage template filtering, selection, and instantiation for the builder UI.\n *\n * @param userId User identifier injected into cloned workflow templates.\n * @returns Template lists, selected state, and creation helpers.\n */\nexport function useWorkflowTemplates(userId: string): {\n templates: WorkflowTemplate[]\n allTemplates: WorkflowTemplate[]\n selectedTemplate: WorkflowTemplate | null\n selectedTemplateId: string | null\n categories: WorkflowTemplate['category'][]\n filterCategory: WorkflowTemplate['category'] | 'all'\n searchQuery: string\n setSelectedTemplateId: (value: string | null) => void\n setFilterCategory: (value: WorkflowTemplate['category'] | 'all') => void\n setSearchQuery: (value: string) => void\n createFromTemplate: (templateId: string) => WorkflowDefinition | null\n} {\n const [selectedTemplateId, setSelectedTemplateId] = useState<string | null>(null)\n const [filterCategory, setFilterCategory] = useState<WorkflowTemplate['category'] | 'all'>('all')\n const [searchQuery, setSearchQuery] = useState('')\n\n const filteredTemplates = useMemo(() => {\n let templates = filterCategory === 'all' ? WORKFLOW_TEMPLATES : getTemplatesByCategory(filterCategory)\n if (searchQuery.trim()) {\n const q = searchQuery.toLowerCase()\n templates = templates.filter(t =>\n t.name.toLowerCase().includes(q) ||\n t.description.toLowerCase().includes(q) ||\n t.tags.some(tag => tag.includes(q))\n )\n }\n return templates\n }, [filterCategory, searchQuery])\n\n const selectedTemplate = useMemo(\n () => selectedTemplateId ? getTemplate(selectedTemplateId) ?? null : null,\n [selectedTemplateId],\n )\n\n const createFromTemplate = useCallback((templateId: string): WorkflowDefinition | null => {\n const template = getTemplate(templateId)\n if (!template) return null\n return template.create(userId)\n }, [userId])\n\n const categories = useMemo(\n () => [...new Set(WORKFLOW_TEMPLATES.map(t => t.category))],\n [],\n )\n\n return {\n templates: filteredTemplates,\n allTemplates: WORKFLOW_TEMPLATES,\n selectedTemplate,\n selectedTemplateId,\n categories,\n filterCategory,\n searchQuery,\n setSelectedTemplateId,\n setFilterCategory,\n setSearchQuery,\n createFromTemplate,\n }\n}\n","/**\n * @module WorkflowReactClassNames\n * @package @geenius/ai-workflow-react\n * @description Minimal React utility for composing conditional class names in\n * the Tailwind workflow variant.\n */\n\n/**\n * Join truthy class-name fragments into one space-delimited string.\n *\n * @param classes Class-name fragments that may include falsey values.\n * @returns A normalized class-name string.\n */\nexport function cn(...classes: Array<string | false | null | undefined>): string {\n return classes.filter(Boolean).join(' ')\n}\n","/**\n * @module WorkflowReactCva\n * @package @geenius/ai-workflow-react\n * @description Tiny variant-class helper used by the React Tailwind workflow\n * components to keep class selection deterministic without introducing an\n * additional runtime dependency.\n */\n\ntype VariantsConfig = Record<string, Record<string, string>>\n\ntype CvaOptions<V extends VariantsConfig> = {\n variants?: V\n defaultVariants?: Partial<{ [K in keyof V]: keyof V[K] & string }>\n}\n\n/**\n * Create a variant-aware class-name builder.\n *\n * @param base Base class list always included in the result.\n * @param options Variant maps and optional defaults for each variant.\n * @returns A function that resolves variant props into a class string.\n */\nexport function cva<V extends VariantsConfig>(base: string, options: CvaOptions<V> = {}): (props?: Partial<{ [K in keyof V]: keyof V[K] & string }>) => string {\n return (props: Partial<{ [K in keyof V]: keyof V[K] & string }> = {}) => {\n const classes = [base]\n const variants = (options.variants ?? {}) as VariantsConfig\n for (const [key, variantMap] of Object.entries(variants)) {\n const value = String(props[key as keyof V] ?? options.defaultVariants?.[key as keyof V] ?? '')\n const variantClass = variantMap[value]\n if (variantClass) classes.push(variantClass)\n }\n return classes.join(' ')\n }\n}\n","/**\n * @module WorkflowStepNode\n * @package @geenius/ai-workflow-react\n * @description React builder node component for one workflow step. This file\n * centralizes selection, retry, and status rendering so the canvas can remain\n * a composition layer over the shared workflow definition contract.\n */\nimport { motion } from \"@geenius/motion/react\";\nimport type { WorkflowStepDef, StepType } from \"@geenius/ai-workflow-shared\";\nimport type { ReactElement } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { cva } from \"../lib/cva\";\n\nconst STEP_ICONS: Record<StepType, string> = {\n \"llm-call\": \"πŸ€–\",\n transform: \"βš™οΈ\",\n condition: \"πŸ”€\",\n \"human-approval\": \"πŸ‘€\",\n webhook: \"🌐\",\n delay: \"⏱️\",\n parallel: \"⚑\",\n loop: \"πŸ”„\",\n \"sub-workflow\": \"πŸ“‹\",\n custom: \"πŸ”§\",\n};\n\n/**\n * Props for rendering one workflow step node.\n *\n * @property step Shared workflow step definition to render.\n * @property isSelected Whether the step is currently selected in the builder.\n * @property status Visual execution status displayed on the node.\n * @property onClick Optional selection callback invoked from mouse or keyboard.\n * @property className Optional class name override for outer layout composition.\n */\nexport interface StepNodeProps {\n step: WorkflowStepDef;\n isSelected?: boolean;\n status?: \"pending\" | \"running\" | \"success\" | \"error\" | \"skipped\" | \"default\";\n onClick?: () => void;\n className?: string;\n}\n\nconst stepNodeClass = cva(\n \"rounded-2xl border p-4 shadow-sm outline-none transition duration-200 focus-visible:ring-2 focus-visible:ring-primary/40\",\n {\n variants: {\n selected: {\n true: \"border-primary bg-primary/10 ring-2 ring-primary/20\",\n false: \"border-border bg-card\",\n },\n status: {\n pending: \"border-warning\",\n running: \"border-primary\",\n success: \"border-success\",\n error: \"border-danger\",\n skipped: \"opacity-70\",\n default: \"\",\n },\n },\n },\n);\n\n/**\n * Render one selectable workflow step node inside the builder canvas.\n *\n * @param props Step node rendering props.\n * @returns A keyboard-accessible workflow step node.\n */\nexport function StepNode({\n step,\n isSelected,\n status,\n onClick,\n className,\n}: StepNodeProps): ReactElement {\n return (\n <motion.div\n data-workflow=\"step-node\"\n data-step-type={step.type}\n data-selected={isSelected || undefined}\n data-status={status}\n className={cn(\n stepNodeClass({\n selected: isSelected ? \"true\" : \"false\",\n status: status ?? \"default\",\n }),\n className,\n )}\n role=\"button\"\n tabIndex={0}\n aria-label={`Workflow step ${step.name}`}\n aria-pressed={isSelected}\n onClick={onClick}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick?.();\n }\n }}\n style={\n step.position\n ? {\n position: \"absolute\",\n left: step.position.x,\n top: step.position.y,\n }\n : undefined\n }\n layout\n whileHover={{ scale: 1.02 }}\n whileTap={{ scale: 0.98 }}\n >\n <div data-workflow=\"step-header\">\n <span data-workflow=\"step-icon\">{STEP_ICONS[step.type]}</span>\n <span data-workflow=\"step-name\">{step.name}</span>\n </div>\n <div data-workflow=\"step-type-badge\">{step.type}</div>\n {step.optional && (\n <span data-workflow=\"step-optional-badge\">Optional</span>\n )}\n {step.retries && (\n <span data-workflow=\"step-retry-badge\">\n ↻ {step.retries.maxAttempts}\n </span>\n )}\n </motion.div>\n );\n}\n","/**\n * @module WorkflowStepConnector\n * @package @geenius/ai-workflow-react\n * @description SVG connector primitive for drawing directed edges between\n * positioned workflow steps in the React builder canvas.\n */\n\nimport type { ReactElement } from \"react\";\n\n/**\n * Props for a workflow step connector path.\n *\n * @property from Starting node position for the connector.\n * @property to Ending node position for the connector.\n * @property label Optional inline label rendered above the curve.\n * @property isActive Whether the connector should use the emphasized active style.\n */\nexport interface StepConnectorProps {\n from: { x: number; y: number }\n to: { x: number; y: number }\n label?: string\n isActive?: boolean\n}\n\nconst NODE_WIDTH = 200\nconst NODE_HEIGHT = 80\n\n/**\n * Render a curved connector between two step positions.\n *\n * @param props Connector endpoints and optional label/state metadata.\n * @returns The SVG group that draws the workflow edge.\n */\nexport function StepConnector({ from, to, label, isActive }: StepConnectorProps): ReactElement {\n const x1 = from.x + NODE_WIDTH\n const y1 = from.y + NODE_HEIGHT / 2\n const x2 = to.x\n const y2 = to.y + NODE_HEIGHT / 2\n const midX = (x1 + x2) / 2\n\n return (\n <g data-workflow=\"connector\" data-active={isActive || undefined}>\n <path\n d={`M ${x1} ${y1} C ${midX} ${y1}, ${midX} ${y2}, ${x2} ${y2}`}\n fill=\"none\"\n stroke={isActive ? 'var(--primary)' : 'var(--border)'}\n strokeWidth={isActive ? 3 : 2}\n markerEnd=\"url(#arrowhead)\"\n />\n {label && (\n <text\n x={midX}\n y={(y1 + y2) / 2 - 8}\n textAnchor=\"middle\"\n fill=\"var(--muted-foreground)\"\n fontSize=\"12\"\n >\n {label}\n </text>\n )}\n <defs>\n <marker id=\"arrowhead\" markerWidth=\"10\" markerHeight=\"7\" refX=\"10\" refY=\"3.5\" orient=\"auto\">\n <polygon points=\"0 0, 10 3.5, 0 7\" fill=\"var(--border)\" />\n </marker>\n </defs>\n </g>\n )\n}\n","/**\n * @module WorkflowCanvas\n * @package @geenius/ai-workflow-react\n * @description React workflow canvas for rendering connected steps and edges.\n * This file visualizes a shared workflow definition while keeping selection\n * state controlled by the parent builder surface.\n */\nimport { AnimatePresence, motion } from \"@geenius/motion/react\";\nimport type {\n WorkflowDefinition,\n} from \"@geenius/ai-workflow-shared\";\nimport type { ReactElement } from \"react\";\nimport { StepNode } from \"./StepNode\";\nimport { StepConnector } from \"./StepConnector\";\n\n/**\n * Props for the workflow builder canvas.\n *\n * @property definition Shared workflow definition to render.\n * @property selectedStepId Currently selected step identifier.\n * @property onSelectStep Callback used to change the selected step.\n * @property onMoveStep Reserved callback for future drag interactions.\n */\nexport interface WorkflowCanvasProps {\n definition: WorkflowDefinition;\n selectedStepId: string | null;\n onSelectStep: (id: string | null) => void;\n onMoveStep?: (stepId: string, pos: { x: number; y: number }) => void;\n}\n\n/**\n * Render a workflow canvas with connectors, nodes, and an empty state.\n *\n * @param props Canvas state and interaction callbacks.\n * @returns The workflow canvas for the current definition.\n */\nexport function WorkflowCanvas({\n definition,\n selectedStepId,\n onSelectStep,\n onMoveStep,\n}: WorkflowCanvasProps): ReactElement {\n return (\n <div data-workflow=\"canvas\" role=\"application\" aria-label=\"Workflow canvas\">\n <svg\n data-workflow=\"connections-layer\"\n style={{ position: \"absolute\", inset: 0, pointerEvents: \"none\" }}\n >\n {definition.connections.map((conn, i) => {\n const from = definition.steps.find((s) => s.id === conn.fromStepId);\n const to = definition.steps.find((s) => s.id === conn.toStepId);\n if (!from?.position || !to?.position) return null;\n return (\n <StepConnector\n key={i}\n from={from.position}\n to={to.position}\n label={conn.label}\n />\n );\n })}\n </svg>\n <div data-workflow=\"nodes-layer\">\n {definition.steps.map((step) => (\n <StepNode\n key={step.id}\n step={step}\n isSelected={selectedStepId === step.id}\n onClick={() =>\n onSelectStep(step.id === selectedStepId ? null : step.id)\n }\n />\n ))}\n </div>\n <AnimatePresence>\n {definition.steps.length === 0 && (\n <motion.div\n data-workflow=\"canvas-empty\"\n initial={{ opacity: 0, scale: 0.95 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.95 }}\n >\n <p data-workflow=\"empty-title\">No steps yet</p>\n <p data-workflow=\"empty-hint\">\n Drag steps from the palette or use a template\n </p>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n}\n","/**\n * @module WorkflowStepConfigPanel\n * @package @geenius/ai-workflow-react\n * @description React side panel for inspecting and editing the currently\n * selected workflow step. This component exposes step metadata, optional flags,\n * and the raw configuration payload used by the builder surface.\n */\n\nimport type { ReactElement } from \"react\";\nimport { useState } from 'react'\nimport type { WorkflowStepDef, StepType } from '@geenius/ai-workflow-shared'\n\n/**\n * Props for the workflow step configuration panel.\n *\n * @property step Shared workflow step being edited in the panel.\n * @property onUpdate Callback that persists partial step updates.\n * @property onDelete Callback that removes the selected step.\n * @property onClose Callback that closes the panel without mutating state.\n */\nexport interface StepConfigPanelProps {\n step: WorkflowStepDef\n onUpdate: (stepId: string, updates: Partial<WorkflowStepDef>) => void\n onDelete: (stepId: string) => void\n onClose: () => void\n}\n\n/**\n * Render the editable side panel for a selected workflow step.\n *\n * @param props Selected step data and mutation callbacks from the builder.\n * @returns The workflow step configuration panel.\n */\nexport function StepConfigPanel({ step, onUpdate, onDelete, onClose }: StepConfigPanelProps): ReactElement {\n const [name, setName] = useState(step.name)\n\n const handleNameBlur = () => {\n if (name.trim() && name !== step.name) {\n onUpdate(step.id, { name: name.trim() })\n }\n }\n\n return (\n <div data-workflow=\"config-panel\" role=\"complementary\" aria-label=\"Step configuration\">\n <div data-workflow=\"config-header\">\n <h3 data-workflow=\"config-title\">Configure Step</h3>\n <button data-workflow=\"config-close\" onClick={onClose} aria-label=\"Close panel\">βœ•</button>\n </div>\n <div data-workflow=\"config-body\">\n <label data-workflow=\"config-label\">\n Step Name\n <input\n data-workflow=\"config-input\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n onBlur={handleNameBlur}\n />\n </label>\n <div data-workflow=\"config-field\">\n <span data-workflow=\"config-field-label\">Type</span>\n <span data-workflow=\"config-field-value\">{step.type}</span>\n </div>\n <div data-workflow=\"config-field\">\n <span data-workflow=\"config-field-label\">ID</span>\n <code data-workflow=\"config-field-code\">{step.id}</code>\n </div>\n {step.optional !== undefined && (\n <label data-workflow=\"config-checkbox\">\n <input\n type=\"checkbox\"\n checked={step.optional}\n onChange={(e) => onUpdate(step.id, { optional: e.target.checked })}\n />\n Optional (skip on failure)\n </label>\n )}\n <div data-workflow=\"config-json\">\n <span data-workflow=\"config-field-label\">Configuration</span>\n <pre data-workflow=\"config-json-view\">{JSON.stringify(step.config, null, 2)}</pre>\n </div>\n </div>\n <div data-workflow=\"config-footer\">\n <button data-workflow=\"config-delete\" onClick={() => { onDelete(step.id); onClose() }}>\n πŸ—‘ Delete Step\n </button>\n </div>\n </div>\n )\n}\n","/**\n * @module WorkflowRunPanel\n * @package @geenius/ai-workflow-react\n * @description React execution monitor for workflow runs. This file condenses\n * progress, cost, and per-step status into a single operational surface that\n * mirrors the shared workflow run contract.\n */\nimport { AnimatePresence, motion } from \"@geenius/motion/react\";\nimport type { WorkflowRun } from \"@geenius/ai-workflow-shared\";\nimport type { ReactElement } from \"react\";\nimport { formatCost } from \"@geenius/ai-workflow-shared\";\n\n/**\n * Props for the workflow run panel.\n *\n * @property run Current workflow run snapshot or `null` when idle.\n * @property isRunning Whether the run is still active.\n * @property onCancel Optional callback that cancels the active run.\n */\nexport interface WorkflowRunPanelProps {\n run: WorkflowRun | null;\n isRunning: boolean;\n onCancel?: () => void;\n}\n\nconst STATUS_ICONS: Record<string, string> = {\n pending: \"⏳\",\n running: \"πŸ”„\",\n completed: \"βœ…\",\n failed: \"❌\",\n skipped: \"⏭️\",\n \"waiting-approval\": \"πŸ‘€\",\n};\n\n/**\n * Render execution progress and per-step status for a workflow run.\n *\n * @param props Run state and optional cancellation callback.\n * @returns A run summary panel or idle placeholder.\n */\nexport function WorkflowRunPanel({\n run,\n isRunning,\n onCancel,\n}: WorkflowRunPanelProps): ReactElement {\n if (!run) {\n return (\n <motion.div\n data-workflow=\"run-panel\"\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -10 }}\n transition={{ type: \"spring\" }}\n >\n <div data-workflow=\"run-empty\">\n <p>No active run. Click \"Run\" to execute the workflow.</p>\n </div>\n </motion.div>\n );\n }\n\n const completedCount = run.stepResults.filter(\n (s) => s.status === \"completed\",\n ).length;\n const totalCount = run.stepResults.length;\n const progress =\n totalCount > 0 ? Math.round((completedCount / totalCount) * 100) : 0;\n const totalCost = run.stepResults.reduce(\n (sum, s) => sum + (s.costUsd ?? 0),\n 0,\n );\n const totalTokens = run.stepResults.reduce(\n (sum, s) => sum + (s.tokens ?? 0),\n 0,\n );\n const duration = (run.completedAt ?? Date.now()) - run.startedAt;\n\n return (\n <motion.div\n data-workflow=\"run-panel\"\n data-status={run.status}\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0 }}\n layout\n transition={{ type: \"spring\" }}\n >\n <div data-workflow=\"run-header\">\n <h3 data-workflow=\"run-title\">\n {STATUS_ICONS[run.status]} Run {run.status}\n </h3>\n {isRunning && onCancel && (\n <button data-workflow=\"run-cancel\" onClick={onCancel}>\n ⏹ Cancel\n </button>\n )}\n </div>\n <div data-workflow=\"run-progress\">\n <div data-workflow=\"run-progress-bar\">\n <motion.div\n data-workflow=\"run-progress-fill\"\n initial={{ width: 0 }}\n animate={{ width: `${progress}%` }}\n transition={{ type: \"spring\" }}\n />\n </div>\n <span data-workflow=\"run-progress-text\">\n {completedCount}/{totalCount} steps ({progress}%)\n </span>\n </div>\n <div data-workflow=\"run-stats\">\n <span data-workflow=\"run-stat\">⏱ {(duration / 1000).toFixed(1)}s</span>\n {totalTokens > 0 && (\n <span data-workflow=\"run-stat\">\n πŸͺ™ {totalTokens.toLocaleString()} tokens\n </span>\n )}\n {totalCost > 0 && (\n <span data-workflow=\"run-stat\">πŸ’° {formatCost(totalCost)}</span>\n )}\n </div>\n <AnimatePresence>\n {run.error && (\n <motion.div\n data-workflow=\"run-error\"\n role=\"alert\"\n initial={{ opacity: 0, height: 0 }}\n animate={{ opacity: 1, height: \"auto\" }}\n exit={{ opacity: 0, height: 0 }}\n >\n {run.error}\n </motion.div>\n )}\n </AnimatePresence>\n <motion.ul\n data-workflow=\"run-steps\"\n layout\n transition={{ staggerChildren: 0.1 }}\n >\n <AnimatePresence mode=\"popLayout\">\n {run.stepResults.map((r) => (\n <motion.li\n key={r.stepId}\n data-workflow=\"run-step-item\"\n data-status={r.status}\n initial={{ opacity: 0, x: -10 }}\n animate={{ opacity: 1, x: 0 }}\n exit={{ opacity: 0, scale: 0.95 }}\n layout\n >\n <span data-workflow=\"run-step-icon\">\n {STATUS_ICONS[r.status]}\n </span>\n <span data-workflow=\"run-step-name\">{r.stepName}</span>\n <span data-workflow=\"run-step-duration\">{r.durationMs}ms</span>\n </motion.li>\n ))}\n </AnimatePresence>\n </motion.ul>\n </motion.div>\n );\n}\n","/**\n * @module WorkflowApprovalModal\n * @package @geenius/ai-workflow-react\n * @description React approval dialog for human-gated workflow steps. This\n * component traps keyboard focus, restores focus on close, and keeps the\n * approval surface aligned with the CSS and SolidJS variants.\n */\n\nimport type { ReactElement } from \"react\";\nimport { useEffect, useId, useRef } from \"react\";\nimport { AnimatePresence, motion } from \"@geenius/motion/react\";\nimport type { ApprovalRequest } from \"../hooks/useApprovalGate\";\n\nfunction getFocusableElements(container: HTMLElement | null): HTMLElement[] {\n if (!container) {\n return [];\n }\n\n return Array.from(\n container.querySelectorAll<HTMLElement>(\n 'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])',\n ),\n );\n}\n\n/**\n * Props for the workflow approval dialog.\n *\n * @property request Pending approval request to render, or `null` when idle.\n * @property onApprove Callback that approves the active request by id.\n * @property onReject Callback that rejects the active request by id.\n * @property onDismiss Optional callback used for Escape-key and dismiss flows.\n */\nexport interface ApprovalModalProps {\n request: ApprovalRequest | null;\n onApprove: (id: string) => void;\n onReject: (id: string) => void;\n onDismiss?: (id: string) => void;\n}\n\n/**\n * Render the pending approval request as an accessible modal dialog.\n *\n * @param props Approval dialog callbacks and the current pending request.\n * @returns The animated approval dialog, or `null` when no approval is pending.\n */\nexport function ApprovalModal(props: ApprovalModalProps): ReactElement {\n const dialogRef = useRef<HTMLDivElement | null>(null);\n const previousActiveElementRef = useRef<HTMLElement | null>(null);\n const titleId = useId();\n const messageId = useId();\n const request = props.request;\n\n useEffect(() => {\n if (!request) {\n return;\n }\n\n const dialog = dialogRef.current;\n previousActiveElementRef.current =\n document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null;\n\n const dismiss = (): void => {\n if (props.onDismiss) {\n props.onDismiss(request.id);\n return;\n }\n\n props.onReject(request.id);\n };\n\n const focusableElements = getFocusableElements(dialog);\n (focusableElements[0] ?? dialog)?.focus();\n\n const handleKeyDown = (event: KeyboardEvent): void => {\n if (!dialog) {\n return;\n }\n\n if (event.key === \"Escape\") {\n event.preventDefault();\n dismiss();\n return;\n }\n\n if (event.key !== \"Tab\") {\n return;\n }\n\n const currentFocusableElements = getFocusableElements(dialog);\n\n if (currentFocusableElements.length === 0) {\n event.preventDefault();\n dialog.focus();\n return;\n }\n\n const firstElement = currentFocusableElements[0];\n const lastElement =\n currentFocusableElements[currentFocusableElements.length - 1];\n\n if (event.shiftKey && document.activeElement === firstElement) {\n event.preventDefault();\n lastElement.focus();\n } else if (!event.shiftKey && document.activeElement === lastElement) {\n event.preventDefault();\n firstElement.focus();\n }\n };\n\n dialog?.addEventListener(\"keydown\", handleKeyDown);\n\n return () => {\n dialog?.removeEventListener(\"keydown\", handleKeyDown);\n previousActiveElementRef.current?.focus();\n previousActiveElementRef.current = null;\n };\n }, [props.onDismiss, props.onReject, request]);\n\n return (\n <AnimatePresence>\n {request && (\n <div data-workflow=\"approval-modal\">\n <motion.div\n data-workflow=\"approval-overlay\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n />\n <motion.div\n ref={dialogRef}\n data-workflow=\"approval-dialog\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={messageId}\n tabIndex={-1}\n initial={{ opacity: 0, scale: 0.95, y: -20 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.95, y: -20 }}\n transition={{ type: \"spring\", damping: 25, stiffness: 300 }}\n >\n <div data-workflow=\"approval-header\">\n <span data-workflow=\"approval-icon\">πŸ‘€</span>\n <h3 id={titleId} data-workflow=\"approval-title\">\n Approval Required\n </h3>\n </div>\n <div data-workflow=\"approval-body\">\n <p id={messageId} data-workflow=\"approval-message\">\n {request.message}\n </p>\n <div data-workflow=\"approval-meta\">\n <span data-workflow=\"approval-step\">\n Step: {request.stepId}\n </span>\n <span data-workflow=\"approval-time\">\n Requested: {new Date(request.requestedAt).toLocaleTimeString()}\n </span>\n </div>\n {request.approvers && request.approvers.length > 0 && (\n <div data-workflow=\"approval-approvers\">\n <span>Authorized approvers: </span>\n {request.approvers.map((approver) => (\n <span\n key={approver}\n data-workflow=\"approval-approver-badge\"\n >\n {approver}\n </span>\n ))}\n </div>\n )}\n </div>\n <div data-workflow=\"approval-actions\">\n <button\n type=\"button\"\n data-workflow=\"approval-reject\"\n onClick={() => props.onReject(request.id)}\n >\n βœ• Reject\n </button>\n <button\n type=\"button\"\n data-workflow=\"approval-approve\"\n onClick={() => props.onApprove(request.id)}\n >\n βœ“ Approve\n </button>\n </div>\n </motion.div>\n </div>\n )}\n </AnimatePresence>\n );\n}\n","/**\n * @module WorkflowToolbar\n * @package @geenius/ai-workflow-react\n * @description React toolbar for workflow builder actions such as save, run,\n * cancel, undo, redo, and export. This component owns the top-level command\n * surface shared across the builder page.\n */\n\nimport type { ReactElement } from \"react\";\nimport { AnimatePresence, motion } from \"@geenius/motion/react\";\nimport { cn } from \"../lib/cn\";\nimport { cva } from \"../lib/cva\";\n\n/**\n * Props for the workflow toolbar action surface.\n *\n * @property workflowName Human-readable workflow name shown in the title slot.\n * @property isDirty Whether unsaved edits are currently present.\n * @property isRunning Whether a run is currently active.\n * @property canUndo Whether the undo action should be enabled.\n * @property canRedo Whether the redo action should be enabled.\n * @property onSave Callback that persists the current workflow definition.\n * @property onRun Callback that starts a workflow run.\n * @property onCancel Optional callback that stops an in-flight run.\n * @property onUndo Callback that restores the previous builder snapshot.\n * @property onRedo Callback that reapplies the next builder snapshot.\n * @property onExport Optional callback that exports the workflow definition.\n * @property className Optional class-name override for the toolbar container.\n */\nexport interface WorkflowToolbarProps {\n workflowName: string;\n isDirty: boolean;\n isRunning: boolean;\n canUndo: boolean;\n canRedo: boolean;\n onSave: () => void;\n onRun: () => void;\n onCancel?: () => void;\n onUndo: () => void;\n onRedo: () => void;\n onExport?: () => void;\n className?: string;\n}\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center rounded-md px-3 py-2 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40\",\n {\n variants: {\n tone: {\n primary: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n secondary: \"bg-secondary text-foreground hover:bg-secondary/80\",\n danger: \"bg-danger text-primary-foreground hover:bg-danger/90\",\n },\n },\n },\n);\n\n/**\n * Render the builder command toolbar with run-state-aware actions.\n *\n * @param props Action callbacks and builder status flags for the toolbar.\n * @returns The animated workflow toolbar.\n */\nexport function WorkflowToolbar(props: WorkflowToolbarProps): ReactElement {\n return (\n <motion.div\n data-workflow=\"toolbar\"\n className={cn(\"ai-workflow__toolbar\", props.className)}\n role=\"toolbar\"\n aria-label=\"Workflow actions\"\n layout\n >\n <div data-workflow=\"toolbar-left\">\n <motion.h2 data-workflow=\"toolbar-title\" layout=\"position\">\n {props.workflowName}\n </motion.h2>\n <AnimatePresence>\n {props.isDirty && (\n <motion.span\n data-workflow=\"toolbar-dirty\"\n initial={{ scale: 0 }}\n animate={{ scale: 1 }}\n exit={{ scale: 0 }}\n >\n ●\n </motion.span>\n )}\n </AnimatePresence>\n </div>\n <div data-workflow=\"toolbar-center\">\n <button\n data-workflow=\"toolbar-btn\"\n className={buttonVariants({ tone: \"secondary\" })}\n onClick={props.onUndo}\n disabled={!props.canUndo}\n aria-label=\"Undo\"\n title=\"Undo\"\n >\n β†Ά\n </button>\n <button\n data-workflow=\"toolbar-btn\"\n className={buttonVariants({ tone: \"secondary\" })}\n onClick={props.onRedo}\n disabled={!props.canRedo}\n aria-label=\"Redo\"\n title=\"Redo\"\n >\n β†·\n </button>\n </div>\n <div data-workflow=\"toolbar-right\">\n {props.onExport && (\n <button\n data-workflow=\"toolbar-btn-secondary\"\n className={buttonVariants({ tone: \"secondary\" })}\n onClick={props.onExport}\n aria-label=\"Export workflow\"\n >\n πŸ“€ Export\n </button>\n )}\n <button\n data-workflow=\"toolbar-btn-secondary\"\n className={buttonVariants({ tone: \"secondary\" })}\n onClick={props.onSave}\n disabled={!props.isDirty}\n aria-label=\"Save workflow\"\n >\n πŸ’Ύ Save\n </button>\n {props.isRunning ? (\n <motion.button\n layoutId=\"runBtn\"\n data-workflow=\"toolbar-btn-danger\"\n className={buttonVariants({ tone: \"danger\" })}\n onClick={props.onCancel}\n aria-label=\"Stop workflow run\"\n >\n ⏹ Stop\n </motion.button>\n ) : (\n <motion.button\n layoutId=\"runBtn\"\n data-workflow=\"toolbar-btn-primary\"\n className={buttonVariants({ tone: \"primary\" })}\n onClick={props.onRun}\n aria-label=\"Run workflow\"\n >\n β–Ά Run\n </motion.button>\n )}\n </div>\n </motion.div>\n );\n}\n","/**\n * @module WorkflowStepPalette\n * @package @geenius/ai-workflow-react\n * @description React step-catalog component for the workflow builder. This\n * file exposes the package's built-in step taxonomy so builder pages can add\n * steps without duplicating labels, icons, or descriptions.\n */\nimport { motion } from \"@geenius/motion/react\";\nimport type { StepType } from \"@geenius/ai-workflow-shared\";\nimport type { ReactElement } from \"react\";\n\n/**\n * One palette entry describing an addable workflow step type.\n *\n * @property type Shared workflow step discriminant.\n * @property label Human-readable step label.\n * @property icon Emoji icon used in the palette.\n * @property description Short explanation of the step's purpose.\n */\nexport interface StepPaletteItem {\n type: StepType;\n label: string;\n icon: string;\n description: string;\n}\n\nconst PALETTE_ITEMS: StepPaletteItem[] = [\n {\n type: \"llm-call\",\n label: \"LLM Call\",\n icon: \"πŸ€–\",\n description: \"Call an AI model\",\n },\n {\n type: \"transform\",\n label: \"Transform\",\n icon: \"βš™οΈ\",\n description: \"Transform data\",\n },\n {\n type: \"condition\",\n label: \"Condition\",\n icon: \"πŸ”€\",\n description: \"If/else branching\",\n },\n {\n type: \"human-approval\",\n label: \"Approval\",\n icon: \"πŸ‘€\",\n description: \"Human approval gate\",\n },\n {\n type: \"webhook\",\n label: \"Webhook\",\n icon: \"🌐\",\n description: \"HTTP request\",\n },\n {\n type: \"delay\",\n label: \"Delay\",\n icon: \"⏱️\",\n description: \"Wait for duration\",\n },\n {\n type: \"parallel\",\n label: \"Parallel\",\n icon: \"⚑\",\n description: \"Run steps in parallel\",\n },\n {\n type: \"loop\",\n label: \"Loop\",\n icon: \"πŸ”„\",\n description: \"Iterate over items\",\n },\n {\n type: \"sub-workflow\",\n label: \"Sub-workflow\",\n icon: \"πŸ“‹\",\n description: \"Run another workflow\",\n },\n {\n type: \"custom\",\n label: \"Custom\",\n icon: \"πŸ”§\",\n description: \"Custom handler\",\n },\n];\n\n/**\n * Props for the workflow step palette component.\n *\n * @property onAddStep Callback invoked when a step type is selected.\n */\nexport interface StepPaletteProps {\n onAddStep: (type: StepType) => void;\n}\n\n/**\n * Render the workflow step palette.\n *\n * @param props Palette interaction props.\n * @returns A list of available workflow step types.\n */\nexport function StepPalette({ onAddStep }: StepPaletteProps): ReactElement {\n return (\n <div\n data-workflow=\"step-palette\"\n role=\"list\"\n aria-label=\"Available step types\"\n >\n <h3 data-workflow=\"palette-title\">Steps</h3>\n {PALETTE_ITEMS.map((item) => (\n <motion.button\n key={item.type}\n data-workflow=\"palette-item\"\n role=\"listitem\"\n onClick={() => onAddStep(item.type)}\n whileHover={{ scale: 1.02 }}\n whileTap={{ scale: 0.98 }}\n >\n <span data-workflow=\"palette-icon\">{item.icon}</span>\n <div data-workflow=\"palette-info\">\n <span data-workflow=\"palette-label\">{item.label}</span>\n <span data-workflow=\"palette-desc\">{item.description}</span>\n </div>\n </motion.button>\n ))}\n </div>\n );\n}\n","/**\n * @module WorkflowBuilderPage\n * @package @geenius/ai-workflow-react\n * @description React page for composing, editing, and running workflow\n * definitions. This page coordinates the shared engine with the React builder\n * hooks and component surface.\n */\n\nimport { useCallback } from \"react\";\nimport type { ReactElement } from \"react\";\nimport type {\n StepType,\n WorkflowDefinition,\n WorkflowEngineOptions,\n WorkflowStepDef,\n} from \"@geenius/ai-workflow-shared\";\nimport { WorkflowEngine } from \"@geenius/ai-workflow-shared\";\nimport { StepConfigPanel } from \"../components/StepConfigPanel\";\nimport { StepPalette } from \"../components/StepPalette\";\nimport { WorkflowCanvas } from \"../components/WorkflowCanvas\";\nimport { WorkflowRunPanel } from \"../components/WorkflowRunPanel\";\nimport { WorkflowToolbar } from \"../components/WorkflowToolbar\";\nimport { useWorkflowBuilder } from \"../hooks/useWorkflowBuilder\";\nimport { useWorkflowRun } from \"../hooks/useWorkflowRun\";\nimport { cn } from \"../lib/cn\";\n\n/**\n * Props for the React workflow builder page.\n *\n * @property engineOptions Shared workflow engine integrations used for execution.\n * @property onSave Optional callback that persists the edited definition.\n * @property className Optional class name override for outer layout composition.\n * @property workflows Optional list of stored workflows shown in the summary strip.\n * @property workflowRuns Optional list of stored workflow runs shown in the summary strip.\n */\nexport interface WorkflowBuilderPageProps {\n engineOptions: WorkflowEngineOptions;\n onSave?: (definition: WorkflowDefinition) => void;\n className?: string;\n workflows?: Array<{ _id: string; name: string }>;\n workflowRuns?: Array<{ _id: string; workflowId: string }>;\n}\n\n/**\n * Create a default config object for a newly inserted step type.\n *\n * @param type Step discriminant selected from the palette.\n * @returns The default config payload for the new step.\n */\nfunction createStepConfig(type: StepType): WorkflowStepDef[\"config\"] {\n switch (type) {\n case \"llm-call\":\n return {\n type,\n systemPrompt: \"\",\n userPromptTemplate: \"\",\n outputVar: \"result\",\n };\n case \"transform\":\n return { type, expression: \"\", inputVars: [], outputVar: \"result\" };\n case \"condition\":\n return { type, expression: \"\", trueStepId: \"\", falseStepId: \"\" };\n case \"human-approval\":\n return { type, message: \"\" };\n case \"webhook\":\n return { type, url: \"\", method: \"POST\", outputVar: \"result\" };\n case \"delay\":\n return { type, durationMs: 0 };\n case \"parallel\":\n return { type, stepIds: [], failurePolicy: \"continue\" };\n case \"loop\":\n return {\n type,\n stepIds: [],\n iterateVar: \"\",\n itemVar: \"\",\n maxIterations: 1,\n };\n case \"sub-workflow\":\n return { type, workflowId: \"\", inputMapping: {}, outputVar: \"result\" };\n case \"custom\":\n return { type, handler: \"custom\", params: {}, outputVar: \"result\" };\n }\n}\n\n/**\n * Render the full workflow builder page for React consumers.\n *\n * @param props Builder dependencies, persistence callbacks, and optional summaries.\n * @returns The composed workflow builder page.\n */\nexport function WorkflowBuilderPage({\n engineOptions,\n onSave,\n className,\n workflows,\n workflowRuns,\n}: WorkflowBuilderPageProps): ReactElement {\n const builder = useWorkflowBuilder();\n const runTracker = useWorkflowRun();\n const workflowCount = workflows?.length ?? 0;\n const runCount = workflowRuns?.length ?? 0;\n\n const handleAddStep = useCallback((type: StepType): void => {\n const id = `step_${Date.now()}_${Math.random().toString(36).slice(2, 6)}`;\n const step: WorkflowStepDef = {\n id,\n name: `New ${type} step`,\n type,\n config: createStepConfig(type),\n position: { x: 100 + builder.definition.steps.length * 250, y: 200 },\n };\n\n builder.addStep(step);\n }, [builder]);\n\n const handleRun = useCallback(async (): Promise<void> => {\n const engine = new WorkflowEngine({\n ...engineOptions,\n onStepComplete: (result) => {\n runTracker.updateStep(result);\n },\n });\n\n const result = await engine.execute(builder.definition);\n runTracker.trackRun(result);\n }, [builder.definition, engineOptions, runTracker]);\n\n return (\n <div data-workflow=\"builder-page\" className={cn(\"ai-workflow__builder-page\", className)}>\n <div data-workflow=\"builder-summary\">\n <span data-workflow=\"builder-workflow-count\">\n {workflowCount} workflows\n </span>\n <span data-workflow=\"builder-run-count\">{runCount} runs</span>\n </div>\n <WorkflowToolbar\n workflowName={builder.definition.name}\n isDirty={builder.isDirty}\n isRunning={runTracker.isRunning}\n canUndo={builder.canUndo}\n canRedo={builder.canRedo}\n onSave={() => onSave?.(builder.definition)}\n onRun={handleRun}\n onUndo={builder.undo}\n onRedo={builder.redo}\n />\n <div data-workflow=\"builder-layout\" className=\"ai-workflow__builder-layout\">\n <StepPalette onAddStep={handleAddStep} />\n <WorkflowCanvas\n definition={builder.definition}\n selectedStepId={builder.selectedStepId}\n onSelectStep={builder.selectStep}\n />\n {builder.selectedStepId && (() => {\n const step =\n builder.definition.steps.find((item) => item.id === builder.selectedStepId) ??\n null;\n\n return step ? (\n <StepConfigPanel\n step={step}\n onUpdate={builder.updateStep}\n onDelete={builder.removeStep}\n onClose={() => builder.selectStep(null)}\n />\n ) : null;\n })()}\n {runTracker.run ? (\n <WorkflowRunPanel\n run={runTracker.run}\n isRunning={runTracker.isRunning}\n />\n ) : null}\n </div>\n </div>\n );\n}\n","/**\n * @module WorkflowRunsPage\n * @package @geenius/ai-workflow-react\n * @description React page component for browsing workflow execution history in\n * the Tailwind workflow variant.\n */\n\nimport type { ReactElement } from \"react\";\nimport type { WorkflowRun } from '@geenius/ai-workflow-shared'\nimport { cn } from '../lib/cn'\n\n/**\n * Props for the workflow runs history page.\n *\n * @property runs Workflow run records rendered on the page.\n * @property onSelectRun Optional callback fired when a run card is selected.\n * @property className Optional class-name override for the page container.\n */\nexport interface WorkflowRunsPageProps {\n runs: WorkflowRun[]\n onSelectRun?: (runId: string) => void\n className?: string\n}\n\nconst STATUS_ICONS: Record<string, string> = {\n pending: '⏳', running: 'πŸ”„', completed: 'βœ…', failed: '❌', cancelled: 'β›”', paused: '⏸️',\n}\n\n/**\n * Render the workflow run history page.\n *\n * @param props Workflow run records plus optional selection and layout hooks.\n * @returns The workflow run history page.\n */\nexport function WorkflowRunsPage({ runs, onSelectRun, className }: WorkflowRunsPageProps): ReactElement {\n return (\n <div data-workflow=\"runs-page\" className={cn('ai-workflow__runs-page', className)}>\n <div data-workflow=\"runs-header\">\n <h1 data-workflow=\"runs-title\">Workflow Runs</h1>\n <span data-workflow=\"runs-count\">{runs.length} runs</span>\n </div>\n {runs.length === 0 ? (\n <div data-workflow=\"runs-empty\">\n <p>No workflow runs yet. Execute a workflow to see results here.</p>\n </div>\n ) : (\n <div data-workflow=\"runs-list\" role=\"list\">\n {runs.map(run => {\n const completedSteps = run.stepResults.filter(s => s.status === 'completed').length\n const totalSteps = run.stepResults.length\n const duration = (run.completedAt ?? Date.now()) - run.startedAt\n return (\n <div\n key={run.id}\n data-workflow=\"run-card\"\n data-status={run.status}\n role=\"listitem\"\n onClick={() => onSelectRun?.(run.id)}\n tabIndex={0}\n onKeyDown={(e) => { if (e.key === 'Enter') onSelectRun?.(run.id) }}\n >\n <div data-workflow=\"run-card-header\">\n <span data-workflow=\"run-card-status\">\n {STATUS_ICONS[run.status]} {run.status}\n </span>\n <span data-workflow=\"run-card-id\">{run.id.slice(0, 8)}…</span>\n </div>\n <div data-workflow=\"run-card-meta\">\n <span data-workflow=\"run-card-steps\">{completedSteps}/{totalSteps} steps</span>\n <span data-workflow=\"run-card-duration\">{(duration / 1000).toFixed(1)}s</span>\n <span data-workflow=\"run-card-date\">{new Date(run.startedAt).toLocaleString()}</span>\n </div>\n {run.error && <p data-workflow=\"run-card-error\">{run.error}</p>}\n </div>\n )\n })}\n </div>\n )}\n </div>\n )\n}\n"]}
1
+ {"version":3,"sources":["../../shared/src/utils/interpolation.ts","../../shared/src/errors.ts","../../shared/src/utils/expression.ts","../../shared/src/utils/cost.ts","../../shared/src/engine.ts","../../shared/src/validators.ts","../../shared/src/templates.ts","../src/hooks/useWorkflow.ts","../src/hooks/useWorkflowBuilder.ts","../src/hooks/useWorkflowRun.ts","../src/hooks/useWorkflowStep.ts","../src/hooks/useApprovalGate.ts","../src/hooks/useWorkflowTemplates.ts","../src/lib/cn.ts","../src/lib/cva.ts","../src/components/StepNode.tsx","../src/components/StepConnector.tsx","../src/components/WorkflowCanvas.tsx","../src/components/StepConfigPanel.tsx","../src/components/WorkflowRunPanel.tsx","../src/components/ApprovalModal.tsx","../src/components/WorkflowToolbar.tsx","../src/components/StepPalette.tsx","../src/pages/WorkflowBuilderPage.tsx","../src/pages/WorkflowRunsPage.tsx"],"names":["isRecord","useState","useCallback","useMemo","jsxs","jsx","motion","AnimatePresence","useRef","useEffect","result","STATUS_ICONS"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @module WorkflowInterpolationUtils\n * @package @geenius/ai-workflow-shared\n * @description Template-variable interpolation helpers for workflow prompts,\n * webhook bodies, and approval copy. These functions resolve dot paths and\n * replace `{{variable}}` markers using the workflow runtime context.\n */\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object')\n}\n\n/** Resolve a dot-path like \"user.name\" from a nested object */\nfunction resolvePath(obj: Record<string, unknown>, path: string): unknown {\n return path.split('.').reduce<unknown>((acc, key) => {\n if (isRecord(acc)) {\n return acc[key]\n }\n return undefined\n }, obj)\n}\n\n/**\n * Interpolate {{variable}} or {{nested.path}} references in a string.\n * Supports optional default values: {{varName|default}}.\n */\nexport function interpolate(template: string, vars: Record<string, unknown>): string {\n return template.replace(/\\{\\{([^}]+)\\}\\}/g, (match, expr: string) => {\n const [path, defaultValue] = expr.trim().split('|').map((s: string) => s.trim())\n const val = resolvePath(vars, path)\n if (val !== undefined && val !== null) {\n return typeof val === 'object' ? JSON.stringify(val) : String(val)\n }\n return defaultValue ?? ''\n })\n}\n\n/**\n * Extract all variable references from a template string.\n * Returns unique variable names (without defaults).\n */\nexport function extractVariables(template: string): string[] {\n const vars = new Set<string>()\n const re = /\\{\\{([^}]+)\\}\\}/g\n let m: RegExpExecArray | null\n while ((m = re.exec(template)) !== null) {\n const path = m[1].trim().split('|')[0].trim()\n vars.add(path.split('.')[0]) // add root variable name\n }\n return [...vars]\n}\n\n/**\n * Check if all required variables in a template are present in the vars object.\n * Returns missing variable names.\n */\nexport function findMissingVariables(template: string, vars: Record<string, unknown>): string[] {\n const required = extractVariables(template)\n return required.filter(v => vars[v] === undefined || vars[v] === null)\n}\n","/**\n * @module WorkflowErrors\n * @package @geenius/ai-workflow-shared\n * @description Package-specific typed error classes for workflow configuration,\n * execution, graph validation, and expression evaluation. These errors extend\n * the shared Geenius error base so consumers can discriminate failures safely.\n */\n\nimport { ErrorCode, GeeniusError } from '@geenius/tools/errors'\n\n/**\n * Shared context payload for workflow failures.\n *\n * @property stepId Optional workflow step identifier related to the failure.\n * @property workflowId Optional workflow identifier related to the failure.\n * @property expression Optional expression string that failed to parse or evaluate.\n * @property details Arbitrary structured metadata that helps consumers debug failures.\n */\nexport interface WorkflowErrorContext {\n [key: string]: unknown\n stepId?: string\n workflowId?: string\n expression?: string\n details?: Record<string, unknown>\n}\n\n/**\n * Base typed error for the AI workflow package.\n */\nexport class WorkflowError extends GeeniusError {\n /**\n * Create a structured workflow error.\n *\n * @param options Error metadata, message, and optional structured context.\n * @returns A typed workflow error instance.\n */\n constructor(options: {\n code?: ErrorCode\n message: string\n cause?: unknown\n context?: WorkflowErrorContext\n }) {\n super({\n code: options.code ?? ErrorCode.INTERNAL,\n message: options.message,\n cause: options.cause,\n context: options.context,\n })\n this.name = 'WorkflowError'\n Object.setPrototypeOf(this, WorkflowError.prototype)\n }\n}\n\n/**\n * Error raised when workflow configuration is invalid or incomplete.\n */\nexport class WorkflowConfigurationError extends WorkflowError {\n /**\n * Create a configuration error for invalid workflow setup.\n *\n * @param message Human-readable explanation of the invalid configuration.\n * @param context Optional structured metadata describing the failing config area.\n * @returns A typed workflow configuration error.\n */\n constructor(message: string, context?: WorkflowErrorContext) {\n super({\n code: ErrorCode.INVALID_CONFIG,\n message,\n context,\n })\n this.name = 'WorkflowConfigurationError'\n Object.setPrototypeOf(this, WorkflowConfigurationError.prototype)\n }\n}\n\n/**\n * Error raised when workflow execution fails at runtime.\n */\nexport class WorkflowExecutionError extends WorkflowError {\n /**\n * Create an execution error for a workflow runtime failure.\n *\n * @param message Human-readable explanation of the runtime failure.\n * @param context Optional structured metadata describing the failing execution path.\n * @param cause Optional underlying exception that triggered the runtime failure.\n * @returns A typed workflow execution error.\n */\n constructor(message: string, context?: WorkflowErrorContext, cause?: unknown) {\n super({\n code: ErrorCode.INTERNAL,\n message,\n cause,\n context,\n })\n this.name = 'WorkflowExecutionError'\n Object.setPrototypeOf(this, WorkflowExecutionError.prototype)\n }\n}\n\n/**\n * Error raised when a workflow DAG is invalid.\n */\nexport class WorkflowGraphError extends WorkflowError {\n /**\n * Create a graph-validation error for an invalid workflow topology.\n *\n * @param message Human-readable explanation of the graph validation failure.\n * @param context Optional structured metadata describing the invalid topology.\n * @returns A typed workflow graph error.\n */\n constructor(message: string, context?: WorkflowErrorContext) {\n super({\n code: ErrorCode.VALIDATION,\n message,\n context,\n })\n this.name = 'WorkflowGraphError'\n Object.setPrototypeOf(this, WorkflowGraphError.prototype)\n }\n}\n\n/**\n * Error raised when workflow expressions fail to parse or evaluate safely.\n */\nexport class WorkflowExpressionError extends WorkflowError {\n /**\n * Create an expression error for a failed transform or condition expression.\n *\n * @param message Human-readable explanation of the expression failure.\n * @param context Optional structured metadata including the source expression.\n * @param cause Optional underlying parse or runtime error.\n * @returns A typed workflow expression error.\n */\n constructor(message: string, context?: WorkflowErrorContext, cause?: unknown) {\n super({\n code: ErrorCode.VALIDATION,\n message,\n cause,\n context,\n })\n this.name = 'WorkflowExpressionError'\n Object.setPrototypeOf(this, WorkflowExpressionError.prototype)\n }\n}\n\n/**\n * Normalize unknown thrown values into an exported workflow error type.\n *\n * @param error Unknown thrown value from workflow code.\n * @param fallbackMessage Message used when the original value is not informative.\n * @param context Optional structured context describing the failing workflow area.\n * @returns A typed workflow error instance suitable for rethrowing or storing.\n */\nexport function normalizeWorkflowError(\n error: unknown,\n fallbackMessage: string,\n context?: WorkflowErrorContext,\n): WorkflowError {\n if (error instanceof WorkflowError) {\n return error\n }\n\n if (error instanceof GeeniusError) {\n return new WorkflowError({\n code: error.code,\n message: error.message,\n cause: error,\n context,\n })\n }\n\n if (error instanceof Error) {\n return new WorkflowExecutionError(error.message, context, error)\n }\n\n return new WorkflowExecutionError(fallbackMessage, context, error)\n}\n","/**\n * @module WorkflowExpressionUtils\n * @package @geenius/ai-workflow-shared\n * @description Safe expression helpers for transform and condition steps. This\n * file implements the parser and evaluator used by the workflow engine to\n * support a constrained JavaScript-like expression language without `eval`.\n */\n\nimport { WorkflowExpressionError } from \"../errors\";\n\ntype TokenType =\n | \"number\"\n | \"string\"\n | \"identifier\"\n | \"operator\"\n | \"punctuator\"\n | \"eof\";\n\ntype ExpressionOperand = string | number | bigint | boolean | null | undefined;\ntype RelationalOperand = string | number | bigint | boolean;\n\ninterface Token {\n type: TokenType;\n value: string;\n}\n\ninterface Reference {\n __ref: true;\n base: unknown;\n key: string | number | symbol;\n value: unknown;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === \"object\");\n}\n\nfunction isExpressionOperand(value: unknown): value is ExpressionOperand {\n return (\n value === null ||\n value === undefined ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"bigint\" ||\n typeof value === \"boolean\"\n );\n}\n\nfunction isRelationalOperand(value: unknown): value is RelationalOperand {\n return (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"bigint\" ||\n typeof value === \"boolean\"\n );\n}\n\nfunction toPropertyKey(value: unknown): string | number | symbol {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"symbol\"\n ) {\n return value;\n }\n\n throw createExpressionError(\n \"Computed property access expects a string, number, or symbol key.\",\n );\n}\n\nfunction createExpressionError(\n message: string,\n expression?: string,\n cause?: unknown,\n): WorkflowExpressionError {\n return new WorkflowExpressionError(\n message,\n expression ? { expression } : undefined,\n cause,\n );\n}\n\nconst FORBIDDEN_PROPERTIES = new Set([\n \"__proto__\",\n \"prototype\",\n \"constructor\",\n \"caller\",\n \"callee\",\n \"arguments\",\n]);\n\nconst SAFE_GLOBALS: Record<string, unknown> = Object.freeze({\n Math,\n JSON: Object.freeze({\n parse: JSON.parse.bind(JSON),\n stringify: JSON.stringify.bind(JSON),\n }),\n Date: Object.freeze({\n now: Date.now.bind(Date),\n parse: Date.parse.bind(Date),\n UTC: Date.UTC.bind(Date),\n }),\n Number: (value: unknown) => Number(value),\n String: (value: unknown) => String(value),\n Boolean: (value: unknown) => Boolean(value),\n});\n\nfunction isIdentifierStart(char: string): boolean {\n return /[A-Za-z_$]/.test(char);\n}\n\nfunction isIdentifierPart(char: string): boolean {\n return /[A-Za-z0-9_$]/.test(char);\n}\n\nfunction isDigit(char: string): boolean {\n return /[0-9]/.test(char);\n}\n\nfunction tokenize(expression: string): Token[] {\n const tokens: Token[] = [];\n let index = 0;\n\n const push = (type: TokenType, value: string) => {\n tokens.push({ type, value });\n };\n\n while (index < expression.length) {\n const char = expression[index];\n\n if (/\\s/.test(char)) {\n index++;\n continue;\n }\n\n const three = expression.slice(index, index + 3);\n if (three === \"...\") {\n push(\"operator\", \"...\");\n index += 3;\n continue;\n }\n\n const multi = [\n \"===\",\n \"!==\",\n \">=\",\n \"<=\",\n \"&&\",\n \"||\",\n \"??\",\n \"==\",\n \"!=\",\n \"**\",\n ];\n const matched = multi.find((op) => expression.startsWith(op, index));\n if (matched) {\n push(\"operator\", matched);\n index += matched.length;\n continue;\n }\n\n if (\n isDigit(char) ||\n (char === \".\" && isDigit(expression[index + 1] ?? \"\"))\n ) {\n let end = index + 1;\n while (end < expression.length && /[0-9.]/.test(expression[end])) end++;\n push(\"number\", expression.slice(index, end));\n index = end;\n continue;\n }\n\n if (char === '\"' || char === \"'\") {\n const quote = char;\n let end = index + 1;\n let value = \"\";\n while (end < expression.length) {\n const current = expression[end];\n if (current === \"\\\\\") {\n const next = expression[end + 1];\n if (next === undefined)\n throw createExpressionError(\n \"Unterminated string literal.\",\n expression,\n );\n const escapes: Record<string, string> = {\n n: \"\\n\",\n r: \"\\r\",\n t: \"\\t\",\n b: \"\\b\",\n f: \"\\f\",\n \"\\\\\": \"\\\\\",\n '\"': '\"',\n \"'\": \"'\",\n };\n value += escapes[next] ?? next;\n end += 2;\n continue;\n }\n if (current === quote) break;\n value += current;\n end++;\n }\n if (expression[end] !== quote)\n throw createExpressionError(\"Unterminated string literal.\", expression);\n push(\"string\", value);\n index = end + 1;\n continue;\n }\n\n if (isIdentifierStart(char)) {\n let end = index + 1;\n while (end < expression.length && isIdentifierPart(expression[end]))\n end++;\n push(\"identifier\", expression.slice(index, end));\n index = end;\n continue;\n }\n\n const punctuators = [\"(\", \")\", \"{\", \"}\", \"[\", \"]\", \".\", \",\", \":\", \"?\"];\n if (punctuators.includes(char)) {\n push(\"punctuator\", char);\n index++;\n continue;\n }\n\n const operators = [\"+\", \"-\", \"*\", \"/\", \"%\", \"!\", \"<\", \">\", \"=\"];\n if (operators.includes(char)) {\n push(\"operator\", char);\n index++;\n continue;\n }\n\n throw createExpressionError(\n `Unsupported token in expression: ${char}`,\n expression,\n );\n }\n\n tokens.push({ type: \"eof\", value: \"\" });\n return tokens;\n}\n\nclass ExpressionParser {\n private readonly tokens: Token[];\n private index = 0;\n private readonly context: Record<string, unknown>;\n\n constructor(expression: string, context: Record<string, unknown>) {\n this.tokens = tokenize(expression);\n this.context = context;\n }\n\n evaluate(): unknown {\n const result = this.parseConditional();\n this.expect(\"eof\");\n return this.unwrap(result);\n }\n\n private current(): Token {\n return this.tokens[this.index] ?? { type: \"eof\", value: \"\" };\n }\n\n private advance(): Token {\n const token = this.current();\n this.index++;\n return token;\n }\n\n private match(type: TokenType, value?: string): boolean {\n const token = this.current();\n if (token.type !== type) return false;\n if (value !== undefined && token.value !== value) return false;\n this.index++;\n return true;\n }\n\n private expect(type: TokenType, value?: string): Token {\n const token = this.current();\n if (token.type !== type || (value !== undefined && token.value !== value)) {\n throw createExpressionError(\n `Unexpected token \"${token.value}\" in expression.`,\n );\n }\n this.index++;\n return token;\n }\n\n private unwrap(value: unknown): unknown {\n if (this.isReference(value)) return value.value;\n return value;\n }\n\n private unwrapOperand(value: unknown): ExpressionOperand {\n const operand = this.unwrap(value);\n\n if (!isExpressionOperand(operand)) {\n throw createExpressionError(\n \"Expression operand must resolve to a primitive value.\",\n );\n }\n\n return operand;\n }\n\n private relationalOperand(value: unknown): RelationalOperand {\n const operand = this.unwrap(value);\n\n if (!isRelationalOperand(operand)) {\n throw createExpressionError(\n \"Relational comparisons require primitive operands.\",\n );\n }\n\n return operand;\n }\n\n private isReference(value: unknown): value is Reference {\n return isRecord(value) && value.__ref === true;\n }\n\n private toReference(base: unknown, key: string | number | symbol): Reference {\n if (typeof key === \"string\" && FORBIDDEN_PROPERTIES.has(key)) {\n throw createExpressionError(\n `Access to property \"${key}\" is not allowed.`,\n );\n }\n if (base === null || base === undefined) {\n throw createExpressionError(\n `Cannot read property \"${String(key)}\" of ${base}.`,\n );\n }\n return {\n __ref: true,\n base,\n key,\n value: Reflect.get(Object(base), key),\n };\n }\n\n private resolveIdentifier(name: string): unknown {\n if (name === \"true\") return true;\n if (name === \"false\") return false;\n if (name === \"null\") return null;\n if (name === \"undefined\") return undefined;\n if (Object.prototype.hasOwnProperty.call(this.context, name)) {\n return this.context[name];\n }\n if (Object.prototype.hasOwnProperty.call(SAFE_GLOBALS, name)) {\n return SAFE_GLOBALS[name];\n }\n throw createExpressionError(`Unknown identifier in expression: ${name}.`);\n }\n\n private parseConditional(): unknown {\n let test = this.parseNullish();\n if (this.match(\"punctuator\", \"?\")) {\n const consequent = this.parseConditional();\n this.expect(\"punctuator\", \":\");\n const alternate = this.parseConditional();\n test = this.unwrap(test) ? consequent : alternate;\n }\n return test;\n }\n\n private parseNullish(): unknown {\n let left = this.parseLogicalOr();\n while (this.match(\"operator\", \"??\")) {\n const right = this.parseLogicalOr();\n left = this.unwrap(left) ?? right;\n }\n return left;\n }\n\n private parseLogicalOr(): unknown {\n let left = this.parseLogicalAnd();\n while (this.match(\"operator\", \"||\")) {\n const right = this.parseLogicalAnd();\n left = this.unwrap(left) || right;\n }\n return left;\n }\n\n private parseLogicalAnd(): unknown {\n let left = this.parseEquality();\n while (this.match(\"operator\", \"&&\")) {\n const right = this.parseEquality();\n left = this.unwrap(left) && right;\n }\n return left;\n }\n\n private parseEquality(): unknown {\n let left = this.parseComparison();\n while (true) {\n if (this.match(\"operator\", \"===\")) {\n const right = this.parseComparison();\n left = this.unwrap(left) === this.unwrap(right);\n continue;\n }\n if (this.match(\"operator\", \"!==\")) {\n const right = this.parseComparison();\n left = this.unwrap(left) !== this.unwrap(right);\n continue;\n }\n if (this.match(\"operator\", \"==\")) {\n const right = this.parseComparison();\n left = this.unwrap(left) == this.unwrap(right);\n continue;\n }\n if (this.match(\"operator\", \"!=\")) {\n const right = this.parseComparison();\n left = this.unwrap(left) != this.unwrap(right);\n continue;\n }\n return left;\n }\n }\n\n private compare(\n left: unknown,\n right: unknown,\n operator: \"<\" | \"<=\" | \">\" | \">=\",\n ): boolean {\n const leftValue = this.relationalOperand(left);\n const rightValue = this.relationalOperand(right);\n\n switch (operator) {\n case \"<\":\n return leftValue < rightValue;\n case \"<=\":\n return leftValue <= rightValue;\n case \">\":\n return leftValue > rightValue;\n case \">=\":\n return leftValue >= rightValue;\n }\n }\n\n private add(left: unknown, right: unknown): unknown {\n const leftValue = this.unwrapOperand(left);\n const rightValue = this.unwrapOperand(right);\n\n return typeof leftValue === \"string\" || typeof rightValue === \"string\"\n ? String(leftValue) + String(rightValue)\n : Number(leftValue) + Number(rightValue);\n }\n\n private subtract(left: unknown, right: unknown): number {\n return Number(this.unwrapOperand(left)) - Number(this.unwrapOperand(right));\n }\n\n private multiply(left: unknown, right: unknown): number {\n return Number(this.unwrapOperand(left)) * Number(this.unwrapOperand(right));\n }\n\n private divide(left: unknown, right: unknown): number {\n return Number(this.unwrapOperand(left)) / Number(this.unwrapOperand(right));\n }\n\n private remainder(left: unknown, right: unknown): number {\n return Number(this.unwrapOperand(left)) % Number(this.unwrapOperand(right));\n }\n\n private exponent(left: unknown, right: unknown): number {\n return (\n Number(this.unwrapOperand(left)) ** Number(this.unwrapOperand(right))\n );\n }\n\n private parseComparison(): unknown {\n let left = this.parseAdditive();\n while (true) {\n if (this.match(\"operator\", \"<\")) {\n const right = this.parseAdditive();\n left = this.compare(left, right, \"<\");\n continue;\n }\n if (this.match(\"operator\", \"<=\")) {\n const right = this.parseAdditive();\n left = this.compare(left, right, \"<=\");\n continue;\n }\n if (this.match(\"operator\", \">\")) {\n const right = this.parseAdditive();\n left = this.compare(left, right, \">\");\n continue;\n }\n if (this.match(\"operator\", \">=\")) {\n const right = this.parseAdditive();\n left = this.compare(left, right, \">=\");\n continue;\n }\n return left;\n }\n }\n\n private parseAdditive(): unknown {\n let left = this.parseMultiplicative();\n while (true) {\n if (this.match(\"operator\", \"+\")) {\n const right = this.parseMultiplicative();\n left = this.add(left, right);\n continue;\n }\n if (this.match(\"operator\", \"-\")) {\n const right = this.parseMultiplicative();\n left = this.subtract(left, right);\n continue;\n }\n return left;\n }\n }\n\n private parseMultiplicative(): unknown {\n let left = this.parseUnary();\n while (true) {\n if (this.match(\"operator\", \"*\")) {\n const right = this.parseUnary();\n left = this.multiply(left, right);\n continue;\n }\n if (this.match(\"operator\", \"/\")) {\n const right = this.parseUnary();\n left = this.divide(left, right);\n continue;\n }\n if (this.match(\"operator\", \"%\")) {\n const right = this.parseUnary();\n left = this.remainder(left, right);\n continue;\n }\n if (this.match(\"operator\", \"**\")) {\n const right = this.parseUnary();\n left = this.exponent(left, right);\n continue;\n }\n return left;\n }\n }\n\n private parseUnary(): unknown {\n if (this.match(\"operator\", \"!\")) {\n return !this.unwrap(this.parseUnary());\n }\n if (this.match(\"operator\", \"+\")) {\n return Number(this.unwrap(this.parseUnary()));\n }\n if (this.match(\"operator\", \"-\")) {\n return -Number(this.unwrap(this.parseUnary()));\n }\n if (\n this.current().type === \"identifier\" &&\n this.current().value === \"typeof\"\n ) {\n this.advance();\n return typeof this.unwrap(this.parseUnary());\n }\n return this.parseCallMember();\n }\n\n private parseCallMember(): unknown {\n let value = this.parsePrimary();\n\n while (true) {\n if (this.match(\"punctuator\", \".\")) {\n const property = this.expect(\"identifier\").value;\n const target = this.isReference(value) ? value.value : value;\n value = this.toReference(target, property);\n continue;\n }\n\n if (this.match(\"punctuator\", \"[\")) {\n const property = this.parseConditional();\n this.expect(\"punctuator\", \"]\");\n const target = this.isReference(value) ? value.value : value;\n value = this.toReference(target, toPropertyKey(this.unwrap(property)));\n continue;\n }\n\n if (this.match(\"punctuator\", \"(\")) {\n const args: unknown[] = [];\n if (!this.match(\"punctuator\", \")\")) {\n do {\n args.push(this.unwrap(this.parseConditional()));\n } while (this.match(\"punctuator\", \",\"));\n this.expect(\"punctuator\", \")\");\n }\n\n const callee = this.isReference(value) ? value.value : value;\n if (typeof callee !== \"function\") {\n throw createExpressionError(\n \"Expression attempted to call a non-function value.\",\n );\n }\n\n const thisArg = this.isReference(value) ? value.base : undefined;\n value = callee.apply(thisArg, args);\n continue;\n }\n\n return value;\n }\n }\n\n private parsePrimary(): unknown {\n const token = this.current();\n\n if (token.type === \"number\") {\n this.advance();\n return Number(token.value);\n }\n\n if (token.type === \"string\") {\n this.advance();\n return token.value;\n }\n\n if (token.type === \"identifier\") {\n this.advance();\n return this.resolveIdentifier(token.value);\n }\n\n if (this.match(\"punctuator\", \"(\")) {\n const value = this.parseConditional();\n this.expect(\"punctuator\", \")\");\n return value;\n }\n\n if (this.match(\"punctuator\", \"[\")) {\n const items: unknown[] = [];\n if (!this.match(\"punctuator\", \"]\")) {\n do {\n if (this.match(\"operator\", \"...\")) {\n const spread = this.unwrap(this.parseConditional());\n if (Array.isArray(spread)) {\n items.push(...spread);\n } else {\n throw createExpressionError(\n \"Array spread expects an array value.\",\n );\n }\n } else {\n items.push(this.unwrap(this.parseConditional()));\n }\n } while (this.match(\"punctuator\", \",\"));\n this.expect(\"punctuator\", \"]\");\n }\n return items;\n }\n\n if (this.match(\"punctuator\", \"{\")) {\n const out: Record<string, unknown> = {};\n if (!this.match(\"punctuator\", \"}\")) {\n do {\n if (this.match(\"operator\", \"...\")) {\n const spread = this.unwrap(this.parseConditional());\n if (spread && typeof spread === \"object\") {\n Object.assign(out, spread);\n } else {\n throw createExpressionError(\n \"Object spread expects an object value.\",\n );\n }\n } else {\n let key: string;\n if (\n this.current().type === \"string\" ||\n this.current().type === \"number\"\n ) {\n key = String(this.advance().value);\n } else {\n key = this.expect(\"identifier\").value;\n }\n\n if (this.match(\"punctuator\", \":\")) {\n out[key] = this.unwrap(this.parseConditional());\n } else {\n // Shorthand property\n out[key] = this.resolveIdentifier(key);\n }\n }\n } while (this.match(\"punctuator\", \",\"));\n this.expect(\"punctuator\", \"}\");\n }\n return out;\n }\n\n throw createExpressionError(\n `Unexpected token \"${token.value}\" in expression.`,\n );\n }\n}\n\n/**\n * Evaluate a workflow expression against the provided variables.\n */\nexport function evaluateExpression(\n expression: string,\n context: Record<string, unknown>,\n): unknown {\n const trimmed = expression.trim();\n if (!trimmed)\n throw createExpressionError(\"Expression cannot be empty.\", expression);\n\n try {\n return new ExpressionParser(trimmed, context).evaluate();\n } catch (error) {\n throw error instanceof WorkflowExpressionError\n ? error\n : createExpressionError(\n \"Failed to evaluate workflow expression.\",\n expression,\n error,\n );\n }\n}\n","/**\n * @module WorkflowCostUtils\n * @package @geenius/ai-workflow-shared\n * @description Cost and token estimation helpers for workflow definitions and\n * completed runs. These utilities keep LLM spend reporting consistent across\n * the builder, run panel, and Storybook surfaces.\n */\n\nimport type { WorkflowDefinition, LLMCallConfig, StepResult } from '../types'\n\n/** Cost-per-token rates by model (USD per 1K tokens) */\nexport const MODEL_RATES: Record<string, { input: number; output: number }> = {\n 'gpt-4o': { input: 0.0025, output: 0.01 },\n 'gpt-4o-mini': { input: 0.00015, output: 0.0006 },\n 'gpt-4-turbo': { input: 0.01, output: 0.03 },\n 'claude-3.5-sonnet': { input: 0.003, output: 0.015 },\n 'claude-3-haiku': { input: 0.00025, output: 0.00125 },\n 'gemini-pro': { input: 0.00025, output: 0.0005 },\n 'gemini-flash': { input: 0.000075, output: 0.0003 },\n default: { input: 0.001, output: 0.003 },\n}\n\n/** Rough token estimation (1 token β‰ˆ 4 chars for English text) */\nexport function estimateTokens(text: string): number {\n return Math.ceil(text.length / 4)\n}\n\n/** Estimate the token count for an LLM step */\nexport function estimateStepTokens(config: LLMCallConfig, vars: Record<string, unknown> = {}): { inputTokens: number; outputTokens: number } {\n const systemTokens = estimateTokens(config.systemPrompt)\n const templateTokens = estimateTokens(config.userPromptTemplate)\n // Estimate expanded template by adding variable content lengths\n const varTokens = Object.values(vars).reduce<number>((acc, v) => acc + estimateTokens(String(v ?? '')), 0)\n const inputTokens = systemTokens + templateTokens + varTokens\n const outputTokens = config.maxTokens ?? Math.ceil(inputTokens * 0.6)\n return { inputTokens, outputTokens }\n}\n\n/** Estimate cost for a single step */\nexport function estimateStepCost(config: LLMCallConfig, vars: Record<string, unknown> = {}): number {\n const { inputTokens, outputTokens } = estimateStepTokens(config, vars)\n const rates = MODEL_RATES[config.model ?? 'default'] ?? MODEL_RATES.default\n return (inputTokens / 1000) * rates.input + (outputTokens / 1000) * rates.output\n}\n\n/** Estimate total cost for an entire workflow definition */\nexport function estimateWorkflowCost(definition: WorkflowDefinition, vars: Record<string, unknown> = {}): { totalCostUsd: number; totalTokens: number; stepEstimates: Array<{ stepId: string; stepName: string; costUsd: number; tokens: number }> } {\n const stepEstimates: Array<{ stepId: string; stepName: string; costUsd: number; tokens: number }> = []\n let totalCostUsd = 0\n let totalTokens = 0\n\n for (const step of definition.steps) {\n if (step.config.type === 'llm-call') {\n const cost = estimateStepCost(step.config, vars)\n const { inputTokens, outputTokens } = estimateStepTokens(step.config, vars)\n const tokens = inputTokens + outputTokens\n stepEstimates.push({ stepId: step.id, stepName: step.name, costUsd: cost, tokens })\n totalCostUsd += cost\n totalTokens += tokens\n }\n }\n\n return { totalCostUsd, totalTokens, stepEstimates }\n}\n\n/** Calculate actual cost from completed step results */\nexport function calculateRunCost(results: StepResult[]): { totalCostUsd: number; totalTokens: number } {\n let totalCostUsd = 0\n let totalTokens = 0\n for (const r of results) {\n if (r.costUsd) totalCostUsd += r.costUsd\n if (r.tokens) totalTokens += r.tokens\n }\n return { totalCostUsd, totalTokens }\n}\n\n/** Format cost as a human-readable string */\nexport function formatCost(usd: number): string {\n if (usd < 0.01) return `$${(usd * 100).toFixed(2)}Β’`\n return `$${usd.toFixed(4)}`\n}\n","/**\n * @module WorkflowEngine\n * @package @geenius/ai-workflow-shared\n * @description Runtime execution engine for workflow definitions. This file\n * walks the declared DAG in execution order, normalizes retry/error handling,\n * and captures run state that every UI variant can render consistently.\n */\n\nimport type {\n DelayConfig,\n StepResult,\n WorkflowDefinition,\n WorkflowRun,\n WorkflowStepDef,\n} from \"./types\";\nimport { evaluateExpression, interpolate } from \"./utils\";\nimport {\n WorkflowConfigurationError,\n WorkflowExecutionError,\n WorkflowGraphError,\n normalizeWorkflowError,\n} from \"./errors\";\n\n/**\n * Runtime dependencies injected into the workflow engine.\n *\n * The engine stays framework-agnostic by requiring callers to provide LLM,\n * webhook, approval, and custom-step integrations explicitly.\n *\n * @property callLLM Optional callback used to execute `llm-call` steps.\n * @property callWebhook Optional callback used to execute `webhook` steps.\n * @property onApprovalRequired Optional callback used for `human-approval` steps.\n * @property onStepComplete Optional callback invoked after each step result is captured.\n * @property customHandlers Optional registry of named handlers for `custom` steps.\n */\nexport interface WorkflowEngineOptions {\n /** LLM call function for llm-call steps */\n callLLM?: (\n systemPrompt: string,\n userPrompt: string,\n model?: string,\n ) => Promise<{\n content: string;\n tokens?: number;\n costUsd?: number;\n }>;\n /** Webhook call function */\n callWebhook?: (\n url: string,\n method: string,\n body?: string,\n headers?: Record<string, string>,\n ) => Promise<string>;\n /** Human approval callback */\n onApprovalRequired?: (message: string, stepId: string) => Promise<boolean>;\n /** Step event callback */\n onStepComplete?: (result: StepResult) => void;\n /** Custom step handlers */\n customHandlers?: Record<\n string,\n (\n params: Record<string, unknown>,\n vars: Record<string, unknown>,\n ) => Promise<unknown>\n >;\n}\n\n/**\n * Executes workflow definitions against provided runtime integrations.\n */\nexport class WorkflowEngine {\n private options: WorkflowEngineOptions;\n private cancelled = false;\n\n constructor(options: WorkflowEngineOptions) {\n this.options = options;\n }\n\n /**\n * Cancel the in-flight execution loop before the next step begins.\n */\n cancel(): void {\n this.cancelled = true;\n }\n\n /**\n * Execute a workflow definition from start to finish and capture the full\n * run state for UI or persistence layers.\n */\n async execute(\n definition: WorkflowDefinition,\n input: Record<string, unknown> = {},\n ): Promise<WorkflowRun> {\n this.cancelled = false;\n\n const run: WorkflowRun = {\n id: crypto.randomUUID?.() ?? String(Date.now()),\n workflowId: definition.id,\n workflowVersion: definition.version,\n status: \"running\",\n input,\n variables: { ...definition.variables, ...input },\n stepResults: [],\n currentStepIndex: 0,\n triggeredBy: \"\",\n startedAt: Date.now(),\n };\n\n // Topologically sort steps once so step execution follows the declared DAG.\n const sortedSteps = this.topoSort(definition);\n\n for (let i = 0; i < sortedSteps.length; i++) {\n if (this.cancelled) {\n run.status = \"cancelled\";\n break;\n }\n\n run.currentStepIndex = i;\n const stepDef = sortedSteps[i];\n const result = await this.executeStep(stepDef, run.variables, definition);\n\n run.stepResults.push(result);\n this.options.onStepComplete?.(result);\n\n if (result.status === \"failed\" && !stepDef.optional) {\n run.status = \"failed\";\n run.error = result.error;\n break;\n }\n\n // Store output in the workflow variable bag for downstream steps.\n if (\n result.output !== undefined &&\n result.output !== null &&\n \"outputVar\" in stepDef.config\n ) {\n if (stepDef.config.outputVar) {\n run.variables[stepDef.config.outputVar] = result.output;\n }\n }\n\n // Condition steps can skip forward through branches in the sorted plan.\n if (stepDef.config.type === \"condition\") {\n const nextStepId = Boolean(result.output)\n ? stepDef.config.trueStepId\n : stepDef.config.falseStepId;\n\n // Skip to the target step\n const targetIndex = sortedSteps.findIndex((s) => s.id === nextStepId);\n if (targetIndex > i) {\n // Mark skipped steps\n for (let j = i + 1; j < targetIndex; j++) {\n run.stepResults.push({\n stepId: sortedSteps[j].id,\n stepName: sortedSteps[j].name,\n type: sortedSteps[j].type,\n status: \"skipped\",\n durationMs: 0,\n startedAt: Date.now(),\n });\n }\n i = targetIndex - 1; // Will be incremented by loop\n }\n }\n }\n\n if (run.status === \"running\") {\n run.status = \"completed\";\n }\n run.completedAt = Date.now();\n\n return run;\n }\n\n /**\n * Execute one step with retry handling and normalized result capture.\n */\n private async executeStep(\n stepDef: WorkflowStepDef,\n variables: Record<string, unknown>,\n _definition: WorkflowDefinition,\n ): Promise<StepResult> {\n const start = Date.now();\n const baseResult: StepResult = {\n stepId: stepDef.id,\n stepName: stepDef.name,\n type: stepDef.type,\n status: \"running\",\n durationMs: 0,\n startedAt: start,\n };\n\n let attempts = 0;\n const maxAttempts = stepDef.retries?.maxAttempts ?? 1;\n\n while (attempts < maxAttempts) {\n attempts++;\n try {\n const output = await this.runStepLogic(stepDef, variables);\n return {\n ...baseResult,\n status: \"completed\",\n output,\n durationMs: Date.now() - start,\n completedAt: Date.now(),\n };\n } catch (err) {\n if (attempts >= maxAttempts) {\n const workflowError = normalizeWorkflowError(\n err,\n `Workflow step \"${stepDef.name}\" failed.`,\n { stepId: stepDef.id, workflowId: _definition.id },\n );\n return {\n ...baseResult,\n status: \"failed\",\n error: workflowError.message,\n durationMs: Date.now() - start,\n completedAt: Date.now(),\n };\n }\n // Wait before retry\n const backoff = stepDef.retries?.backoffMs ?? 1000;\n await new Promise((r) => setTimeout(r, backoff * 2 ** (attempts - 1)));\n }\n }\n\n return {\n ...baseResult,\n status: \"failed\",\n error: \"Max retries exceeded\",\n durationMs: Date.now() - start,\n };\n }\n\n /**\n * Run the concrete logic for an individual step type.\n */\n private async runStepLogic(\n stepDef: WorkflowStepDef,\n variables: Record<string, unknown>,\n ): Promise<unknown> {\n const config = stepDef.config;\n\n switch (config.type) {\n case \"llm-call\": {\n if (!this.options.callLLM) {\n throw new WorkflowConfigurationError(\n \"No LLM function provided for llm-call steps.\",\n {\n stepId: stepDef.id,\n },\n );\n }\n const userPrompt = this.interpolate(\n config.userPromptTemplate,\n variables,\n );\n const result = await this.options.callLLM(\n config.systemPrompt,\n userPrompt,\n config.model,\n );\n if (config.parseJson) {\n try {\n return JSON.parse(result.content);\n } catch {\n return result.content;\n }\n }\n return result.content;\n }\n\n case \"transform\": {\n const scope = this.buildExpressionScope(config.inputVars, variables);\n return evaluateExpression(config.expression, scope);\n }\n\n case \"condition\": {\n return Boolean(evaluateExpression(config.expression, variables));\n }\n\n case \"human-approval\": {\n if (!this.options.onApprovalRequired) {\n // Auto-approve if no handler\n return true;\n }\n return this.options.onApprovalRequired(config.message, stepDef.id);\n }\n\n case \"webhook\": {\n if (!this.options.callWebhook) {\n throw new WorkflowConfigurationError(\n \"No webhook function provided for webhook steps.\",\n {\n stepId: stepDef.id,\n },\n );\n }\n const body = config.bodyTemplate\n ? interpolate(config.bodyTemplate, variables)\n : undefined;\n return this.options.callWebhook(\n config.url,\n config.method,\n body,\n config.headers,\n );\n }\n\n case \"delay\": {\n await new Promise((r) => setTimeout(r, config.durationMs));\n return null;\n }\n\n case \"custom\": {\n const handler = this.options.customHandlers?.[config.handler];\n if (!handler) {\n throw new WorkflowConfigurationError(\n `No handler registered for custom step \"${config.handler}\".`,\n { stepId: stepDef.id },\n );\n }\n return handler(config.params, variables);\n }\n\n default:\n throw new WorkflowExecutionError(\n `Unsupported step type \"${config.type}\".`,\n {\n stepId: stepDef.id,\n },\n );\n }\n }\n\n /** Interpolate `{{variable}}` references in a string. */\n private interpolate(template: string, vars: Record<string, unknown>): string {\n return interpolate(template, vars);\n }\n\n private buildExpressionScope(\n inputVars: string[],\n variables: Record<string, unknown>,\n ): Record<string, unknown> {\n const scope: Record<string, unknown> = {};\n for (const name of inputVars) {\n scope[name] = variables[name];\n }\n return scope;\n }\n\n /** Topological sort of steps based on declared workflow connections. */\n private topoSort(def: WorkflowDefinition): WorkflowStepDef[] {\n const stepMap = new Map(def.steps.map((s) => [s.id, s]));\n const inDegree = new Map<string, number>();\n const adjacency = new Map<string, string[]>();\n\n for (const step of def.steps) {\n inDegree.set(step.id, 0);\n adjacency.set(step.id, []);\n }\n\n for (const conn of def.connections) {\n adjacency.get(conn.fromStepId)?.push(conn.toStepId);\n inDegree.set(conn.toStepId, (inDegree.get(conn.toStepId) ?? 0) + 1);\n }\n\n const queue: string[] = [];\n for (const [id, degree] of inDegree) {\n if (degree === 0) queue.push(id);\n }\n\n const sorted: WorkflowStepDef[] = [];\n while (queue.length > 0) {\n const id = queue.shift()!;\n const step = stepMap.get(id);\n if (step) sorted.push(step);\n\n for (const neighbor of adjacency.get(id) ?? []) {\n const newDegree = (inDegree.get(neighbor) ?? 1) - 1;\n inDegree.set(neighbor, newDegree);\n if (newDegree === 0) queue.push(neighbor);\n }\n }\n\n if (sorted.length !== def.steps.length) {\n throw new WorkflowGraphError(\n \"Workflow definition contains a cycle and cannot be executed.\",\n {\n workflowId: def.id,\n },\n );\n }\n\n return sorted;\n }\n}\n","/**\n * @module WorkflowValidators\n * @package @geenius/ai-workflow-shared\n * @description Zod schemas and validation helpers for workflow definitions,\n * step configs, runtime results, and graph integrity checks.\n */\nimport { z } from 'zod/v4'\n\n// ============================================================================\n// Step Config Schemas\n// ============================================================================\n\n/**\n * Zod schema for `llm-call` step configs.\n */\nexport const llmCallConfigSchema = z.object({\n type: z.literal('llm-call'),\n model: z.string().optional(),\n systemPrompt: z.string().min(1, 'System prompt is required'),\n userPromptTemplate: z.string().min(1, 'User prompt template is required'),\n temperature: z.number().min(0).max(2).optional(),\n maxTokens: z.number().int().positive().optional(),\n parseJson: z.boolean().optional(),\n outputVar: z.string().min(1, 'Output variable name is required'),\n})\n\n/**\n * Zod schema for `transform` step configs.\n */\nexport const transformConfigSchema = z.object({\n type: z.literal('transform'),\n expression: z.string().min(1, 'Expression is required'),\n inputVars: z.array(z.string()).min(1, 'At least one input variable is required'),\n outputVar: z.string().min(1),\n})\n\n/**\n * Zod schema for `condition` step configs.\n */\nexport const conditionConfigSchema = z.object({\n type: z.literal('condition'),\n expression: z.string().min(1),\n trueStepId: z.string().min(1),\n falseStepId: z.string().min(1),\n})\n\n/**\n * Zod schema for `human-approval` step configs.\n */\nexport const humanApprovalConfigSchema = z.object({\n type: z.literal('human-approval'),\n message: z.string().min(1, 'Approval message is required'),\n approvers: z.array(z.string()).optional(),\n autoApproveAfterMs: z.number().positive().optional(),\n})\n\n/**\n * Zod schema for `webhook` step configs.\n */\nexport const webhookConfigSchema = z.object({\n type: z.literal('webhook'),\n url: z.string().url('Valid URL required'),\n method: z.enum(['GET', 'POST', 'PUT', 'DELETE']),\n headers: z.record(z.string(), z.string()).optional(),\n bodyTemplate: z.string().optional(),\n outputVar: z.string().min(1),\n})\n\n/**\n * Zod schema for `delay` step configs.\n */\nexport const delayConfigSchema = z.object({\n type: z.literal('delay'),\n durationMs: z.number().int().positive('Duration must be positive'),\n})\n\n/**\n * Zod schema for `parallel` step configs.\n */\nexport const parallelConfigSchema = z.object({\n type: z.literal('parallel'),\n stepIds: z.array(z.string()).min(2, 'Parallel needs at least 2 steps'),\n failurePolicy: z.enum(['fail-fast', 'continue']),\n})\n\n/**\n * Zod schema for `loop` step configs.\n */\nexport const loopConfigSchema = z.object({\n type: z.literal('loop'),\n stepIds: z.array(z.string()).min(1),\n iterateVar: z.string().min(1),\n itemVar: z.string().min(1),\n maxIterations: z.number().int().positive().optional(),\n})\n\n/**\n * Zod schema for `sub-workflow` step configs.\n */\nexport const subWorkflowConfigSchema = z.object({\n type: z.literal('sub-workflow'),\n workflowId: z.string().min(1),\n inputMapping: z.record(z.string(), z.string()),\n outputVar: z.string().min(1),\n})\n\n/**\n * Zod schema for `custom` step configs.\n */\nexport const customStepConfigSchema = z.object({\n type: z.literal('custom'),\n handler: z.string().min(1, 'Handler name is required'),\n params: z.record(z.string(), z.unknown()),\n outputVar: z.string().optional(),\n})\n\n/**\n * Discriminated union covering every supported step configuration schema.\n */\nexport const stepConfigSchema = z.discriminatedUnion('type', [\n llmCallConfigSchema,\n transformConfigSchema,\n conditionConfigSchema,\n humanApprovalConfigSchema,\n webhookConfigSchema,\n delayConfigSchema,\n parallelConfigSchema,\n loopConfigSchema,\n subWorkflowConfigSchema,\n customStepConfigSchema,\n])\n\n// ============================================================================\n// Step Definition Schema\n// ============================================================================\n\n/**\n * Zod schema for one workflow step definition.\n */\nexport const workflowStepDefSchema = z.object({\n id: z.string().min(1),\n name: z.string().min(1, 'Step name is required'),\n type: z.enum(['llm-call', 'transform', 'condition', 'human-approval', 'webhook', 'delay', 'parallel', 'loop', 'sub-workflow', 'custom']),\n config: stepConfigSchema,\n position: z.object({ x: z.number(), y: z.number() }).optional(),\n optional: z.boolean().optional(),\n retries: z.object({ maxAttempts: z.number().int().positive(), backoffMs: z.number().positive() }).optional(),\n})\n\n// ============================================================================\n// Connection Schema\n// ============================================================================\n\n/**\n * Zod schema for directed graph edges between workflow steps.\n */\nexport const stepConnectionSchema = z.object({\n fromStepId: z.string().min(1),\n toStepId: z.string().min(1),\n label: z.string().optional(),\n condition: z.string().optional(),\n})\n\n// ============================================================================\n// Variable Schema\n// ============================================================================\n\n/**\n * Zod schema for declared workflow inputs and variables.\n */\nexport const workflowVariableSchema = z.object({\n name: z.string().min(1),\n type: z.enum(['string', 'number', 'boolean', 'object', 'array']),\n description: z.string().optional(),\n required: z.boolean().optional(),\n default: z.unknown().optional(),\n})\n\n// ============================================================================\n// Workflow Definition Schema\n// ============================================================================\n\n/**\n * Zod schema for a persisted workflow definition.\n */\nexport const workflowDefinitionSchema = z.object({\n id: z.string().min(1),\n name: z.string().min(1, 'Workflow name is required').max(120, 'Name too long'),\n description: z.string().max(2000).optional(),\n version: z.number().int().positive(),\n status: z.enum(['draft', 'active', 'paused', 'archived']),\n steps: z.array(workflowStepDefSchema).min(1, 'At least one step is required'),\n connections: z.array(stepConnectionSchema),\n inputSchema: z.array(workflowVariableSchema).optional(),\n variables: z.record(z.string(), z.unknown()).optional(),\n tags: z.array(z.string()).optional(),\n createdBy: z.string(),\n createdAt: z.number(),\n updatedAt: z.number(),\n})\n\n// ============================================================================\n// Run Schema\n// ============================================================================\n\n/**\n * Zod schema for one captured step result inside a workflow run.\n */\nexport const stepResultSchema = z.object({\n stepId: z.string(),\n stepName: z.string(),\n type: z.enum(['llm-call', 'transform', 'condition', 'human-approval', 'webhook', 'delay', 'parallel', 'loop', 'sub-workflow', 'custom']),\n status: z.enum(['pending', 'running', 'completed', 'failed', 'skipped', 'waiting-approval']),\n input: z.record(z.string(), z.unknown()).optional(),\n output: z.unknown().optional(),\n error: z.string().optional(),\n durationMs: z.number(),\n tokens: z.number().optional(),\n costUsd: z.number().optional(),\n startedAt: z.number(),\n completedAt: z.number().optional(),\n})\n\n/**\n * Zod schema for a full workflow execution run snapshot.\n */\nexport const workflowRunSchema = z.object({\n id: z.string(),\n workflowId: z.string(),\n workflowVersion: z.number(),\n status: z.enum(['pending', 'running', 'paused', 'completed', 'failed', 'cancelled']),\n input: z.record(z.string(), z.unknown()),\n variables: z.record(z.string(), z.unknown()),\n stepResults: z.array(stepResultSchema),\n currentStepIndex: z.number(),\n error: z.string().optional(),\n triggeredBy: z.string(),\n startedAt: z.number(),\n completedAt: z.number().optional(),\n})\n\n// ============================================================================\n// Validation helpers\n// ============================================================================\n\n/**\n * Validate an unknown payload as a workflow definition.\n *\n * @param data Unknown payload to validate.\n * @returns A safe-parse result containing the validated definition or errors.\n */\nexport function validateWorkflow(\n data: unknown,\n): z.ZodSafeParseResult<z.infer<typeof workflowDefinitionSchema>> {\n return workflowDefinitionSchema.safeParse(data)\n}\n\n/**\n * Validate an unknown payload as a workflow run snapshot.\n *\n * @param data Unknown payload to validate.\n * @returns A safe-parse result containing the validated run or errors.\n */\nexport function validateRun(\n data: unknown,\n): z.ZodSafeParseResult<z.infer<typeof workflowRunSchema>> {\n return workflowRunSchema.safeParse(data)\n}\n\n/**\n * Validate that all connections reference known step identifiers.\n *\n * @param steps Declared workflow steps.\n * @param connections Directed edges between those steps.\n * @returns A list of integrity errors, empty when every reference is valid.\n */\nexport function validateConnectionIntegrity(\n steps: Array<{ id: string }>,\n connections: Array<{ fromStepId: string; toStepId: string }>,\n): string[] {\n const stepIds = new Set(steps.map(s => s.id))\n const errors: string[] = []\n for (const conn of connections) {\n if (!stepIds.has(conn.fromStepId)) errors.push(`Connection references unknown source step: ${conn.fromStepId}`)\n if (!stepIds.has(conn.toStepId)) errors.push(`Connection references unknown target step: ${conn.toStepId}`)\n }\n return errors\n}\n","/**\n * @module WorkflowTemplates\n * @package @geenius/ai-workflow-shared\n * @description Curated workflow templates for common AI and business patterns.\n * These templates seed the builder UI and provide canonical examples of the\n * shared workflow definition contract.\n */\nimport type { WorkflowDefinition, WorkflowStepDef, StepConnection } from './types'\n\n/**\n * Template metadata and factory for one reusable workflow starter.\n *\n * @property id Stable template identifier.\n * @property name Human-readable template name.\n * @property description Summary of the workflow pattern.\n * @property category Top-level template grouping used in browsers.\n * @property tags Searchable tags for discovery.\n * @property create Factory that returns a fresh workflow definition instance.\n */\nexport interface WorkflowTemplate {\n id: string\n name: string\n description: string\n category: 'content' | 'data' | 'approval' | 'research' | 'devops'\n tags: string[]\n /** Factory that creates a fresh WorkflowDefinition from this template */\n create: (createdBy: string) => WorkflowDefinition\n}\n\nfunction uid(): string { return `step_tpl_${Date.now()}_${Math.random().toString(36).slice(2, 8)}` }\nfunction wfId(): string { return `wf_${Date.now()}_${Math.random().toString(36).slice(2, 8)}` }\n\n// ============================================================================\n// 1. Content Pipeline\n// ============================================================================\n\nconst contentPipeline: WorkflowTemplate = {\n id: 'tpl-content-pipeline',\n name: 'Content Pipeline',\n description: 'Generate, review, and publish content with AI refinement and human approval.',\n category: 'content',\n tags: ['content', 'blog', 'marketing'],\n create: (createdBy) => {\n const draft = uid(), refine = uid(), approve = uid(), publish = uid()\n const steps: WorkflowStepDef[] = [\n { id: draft, name: 'Generate Draft', type: 'llm-call', config: { type: 'llm-call', systemPrompt: 'You are a content writer.', userPromptTemplate: 'Write a blog post about {{topic}}. Tone: {{tone}}.', outputVar: 'draft' }, position: { x: 100, y: 200 } },\n { id: refine, name: 'Refine Content', type: 'llm-call', config: { type: 'llm-call', systemPrompt: 'You are an editor. Improve clarity, grammar, and engagement.', userPromptTemplate: 'Polish this draft:\\n\\n{{draft}}', outputVar: 'polished' }, position: { x: 350, y: 200 } },\n { id: approve, name: 'Human Review', type: 'human-approval', config: { type: 'human-approval', message: 'Please review the polished content before publishing.' }, position: { x: 600, y: 200 } },\n { id: publish, name: 'Format for Publishing', type: 'transform', config: { type: 'transform', expression: '({ title: polished.split(\"\\\\n\")[0], body: polished, publishedAt: Date.now() })', inputVars: ['polished'], outputVar: 'publishData' }, position: { x: 850, y: 200 } },\n ]\n const connections: StepConnection[] = [\n { fromStepId: draft, toStepId: refine },\n { fromStepId: refine, toStepId: approve },\n { fromStepId: approve, toStepId: publish },\n ]\n return { id: wfId(), name: 'Content Pipeline', description: 'AI-powered content generation with editorial review.', version: 1, status: 'draft', steps, connections, inputSchema: [{ name: 'topic', type: 'string', required: true }, { name: 'tone', type: 'string', required: false, default: 'professional' }], tags: ['content'], createdBy, createdAt: Date.now(), updatedAt: Date.now() }\n },\n}\n\n// ============================================================================\n// 2. Data Enrichment\n// ============================================================================\n\nconst dataEnrichment: WorkflowTemplate = {\n id: 'tpl-data-enrichment',\n name: 'Data Enrichment',\n description: 'Fetch external data, enrich with AI analysis, and transform for downstream use.',\n category: 'data',\n tags: ['data', 'analytics', 'enrichment'],\n create: (createdBy) => {\n const fetch_ = uid(), analyze = uid(), transform = uid()\n const steps: WorkflowStepDef[] = [\n { id: fetch_, name: 'Fetch Data', type: 'webhook', config: { type: 'webhook', url: 'https://api.example.com/data-source', method: 'GET', outputVar: 'rawData' }, position: { x: 100, y: 200 } },\n { id: analyze, name: 'AI Analysis', type: 'llm-call', config: { type: 'llm-call', systemPrompt: 'You are a data analyst. Analyze the data and extract key insights.', userPromptTemplate: 'Analyze this dataset and return a JSON summary with key metrics:\\n\\n{{rawData}}', parseJson: true, outputVar: 'analysis' }, position: { x: 400, y: 200 } },\n { id: transform, name: 'Transform Output', type: 'transform', config: { type: 'transform', expression: '({ ...analysis, enrichedAt: Date.now(), source: dataSourceUrl })', inputVars: ['analysis', 'dataSourceUrl'], outputVar: 'enrichedData' }, position: { x: 700, y: 200 } },\n ]\n const connections: StepConnection[] = [\n { fromStepId: fetch_, toStepId: analyze },\n { fromStepId: analyze, toStepId: transform },\n ]\n return { id: wfId(), name: 'Data Enrichment', version: 1, status: 'draft', steps, connections, inputSchema: [{ name: 'dataSourceUrl', type: 'string', required: true }], tags: ['data'], createdBy, createdAt: Date.now(), updatedAt: Date.now() }\n },\n}\n\n// ============================================================================\n// 3. Approval Chain\n// ============================================================================\n\nconst approvalChain: WorkflowTemplate = {\n id: 'tpl-approval-chain',\n name: 'Approval Chain',\n description: 'Multi-level approval workflow with conditional escalation.',\n category: 'approval',\n tags: ['approval', 'governance', 'compliance'],\n create: (createdBy) => {\n const checkRisk = uid(), lowApproval = uid(), highApproval = uid(), finalize = uid()\n const steps: WorkflowStepDef[] = [\n { id: checkRisk, name: 'Assess Risk Level', type: 'llm-call', config: { type: 'llm-call', systemPrompt: 'Assess the risk level of this request. Respond with JSON: {\"riskLevel\": \"low\"|\"medium\"|\"high\", \"reason\": \"...\"}', userPromptTemplate: '{{request}}', parseJson: true, outputVar: 'riskAssessment' }, position: { x: 100, y: 200 } },\n { id: lowApproval, name: 'Manager Approval', type: 'human-approval', config: { type: 'human-approval', message: 'Low/medium risk: Manager approval needed for: {{request}}' }, position: { x: 400, y: 100 } },\n { id: highApproval, name: 'Executive Approval', type: 'human-approval', config: { type: 'human-approval', message: 'High risk: Executive approval required for: {{request}}' }, position: { x: 400, y: 300 } },\n { id: finalize, name: 'Record Decision', type: 'transform', config: { type: 'transform', expression: '({ approved: true, approvedAt: Date.now(), riskLevel: riskAssessment.riskLevel })', inputVars: ['riskAssessment'], outputVar: 'decision' }, position: { x: 700, y: 200 } },\n ]\n const connections: StepConnection[] = [\n { fromStepId: checkRisk, toStepId: lowApproval, condition: 'riskAssessment.riskLevel !== \"high\"' },\n { fromStepId: checkRisk, toStepId: highApproval, condition: 'riskAssessment.riskLevel === \"high\"' },\n { fromStepId: lowApproval, toStepId: finalize },\n { fromStepId: highApproval, toStepId: finalize },\n ]\n return { id: wfId(), name: 'Approval Chain', version: 1, status: 'draft', steps, connections, inputSchema: [{ name: 'request', type: 'string', required: true }], tags: ['approval'], createdBy, createdAt: Date.now(), updatedAt: Date.now() }\n },\n}\n\n// ============================================================================\n// 4. Research Pipeline\n// ============================================================================\n\nconst researchPipeline: WorkflowTemplate = {\n id: 'tpl-research',\n name: 'Research Pipeline',\n description: 'Multi-source research with AI synthesis and summary generation.',\n category: 'research',\n tags: ['research', 'analysis', 'summary'],\n create: (createdBy) => {\n const research = uid(), synthesize = uid(), summarize = uid()\n const steps: WorkflowStepDef[] = [\n { id: research, name: 'Deep Research', type: 'llm-call', config: { type: 'llm-call', systemPrompt: 'You are a research assistant. Provide comprehensive, well-sourced research on the given topic.', userPromptTemplate: 'Research the following topic in depth: {{topic}}\\n\\nFocus areas: {{focusAreas}}', outputVar: 'researchOutput' }, position: { x: 100, y: 200 } },\n { id: synthesize, name: 'Synthesize Findings', type: 'llm-call', config: { type: 'llm-call', systemPrompt: 'You are a synthesis expert. Combine research findings into structured insights with citations.', userPromptTemplate: 'Synthesize these research findings into key themes and actionable insights:\\n\\n{{researchOutput}}', parseJson: true, outputVar: 'synthesis' }, position: { x: 400, y: 200 } },\n { id: summarize, name: 'Executive Summary', type: 'llm-call', config: { type: 'llm-call', systemPrompt: 'Write a concise executive summary (3-5 paragraphs) suitable for senior leadership.', userPromptTemplate: 'Create an executive summary from:\\n\\n{{synthesis}}', outputVar: 'executiveSummary' }, position: { x: 700, y: 200 } },\n ]\n const connections: StepConnection[] = [\n { fromStepId: research, toStepId: synthesize },\n { fromStepId: synthesize, toStepId: summarize },\n ]\n return { id: wfId(), name: 'Research Pipeline', version: 1, status: 'draft', steps, connections, inputSchema: [{ name: 'topic', type: 'string', required: true }, { name: 'focusAreas', type: 'string', required: false, default: 'general overview' }], tags: ['research'], createdBy, createdAt: Date.now(), updatedAt: Date.now() }\n },\n}\n\n// ============================================================================\n// 5. Code Review Pipeline\n// ============================================================================\n\nconst codeReviewPipeline: WorkflowTemplate = {\n id: 'tpl-code-review',\n name: 'Code Review Pipeline',\n description: 'Automated code review with AI analysis, security check, and human approval.',\n category: 'devops',\n tags: ['code', 'review', 'security', 'devops'],\n create: (createdBy) => {\n const analyze = uid(), security = uid(), approve = uid(), report = uid()\n const steps: WorkflowStepDef[] = [\n { id: analyze, name: 'AI Code Review', type: 'llm-call', config: { type: 'llm-call', systemPrompt: 'You are a senior code reviewer. Analyze the code for bugs, performance issues, and best practices. Return JSON: {\"issues\": [], \"suggestions\": [], \"quality\": 1-10}', userPromptTemplate: 'Review this code:\\n\\n```{{language}}\\n{{code}}\\n```', parseJson: true, outputVar: 'codeReview' }, position: { x: 100, y: 200 } },\n { id: security, name: 'Security Scan', type: 'llm-call', config: { type: 'llm-call', systemPrompt: 'You are a security auditor. Check for vulnerabilities (XSS, SQL injection, secrets exposure, etc). Return JSON: {\"vulnerabilities\": [], \"riskLevel\": \"low\"|\"medium\"|\"high\"}', userPromptTemplate: 'Security audit for:\\n\\n```{{language}}\\n{{code}}\\n```', parseJson: true, outputVar: 'securityReport' }, position: { x: 100, y: 400 } },\n { id: approve, name: 'Developer Approval', type: 'human-approval', config: { type: 'human-approval', message: 'Review the AI code analysis and security scan before merging.' }, position: { x: 450, y: 300 } },\n { id: report, name: 'Generate Report', type: 'transform', config: { type: 'transform', expression: '({ codeQuality: codeReview.quality, issues: codeReview.issues.length, vulnerabilities: securityReport.vulnerabilities.length, riskLevel: securityReport.riskLevel, reviewedAt: Date.now() })', inputVars: ['codeReview', 'securityReport'], outputVar: 'finalReport' }, position: { x: 700, y: 300 } },\n ]\n const connections: StepConnection[] = [\n { fromStepId: analyze, toStepId: approve },\n { fromStepId: security, toStepId: approve },\n { fromStepId: approve, toStepId: report },\n ]\n return { id: wfId(), name: 'Code Review Pipeline', version: 1, status: 'draft', steps, connections, inputSchema: [{ name: 'code', type: 'string', required: true }, { name: 'language', type: 'string', required: false, default: 'typescript' }], tags: ['devops', 'review'], createdBy, createdAt: Date.now(), updatedAt: Date.now() }\n },\n}\n\n// ============================================================================\n// 6. Lead Qualification\n// ============================================================================\n\nconst leadQualification: WorkflowTemplate = {\n id: 'tpl-lead-qualification',\n name: 'Lead Qualification',\n description: 'Score incoming leads, prepare a summary, and route them for follow-up.',\n category: 'data',\n tags: ['sales', 'crm', 'lead-scoring'],\n create: (createdBy) => {\n const score = uid(), summarize = uid(), route = uid()\n const steps: WorkflowStepDef[] = [\n { id: score, name: 'Score Lead', type: 'llm-call', config: { type: 'llm-call', systemPrompt: 'You are a sales operations analyst. Score the lead from 1-10 and return JSON with score, rationale, and nextAction.', userPromptTemplate: 'Lead details:\\n\\n{{lead}}', parseJson: true, outputVar: 'leadScore' }, position: { x: 100, y: 200 } },\n { id: summarize, name: 'Summarize Lead', type: 'transform', config: { type: 'transform', expression: '({ score: leadScore.score, summary: leadScore.rationale, priority: leadScore.score >= 8 ? \"high\" : \"standard\", updatedAt: Date.now() })', inputVars: ['leadScore'], outputVar: 'leadSummary' }, position: { x: 400, y: 200 } },\n { id: route, name: 'Notify Sales', type: 'webhook', config: { type: 'webhook', url: 'https://api.example.com/crm/webhook', method: 'POST', bodyTemplate: 'Lead summary: {{leadSummary}}', outputVar: 'salesNotification' }, position: { x: 700, y: 200 } },\n ]\n const connections: StepConnection[] = [\n { fromStepId: score, toStepId: summarize },\n { fromStepId: summarize, toStepId: route },\n ]\n return {\n id: wfId(),\n name: 'Lead Qualification',\n description: 'AI-assisted lead scoring and sales handoff.',\n version: 1,\n status: 'draft',\n steps,\n connections,\n inputSchema: [\n { name: 'lead', type: 'string', required: true },\n { name: 'crmWebhookUrl', type: 'string', required: false, default: 'https://api.example.com/crm/webhook' },\n ],\n tags: ['sales', 'lead'],\n createdBy,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n }\n },\n}\n\n// ============================================================================\n// 7. Incident Triage\n// ============================================================================\n\nconst incidentTriage: WorkflowTemplate = {\n id: 'tpl-incident-triage',\n name: 'Incident Triage',\n description: 'Collect incident context, classify severity, and draft the response.',\n category: 'devops',\n tags: ['incident', 'ops', 'triage'],\n create: (createdBy) => {\n const fetchIncident = uid(), classify = uid(), draftResponse = uid()\n const steps: WorkflowStepDef[] = [\n { id: fetchIncident, name: 'Fetch Incident', type: 'webhook', config: { type: 'webhook', url: 'https://api.example.com/incidents', method: 'GET', outputVar: 'incidentData' }, position: { x: 100, y: 200 } },\n { id: classify, name: 'Classify Severity', type: 'llm-call', config: { type: 'llm-call', systemPrompt: 'You are an incident commander. Classify the incident severity and summarize the likely impact in JSON.', userPromptTemplate: 'Incident context:\\n\\n{{incidentData}}', parseJson: true, outputVar: 'classification' }, position: { x: 400, y: 200 } },\n { id: draftResponse, name: 'Draft Response', type: 'transform', config: { type: 'transform', expression: '({ severity: classification.severity, summary: classification.summary, draftedAt: Date.now() })', inputVars: ['classification'], outputVar: 'responseDraft' }, position: { x: 700, y: 200 } },\n ]\n const connections: StepConnection[] = [\n { fromStepId: fetchIncident, toStepId: classify },\n { fromStepId: classify, toStepId: draftResponse },\n ]\n return {\n id: wfId(),\n name: 'Incident Triage',\n description: 'Automated incident classification and response drafting.',\n version: 1,\n status: 'draft',\n steps,\n connections,\n inputSchema: [\n { name: 'incidentApiUrl', type: 'string', required: false, default: 'https://api.example.com/incidents' },\n ],\n tags: ['incident', 'ops'],\n createdBy,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n }\n },\n}\n\n// ============================================================================\n// 8. Launch Readiness\n// ============================================================================\n\nconst launchReadiness: WorkflowTemplate = {\n id: 'tpl-launch-readiness',\n name: 'Launch Readiness',\n description: 'Prepare launch notes, request approval, and publish the rollout payload.',\n category: 'approval',\n tags: ['launch', 'release', 'approval'],\n create: (createdBy) => {\n const prepare = uid(), approve = uid(), publish = uid()\n const steps: WorkflowStepDef[] = [\n { id: prepare, name: 'Prepare Launch Notes', type: 'llm-call', config: { type: 'llm-call', systemPrompt: 'You are a product marketing lead. Create concise launch notes with risks and highlights.', userPromptTemplate: 'Launch context:\\n\\n{{launchBrief}}', outputVar: 'launchNotes' }, position: { x: 100, y: 200 } },\n { id: approve, name: 'Approval Gate', type: 'human-approval', config: { type: 'human-approval', message: 'Review the launch notes before the rollout payload is published.' }, position: { x: 400, y: 200 } },\n { id: publish, name: 'Build Payload', type: 'transform', config: { type: 'transform', expression: '({ notes: launchNotes, approvedAt: Date.now(), releaseChannel: releaseChannel || \"stable\" })', inputVars: ['launchNotes', 'releaseChannel'], outputVar: 'launchPayload' }, position: { x: 700, y: 200 } },\n ]\n const connections: StepConnection[] = [\n { fromStepId: prepare, toStepId: approve },\n { fromStepId: approve, toStepId: publish },\n ]\n return {\n id: wfId(),\n name: 'Launch Readiness',\n description: 'Human-approved release preparation workflow.',\n version: 1,\n status: 'draft',\n steps,\n connections,\n inputSchema: [\n { name: 'launchBrief', type: 'string', required: true },\n { name: 'releaseChannel', type: 'string', required: false, default: 'stable' },\n ],\n tags: ['launch', 'release'],\n createdBy,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n }\n },\n}\n\n// ============================================================================\n// Template Registry\n// ============================================================================\n\n/**\n * Canonical template catalog shipped with the package.\n */\nexport const WORKFLOW_TEMPLATES: WorkflowTemplate[] = [\n contentPipeline,\n dataEnrichment,\n approvalChain,\n researchPipeline,\n codeReviewPipeline,\n leadQualification,\n incidentTriage,\n launchReadiness,\n]\n\n/**\n * Look up one workflow template by its stable identifier.\n *\n * @param id Template identifier to resolve.\n * @returns The matching workflow template when found.\n */\nexport function getTemplate(id: string): WorkflowTemplate | undefined {\n return WORKFLOW_TEMPLATES.find(t => t.id === id)\n}\n\n/**\n * Return every workflow template that belongs to one category.\n *\n * @param category Template category to filter by.\n * @returns Templates whose category matches the requested value.\n */\nexport function getTemplatesByCategory(category: WorkflowTemplate['category']): WorkflowTemplate[] {\n return WORKFLOW_TEMPLATES.filter(t => t.category === category)\n}\n","/**\n * @module UseWorkflow\n * @package @geenius/ai-workflow-react\n * @description React hook for executing workflow definitions with the shared\n * workflow engine. This file bridges engine lifecycle, run state, and typed\n * error propagation into a stable React-friendly API.\n */\n\nimport { useState, useCallback } from \"react\";\nimport type {\n StepResult,\n WorkflowDefinition,\n WorkflowEngineOptions,\n WorkflowError,\n WorkflowRun,\n} from \"@geenius/ai-workflow-shared\";\nimport {\n WorkflowEngine,\n normalizeWorkflowError,\n} from \"@geenius/ai-workflow-shared\";\n\n/**\n * Runtime integrations accepted by the React workflow hook.\n *\n * @property callLLM Optional LLM execution callback inherited from `WorkflowEngineOptions`.\n * @property callWebhook Optional webhook execution callback inherited from `WorkflowEngineOptions`.\n * @property onApprovalRequired Optional approval callback inherited from `WorkflowEngineOptions`.\n * @property onStepComplete Optional per-step completion callback inherited from `WorkflowEngineOptions`.\n * @property customHandlers Optional custom step-handler registry inherited from `WorkflowEngineOptions`.\n */\nexport interface UseWorkflowOptions extends WorkflowEngineOptions {}\n\n/**\n * Result returned by `useWorkflow`.\n *\n * @property execute Execute a workflow definition against optional input data.\n * @property cancel Cancel the current in-flight workflow run.\n * @property run Latest workflow run snapshot.\n * @property isRunning Whether a workflow run is currently in progress.\n * @property error Latest typed workflow error.\n * @property stepResults Step results emitted during the active run.\n * @property reset Clear local run, error, and step-result state.\n */\nexport interface UseWorkflowResult {\n execute: (\n definition: WorkflowDefinition,\n input?: Record<string, unknown>,\n ) => Promise<WorkflowRun>;\n cancel: () => void;\n run: WorkflowRun | null;\n isRunning: boolean;\n error: WorkflowError | null;\n stepResults: StepResult[];\n reset: () => void;\n}\n\n/**\n * Execute shared workflow definitions from React stateful components.\n *\n * @param options Runtime integrations and callbacks for the shared workflow engine.\n * @returns Run state, execution methods, and cancellation controls.\n */\nexport function useWorkflow(options: UseWorkflowOptions): UseWorkflowResult {\n const [run, setRun] = useState<WorkflowRun | null>(null);\n const [isRunning, setIsRunning] = useState(false);\n const [error, setError] = useState<WorkflowError | null>(null);\n const [stepResults, setStepResults] = useState<StepResult[]>([]);\n\n const engine = new WorkflowEngine({\n ...options,\n onStepComplete: (result) => {\n setStepResults((prev) => [...prev, result]);\n options.onStepComplete?.(result);\n },\n });\n\n const execute = useCallback(\n async (definition: WorkflowDefinition, input?: Record<string, unknown>) => {\n setIsRunning(true);\n setError(null);\n setStepResults([]);\n try {\n const result = await engine.execute(definition, input);\n setRun(result);\n return result;\n } catch (err) {\n const e = normalizeWorkflowError(err, \"Workflow execution failed.\", {\n workflowId: definition.id,\n });\n setError(e);\n throw e;\n } finally {\n setIsRunning(false);\n }\n },\n [],\n );\n\n const cancel = useCallback(() => engine.cancel(), []);\n const reset = useCallback(() => {\n setRun(null);\n setError(null);\n setStepResults([]);\n }, []);\n\n return { execute, cancel, run, isRunning, error, stepResults, reset };\n}\n","/**\n * @module UseWorkflowBuilder\n * @package @geenius/ai-workflow-react\n * @description React hook for building and editing workflow definitions in the\n * Tailwind workflow surface, including selection and undo/redo history.\n */\n\nimport { useState, useCallback } from 'react'\nimport type { WorkflowDefinition, WorkflowStepDef, StepConnection, WorkflowBuilderState } from '@geenius/ai-workflow-shared'\n\nconst emptyDef = (): WorkflowDefinition => ({\n id: crypto.randomUUID?.() ?? String(Date.now()),\n name: 'New Workflow',\n version: 1,\n status: 'draft',\n steps: [],\n connections: [],\n createdBy: '',\n createdAt: Date.now(),\n updatedAt: Date.now(),\n})\n\n/**\n * Create workflow-builder state and mutations for the React builder UI.\n *\n * @param initial Optional partial workflow definition used to seed the builder.\n * @returns Builder state, undo/redo status, and workflow mutation callbacks.\n */\nexport function useWorkflowBuilder(initial?: Partial<WorkflowDefinition>): {\n definition: WorkflowDefinition\n selectedStepId: string | null\n isDirty: boolean\n canUndo: boolean\n canRedo: boolean\n addStep: (step: WorkflowStepDef) => void\n removeStep: (stepId: string) => void\n updateStep: (stepId: string, updates: Partial<WorkflowStepDef>) => void\n addConnection: (conn: StepConnection) => void\n removeConnection: (fromStepId: string, toStepId: string) => void\n selectStep: (stepId: string | null) => void\n undo: () => void\n redo: () => void\n setDefinition: (def: WorkflowDefinition) => void\n} {\n const [state, setState] = useState<WorkflowBuilderState>({\n definition: { ...emptyDef(), ...initial },\n selectedStepId: null,\n isDirty: false,\n undoStack: [],\n redoStack: [],\n })\n\n const pushUndo = useCallback(() => {\n setState(prev => ({ ...prev, undoStack: [...prev.undoStack.slice(-20), prev.definition], redoStack: [] }))\n }, [])\n\n const addStep = useCallback((step: WorkflowStepDef) => {\n pushUndo()\n setState(prev => ({\n ...prev,\n isDirty: true,\n definition: { ...prev.definition, steps: [...prev.definition.steps, step], updatedAt: Date.now() },\n }))\n }, [pushUndo])\n\n const removeStep = useCallback((stepId: string) => {\n pushUndo()\n setState(prev => ({\n ...prev,\n isDirty: true,\n definition: {\n ...prev.definition,\n steps: prev.definition.steps.filter(s => s.id !== stepId),\n connections: prev.definition.connections.filter(c => c.fromStepId !== stepId && c.toStepId !== stepId),\n updatedAt: Date.now(),\n },\n selectedStepId: prev.selectedStepId === stepId ? null : prev.selectedStepId,\n }))\n }, [pushUndo])\n\n const updateStep = useCallback((stepId: string, updates: Partial<WorkflowStepDef>) => {\n pushUndo()\n setState(prev => ({\n ...prev,\n isDirty: true,\n definition: {\n ...prev.definition,\n steps: prev.definition.steps.map(s => s.id === stepId ? { ...s, ...updates } : s),\n updatedAt: Date.now(),\n },\n }))\n }, [pushUndo])\n\n const addConnection = useCallback((conn: StepConnection) => {\n pushUndo()\n setState(prev => ({\n ...prev,\n isDirty: true,\n definition: { ...prev.definition, connections: [...prev.definition.connections, conn], updatedAt: Date.now() },\n }))\n }, [pushUndo])\n\n const removeConnection = useCallback((fromStepId: string, toStepId: string) => {\n pushUndo()\n setState(prev => ({\n ...prev,\n isDirty: true,\n definition: {\n ...prev.definition,\n connections: prev.definition.connections.filter(c => !(c.fromStepId === fromStepId && c.toStepId === toStepId)),\n updatedAt: Date.now(),\n },\n }))\n }, [pushUndo])\n\n const selectStep = useCallback((stepId: string | null) => setState(prev => ({ ...prev, selectedStepId: stepId })), [])\n\n const undo = useCallback(() => {\n setState(prev => {\n if (prev.undoStack.length === 0) return prev\n const previous = prev.undoStack[prev.undoStack.length - 1]\n return { ...prev, definition: previous, undoStack: prev.undoStack.slice(0, -1), redoStack: [prev.definition, ...prev.redoStack] }\n })\n }, [])\n\n const redo = useCallback(() => {\n setState(prev => {\n if (prev.redoStack.length === 0) return prev\n const next = prev.redoStack[0]\n return { ...prev, definition: next, undoStack: [...prev.undoStack, prev.definition], redoStack: prev.redoStack.slice(1) }\n })\n }, [])\n\n const setDefinition = useCallback((def: WorkflowDefinition) => {\n setState(prev => ({ ...prev, definition: def, isDirty: false, undoStack: [], redoStack: [] }))\n }, [])\n\n return {\n definition: state.definition,\n selectedStepId: state.selectedStepId,\n isDirty: state.isDirty,\n canUndo: state.undoStack.length > 0,\n canRedo: state.redoStack.length > 0,\n addStep, removeStep, updateStep,\n addConnection, removeConnection,\n selectStep, undo, redo, setDefinition,\n }\n}\n","/**\n * @module UseWorkflowRun\n * @package @geenius/ai-workflow-react\n * @description React hook for tracking workflow execution progress, per-step\n * results, and completion callbacks in the Tailwind workflow surface.\n */\n\nimport { useState, useCallback, useRef, useEffect } from 'react'\nimport type { WorkflowRun, StepResult, RunStatus } from '@geenius/ai-workflow-shared'\n\n/**\n * Runtime options for workflow run tracking.\n *\n * @property pollIntervalMs Reserved polling interval for future remote sync.\n * @property onStepComplete Optional callback fired whenever a step result changes.\n * @property onRunComplete Optional callback fired when the run reaches a terminal state.\n */\nexport interface UseWorkflowRunOptions {\n /** Poll interval for checking run status (ms) */\n pollIntervalMs?: number\n /** Callback when a step completes */\n onStepComplete?: (result: StepResult) => void\n /** Callback when the run finishes */\n onRunComplete?: (run: WorkflowRun) => void\n}\n\n/**\n * Track workflow execution state and emit lifecycle callbacks.\n *\n * @param options Optional polling and lifecycle callbacks for run updates.\n * @returns Run state, derived flags, and update/reset helpers.\n */\nexport function useWorkflowRun(options: UseWorkflowRunOptions = {}): {\n run: WorkflowRun | null\n status: RunStatus\n currentStepIndex: number\n completedSteps: StepResult[]\n progress: number\n error: string | null\n trackRun: (workflowRun: WorkflowRun) => void\n updateStep: (result: StepResult) => void\n reset: () => void\n isRunning: boolean\n isComplete: boolean\n isFailed: boolean\n} {\n const [run, setRun] = useState<WorkflowRun | null>(null)\n const [currentStepIndex, setCurrentStepIndex] = useState(0)\n const [completedSteps, setCompletedSteps] = useState<StepResult[]>([])\n const [status, setStatus] = useState<RunStatus>('pending')\n const [progress, setProgress] = useState(0)\n const [error, setError] = useState<string | null>(null)\n const timerRef = useRef<ReturnType<typeof setInterval> | null>(null)\n\n const trackRun = useCallback((workflowRun: WorkflowRun) => {\n setRun(workflowRun)\n setStatus(workflowRun.status)\n setCurrentStepIndex(workflowRun.currentStepIndex)\n setCompletedSteps(workflowRun.stepResults)\n setError(workflowRun.error ?? null)\n\n const total = workflowRun.stepResults.length\n const done = workflowRun.stepResults.filter(s => s.status === 'completed' || s.status === 'skipped').length\n setProgress(total > 0 ? Math.round((done / total) * 100) : 0)\n\n if (workflowRun.status === 'completed' || workflowRun.status === 'failed') {\n options.onRunComplete?.(workflowRun)\n }\n }, [options.onRunComplete])\n\n const updateStep = useCallback((result: StepResult) => {\n setCompletedSteps(prev => {\n const existing = prev.findIndex(s => s.stepId === result.stepId)\n if (existing >= 0) {\n const updated = [...prev]\n updated[existing] = result\n return updated\n }\n return [...prev, result]\n })\n setCurrentStepIndex(prev => prev + 1)\n options.onStepComplete?.(result)\n }, [options.onStepComplete])\n\n const reset = useCallback(() => {\n setRun(null)\n setCurrentStepIndex(0)\n setCompletedSteps([])\n setStatus('pending')\n setProgress(0)\n setError(null)\n if (timerRef.current) clearInterval(timerRef.current)\n }, [])\n\n useEffect(() => {\n return () => { if (timerRef.current) clearInterval(timerRef.current) }\n }, [])\n\n return {\n run, status, currentStepIndex, completedSteps,\n progress, error,\n trackRun, updateStep, reset,\n isRunning: status === 'running',\n isComplete: status === 'completed',\n isFailed: status === 'failed',\n }\n}\n","/**\n * @module UseWorkflowStep\n * @package @geenius/ai-workflow-react\n * @description React hook for tracking a single workflow step within the\n * Tailwind workflow surface.\n */\n\nimport { useCallback, useMemo, useState } from \"react\";\nimport type {\n StepResult,\n StepStatus,\n WorkflowStepDef,\n} from \"@geenius/ai-workflow-shared\";\n\ninterface UseWorkflowStepResult {\n stepDef: WorkflowStepDef;\n status: StepStatus;\n output: unknown;\n error: string | null;\n durationMs: number;\n icon: string;\n statusColor: string;\n updateFromResult: (result: StepResult) => void;\n reset: () => void;\n isComplete: boolean;\n isRunning: boolean;\n isFailed: boolean;\n isWaiting: boolean;\n config: WorkflowStepDef[\"config\"];\n}\n\n/**\n * Track the transient execution state for a single workflow step.\n *\n * @param stepDef Shared workflow step definition to project into UI state.\n * @returns Step execution metadata, derived badges, and reset/update actions.\n */\nexport function useWorkflowStep(\n stepDef: WorkflowStepDef,\n): UseWorkflowStepResult {\n const [status, setStatus] = useState<StepStatus>(\"pending\");\n const [output, setOutput] = useState<unknown>(null);\n const [error, setError] = useState<string | null>(null);\n const [durationMs, setDurationMs] = useState<number>(0);\n\n const updateFromResult = useCallback((result: StepResult): void => {\n setStatus(result.status);\n setOutput(result.output ?? null);\n setError(result.error ?? null);\n setDurationMs(result.durationMs);\n }, []);\n\n const reset = useCallback((): void => {\n setStatus(\"pending\");\n setOutput(null);\n setError(null);\n setDurationMs(0);\n }, []);\n\n const icon = useMemo((): string => {\n const iconMap: Record<WorkflowStepDef[\"type\"], string> = {\n \"llm-call\": \"πŸ€–\",\n transform: \"βš™οΈ\",\n condition: \"πŸ”€\",\n \"human-approval\": \"πŸ‘€\",\n webhook: \"🌐\",\n delay: \"⏱️\",\n parallel: \"⚑\",\n loop: \"πŸ”„\",\n \"sub-workflow\": \"πŸ“‹\",\n custom: \"πŸ”§\",\n };\n\n return iconMap[stepDef.type] ?? \"πŸ“¦\";\n }, [stepDef.type]);\n\n const statusColor = useMemo((): string => {\n const colorMap: Record<StepStatus, string> = {\n pending: \"gray\",\n running: \"blue\",\n completed: \"green\",\n failed: \"red\",\n skipped: \"orange\",\n \"waiting-approval\": \"purple\",\n };\n\n return colorMap[status];\n }, [status]);\n\n return {\n stepDef,\n status,\n output,\n error,\n durationMs,\n icon,\n statusColor,\n updateFromResult,\n reset,\n isComplete: status === \"completed\",\n isRunning: status === \"running\",\n isFailed: status === \"failed\",\n isWaiting: status === \"waiting-approval\",\n config: stepDef.config,\n };\n}\n","/**\n * @module UseApprovalGate\n * @package @geenius/ai-workflow-react\n * @description React hook for managing human approval requests in the Tailwind\n * workflow variant.\n */\n\nimport { useState, useCallback } from 'react'\n\n/**\n * Pending approval request exposed to the UI layer.\n *\n * @property id Stable approval-request identifier.\n * @property stepId Workflow step awaiting the operator decision.\n * @property message Approval prompt shown to the operator.\n * @property requestedAt Unix timestamp for when the approval was created.\n * @property approvers Optional list of users or roles allowed to approve.\n */\nexport interface ApprovalRequest {\n id: string\n stepId: string\n message: string\n requestedAt: number\n approvers?: string[]\n}\n\n/**\n * Manage pending approval requests and completed approval history.\n *\n * @returns Approval state plus request, approve, reject, and reset helpers.\n */\nexport function useApprovalGate(): {\n pendingApprovals: ApprovalRequest[]\n history: Array<ApprovalRequest & { decision: 'approved' | 'rejected'; decidedAt: number }>\n hasPending: boolean\n requestApproval: (stepId: string, message: string, approvers?: string[]) => string\n approve: (approvalId: string) => void\n reject: (approvalId: string) => void\n clearHistory: () => void\n} {\n const [pendingApprovals, setPendingApprovals] = useState<ApprovalRequest[]>([])\n const [history, setHistory] = useState<Array<ApprovalRequest & { decision: 'approved' | 'rejected'; decidedAt: number }>>([])\n\n const requestApproval = useCallback((stepId: string, message: string, approvers?: string[]) => {\n const request: ApprovalRequest = {\n id: `approval_${Date.now()}_${Math.random().toString(36).slice(2, 6)}`,\n stepId,\n message,\n requestedAt: Date.now(),\n approvers,\n }\n setPendingApprovals(prev => [...prev, request])\n return request.id\n }, [])\n\n const approve = useCallback((approvalId: string) => {\n setPendingApprovals(prev => {\n const request = prev.find(a => a.id === approvalId)\n if (request) {\n setHistory(h => [...h, { ...request, decision: 'approved', decidedAt: Date.now() }])\n }\n return prev.filter(a => a.id !== approvalId)\n })\n }, [])\n\n const reject = useCallback((approvalId: string) => {\n setPendingApprovals(prev => {\n const request = prev.find(a => a.id === approvalId)\n if (request) {\n setHistory(h => [...h, { ...request, decision: 'rejected', decidedAt: Date.now() }])\n }\n return prev.filter(a => a.id !== approvalId)\n })\n }, [])\n\n const clearHistory = useCallback(() => setHistory([]), [])\n\n return {\n pendingApprovals,\n history,\n hasPending: pendingApprovals.length > 0,\n requestApproval,\n approve,\n reject,\n clearHistory,\n }\n}\n","/**\n * @module UseWorkflowTemplates\n * @package @geenius/ai-workflow-react\n * @description React hook for filtering and instantiating shared workflow\n * templates in the Tailwind workflow surface.\n */\n\nimport { useState, useCallback, useMemo } from 'react'\nimport type { WorkflowDefinition } from '@geenius/ai-workflow-shared'\nimport { WORKFLOW_TEMPLATES, getTemplate, getTemplatesByCategory } from '@geenius/ai-workflow-shared'\nimport type { WorkflowTemplate } from '@geenius/ai-workflow-shared'\n\n/**\n * Manage template filtering, selection, and instantiation for the builder UI.\n *\n * @param userId User identifier injected into cloned workflow templates.\n * @returns Template lists, selected state, and creation helpers.\n */\nexport function useWorkflowTemplates(userId: string): {\n templates: WorkflowTemplate[]\n allTemplates: WorkflowTemplate[]\n selectedTemplate: WorkflowTemplate | null\n selectedTemplateId: string | null\n categories: WorkflowTemplate['category'][]\n filterCategory: WorkflowTemplate['category'] | 'all'\n searchQuery: string\n setSelectedTemplateId: (value: string | null) => void\n setFilterCategory: (value: WorkflowTemplate['category'] | 'all') => void\n setSearchQuery: (value: string) => void\n createFromTemplate: (templateId: string) => WorkflowDefinition | null\n} {\n const [selectedTemplateId, setSelectedTemplateId] = useState<string | null>(null)\n const [filterCategory, setFilterCategory] = useState<WorkflowTemplate['category'] | 'all'>('all')\n const [searchQuery, setSearchQuery] = useState('')\n\n const filteredTemplates = useMemo(() => {\n let templates = filterCategory === 'all' ? WORKFLOW_TEMPLATES : getTemplatesByCategory(filterCategory)\n if (searchQuery.trim()) {\n const q = searchQuery.toLowerCase()\n templates = templates.filter(t =>\n t.name.toLowerCase().includes(q) ||\n t.description.toLowerCase().includes(q) ||\n t.tags.some(tag => tag.includes(q))\n )\n }\n return templates\n }, [filterCategory, searchQuery])\n\n const selectedTemplate = useMemo(\n () => selectedTemplateId ? getTemplate(selectedTemplateId) ?? null : null,\n [selectedTemplateId],\n )\n\n const createFromTemplate = useCallback((templateId: string): WorkflowDefinition | null => {\n const template = getTemplate(templateId)\n if (!template) return null\n return template.create(userId)\n }, [userId])\n\n const categories = useMemo(\n () => [...new Set(WORKFLOW_TEMPLATES.map(t => t.category))],\n [],\n )\n\n return {\n templates: filteredTemplates,\n allTemplates: WORKFLOW_TEMPLATES,\n selectedTemplate,\n selectedTemplateId,\n categories,\n filterCategory,\n searchQuery,\n setSelectedTemplateId,\n setFilterCategory,\n setSearchQuery,\n createFromTemplate,\n }\n}\n","/**\n * @module WorkflowReactClassNames\n * @package @geenius/ai-workflow-react\n * @description Minimal React utility for composing conditional class names in\n * the Tailwind workflow variant.\n */\n\n/**\n * Join truthy class-name fragments into one space-delimited string.\n *\n * @param classes Class-name fragments that may include falsey values.\n * @returns A normalized class-name string.\n */\nexport function cn(...classes: Array<string | false | null | undefined>): string {\n return classes.filter(Boolean).join(' ')\n}\n","/**\n * @module WorkflowReactCva\n * @package @geenius/ai-workflow-react\n * @description Tiny variant-class helper used by the React Tailwind workflow\n * components to keep class selection deterministic without introducing an\n * additional runtime dependency.\n */\n\ntype VariantsConfig = Record<string, Record<string, string>>\n\ntype CvaOptions<V extends VariantsConfig> = {\n variants?: V\n defaultVariants?: Partial<{ [K in keyof V]: keyof V[K] & string }>\n}\n\n/**\n * Create a variant-aware class-name builder.\n *\n * @param base Base class list always included in the result.\n * @param options Variant maps and optional defaults for each variant.\n * @returns A function that resolves variant props into a class string.\n */\nexport function cva<V extends VariantsConfig>(base: string, options: CvaOptions<V> = {}): (props?: Partial<{ [K in keyof V]: keyof V[K] & string }>) => string {\n return (props: Partial<{ [K in keyof V]: keyof V[K] & string }> = {}) => {\n const classes = [base]\n // TypeScript widens `Object.entries()` keys to `string`, so these casts\n // preserve the caller's variant key space while iterating dynamically.\n const variants = (options.variants ?? {}) as VariantsConfig\n for (const [key, variantMap] of Object.entries(variants)) {\n const value = String(props[key as keyof V] ?? options.defaultVariants?.[key as keyof V] ?? '')\n const variantClass = variantMap[value]\n if (variantClass) classes.push(variantClass)\n }\n return classes.join(' ')\n }\n}\n","/**\n * @module WorkflowStepNode\n * @package @geenius/ai-workflow-react\n * @description React builder node component for one workflow step. This file\n * centralizes selection, retry, and status rendering so the canvas can remain\n * a composition layer over the shared workflow definition contract.\n */\nimport { motion } from \"@geenius/motion/react\";\nimport type { WorkflowStepDef, StepType } from \"@geenius/ai-workflow-shared\";\nimport type { ReactElement } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { cva } from \"../lib/cva\";\n\nconst STEP_ICONS: Record<StepType, string> = {\n \"llm-call\": \"πŸ€–\",\n transform: \"βš™οΈ\",\n condition: \"πŸ”€\",\n \"human-approval\": \"πŸ‘€\",\n webhook: \"🌐\",\n delay: \"⏱️\",\n parallel: \"⚑\",\n loop: \"πŸ”„\",\n \"sub-workflow\": \"πŸ“‹\",\n custom: \"πŸ”§\",\n};\n\n/**\n * Props for rendering one workflow step node.\n *\n * @property step Shared workflow step definition to render.\n * @property isSelected Whether the step is currently selected in the builder.\n * @property status Visual execution status displayed on the node.\n * @property onClick Optional selection callback invoked from mouse or keyboard.\n * @property className Optional class name override for outer layout composition.\n */\nexport interface StepNodeProps {\n step: WorkflowStepDef;\n isSelected?: boolean;\n status?: \"pending\" | \"running\" | \"success\" | \"error\" | \"skipped\" | \"default\";\n onClick?: () => void;\n className?: string;\n}\n\nconst stepNodeClass = cva(\n \"rounded-2xl border p-4 shadow-sm outline-none transition duration-200 focus-visible:ring-2 focus-visible:ring-primary/40\",\n {\n variants: {\n selected: {\n true: \"border-primary bg-primary/10 ring-2 ring-primary/20\",\n false: \"border-border bg-card\",\n },\n status: {\n pending: \"border-warning\",\n running: \"border-primary\",\n success: \"border-success\",\n error: \"border-danger\",\n skipped: \"opacity-70\",\n default: \"\",\n },\n },\n },\n);\n\n/**\n * Render one selectable workflow step node inside the builder canvas.\n *\n * @param props Step node rendering props.\n * @returns A keyboard-accessible workflow step node.\n */\nexport function StepNode({\n step,\n isSelected,\n status,\n onClick,\n className,\n}: StepNodeProps): ReactElement {\n return (\n <motion.div\n data-workflow=\"step-node\"\n data-step-type={step.type}\n data-selected={isSelected || undefined}\n data-status={status}\n className={cn(\n stepNodeClass({\n selected: isSelected ? \"true\" : \"false\",\n status: status ?? \"default\",\n }),\n className,\n )}\n role=\"button\"\n tabIndex={0}\n aria-label={`Workflow step ${step.name}`}\n aria-pressed={isSelected}\n onClick={onClick}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick?.();\n }\n }}\n style={\n step.position\n ? {\n position: \"absolute\",\n left: step.position.x,\n top: step.position.y,\n }\n : undefined\n }\n layout\n whileHover={{ scale: 1.02 }}\n whileTap={{ scale: 0.98 }}\n >\n <div data-workflow=\"step-header\">\n <span data-workflow=\"step-icon\">{STEP_ICONS[step.type]}</span>\n <span data-workflow=\"step-name\">{step.name}</span>\n </div>\n <div data-workflow=\"step-type-badge\">{step.type}</div>\n {step.optional && (\n <span data-workflow=\"step-optional-badge\">Optional</span>\n )}\n {step.retries && (\n <span data-workflow=\"step-retry-badge\">\n ↻ {step.retries.maxAttempts}\n </span>\n )}\n </motion.div>\n );\n}\n","/**\n * @module WorkflowStepConnector\n * @package @geenius/ai-workflow-react\n * @description SVG connector primitive for drawing directed edges between\n * positioned workflow steps in the React builder canvas.\n */\n\nimport type { ReactElement } from \"react\";\n\n/**\n * Props for a workflow step connector path.\n *\n * @property from Starting node position for the connector.\n * @property to Ending node position for the connector.\n * @property label Optional inline label rendered above the curve.\n * @property isActive Whether the connector should use the emphasized active style.\n */\nexport interface StepConnectorProps {\n from: { x: number; y: number }\n to: { x: number; y: number }\n label?: string\n isActive?: boolean\n}\n\nconst NODE_WIDTH = 200\nconst NODE_HEIGHT = 80\n\n/**\n * Render a curved connector between two step positions.\n *\n * @param props Connector endpoints and optional label/state metadata.\n * @returns The SVG group that draws the workflow edge.\n */\nexport function StepConnector({ from, to, label, isActive }: StepConnectorProps): ReactElement {\n const x1 = from.x + NODE_WIDTH\n const y1 = from.y + NODE_HEIGHT / 2\n const x2 = to.x\n const y2 = to.y + NODE_HEIGHT / 2\n const midX = (x1 + x2) / 2\n\n return (\n <g data-workflow=\"connector\" data-active={isActive || undefined}>\n <path\n d={`M ${x1} ${y1} C ${midX} ${y1}, ${midX} ${y2}, ${x2} ${y2}`}\n fill=\"none\"\n stroke={isActive ? 'var(--primary)' : 'var(--border)'}\n strokeWidth={isActive ? 3 : 2}\n markerEnd=\"url(#arrowhead)\"\n />\n {label && (\n <text\n x={midX}\n y={(y1 + y2) / 2 - 8}\n textAnchor=\"middle\"\n fill=\"var(--muted-foreground)\"\n fontSize=\"12\"\n >\n {label}\n </text>\n )}\n <defs>\n <marker id=\"arrowhead\" markerWidth=\"10\" markerHeight=\"7\" refX=\"10\" refY=\"3.5\" orient=\"auto\">\n <polygon points=\"0 0, 10 3.5, 0 7\" fill=\"var(--border)\" />\n </marker>\n </defs>\n </g>\n )\n}\n","/**\n * @module WorkflowCanvas\n * @package @geenius/ai-workflow-react\n * @description React workflow canvas for rendering connected steps and edges.\n * This file visualizes a shared workflow definition while keeping selection\n * state controlled by the parent builder surface.\n */\nimport { AnimatePresence, motion } from \"@geenius/motion/react\";\nimport type {\n WorkflowDefinition,\n} from \"@geenius/ai-workflow-shared\";\nimport type { ReactElement } from \"react\";\nimport { StepNode } from \"./StepNode\";\nimport { StepConnector } from \"./StepConnector\";\n\n/**\n * Props for the workflow builder canvas.\n *\n * @property definition Shared workflow definition to render.\n * @property selectedStepId Currently selected step identifier.\n * @property onSelectStep Callback used to change the selected step.\n * @property onMoveStep Reserved callback for future drag interactions.\n */\nexport interface WorkflowCanvasProps {\n definition: WorkflowDefinition;\n selectedStepId: string | null;\n onSelectStep: (id: string | null) => void;\n onMoveStep?: (stepId: string, pos: { x: number; y: number }) => void;\n}\n\n/**\n * Render a workflow canvas with connectors, nodes, and an empty state.\n *\n * @param props Canvas state and interaction callbacks.\n * @returns The workflow canvas for the current definition.\n */\nexport function WorkflowCanvas({\n definition,\n selectedStepId,\n onSelectStep,\n onMoveStep,\n}: WorkflowCanvasProps): ReactElement {\n return (\n <div data-workflow=\"canvas\" role=\"application\" aria-label=\"Workflow canvas\">\n <svg\n data-workflow=\"connections-layer\"\n style={{ position: \"absolute\", inset: 0, pointerEvents: \"none\" }}\n >\n {definition.connections.map((conn, i) => {\n const from = definition.steps.find((s) => s.id === conn.fromStepId);\n const to = definition.steps.find((s) => s.id === conn.toStepId);\n if (!from?.position || !to?.position) return null;\n return (\n <StepConnector\n key={i}\n from={from.position}\n to={to.position}\n label={conn.label}\n />\n );\n })}\n </svg>\n <div data-workflow=\"nodes-layer\">\n {definition.steps.map((step) => (\n <StepNode\n key={step.id}\n step={step}\n isSelected={selectedStepId === step.id}\n onClick={() =>\n onSelectStep(step.id === selectedStepId ? null : step.id)\n }\n />\n ))}\n </div>\n <AnimatePresence>\n {definition.steps.length === 0 && (\n <motion.div\n data-workflow=\"canvas-empty\"\n initial={{ opacity: 0, scale: 0.95 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.95 }}\n >\n <p data-workflow=\"empty-title\">No steps yet</p>\n <p data-workflow=\"empty-hint\">\n Drag steps from the palette or use a template\n </p>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n}\n","/**\n * @module WorkflowStepConfigPanel\n * @package @geenius/ai-workflow-react\n * @description React side panel for inspecting and editing the currently\n * selected workflow step. This component exposes step metadata, optional flags,\n * and the raw configuration payload used by the builder surface.\n */\n\nimport type { ReactElement } from \"react\";\nimport { useState } from 'react'\nimport type { WorkflowStepDef, StepType } from '@geenius/ai-workflow-shared'\n\n/**\n * Props for the workflow step configuration panel.\n *\n * @property step Shared workflow step being edited in the panel.\n * @property onUpdate Callback that persists partial step updates.\n * @property onDelete Callback that removes the selected step.\n * @property onClose Callback that closes the panel without mutating state.\n */\nexport interface StepConfigPanelProps {\n step: WorkflowStepDef\n onUpdate: (stepId: string, updates: Partial<WorkflowStepDef>) => void\n onDelete: (stepId: string) => void\n onClose: () => void\n}\n\n/**\n * Render the editable side panel for a selected workflow step.\n *\n * @param props Selected step data and mutation callbacks from the builder.\n * @returns The workflow step configuration panel.\n */\nexport function StepConfigPanel({ step, onUpdate, onDelete, onClose }: StepConfigPanelProps): ReactElement {\n const [name, setName] = useState(step.name)\n\n const handleNameBlur = () => {\n if (name.trim() && name !== step.name) {\n onUpdate(step.id, { name: name.trim() })\n }\n }\n\n return (\n <div data-workflow=\"config-panel\" role=\"complementary\" aria-label=\"Step configuration\">\n <div data-workflow=\"config-header\">\n <h3 data-workflow=\"config-title\">Configure Step</h3>\n <button data-workflow=\"config-close\" onClick={onClose} aria-label=\"Close panel\">βœ•</button>\n </div>\n <div data-workflow=\"config-body\">\n <label data-workflow=\"config-label\">\n Step Name\n <input\n data-workflow=\"config-input\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n onBlur={handleNameBlur}\n />\n </label>\n <div data-workflow=\"config-field\">\n <span data-workflow=\"config-field-label\">Type</span>\n <span data-workflow=\"config-field-value\">{step.type}</span>\n </div>\n <div data-workflow=\"config-field\">\n <span data-workflow=\"config-field-label\">ID</span>\n <code data-workflow=\"config-field-code\">{step.id}</code>\n </div>\n {step.optional !== undefined && (\n <label data-workflow=\"config-checkbox\">\n <input\n type=\"checkbox\"\n checked={step.optional}\n onChange={(e) => onUpdate(step.id, { optional: e.target.checked })}\n />\n Optional (skip on failure)\n </label>\n )}\n <div data-workflow=\"config-json\">\n <span data-workflow=\"config-field-label\">Configuration</span>\n <pre data-workflow=\"config-json-view\">{JSON.stringify(step.config, null, 2)}</pre>\n </div>\n </div>\n <div data-workflow=\"config-footer\">\n <button data-workflow=\"config-delete\" onClick={() => { onDelete(step.id); onClose() }}>\n πŸ—‘ Delete Step\n </button>\n </div>\n </div>\n )\n}\n","/**\n * @module WorkflowRunPanel\n * @package @geenius/ai-workflow-react\n * @description React execution monitor for workflow runs. This file condenses\n * progress, cost, and per-step status into a single operational surface that\n * mirrors the shared workflow run contract.\n */\nimport { AnimatePresence, motion } from \"@geenius/motion/react\";\nimport type { WorkflowRun } from \"@geenius/ai-workflow-shared\";\nimport type { ReactElement } from \"react\";\nimport { formatCost } from \"@geenius/ai-workflow-shared\";\n\n/**\n * Props for the workflow run panel.\n *\n * @property run Current workflow run snapshot or `null` when idle.\n * @property isRunning Whether the run is still active.\n * @property onCancel Optional callback that cancels the active run.\n */\nexport interface WorkflowRunPanelProps {\n run: WorkflowRun | null;\n isRunning: boolean;\n onCancel?: () => void;\n}\n\nconst STATUS_ICONS: Record<string, string> = {\n pending: \"⏳\",\n running: \"πŸ”„\",\n completed: \"βœ…\",\n failed: \"❌\",\n skipped: \"⏭️\",\n \"waiting-approval\": \"πŸ‘€\",\n};\n\n/**\n * Render execution progress and per-step status for a workflow run.\n *\n * @param props Run state and optional cancellation callback.\n * @returns A run summary panel or idle placeholder.\n */\nexport function WorkflowRunPanel({\n run,\n isRunning,\n onCancel,\n}: WorkflowRunPanelProps): ReactElement {\n if (!run) {\n return (\n <motion.div\n data-workflow=\"run-panel\"\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -10 }}\n transition={{ type: \"spring\" }}\n >\n <div data-workflow=\"run-empty\">\n <p>No active run. Click \"Run\" to execute the workflow.</p>\n </div>\n </motion.div>\n );\n }\n\n const completedCount = run.stepResults.filter(\n (s) => s.status === \"completed\",\n ).length;\n const totalCount = run.stepResults.length;\n const progress =\n totalCount > 0 ? Math.round((completedCount / totalCount) * 100) : 0;\n const totalCost = run.stepResults.reduce(\n (sum, s) => sum + (s.costUsd ?? 0),\n 0,\n );\n const totalTokens = run.stepResults.reduce(\n (sum, s) => sum + (s.tokens ?? 0),\n 0,\n );\n const duration = (run.completedAt ?? Date.now()) - run.startedAt;\n\n return (\n <motion.div\n data-workflow=\"run-panel\"\n data-status={run.status}\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0 }}\n layout\n transition={{ type: \"spring\" }}\n >\n <div data-workflow=\"run-header\">\n <h3 data-workflow=\"run-title\">\n {STATUS_ICONS[run.status]} Run {run.status}\n </h3>\n {isRunning && onCancel && (\n <button data-workflow=\"run-cancel\" onClick={onCancel}>\n ⏹ Cancel\n </button>\n )}\n </div>\n <div data-workflow=\"run-progress\">\n <div data-workflow=\"run-progress-bar\">\n <motion.div\n data-workflow=\"run-progress-fill\"\n initial={{ width: 0 }}\n animate={{ width: `${progress}%` }}\n transition={{ type: \"spring\" }}\n />\n </div>\n <span data-workflow=\"run-progress-text\">\n {completedCount}/{totalCount} steps ({progress}%)\n </span>\n </div>\n <div data-workflow=\"run-stats\">\n <span data-workflow=\"run-stat\">⏱ {(duration / 1000).toFixed(1)}s</span>\n {totalTokens > 0 && (\n <span data-workflow=\"run-stat\">\n πŸͺ™ {totalTokens.toLocaleString()} tokens\n </span>\n )}\n {totalCost > 0 && (\n <span data-workflow=\"run-stat\">πŸ’° {formatCost(totalCost)}</span>\n )}\n </div>\n <AnimatePresence>\n {run.error && (\n <motion.div\n data-workflow=\"run-error\"\n role=\"alert\"\n initial={{ opacity: 0, height: 0 }}\n animate={{ opacity: 1, height: \"auto\" }}\n exit={{ opacity: 0, height: 0 }}\n >\n {run.error}\n </motion.div>\n )}\n </AnimatePresence>\n <motion.ul\n data-workflow=\"run-steps\"\n layout\n transition={{ staggerChildren: 0.1 }}\n >\n <AnimatePresence mode=\"popLayout\">\n {run.stepResults.map((r) => (\n <motion.li\n key={r.stepId}\n data-workflow=\"run-step-item\"\n data-status={r.status}\n initial={{ opacity: 0, x: -10 }}\n animate={{ opacity: 1, x: 0 }}\n exit={{ opacity: 0, scale: 0.95 }}\n layout\n >\n <span data-workflow=\"run-step-icon\">\n {STATUS_ICONS[r.status]}\n </span>\n <span data-workflow=\"run-step-name\">{r.stepName}</span>\n <span data-workflow=\"run-step-duration\">{r.durationMs}ms</span>\n </motion.li>\n ))}\n </AnimatePresence>\n </motion.ul>\n </motion.div>\n );\n}\n","/**\n * @module WorkflowApprovalModal\n * @package @geenius/ai-workflow-react\n * @description React approval dialog for human-gated workflow steps. This\n * component traps keyboard focus, restores focus on close, and keeps the\n * approval surface aligned with the CSS and SolidJS variants.\n */\n\nimport type { ReactElement } from \"react\";\nimport { useEffect, useId, useRef } from \"react\";\nimport { AnimatePresence, motion } from \"@geenius/motion/react\";\nimport type { ApprovalRequest } from \"../hooks/useApprovalGate\";\n\nfunction getFocusableElements(container: HTMLElement | null): HTMLElement[] {\n if (!container) {\n return [];\n }\n\n return Array.from(\n container.querySelectorAll<HTMLElement>(\n 'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])',\n ),\n );\n}\n\n/**\n * Props for the workflow approval dialog.\n *\n * @property request Pending approval request to render, or `null` when idle.\n * @property onApprove Callback that approves the active request by id.\n * @property onReject Callback that rejects the active request by id.\n * @property onDismiss Optional callback used for Escape-key and dismiss flows.\n */\nexport interface ApprovalModalProps {\n request: ApprovalRequest | null;\n onApprove: (id: string) => void;\n onReject: (id: string) => void;\n onDismiss?: (id: string) => void;\n}\n\n/**\n * Render the pending approval request as an accessible modal dialog.\n *\n * @param props Approval dialog callbacks and the current pending request.\n * @returns The animated approval dialog, or `null` when no approval is pending.\n */\nexport function ApprovalModal(props: ApprovalModalProps): ReactElement {\n const dialogRef = useRef<HTMLDivElement | null>(null);\n const previousActiveElementRef = useRef<HTMLElement | null>(null);\n const titleId = useId();\n const messageId = useId();\n const request = props.request;\n\n useEffect(() => {\n if (!request) {\n return;\n }\n\n const dialog = dialogRef.current;\n previousActiveElementRef.current =\n document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null;\n\n const dismiss = (): void => {\n if (props.onDismiss) {\n props.onDismiss(request.id);\n return;\n }\n\n props.onReject(request.id);\n };\n\n const focusableElements = getFocusableElements(dialog);\n (focusableElements[0] ?? dialog)?.focus();\n\n const handleKeyDown = (event: KeyboardEvent): void => {\n if (!dialog) {\n return;\n }\n\n if (event.key === \"Escape\") {\n event.preventDefault();\n dismiss();\n return;\n }\n\n if (event.key !== \"Tab\") {\n return;\n }\n\n const currentFocusableElements = getFocusableElements(dialog);\n\n if (currentFocusableElements.length === 0) {\n event.preventDefault();\n dialog.focus();\n return;\n }\n\n const firstElement = currentFocusableElements[0];\n const lastElement =\n currentFocusableElements[currentFocusableElements.length - 1];\n\n if (event.shiftKey && document.activeElement === firstElement) {\n event.preventDefault();\n lastElement.focus();\n } else if (!event.shiftKey && document.activeElement === lastElement) {\n event.preventDefault();\n firstElement.focus();\n }\n };\n\n dialog?.addEventListener(\"keydown\", handleKeyDown);\n\n return () => {\n dialog?.removeEventListener(\"keydown\", handleKeyDown);\n previousActiveElementRef.current?.focus();\n previousActiveElementRef.current = null;\n };\n }, [props.onDismiss, props.onReject, request]);\n\n return (\n <AnimatePresence>\n {request && (\n <div data-workflow=\"approval-modal\">\n <motion.div\n data-workflow=\"approval-overlay\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n />\n <motion.div\n ref={dialogRef}\n data-workflow=\"approval-dialog\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={messageId}\n tabIndex={-1}\n initial={{ opacity: 0, scale: 0.95, y: -20 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.95, y: -20 }}\n transition={{ type: \"spring\", damping: 25, stiffness: 300 }}\n >\n <div data-workflow=\"approval-header\">\n <span data-workflow=\"approval-icon\">πŸ‘€</span>\n <h3 id={titleId} data-workflow=\"approval-title\">\n Approval Required\n </h3>\n </div>\n <div data-workflow=\"approval-body\">\n <p id={messageId} data-workflow=\"approval-message\">\n {request.message}\n </p>\n <div data-workflow=\"approval-meta\">\n <span data-workflow=\"approval-step\">\n Step: {request.stepId}\n </span>\n <span data-workflow=\"approval-time\">\n Requested: {new Date(request.requestedAt).toLocaleTimeString()}\n </span>\n </div>\n {request.approvers && request.approvers.length > 0 && (\n <div data-workflow=\"approval-approvers\">\n <span>Authorized approvers: </span>\n {request.approvers.map((approver) => (\n <span\n key={approver}\n data-workflow=\"approval-approver-badge\"\n >\n {approver}\n </span>\n ))}\n </div>\n )}\n </div>\n <div data-workflow=\"approval-actions\">\n <button\n type=\"button\"\n data-workflow=\"approval-reject\"\n onClick={() => props.onReject(request.id)}\n >\n βœ• Reject\n </button>\n <button\n type=\"button\"\n data-workflow=\"approval-approve\"\n onClick={() => props.onApprove(request.id)}\n >\n βœ“ Approve\n </button>\n </div>\n </motion.div>\n </div>\n )}\n </AnimatePresence>\n );\n}\n","/**\n * @module WorkflowToolbar\n * @package @geenius/ai-workflow-react\n * @description React toolbar for workflow builder actions such as save, run,\n * cancel, undo, redo, and export. This component owns the top-level command\n * surface shared across the builder page.\n */\n\nimport type { ReactElement } from \"react\";\nimport { AnimatePresence, motion } from \"@geenius/motion/react\";\nimport { cn } from \"../lib/cn\";\nimport { cva } from \"../lib/cva\";\n\n/**\n * Props for the workflow toolbar action surface.\n *\n * @property workflowName Human-readable workflow name shown in the title slot.\n * @property isDirty Whether unsaved edits are currently present.\n * @property isRunning Whether a run is currently active.\n * @property canUndo Whether the undo action should be enabled.\n * @property canRedo Whether the redo action should be enabled.\n * @property onSave Callback that persists the current workflow definition.\n * @property onRun Callback that starts a workflow run.\n * @property onCancel Optional callback that stops an in-flight run.\n * @property onUndo Callback that restores the previous builder snapshot.\n * @property onRedo Callback that reapplies the next builder snapshot.\n * @property onExport Optional callback that exports the workflow definition.\n * @property className Optional class-name override for the toolbar container.\n */\nexport interface WorkflowToolbarProps {\n workflowName: string;\n isDirty: boolean;\n isRunning: boolean;\n canUndo: boolean;\n canRedo: boolean;\n onSave: () => void;\n onRun: () => void;\n onCancel?: () => void;\n onUndo: () => void;\n onRedo: () => void;\n onExport?: () => void;\n className?: string;\n}\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center rounded-md px-3 py-2 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40\",\n {\n variants: {\n tone: {\n primary: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n secondary: \"bg-secondary text-foreground hover:bg-secondary/80\",\n danger: \"bg-danger text-primary-foreground hover:bg-danger/90\",\n },\n },\n },\n);\n\n/**\n * Render the builder command toolbar with run-state-aware actions.\n *\n * @param props Action callbacks and builder status flags for the toolbar.\n * @returns The animated workflow toolbar.\n */\nexport function WorkflowToolbar(props: WorkflowToolbarProps): ReactElement {\n return (\n <motion.div\n data-workflow=\"toolbar\"\n className={cn(\"ai-workflow__toolbar\", props.className)}\n role=\"toolbar\"\n aria-label=\"Workflow actions\"\n layout\n >\n <div data-workflow=\"toolbar-left\">\n <motion.h2 data-workflow=\"toolbar-title\" layout=\"position\">\n {props.workflowName}\n </motion.h2>\n <AnimatePresence>\n {props.isDirty && (\n <motion.span\n data-workflow=\"toolbar-dirty\"\n initial={{ scale: 0 }}\n animate={{ scale: 1 }}\n exit={{ scale: 0 }}\n >\n ●\n </motion.span>\n )}\n </AnimatePresence>\n </div>\n <div data-workflow=\"toolbar-center\">\n <button\n data-workflow=\"toolbar-btn\"\n className={buttonVariants({ tone: \"secondary\" })}\n onClick={props.onUndo}\n disabled={!props.canUndo}\n aria-label=\"Undo\"\n title=\"Undo\"\n >\n β†Ά\n </button>\n <button\n data-workflow=\"toolbar-btn\"\n className={buttonVariants({ tone: \"secondary\" })}\n onClick={props.onRedo}\n disabled={!props.canRedo}\n aria-label=\"Redo\"\n title=\"Redo\"\n >\n β†·\n </button>\n </div>\n <div data-workflow=\"toolbar-right\">\n {props.onExport && (\n <button\n data-workflow=\"toolbar-btn-secondary\"\n className={buttonVariants({ tone: \"secondary\" })}\n onClick={props.onExport}\n aria-label=\"Export workflow\"\n >\n πŸ“€ Export\n </button>\n )}\n <button\n data-workflow=\"toolbar-btn-secondary\"\n className={buttonVariants({ tone: \"secondary\" })}\n onClick={props.onSave}\n disabled={!props.isDirty}\n aria-label=\"Save workflow\"\n >\n πŸ’Ύ Save\n </button>\n {props.isRunning ? (\n <motion.button\n layoutId=\"runBtn\"\n data-workflow=\"toolbar-btn-danger\"\n className={buttonVariants({ tone: \"danger\" })}\n onClick={props.onCancel}\n aria-label=\"Stop workflow run\"\n >\n ⏹ Stop\n </motion.button>\n ) : (\n <motion.button\n layoutId=\"runBtn\"\n data-workflow=\"toolbar-btn-primary\"\n className={buttonVariants({ tone: \"primary\" })}\n onClick={props.onRun}\n aria-label=\"Run workflow\"\n >\n β–Ά Run\n </motion.button>\n )}\n </div>\n </motion.div>\n );\n}\n","/**\n * @module WorkflowStepPalette\n * @package @geenius/ai-workflow-react\n * @description React step-catalog component for the workflow builder. This\n * file exposes the package's built-in step taxonomy so builder pages can add\n * steps without duplicating labels, icons, or descriptions.\n */\nimport { motion } from \"@geenius/motion/react\";\nimport type { StepType } from \"@geenius/ai-workflow-shared\";\nimport type { ReactElement } from \"react\";\n\n/**\n * One palette entry describing an addable workflow step type.\n *\n * @property type Shared workflow step discriminant.\n * @property label Human-readable step label.\n * @property icon Emoji icon used in the palette.\n * @property description Short explanation of the step's purpose.\n */\nexport interface StepPaletteItem {\n type: StepType;\n label: string;\n icon: string;\n description: string;\n}\n\nconst PALETTE_ITEMS: StepPaletteItem[] = [\n {\n type: \"llm-call\",\n label: \"LLM Call\",\n icon: \"πŸ€–\",\n description: \"Call an AI model\",\n },\n {\n type: \"transform\",\n label: \"Transform\",\n icon: \"βš™οΈ\",\n description: \"Transform data\",\n },\n {\n type: \"condition\",\n label: \"Condition\",\n icon: \"πŸ”€\",\n description: \"If/else branching\",\n },\n {\n type: \"human-approval\",\n label: \"Approval\",\n icon: \"πŸ‘€\",\n description: \"Human approval gate\",\n },\n {\n type: \"webhook\",\n label: \"Webhook\",\n icon: \"🌐\",\n description: \"HTTP request\",\n },\n {\n type: \"delay\",\n label: \"Delay\",\n icon: \"⏱️\",\n description: \"Wait for duration\",\n },\n {\n type: \"parallel\",\n label: \"Parallel\",\n icon: \"⚑\",\n description: \"Run steps in parallel\",\n },\n {\n type: \"loop\",\n label: \"Loop\",\n icon: \"πŸ”„\",\n description: \"Iterate over items\",\n },\n {\n type: \"sub-workflow\",\n label: \"Sub-workflow\",\n icon: \"πŸ“‹\",\n description: \"Run another workflow\",\n },\n {\n type: \"custom\",\n label: \"Custom\",\n icon: \"πŸ”§\",\n description: \"Custom handler\",\n },\n];\n\n/**\n * Props for the workflow step palette component.\n *\n * @property onAddStep Callback invoked when a step type is selected.\n */\nexport interface StepPaletteProps {\n onAddStep: (type: StepType) => void;\n}\n\n/**\n * Render the workflow step palette.\n *\n * @param props Palette interaction props.\n * @returns A list of available workflow step types.\n */\nexport function StepPalette({ onAddStep }: StepPaletteProps): ReactElement {\n return (\n <div\n data-workflow=\"step-palette\"\n role=\"list\"\n aria-label=\"Available step types\"\n >\n <h3 data-workflow=\"palette-title\">Steps</h3>\n {PALETTE_ITEMS.map((item) => (\n <motion.button\n key={item.type}\n data-workflow=\"palette-item\"\n role=\"listitem\"\n onClick={() => onAddStep(item.type)}\n whileHover={{ scale: 1.02 }}\n whileTap={{ scale: 0.98 }}\n >\n <span data-workflow=\"palette-icon\">{item.icon}</span>\n <div data-workflow=\"palette-info\">\n <span data-workflow=\"palette-label\">{item.label}</span>\n <span data-workflow=\"palette-desc\">{item.description}</span>\n </div>\n </motion.button>\n ))}\n </div>\n );\n}\n","/**\n * @module WorkflowBuilderPage\n * @package @geenius/ai-workflow-react\n * @description React page for composing, editing, and running workflow\n * definitions. This page coordinates the shared engine with the React builder\n * hooks and component surface.\n */\n\nimport { useCallback } from \"react\";\nimport type { ReactElement } from \"react\";\nimport type {\n StepType,\n WorkflowDefinition,\n WorkflowEngineOptions,\n WorkflowStepDef,\n} from \"@geenius/ai-workflow-shared\";\nimport { WorkflowEngine } from \"@geenius/ai-workflow-shared\";\nimport { StepConfigPanel } from \"../components/StepConfigPanel\";\nimport { StepPalette } from \"../components/StepPalette\";\nimport { WorkflowCanvas } from \"../components/WorkflowCanvas\";\nimport { WorkflowRunPanel } from \"../components/WorkflowRunPanel\";\nimport { WorkflowToolbar } from \"../components/WorkflowToolbar\";\nimport { useWorkflowBuilder } from \"../hooks/useWorkflowBuilder\";\nimport { useWorkflowRun } from \"../hooks/useWorkflowRun\";\nimport { cn } from \"../lib/cn\";\n\n/**\n * Props for the React workflow builder page.\n *\n * @property engineOptions Shared workflow engine integrations used for execution.\n * @property onSave Optional callback that persists the edited definition.\n * @property className Optional class name override for outer layout composition.\n * @property workflows Optional list of stored workflows shown in the summary strip.\n * @property workflowRuns Optional list of stored workflow runs shown in the summary strip.\n */\nexport interface WorkflowBuilderPageProps {\n engineOptions: WorkflowEngineOptions;\n onSave?: (definition: WorkflowDefinition) => void;\n className?: string;\n workflows?: Array<{ _id: string; name: string }>;\n workflowRuns?: Array<{ _id: string; workflowId: string }>;\n}\n\n/**\n * Create a default config object for a newly inserted step type.\n *\n * @param type Step discriminant selected from the palette.\n * @returns The default config payload for the new step.\n */\nfunction createStepConfig(type: StepType): WorkflowStepDef[\"config\"] {\n switch (type) {\n case \"llm-call\":\n return {\n type,\n systemPrompt: \"\",\n userPromptTemplate: \"\",\n outputVar: \"result\",\n };\n case \"transform\":\n return { type, expression: \"\", inputVars: [], outputVar: \"result\" };\n case \"condition\":\n return { type, expression: \"\", trueStepId: \"\", falseStepId: \"\" };\n case \"human-approval\":\n return { type, message: \"\" };\n case \"webhook\":\n return { type, url: \"\", method: \"POST\", outputVar: \"result\" };\n case \"delay\":\n return { type, durationMs: 0 };\n case \"parallel\":\n return { type, stepIds: [], failurePolicy: \"continue\" };\n case \"loop\":\n return {\n type,\n stepIds: [],\n iterateVar: \"\",\n itemVar: \"\",\n maxIterations: 1,\n };\n case \"sub-workflow\":\n return { type, workflowId: \"\", inputMapping: {}, outputVar: \"result\" };\n case \"custom\":\n return { type, handler: \"custom\", params: {}, outputVar: \"result\" };\n }\n}\n\n/**\n * Render the full workflow builder page for React consumers.\n *\n * @param props Builder dependencies, persistence callbacks, and optional summaries.\n * @returns The composed workflow builder page.\n */\nexport function WorkflowBuilderPage({\n engineOptions,\n onSave,\n className,\n workflows,\n workflowRuns,\n}: WorkflowBuilderPageProps): ReactElement {\n const builder = useWorkflowBuilder();\n const runTracker = useWorkflowRun();\n const workflowCount = workflows?.length ?? 0;\n const runCount = workflowRuns?.length ?? 0;\n\n const handleAddStep = useCallback((type: StepType): void => {\n const id = `step_${Date.now()}_${Math.random().toString(36).slice(2, 6)}`;\n const step: WorkflowStepDef = {\n id,\n name: `New ${type} step`,\n type,\n config: createStepConfig(type),\n position: { x: 100 + builder.definition.steps.length * 250, y: 200 },\n };\n\n builder.addStep(step);\n }, [builder]);\n\n const handleRun = useCallback(async (): Promise<void> => {\n const engine = new WorkflowEngine({\n ...engineOptions,\n onStepComplete: (result) => {\n runTracker.updateStep(result);\n },\n });\n\n const result = await engine.execute(builder.definition);\n runTracker.trackRun(result);\n }, [builder.definition, engineOptions, runTracker]);\n\n return (\n <div data-workflow=\"builder-page\" className={cn(\"ai-workflow__builder-page\", className)}>\n <div data-workflow=\"builder-summary\">\n <span data-workflow=\"builder-workflow-count\">\n {workflowCount} workflows\n </span>\n <span data-workflow=\"builder-run-count\">{runCount} runs</span>\n </div>\n <WorkflowToolbar\n workflowName={builder.definition.name}\n isDirty={builder.isDirty}\n isRunning={runTracker.isRunning}\n canUndo={builder.canUndo}\n canRedo={builder.canRedo}\n onSave={() => onSave?.(builder.definition)}\n onRun={handleRun}\n onUndo={builder.undo}\n onRedo={builder.redo}\n />\n <div data-workflow=\"builder-layout\" className=\"ai-workflow__builder-layout\">\n <StepPalette onAddStep={handleAddStep} />\n <WorkflowCanvas\n definition={builder.definition}\n selectedStepId={builder.selectedStepId}\n onSelectStep={builder.selectStep}\n />\n {builder.selectedStepId && (() => {\n const step =\n builder.definition.steps.find((item) => item.id === builder.selectedStepId) ??\n null;\n\n return step ? (\n <StepConfigPanel\n step={step}\n onUpdate={builder.updateStep}\n onDelete={builder.removeStep}\n onClose={() => builder.selectStep(null)}\n />\n ) : null;\n })()}\n {runTracker.run ? (\n <WorkflowRunPanel\n run={runTracker.run}\n isRunning={runTracker.isRunning}\n />\n ) : null}\n </div>\n </div>\n );\n}\n","/**\n * @module WorkflowRunsPage\n * @package @geenius/ai-workflow-react\n * @description React page component for browsing workflow execution history in\n * the Tailwind workflow variant.\n */\n\nimport type { ReactElement } from \"react\";\nimport type { WorkflowRun } from '@geenius/ai-workflow-shared'\nimport { cn } from '../lib/cn'\n\n/**\n * Props for the workflow runs history page.\n *\n * @property runs Workflow run records rendered on the page.\n * @property onSelectRun Optional callback fired when a run card is selected.\n * @property className Optional class-name override for the page container.\n */\nexport interface WorkflowRunsPageProps {\n runs: WorkflowRun[]\n onSelectRun?: (runId: string) => void\n className?: string\n}\n\nconst STATUS_ICONS: Record<string, string> = {\n pending: '⏳', running: 'πŸ”„', completed: 'βœ…', failed: '❌', cancelled: 'β›”', paused: '⏸️',\n}\n\n/**\n * Render the workflow run history page.\n *\n * @param props Workflow run records plus optional selection and layout hooks.\n * @returns The workflow run history page.\n */\nexport function WorkflowRunsPage({ runs, onSelectRun, className }: WorkflowRunsPageProps): ReactElement {\n return (\n <div data-workflow=\"runs-page\" className={cn('ai-workflow__runs-page', className)}>\n <div data-workflow=\"runs-header\">\n <h1 data-workflow=\"runs-title\">Workflow Runs</h1>\n <span data-workflow=\"runs-count\">{runs.length} runs</span>\n </div>\n {runs.length === 0 ? (\n <div data-workflow=\"runs-empty\">\n <p>No workflow runs yet. Execute a workflow to see results here.</p>\n </div>\n ) : (\n <div data-workflow=\"runs-list\" role=\"list\">\n {runs.map(run => {\n const completedSteps = run.stepResults.filter(s => s.status === 'completed').length\n const totalSteps = run.stepResults.length\n const duration = (run.completedAt ?? Date.now()) - run.startedAt\n return (\n <div\n key={run.id}\n data-workflow=\"run-card\"\n data-status={run.status}\n role=\"listitem\"\n onClick={() => onSelectRun?.(run.id)}\n tabIndex={0}\n onKeyDown={(e) => { if (e.key === 'Enter') onSelectRun?.(run.id) }}\n >\n <div data-workflow=\"run-card-header\">\n <span data-workflow=\"run-card-status\">\n {STATUS_ICONS[run.status]} {run.status}\n </span>\n <span data-workflow=\"run-card-id\">{run.id.slice(0, 8)}…</span>\n </div>\n <div data-workflow=\"run-card-meta\">\n <span data-workflow=\"run-card-steps\">{completedSteps}/{totalSteps} steps</span>\n <span data-workflow=\"run-card-duration\">{(duration / 1000).toFixed(1)}s</span>\n <span data-workflow=\"run-card-date\">{new Date(run.startedAt).toLocaleString()}</span>\n </div>\n {run.error && <p data-workflow=\"run-card-error\">{run.error}</p>}\n </div>\n )\n })}\n </div>\n )}\n </div>\n )\n}\n"]}