@geenius/ai-workflow 0.1.0 → 0.5.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.
- package/CHANGELOG.md +13 -0
- package/README.md +69 -1
- package/package.json +60 -27
- package/packages/convex/dist/index.d.ts +363 -0
- package/packages/convex/dist/index.js +200 -0
- package/packages/convex/dist/index.js.map +1 -0
- package/packages/react/dist/index.d.ts +514 -0
- package/packages/react/dist/index.js +2633 -0
- package/packages/react/dist/index.js.map +1 -0
- package/packages/react-css/{src/styles.css → dist/index.css} +107 -253
- package/packages/react-css/dist/index.css.map +1 -0
- package/packages/react-css/dist/index.d.ts +533 -0
- package/packages/react-css/dist/index.js +2620 -0
- package/packages/react-css/dist/index.js.map +1 -0
- package/packages/shared/dist/index.d.ts +1305 -0
- package/packages/shared/dist/index.js +1594 -0
- package/packages/shared/dist/index.js.map +1 -0
- package/packages/solidjs/dist/index.d.ts +492 -0
- package/packages/solidjs/dist/index.js +2552 -0
- package/packages/solidjs/dist/index.js.map +1 -0
- package/packages/solidjs-css/{src/styles.css → dist/index.css} +107 -253
- package/packages/solidjs-css/dist/index.css.map +1 -0
- package/packages/solidjs-css/dist/index.d.ts +509 -0
- package/packages/solidjs-css/dist/index.js +2493 -0
- package/packages/solidjs-css/dist/index.js.map +1 -0
- package/.changeset/config.json +0 -11
- package/.github/CODEOWNERS +0 -1
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -16
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -11
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -10
- package/.github/dependabot.yml +0 -11
- package/.github/workflows/ci.yml +0 -23
- package/.github/workflows/release.yml +0 -29
- package/.nvmrc +0 -1
- package/.project/ACCOUNT.yaml +0 -4
- package/.project/IDEAS.yaml +0 -7
- package/.project/PROJECT.yaml +0 -11
- package/.project/ROADMAP.yaml +0 -15
- package/CODE_OF_CONDUCT.md +0 -16
- package/CONTRIBUTING.md +0 -26
- package/SECURITY.md +0 -15
- package/SUPPORT.md +0 -8
- package/packages/convex/README.md +0 -1
- package/packages/convex/package.json +0 -12
- package/packages/convex/src/convex.config.ts +0 -3
- package/packages/convex/src/index.ts +0 -3
- package/packages/convex/src/mutations.ts +0 -36
- package/packages/convex/src/queries.ts +0 -19
- package/packages/convex/src/schema.ts +0 -24
- package/packages/convex/tsconfig.json +0 -25
- package/packages/react/README.md +0 -1
- package/packages/react/package.json +0 -46
- package/packages/react/src/components/ApprovalModal.tsx +0 -47
- package/packages/react/src/components/StepConfigPanel.tsx +0 -67
- package/packages/react/src/components/StepConnector.tsx +0 -47
- package/packages/react/src/components/StepNode.tsx +0 -38
- package/packages/react/src/components/StepPalette.tsx +0 -48
- package/packages/react/src/components/WorkflowCanvas.tsx +0 -42
- package/packages/react/src/components/WorkflowRunPanel.tsx +0 -64
- package/packages/react/src/components/WorkflowToolbar.tsx +0 -43
- package/packages/react/src/components/index.ts +0 -9
- package/packages/react/src/hooks/index.ts +0 -10
- package/packages/react/src/hooks/useApprovalGate.ts +0 -59
- package/packages/react/src/hooks/useWorkflow.ts +0 -39
- package/packages/react/src/hooks/useWorkflowBuilder.ts +0 -121
- package/packages/react/src/hooks/useWorkflowRun.ts +0 -75
- package/packages/react/src/hooks/useWorkflowStep.ts +0 -52
- package/packages/react/src/hooks/useWorkflowTemplates.ts +0 -54
- package/packages/react/src/index.ts +0 -16
- package/packages/react/src/pages/WorkflowBuilderPage.tsx +0 -81
- package/packages/react/src/pages/WorkflowRunsPage.tsx +0 -59
- package/packages/react/src/pages/index.ts +0 -3
- package/packages/react/tsconfig.json +0 -1
- package/packages/react/tsup.config.ts +0 -7
- package/packages/react-css/README.md +0 -1
- package/packages/react-css/package.json +0 -44
- package/packages/react-css/src/components/ApprovalModal.tsx +0 -6
- package/packages/react-css/src/components/StepConfigPanel.tsx +0 -7
- package/packages/react-css/src/components/StepConnector.tsx +0 -6
- package/packages/react-css/src/components/StepNode.tsx +0 -7
- package/packages/react-css/src/components/StepPalette.tsx +0 -6
- package/packages/react-css/src/components/WorkflowCanvas.tsx +0 -6
- package/packages/react-css/src/components/WorkflowRunPanel.tsx +0 -9
- package/packages/react-css/src/components/WorkflowToolbar.tsx +0 -4
- package/packages/react-css/src/components/index.ts +0 -9
- package/packages/react-css/src/hooks/index.ts +0 -3
- package/packages/react-css/src/hooks/useWorkflow.ts +0 -39
- package/packages/react-css/src/hooks/useWorkflowBuilder.ts +0 -121
- package/packages/react-css/src/index.ts +0 -7
- package/packages/react-css/src/pages/WorkflowBuilderPage.tsx +0 -16
- package/packages/react-css/src/pages/WorkflowRunsPage.tsx +0 -6
- package/packages/react-css/src/pages/index.ts +0 -3
- package/packages/react-css/tsconfig.json +0 -26
- package/packages/react-css/tsup.config.ts +0 -2
- package/packages/shared/README.md +0 -1
- package/packages/shared/package.json +0 -56
- package/packages/shared/src/__tests__/ai-workflow.test.ts +0 -217
- package/packages/shared/src/config.ts +0 -49
- package/packages/shared/src/convex/index.ts +0 -2
- package/packages/shared/src/convex/schemas.ts +0 -42
- package/packages/shared/src/engine.test.ts +0 -1
- package/packages/shared/src/engine.ts +0 -295
- package/packages/shared/src/index.ts +0 -43
- package/packages/shared/src/steps.ts +0 -68
- package/packages/shared/src/templates.ts +0 -172
- package/packages/shared/src/types.ts +0 -237
- package/packages/shared/src/utils/cost.ts +0 -79
- package/packages/shared/src/utils/dag.ts +0 -133
- package/packages/shared/src/utils/index.ts +0 -5
- package/packages/shared/src/utils/interpolation.ts +0 -53
- package/packages/shared/src/validators.ts +0 -215
- package/packages/shared/tsconfig.json +0 -1
- package/packages/shared/tsup.config.ts +0 -5
- package/packages/shared/vitest.config.ts +0 -4
- package/packages/solidjs/README.md +0 -1
- package/packages/solidjs/package.json +0 -45
- package/packages/solidjs/src/components/ApprovalModal.tsx +0 -18
- package/packages/solidjs/src/components/StepConfigPanel.tsx +0 -14
- package/packages/solidjs/src/components/StepConnector.tsx +0 -11
- package/packages/solidjs/src/components/StepNode.tsx +0 -12
- package/packages/solidjs/src/components/StepPalette.tsx +0 -22
- package/packages/solidjs/src/components/WorkflowCanvas.tsx +0 -23
- package/packages/solidjs/src/components/WorkflowRunPanel.tsx +0 -18
- package/packages/solidjs/src/components/WorkflowToolbar.tsx +0 -13
- package/packages/solidjs/src/components/index.ts +0 -9
- package/packages/solidjs/src/index.ts +0 -7
- package/packages/solidjs/src/pages/WorkflowBuilderPage.tsx +0 -37
- package/packages/solidjs/src/pages/WorkflowRunsPage.tsx +0 -20
- package/packages/solidjs/src/pages/index.ts +0 -3
- package/packages/solidjs/src/primitives/createApprovalGate.ts +0 -29
- package/packages/solidjs/src/primitives/createWorkflow.ts +0 -28
- package/packages/solidjs/src/primitives/createWorkflowBuilder.ts +0 -56
- package/packages/solidjs/src/primitives/createWorkflowRun.ts +0 -32
- package/packages/solidjs/src/primitives/createWorkflowStep.ts +0 -23
- package/packages/solidjs/src/primitives/createWorkflowTemplates.ts +0 -28
- package/packages/solidjs/src/primitives/index.ts +0 -8
- package/packages/solidjs/tsconfig.json +0 -1
- package/packages/solidjs/tsup.config.ts +0 -7
- package/packages/solidjs-css/README.md +0 -1
- package/packages/solidjs-css/package.json +0 -43
- package/packages/solidjs-css/src/components/ApprovalModal.tsx +0 -6
- package/packages/solidjs-css/src/components/StepConfigPanel.tsx +0 -7
- package/packages/solidjs-css/src/components/StepConnector.tsx +0 -6
- package/packages/solidjs-css/src/components/StepNode.tsx +0 -7
- package/packages/solidjs-css/src/components/StepPalette.tsx +0 -7
- package/packages/solidjs-css/src/components/WorkflowCanvas.tsx +0 -7
- package/packages/solidjs-css/src/components/WorkflowRunPanel.tsx +0 -8
- package/packages/solidjs-css/src/components/WorkflowToolbar.tsx +0 -5
- package/packages/solidjs-css/src/components/index.ts +0 -9
- package/packages/solidjs-css/src/index.ts +0 -7
- package/packages/solidjs-css/src/pages/WorkflowBuilderPage.tsx +0 -2
- package/packages/solidjs-css/src/pages/WorkflowRunsPage.tsx +0 -7
- package/packages/solidjs-css/src/pages/index.ts +0 -3
- package/packages/solidjs-css/src/primitives/createWorkflow.ts +0 -28
- package/packages/solidjs-css/src/primitives/createWorkflowBuilder.ts +0 -56
- package/packages/solidjs-css/src/primitives/index.ts +0 -1
- package/packages/solidjs-css/tsconfig.json +0 -27
- package/packages/solidjs-css/tsup.config.ts +0 -2
- package/pnpm-workspace.yaml +0 -2
|
@@ -0,0 +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/useApprovalGate.ts","../src/hooks/useWorkflow.ts","../src/hooks/useWorkflowBuilder.ts","../src/hooks/useWorkflowRun.ts","../src/hooks/useWorkflowStep.ts","../src/hooks/useWorkflowTemplates.ts","../src/components/StepConnector.tsx","../src/utils/cx.ts","../src/components/StepNode.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","useRef","useEffect","result","SI"],"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 CssUseApprovalGate\n * @package @geenius/ai-workflow-react-css\n * @description React hook for managing pending approval requests in the\n * plain-CSS workflow variant. This keeps request state local to the CSS\n * surface without depending on the Tailwind hook package.\n */\n\nimport { useCallback, useState } from \"react\";\n\n/**\n * Pending human approval request tracked by the plain-CSS hook.\n *\n * @property id Stable approval request identifier.\n * @property stepId Related workflow step identifier.\n * @property message Approval prompt shown to operators.\n * @property requestedAt Unix timestamp when approval was requested.\n * @property approvers Optional list of approvers or approver groups.\n */\nexport interface ApprovalRequest {\n id: string;\n stepId: string;\n message: string;\n requestedAt: number;\n approvers?: string[];\n}\n\ninterface ApprovalHistoryEntry extends ApprovalRequest {\n decision: \"approved\" | \"rejected\";\n decidedAt: number;\n}\n\ninterface UseApprovalGateResult {\n pendingApprovals: ApprovalRequest[];\n history: ApprovalHistoryEntry[];\n hasPending: boolean;\n requestApproval: (\n stepId: string,\n message: string,\n approvers?: string[],\n ) => string;\n approve: (approvalId: string) => void;\n reject: (approvalId: string) => void;\n clearHistory: () => void;\n}\n\n/**\n * Track pending approval requests and approval history in React state.\n *\n * @returns Approval request state, mutation helpers, and derived flags.\n */\nexport function useApprovalGate(): UseApprovalGateResult {\n const [pendingApprovals, setPendingApprovals] = useState<ApprovalRequest[]>(\n [],\n );\n const [history, setHistory] = useState<ApprovalHistoryEntry[]>([]);\n\n const requestApproval = useCallback(\n (stepId: string, message: string, approvers?: string[]): 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\n setPendingApprovals((current) => [...current, request]);\n return request.id;\n },\n [],\n );\n\n const approve = useCallback((approvalId: string): void => {\n setPendingApprovals((current) => {\n const request = current.find((item) => item.id === approvalId);\n\n if (request) {\n setHistory((entries) => [\n ...entries,\n { ...request, decision: \"approved\", decidedAt: Date.now() },\n ]);\n }\n\n return current.filter((item) => item.id !== approvalId);\n });\n }, []);\n\n const reject = useCallback((approvalId: string): void => {\n setPendingApprovals((current) => {\n const request = current.find((item) => item.id === approvalId);\n\n if (request) {\n setHistory((entries) => [\n ...entries,\n { ...request, decision: \"rejected\", decidedAt: Date.now() },\n ]);\n }\n\n return current.filter((item) => item.id !== approvalId);\n });\n }, []);\n\n const clearHistory = useCallback((): void => {\n setHistory([]);\n }, []);\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 CssUseWorkflow\n * @package @geenius/ai-workflow-react-css\n * @description React hook for executing workflow definitions with the shared\n * workflow engine in the plain-CSS variant.\n */\n\nimport { useCallback, useState } 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 plain-CSS 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\ninterface 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 the plain-CSS React surface.\n *\n * @param options Runtime integrations and callbacks for the shared 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<boolean>(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((current) => [...current, result]);\n options.onStepComplete?.(result);\n },\n });\n\n const execute = useCallback(\n async (\n definition: WorkflowDefinition,\n input?: Record<string, unknown>,\n ): Promise<WorkflowRun> => {\n setIsRunning(true);\n setError(null);\n setStepResults([]);\n\n try {\n const result = await engine.execute(definition, input);\n setRun(result);\n return result;\n } catch (caughtError) {\n const normalizedError = normalizeWorkflowError(\n caughtError,\n \"Workflow execution failed.\",\n { workflowId: definition.id },\n );\n\n setError(normalizedError);\n throw normalizedError;\n } finally {\n setIsRunning(false);\n }\n },\n [],\n );\n\n const cancel = useCallback((): void => {\n engine.cancel();\n }, []);\n\n const reset = useCallback((): void => {\n setRun(null);\n setError(null);\n setStepResults([]);\n }, []);\n\n return {\n execute,\n cancel,\n run,\n isRunning,\n error,\n stepResults,\n reset,\n };\n}\n","/**\n * @module CssUseWorkflowBuilder\n * @package @geenius/ai-workflow-react-css\n * @description React hook for building workflow definitions in the plain-CSS\n * variant. It tracks selection, dirty state, and undo/redo history.\n */\n\nimport { useCallback, useState } from \"react\";\nimport type {\n StepConnection,\n WorkflowBuilderState,\n WorkflowDefinition,\n WorkflowStepDef,\n} from \"@geenius/ai-workflow-shared\";\n\ninterface UseWorkflowBuilderResult {\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: (connection: StepConnection) => void;\n removeConnection: (fromStepId: string, toStepId: string) => void;\n selectStep: (stepId: string | null) => void;\n undo: () => void;\n redo: () => void;\n setDefinition: (definition: WorkflowDefinition) => void;\n}\n\n/**\n * Create the default empty workflow definition for builder initialization.\n *\n * @returns A new empty workflow definition with generated identifiers and timestamps.\n */\nfunction createEmptyDefinition(): WorkflowDefinition {\n return {\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/**\n * Manage workflow builder state for the plain-CSS React surface.\n *\n * @param initial Optional initial workflow definition overrides.\n * @returns Builder state, history controls, and mutation helpers.\n */\nexport function useWorkflowBuilder(\n initial?: Partial<WorkflowDefinition>,\n): UseWorkflowBuilderResult {\n const [state, setState] = useState<WorkflowBuilderState>({\n definition: { ...createEmptyDefinition(), ...initial },\n selectedStepId: null,\n isDirty: false,\n undoStack: [],\n redoStack: [],\n });\n\n const pushUndo = useCallback((): void => {\n setState((current) => ({\n ...current,\n undoStack: [...current.undoStack.slice(-20), current.definition],\n redoStack: [],\n }));\n }, []);\n\n const addStep = useCallback(\n (step: WorkflowStepDef): void => {\n pushUndo();\n setState((current) => ({\n ...current,\n isDirty: true,\n definition: {\n ...current.definition,\n steps: [...current.definition.steps, step],\n updatedAt: Date.now(),\n },\n }));\n },\n [pushUndo],\n );\n\n const removeStep = useCallback(\n (stepId: string): void => {\n pushUndo();\n setState((current) => ({\n ...current,\n isDirty: true,\n definition: {\n ...current.definition,\n steps: current.definition.steps.filter((step) => step.id !== stepId),\n connections: current.definition.connections.filter(\n (connection) =>\n connection.fromStepId !== stepId && connection.toStepId !== stepId,\n ),\n updatedAt: Date.now(),\n },\n selectedStepId:\n current.selectedStepId === stepId ? null : current.selectedStepId,\n }));\n },\n [pushUndo],\n );\n\n const updateStep = useCallback(\n (stepId: string, updates: Partial<WorkflowStepDef>): void => {\n pushUndo();\n setState((current) => ({\n ...current,\n isDirty: true,\n definition: {\n ...current.definition,\n steps: current.definition.steps.map((step) =>\n step.id === stepId ? { ...step, ...updates } : step,\n ),\n updatedAt: Date.now(),\n },\n }));\n },\n [pushUndo],\n );\n\n const addConnection = useCallback(\n (connection: StepConnection): void => {\n pushUndo();\n setState((current) => ({\n ...current,\n isDirty: true,\n definition: {\n ...current.definition,\n connections: [...current.definition.connections, connection],\n updatedAt: Date.now(),\n },\n }));\n },\n [pushUndo],\n );\n\n const removeConnection = useCallback(\n (fromStepId: string, toStepId: string): void => {\n pushUndo();\n setState((current) => ({\n ...current,\n isDirty: true,\n definition: {\n ...current.definition,\n connections: current.definition.connections.filter(\n (connection) =>\n !(\n connection.fromStepId === fromStepId &&\n connection.toStepId === toStepId\n ),\n ),\n updatedAt: Date.now(),\n },\n }));\n },\n [pushUndo],\n );\n\n const selectStep = useCallback((stepId: string | null): void => {\n setState((current) => ({ ...current, selectedStepId: stepId }));\n }, []);\n\n const undo = useCallback((): void => {\n setState((current) => {\n if (current.undoStack.length === 0) {\n return current;\n }\n\n const previousDefinition =\n current.undoStack[current.undoStack.length - 1];\n\n return {\n ...current,\n definition: previousDefinition,\n undoStack: current.undoStack.slice(0, -1),\n redoStack: [current.definition, ...current.redoStack],\n };\n });\n }, []);\n\n const redo = useCallback((): void => {\n setState((current) => {\n if (current.redoStack.length === 0) {\n return current;\n }\n\n const nextDefinition = current.redoStack[0];\n\n return {\n ...current,\n definition: nextDefinition,\n undoStack: [...current.undoStack, current.definition],\n redoStack: current.redoStack.slice(1),\n };\n });\n }, []);\n\n const setDefinition = useCallback((definition: WorkflowDefinition): void => {\n setState((current) => ({\n ...current,\n definition,\n isDirty: false,\n undoStack: [],\n redoStack: [],\n }));\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,\n removeStep,\n updateStep,\n addConnection,\n removeConnection,\n selectStep,\n undo,\n redo,\n setDefinition,\n };\n}\n","/**\n * @module CssUseWorkflowRun\n * @package @geenius/ai-workflow-react-css\n * @description React hook for tracking workflow execution progress in the\n * plain-CSS workflow variant.\n */\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type {\n RunStatus,\n StepResult,\n WorkflowRun,\n} from \"@geenius/ai-workflow-shared\";\n\n/**\n * Options for tracking workflow run progress in React state.\n *\n * @property pollIntervalMs Reserved polling interval for future remote sync.\n * @property onStepComplete Optional callback fired when a step result is tracked.\n * @property onRunComplete Optional callback fired when a run finishes.\n */\nexport interface UseWorkflowRunOptions {\n pollIntervalMs?: number;\n onStepComplete?: (result: StepResult) => void;\n onRunComplete?: (run: WorkflowRun) => void;\n}\n\ninterface UseWorkflowRunResult {\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\n/**\n * Track one workflow run and derive progress-oriented state for UI surfaces.\n *\n * @param options Optional lifecycle callbacks for step and run completion.\n * @returns Tracked run state, progress values, and mutation helpers.\n */\nexport function useWorkflowRun(\n options: UseWorkflowRunOptions = {},\n): UseWorkflowRunResult {\n const [run, setRun] = useState<WorkflowRun | null>(null);\n const [currentStepIndex, setCurrentStepIndex] = useState<number>(0);\n const [completedSteps, setCompletedSteps] = useState<StepResult[]>([]);\n const [status, setStatus] = useState<RunStatus>(\"pending\");\n const [progress, setProgress] = useState<number>(0);\n const [error, setError] = useState<string | null>(null);\n const timerRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n const trackRun = useCallback(\n (workflowRun: WorkflowRun): void => {\n setRun(workflowRun);\n setStatus(workflowRun.status);\n setCurrentStepIndex(workflowRun.currentStepIndex);\n setCompletedSteps(workflowRun.stepResults);\n setError(workflowRun.error ?? null);\n\n const totalSteps = workflowRun.stepResults.length;\n const completedCount = workflowRun.stepResults.filter(\n (step) => step.status === \"completed\" || step.status === \"skipped\",\n ).length;\n\n setProgress(\n totalSteps > 0 ? Math.round((completedCount / totalSteps) * 100) : 0,\n );\n\n if (\n workflowRun.status === \"completed\" ||\n workflowRun.status === \"failed\"\n ) {\n options.onRunComplete?.(workflowRun);\n }\n },\n [options.onRunComplete],\n );\n\n const updateStep = useCallback(\n (result: StepResult): void => {\n setCompletedSteps((current) => {\n const existingIndex = current.findIndex(\n (step) => step.stepId === result.stepId,\n );\n\n if (existingIndex >= 0) {\n const updatedSteps = [...current];\n updatedSteps[existingIndex] = result;\n return updatedSteps;\n }\n\n return [...current, result];\n });\n\n setCurrentStepIndex((current) => current + 1);\n options.onStepComplete?.(result);\n },\n [options.onStepComplete],\n );\n\n const reset = useCallback((): void => {\n setRun(null);\n setCurrentStepIndex(0);\n setCompletedSteps([]);\n setStatus(\"pending\");\n setProgress(0);\n setError(null);\n\n if (timerRef.current) {\n clearInterval(timerRef.current);\n }\n }, []);\n\n useEffect(() => {\n return () => {\n if (timerRef.current) {\n clearInterval(timerRef.current);\n }\n };\n }, []);\n\n return {\n run,\n status,\n currentStepIndex,\n completedSteps,\n progress,\n error,\n trackRun,\n updateStep,\n reset,\n isRunning: status === \"running\",\n isComplete: status === \"completed\",\n isFailed: status === \"failed\",\n };\n}\n","/**\n * @module CssUseWorkflowStep\n * @package @geenius/ai-workflow-react-css\n * @description React hook for tracking a single workflow step within the\n * plain-CSS 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 one workflow step result and derive presentation metadata.\n *\n * @param stepDef Shared workflow step definition to observe.\n * @returns Step status, derived visuals, and mutation helpers.\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 CssUseWorkflowTemplates\n * @package @geenius/ai-workflow-react-css\n * @description React hook for filtering and instantiating shared workflow\n * templates in the plain-CSS workflow surface.\n */\n\nimport { useCallback, useMemo, useState } from \"react\";\nimport type { WorkflowDefinition } from \"@geenius/ai-workflow-shared\";\nimport {\n WORKFLOW_TEMPLATES,\n getTemplate,\n getTemplatesByCategory,\n} from \"@geenius/ai-workflow-shared\";\nimport type { WorkflowTemplate } from \"@geenius/ai-workflow-shared\";\n\ninterface UseWorkflowTemplatesResult {\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: (templateId: string | null) => void;\n setFilterCategory: (category: WorkflowTemplate[\"category\"] | \"all\") => void;\n setSearchQuery: (query: string) => void;\n createFromTemplate: (templateId: string) => WorkflowDefinition | null;\n}\n\n/**\n * Filter and instantiate workflow templates for the plain-CSS React surface.\n *\n * @param userId Creator identifier injected into new workflow definitions.\n * @returns Filtered templates, selection state, and creation helpers.\n */\nexport function useWorkflowTemplates(\n userId: string,\n): UseWorkflowTemplatesResult {\n const [selectedTemplateId, setSelectedTemplateId] = useState<string | null>(\n null,\n );\n const [filterCategory, setFilterCategory] = useState<\n WorkflowTemplate[\"category\"] | \"all\"\n >(\"all\");\n const [searchQuery, setSearchQuery] = useState<string>(\"\");\n\n const filteredTemplates = useMemo((): WorkflowTemplate[] => {\n let templates =\n filterCategory === \"all\"\n ? WORKFLOW_TEMPLATES\n : getTemplatesByCategory(filterCategory);\n\n if (searchQuery.trim()) {\n const normalizedQuery = searchQuery.toLowerCase();\n templates = templates.filter(\n (template) =>\n template.name.toLowerCase().includes(normalizedQuery) ||\n template.description.toLowerCase().includes(normalizedQuery) ||\n template.tags.some((tag) => tag.includes(normalizedQuery)),\n );\n }\n\n return templates;\n }, [filterCategory, searchQuery]);\n\n const selectedTemplate = useMemo((): WorkflowTemplate | null => {\n return selectedTemplateId ? getTemplate(selectedTemplateId) ?? null : null;\n }, [selectedTemplateId]);\n\n const createFromTemplate = useCallback(\n (templateId: string): WorkflowDefinition | null => {\n const template = getTemplate(templateId);\n return template ? template.create(userId) : null;\n },\n [userId],\n );\n\n const categories = useMemo((): WorkflowTemplate[\"category\"][] => {\n return [...new Set(WORKFLOW_TEMPLATES.map((template) => template.category))];\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 CssWorkflowStepConnector\n * @package @geenius/ai-workflow-react-css\n * @description SVG connector primitive for drawing directed edges between\n * positioned workflow steps in the plain-CSS 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(props: StepConnectorProps): ReactElement {\n const startX = props.from.x + NODE_WIDTH;\n const startY = props.from.y + NODE_HEIGHT / 2;\n const endX = props.to.x;\n const endY = props.to.y + NODE_HEIGHT / 2;\n const midX = (startX + endX) / 2;\n\n return (\n <g className=\"ai-workflow__connector\">\n <path\n d={`M ${startX} ${startY} C ${midX} ${startY}, ${midX} ${endY}, ${endX} ${endY}`}\n fill=\"none\"\n stroke={props.isActive ? \"var(--primary)\" : \"var(--border)\"}\n strokeWidth={props.isActive ? 3 : 2}\n />\n {props.label && (\n <text\n x={midX}\n y={(startY + endY) / 2 - 8}\n textAnchor=\"middle\"\n fill=\"var(--muted-foreground)\"\n fontSize=\"12\"\n >\n {props.label}\n </text>\n )}\n </g>\n );\n}\n","/**\n * @module WorkflowReactCssClassNames\n * @package @geenius/ai-workflow-react-css\n * @description Minimal class-name composition utility used by the standalone\n * vanilla-CSS React 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 cx(...classes: Array<string | false | null | undefined>): string {\n return classes.filter(Boolean).join(' ')\n}\n","/**\n * @module CssStepNode\n * @package @geenius/ai-workflow-react-css\n * @description Plain-CSS React workflow step node used by the builder canvas.\n * This component mirrors the interactive affordances of the Tailwind variant\n * while keeping styling in the CSS bundle.\n */\n\nimport type { WorkflowStepDef, StepType } from \"@geenius/ai-workflow-shared\";\nimport type { ReactElement } from \"react\";\nimport { cx } from \"../utils/cx\";\n\nconst 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 the plain-CSS workflow step node.\n *\n * @property step Shared workflow step definition to render.\n * @property isSelected Whether the node is currently selected.\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 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\n/**\n * Render one plain-CSS workflow step node.\n *\n * @param props Step node rendering props.\n * @returns A keyboard-accessible workflow step node.\n */\nexport function StepNode(props: StepNodeProps): ReactElement {\n const cls = cx(\n \"ai-workflow__step-node\",\n props.isSelected && \"ai-workflow__step-node--selected\",\n props.status && `ai-workflow__step-node--${props.status}`,\n );\n return (\n <div\n className={cx(cls, \"ai-workflow__focus-visible\", props.className)}\n role=\"button\"\n tabIndex={0}\n aria-label={`Workflow step ${props.step.name}`}\n aria-pressed={props.isSelected}\n onClick={props.onClick}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n props.onClick?.();\n }\n }}\n style={\n props.step.position\n ? {\n position: \"absolute\",\n left: props.step.position.x,\n top: props.step.position.y,\n }\n : undefined\n }\n >\n <div className=\"ai-workflow__step-header\">\n <span className=\"ai-workflow__step-icon\">{ICONS[props.step.type]}</span>\n <span className=\"ai-workflow__step-name\">{props.step.name}</span>\n </div>\n <div className=\"ai-workflow__step-type-badge\">{props.step.type}</div>\n {props.step.optional && (\n <span className=\"ai-workflow__step-optional-badge\">Optional</span>\n )}\n {props.step.retries && (\n <span className=\"ai-workflow__step-retry-badge\">\n ↻ {props.step.retries.maxAttempts}\n </span>\n )}\n </div>\n );\n}\n","/**\n * @module CssWorkflowCanvas\n * @package @geenius/ai-workflow-react-css\n * @description Plain-CSS React workflow canvas that renders positioned steps\n * and the connectors between them for the builder surface.\n */\n\nimport type { ReactElement } from \"react\";\nimport type { WorkflowDefinition } from \"@geenius/ai-workflow-shared\";\nimport { StepConnector } from \"./StepConnector\";\nimport { StepNode } from \"./StepNode\";\n\n/**\n * Props for the workflow canvas component.\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 the builder canvas with positioned steps and connection lines.\n *\n * @param props Workflow definition plus selection state and click handler.\n * @returns The plain-CSS workflow canvas.\n */\nexport function WorkflowCanvas(props: WorkflowCanvasProps): ReactElement {\n return (\n <div\n className=\"ai-workflow__canvas\"\n role=\"application\"\n aria-label=\"Workflow canvas\"\n >\n <svg style={{ position: \"absolute\", inset: 0, pointerEvents: \"none\" }}>\n {props.definition.connections.map((connection, index) => {\n const fromStep = props.definition.steps.find(\n (step) => step.id === connection.fromStepId,\n );\n const toStep = props.definition.steps.find(\n (step) => step.id === connection.toStepId,\n );\n\n return fromStep?.position && toStep?.position ? (\n <StepConnector\n key={`${connection.fromStepId}-${connection.toStepId}-${index}`}\n from={fromStep.position}\n to={toStep.position}\n label={connection.label}\n />\n ) : null;\n })}\n </svg>\n <div>\n {props.definition.steps.map((step) => (\n <StepNode\n key={step.id}\n step={step}\n isSelected={props.selectedStepId === step.id}\n onClick={() =>\n props.onSelectStep(\n step.id === props.selectedStepId ? null : step.id,\n )\n }\n />\n ))}\n </div>\n {props.definition.steps.length === 0 && (\n <div className=\"ai-workflow__canvas-empty\">\n <p>No steps yet</p>\n <p>Drag steps from the palette or use a template</p>\n </div>\n )}\n </div>\n );\n}\n","/**\n * @module CssStepConfigPanel\n * @package @geenius/ai-workflow-react-css\n * @description Plain-CSS React step configuration panel for builder flows.\n * This component preserves the editable workflow metadata surface without relying\n * on the Tailwind variant.\n */\n\nimport { useState } from \"react\";\nimport type { ReactElement } from \"react\";\nimport type { WorkflowStepDef } from \"@geenius/ai-workflow-shared\";\nimport { cx } from \"../utils/cx\";\n\n/**\n * Props for the plain-CSS step configuration panel.\n *\n * @property step Shared workflow step being edited.\n * @property onUpdate Callback for partial step updates.\n * @property onDelete Callback that removes the current step.\n * @property onClose Callback that closes the panel.\n */\nexport interface StepConfigPanelProps {\n step: WorkflowStepDef;\n onUpdate: (id: string, updates: Partial<WorkflowStepDef>) => void;\n onDelete: (id: string) => void;\n onClose: () => void;\n}\n\n/**\n * Render the plain-CSS step configuration panel.\n *\n * @param props Step editing callbacks and selected step data.\n * @returns A complementary panel for reviewing and editing step metadata.\n */\nexport function StepConfigPanel(props: StepConfigPanelProps): ReactElement {\n const [name, setName] = useState(props.step.name);\n const inputId = `workflow-step-name-${props.step.id}`;\n\n return (\n <div\n className=\"ai-workflow__config-panel\"\n role=\"complementary\"\n aria-label=\"Step configuration\"\n >\n <div className=\"ai-workflow__config-header\">\n <h3 className=\"ai-workflow__config-title\">Configure Step</h3>\n <button\n type=\"button\"\n className={cx(\n \"ai-workflow__config-close\",\n \"ai-workflow__focus-visible\",\n )}\n onClick={props.onClose}\n aria-label=\"Close step configuration\"\n >\n ✕\n </button>\n </div>\n <div className=\"ai-workflow__config-body\">\n <label className=\"ai-workflow__config-label\" htmlFor={inputId}>\n Step Name\n </label>\n <input\n id={inputId}\n className=\"ai-workflow__config-input\"\n value={name}\n onChange={(event) => setName(event.target.value)}\n onBlur={() => {\n if (name.trim() && name !== props.step.name)\n props.onUpdate(props.step.id, { name: name.trim() });\n }}\n />\n <div className=\"ai-workflow__config-field\">\n <span className=\"ai-workflow__config-field-label\">Type</span>\n <span className=\"ai-workflow__config-field-value\">\n {props.step.type}\n </span>\n </div>\n <div className=\"ai-workflow__config-field\">\n <span className=\"ai-workflow__config-field-label\">ID</span>\n <code className=\"ai-workflow__config-field-value\">\n {props.step.id}\n </code>\n </div>\n {props.step.optional !== undefined && (\n <label className=\"ai-workflow__config-checkbox\">\n <input\n type=\"checkbox\"\n checked={props.step.optional}\n onChange={(event) =>\n props.onUpdate(props.step.id, {\n optional: event.target.checked,\n })\n }\n />\n Optional (skip on failure)\n </label>\n )}\n <pre className=\"ai-workflow__config-json-view\">\n {JSON.stringify(props.step.config, null, 2)}\n </pre>\n </div>\n <div>\n <button\n type=\"button\"\n className={cx(\n \"ai-workflow__config-delete\",\n \"ai-workflow__focus-visible\",\n )}\n onClick={() => {\n props.onDelete(props.step.id);\n props.onClose();\n }}\n >\n 🗑 Delete Step\n </button>\n </div>\n </div>\n );\n}\n","/**\n * @module CssWorkflowRunPanel\n * @package @geenius/ai-workflow-react-css\n * @description Plain-CSS React execution panel for workflow runs. This surface\n * mirrors the progress, error, and cost feedback from the Tailwind variant.\n */\n\nimport type { WorkflowRun } from \"@geenius/ai-workflow-shared\";\nimport type { ReactElement } from \"react\";\nimport { formatCost } from \"@geenius/ai-workflow-shared\";\nimport { cx } from \"../utils/cx\";\n\nconst SI: Record<string, string> = {\n pending: \"⏳\",\n running: \"🔄\",\n completed: \"✅\",\n failed: \"❌\",\n skipped: \"⏭️\",\n \"waiting-approval\": \"👤\",\n};\n\n/**\n * Props for the plain-CSS 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\n/**\n * Render workflow execution progress in the plain-CSS surface.\n *\n * @param props Run state and optional cancellation callback.\n * @returns A run summary panel or idle placeholder.\n */\nexport function WorkflowRunPanel(props: WorkflowRunPanelProps): ReactElement {\n if (!props.run)\n return (\n <div className=\"ai-workflow__run-panel\">\n <div className=\"ai-workflow__run-empty\">\n <p>No active run.</p>\n </div>\n </div>\n );\n const run = props.run;\n const done = run.stepResults.filter(\n (step) => step.status === \"completed\",\n ).length;\n const total = run.stepResults.length;\n const progress = total > 0 ? Math.round((done / total) * 100) : 0;\n const totalCost = run.stepResults.reduce(\n (sum, step) => sum + (step.costUsd ?? 0),\n 0,\n );\n const totalTokens = run.stepResults.reduce(\n (sum, step) => sum + (step.tokens ?? 0),\n 0,\n );\n const duration = (run.completedAt ?? Date.now()) - run.startedAt;\n\n return (\n <div className=\"ai-workflow__run-panel\">\n <div className=\"ai-workflow__run-header\">\n <h3 className=\"ai-workflow__run-title\">\n {SI[run.status]} Run {run.status}\n </h3>\n {props.isRunning && props.onCancel && (\n <button\n type=\"button\"\n className={cx(\n \"ai-workflow__run-cancel\",\n \"ai-workflow__focus-visible\",\n )}\n onClick={props.onCancel}\n >\n ⏹ Cancel\n </button>\n )}\n </div>\n <div className=\"ai-workflow__run-progress\">\n <div className=\"ai-workflow__run-progress-bar\">\n <div\n className=\"ai-workflow__run-progress-fill\"\n style={{ width: `${progress}%` }}\n />\n </div>\n <span className=\"ai-workflow__run-progress-text\">\n {done}/{total} ({progress}%)\n </span>\n </div>\n <div className=\"ai-workflow__run-stats\">\n <span className=\"ai-workflow__run-stat\">\n ⏱ {(duration / 1000).toFixed(1)}s\n </span>\n {totalTokens > 0 && (\n <span className=\"ai-workflow__run-stat\">\n 🪙 {totalTokens.toLocaleString()} tokens\n </span>\n )}\n {totalCost > 0 && (\n <span className=\"ai-workflow__run-stat\">\n 💰 {formatCost(totalCost)}\n </span>\n )}\n </div>\n {run.error && (\n <div className=\"ai-workflow__run-error\" role=\"alert\">\n {run.error}\n </div>\n )}\n <ul className=\"ai-workflow__run-steps\">\n {run.stepResults.map((stepResult) => (\n <li\n key={stepResult.stepId}\n className=\"ai-workflow__run-step-item\"\n data-status={stepResult.status}\n >\n <span>{SI[stepResult.status]}</span>\n <span>{stepResult.stepName}</span>\n <span>{stepResult.durationMs}ms</span>\n </li>\n ))}\n </ul>\n </div>\n );\n}\n","/**\n * @module CssApprovalModal\n * @package @geenius/ai-workflow-react-css\n * @description Plain-CSS React approval dialog for human-gated workflow steps.\n * This component preserves the accessible dialog semantics of the headless variant.\n */\n\nimport type { ReactElement } from \"react\";\nimport { useEffect, useRef } from \"react\";\nimport type { ApprovalRequest } from \"../hooks/useApprovalGate\";\nimport { cx } from \"../utils/cx\";\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 plain-CSS 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 plain-CSS dialog.\n *\n * @param props Approval dialog callbacks and the current pending request.\n * @returns The plain-CSS approval dialog, or `null` when no approval is pending.\n */\nexport function ApprovalModal(\n props: ApprovalModalProps,\n): ReactElement | null {\n if (!props.request) return null;\n const request = props.request;\n const titleId = `workflow-approval-title-${request.id}`;\n const messageId = `workflow-approval-message-${request.id}`;\n const dialogRef = useRef<HTMLDivElement | null>(null);\n const previousActiveElementRef = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n previousActiveElementRef.current =\n document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null;\n\n const dialog = dialogRef.current;\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.id]);\n\n return (\n <div data-workflow=\"approval-modal\">\n <div className=\"ai-workflow__approval-overlay\" aria-hidden=\"true\" />\n <div\n ref={dialogRef}\n className=\"ai-workflow__approval-dialog\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={messageId}\n tabIndex={-1}\n >\n <div className=\"ai-workflow__approval-header\">\n <span className=\"ai-workflow__approval-icon\">👤</span>\n <h3 id={titleId} className=\"ai-workflow__approval-title\">\n Approval Required\n </h3>\n </div>\n <div>\n <p id={messageId} className=\"ai-workflow__approval-message\">\n {request.message}\n </p>\n <div className=\"ai-workflow__approval-meta\">\n <span>Step: {request.stepId}</span>\n <span>\n Requested:{\" \"}\n {new Date(request.requestedAt).toLocaleTimeString()}\n </span>\n </div>\n {request.approvers && request.approvers.length > 0 && (\n <div>\n <span>Authorized approvers: </span>\n {request.approvers.map((approver, index) => (\n <span\n key={index}\n className=\"ai-workflow__approval-approver-badge\"\n >\n {approver}\n </span>\n ))}\n </div>\n )}\n </div>\n <div className=\"ai-workflow__approval-actions\">\n <button\n type=\"button\"\n className={cx(\n \"ai-workflow__approval-reject\",\n \"ai-workflow__focus-visible\",\n )}\n onClick={() => props.onReject(request.id)}\n >\n ✕ Reject\n </button>\n <button\n type=\"button\"\n className={cx(\n \"ai-workflow__approval-approve\",\n \"ai-workflow__focus-visible\",\n )}\n onClick={() => props.onApprove(request.id)}\n >\n ✓ Approve\n </button>\n </div>\n </div>\n </div>\n );\n}\n","/**\n * @module CssWorkflowToolbar\n * @package @geenius/ai-workflow-react-css\n * @description Plain-CSS React toolbar for workflow builder actions such as\n * save, run, cancel, undo, and redo. This component exposes the same command\n * surface as the Tailwind variant without framework-specific styling.\n */\n\nimport type { ReactElement } from \"react\";\nimport { cx } from \"../utils/cx\";\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\n/**\n * Render the builder command toolbar for the plain-CSS React variant.\n *\n * @param props Action callbacks and builder status flags for the toolbar.\n * @returns The workflow toolbar.\n */\nexport function WorkflowToolbar(props: WorkflowToolbarProps): ReactElement {\n return (\n <div\n className={cx(\"ai-workflow__toolbar\", props.className)}\n role=\"toolbar\"\n aria-label=\"Workflow actions\"\n >\n <div className=\"ai-workflow__toolbar-left\">\n <h2 className=\"ai-workflow__toolbar-title\">{props.workflowName}</h2>\n {props.isDirty && <span className=\"ai-workflow__toolbar-dirty\">●</span>}\n </div>\n <div className=\"ai-workflow__toolbar-center\">\n <button\n type=\"button\"\n className={cx(\n \"ai-workflow__toolbar-btn\",\n \"ai-workflow__focus-visible\",\n )}\n onClick={props.onUndo}\n disabled={!props.canUndo}\n aria-label=\"Undo\"\n >\n ↶\n </button>\n <button\n type=\"button\"\n className={cx(\n \"ai-workflow__toolbar-btn\",\n \"ai-workflow__focus-visible\",\n )}\n onClick={props.onRedo}\n disabled={!props.canRedo}\n aria-label=\"Redo\"\n >\n ↷\n </button>\n </div>\n <div className=\"ai-workflow__toolbar-right\">\n {props.onExport && (\n <button\n type=\"button\"\n className={cx(\n \"ai-workflow__toolbar-btn-secondary\",\n \"ai-workflow__focus-visible\",\n )}\n onClick={props.onExport}\n aria-label=\"Export workflow\"\n >\n 📤 Export\n </button>\n )}\n <button\n type=\"button\"\n className={cx(\n \"ai-workflow__toolbar-btn-secondary\",\n \"ai-workflow__focus-visible\",\n )}\n onClick={props.onSave}\n disabled={!props.isDirty}\n aria-label=\"Save workflow\"\n >\n 💾 Save\n </button>\n {props.isRunning ? (\n <button\n type=\"button\"\n className={cx(\n \"ai-workflow__toolbar-btn-danger\",\n \"ai-workflow__focus-visible\",\n )}\n onClick={props.onCancel}\n aria-label=\"Stop workflow run\"\n >\n ⏹ Stop\n </button>\n ) : (\n <button\n type=\"button\"\n className={cx(\n \"ai-workflow__toolbar-btn-primary\",\n \"ai-workflow__focus-visible\",\n )}\n onClick={props.onRun}\n aria-label=\"Run workflow\"\n >\n ▶ Run\n </button>\n )}\n </div>\n </div>\n );\n}\n","/**\n * @module CssStepPalette\n * @package @geenius/ai-workflow-react-css\n * @description Plain-CSS React palette of available workflow step types. This\n * component keeps the builder taxonomy scannable without relying on Tailwind styles.\n */\n\nimport type { StepType } from \"@geenius/ai-workflow-shared\";\nimport type { ReactElement } from \"react\";\nimport { cx } from \"../utils/cx\";\n\nconst ITEMS: Array<{\n type: StepType;\n label: string;\n icon: string;\n desc: string;\n}> = [\n { type: \"llm-call\", label: \"LLM Call\", icon: \"🤖\", desc: \"Call an AI model\" },\n { type: \"transform\", label: \"Transform\", icon: \"⚙️\", desc: \"Transform data\" },\n {\n type: \"condition\",\n label: \"Condition\",\n icon: \"🔀\",\n desc: \"If/else branching\",\n },\n {\n type: \"human-approval\",\n label: \"Approval\",\n icon: \"👤\",\n desc: \"Human approval gate\",\n },\n { type: \"webhook\", label: \"Webhook\", icon: \"🌐\", desc: \"HTTP request\" },\n { type: \"delay\", label: \"Delay\", icon: \"⏱️\", desc: \"Wait for duration\" },\n { type: \"parallel\", label: \"Parallel\", icon: \"⚡\", desc: \"Run in parallel\" },\n { type: \"loop\", label: \"Loop\", icon: \"🔄\", desc: \"Iterate items\" },\n {\n type: \"sub-workflow\",\n label: \"Sub-workflow\",\n icon: \"📋\",\n desc: \"Run another workflow\",\n },\n { type: \"custom\", label: \"Custom\", icon: \"🔧\", desc: \"Custom handler\" },\n];\n\n/**\n * Props for the plain-CSS step palette.\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 plain-CSS workflow step palette.\n *\n * @param props Palette interaction props.\n * @returns A list of available workflow step types.\n */\nexport function StepPalette(props: StepPaletteProps): ReactElement {\n return (\n <div\n className=\"ai-workflow__step-palette\"\n role=\"list\"\n aria-label=\"Available workflow step types\"\n >\n <h3 className=\"ai-workflow__palette-title\">Steps</h3>\n {ITEMS.map((item) => (\n <button\n key={item.type}\n type=\"button\"\n className={cx(\n \"ai-workflow__palette-item\",\n \"ai-workflow__focus-visible\",\n )}\n role=\"listitem\"\n aria-label={`Add ${item.label} step`}\n onClick={() => props.onAddStep(item.type)}\n >\n <span className=\"ai-workflow__palette-icon\">{item.icon}</span>\n <div className=\"ai-workflow__palette-info\">\n <span className=\"ai-workflow__palette-label\">{item.label}</span>\n <span className=\"ai-workflow__palette-desc\">{item.desc}</span>\n </div>\n </button>\n ))}\n </div>\n );\n}\n","/**\n * @module CssWorkflowBuilderPage\n * @package @geenius/ai-workflow-react-css\n * @description Plain-CSS React page for composing, editing, and running\n * workflow definitions. This page keeps the builder feature-complete while\n * rendering through the standalone CSS 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 { cx } from \"../utils/cx\";\n\n/**\n * Props for the plain-CSS 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 plain-CSS 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 props: WorkflowBuilderPageProps,\n): ReactElement {\n const builder = useWorkflowBuilder();\n const runTracker = useWorkflowRun();\n const workflowCount = props.workflows?.length ?? 0;\n const runCount = props.workflowRuns?.length ?? 0;\n\n const handleAddStep = useCallback(\n (type: StepType): void => {\n const step: WorkflowStepDef = {\n id: `step_${Date.now()}_${Math.random().toString(36).slice(2, 6)}`,\n name: `New ${type} step`,\n type,\n config: createStepConfig(type),\n position: {\n x: 100 + builder.definition.steps.length * 250,\n y: 200,\n },\n };\n\n builder.addStep(step);\n },\n [builder],\n );\n\n const handleRun = useCallback(async (): Promise<void> => {\n const engine = new WorkflowEngine({\n ...props.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, props.engineOptions, runTracker]);\n\n const selectedStep = builder.selectedStepId\n ? builder.definition.steps.find((step) => step.id === builder.selectedStepId) ??\n null\n : null;\n\n return (\n <div\n className={cx(\"ai-workflow__builder-page\", props.className)}\n data-workflow=\"builder-page\"\n >\n <div className=\"ai-workflow__builder-summary\" 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={() => props.onSave?.(builder.definition)}\n onRun={handleRun}\n onUndo={builder.undo}\n onRedo={builder.redo}\n />\n <div 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 {selectedStep ? (\n <StepConfigPanel\n step={selectedStep}\n onUpdate={builder.updateStep}\n onDelete={builder.removeStep}\n onClose={() => builder.selectStep(null)}\n />\n ) : null}\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 CssWorkflowRunsPage\n * @package @geenius/ai-workflow-react-css\n * @description Plain-CSS React page for browsing stored workflow runs. This\n * page keeps the run list keyboard-accessible while mirroring the Tailwind surface.\n */\n\nimport type { WorkflowRun } from \"@geenius/ai-workflow-shared\";\nimport type { ReactElement } from \"react\";\nimport { cx } from \"../utils/cx\";\n\nconst SI: Record<string, string> = {\n pending: \"⏳\",\n running: \"🔄\",\n completed: \"✅\",\n failed: \"❌\",\n cancelled: \"⛔\",\n paused: \"⏸️\",\n};\n\n/**\n * Props for the plain-CSS workflow runs page.\n *\n * @property runs Workflow runs to display.\n * @property onSelectRun Optional callback fired when a run card is selected.\n * @property className Optional class name override for outer layout composition.\n */\nexport interface WorkflowRunsPageProps {\n runs: WorkflowRun[];\n onSelectRun?: (id: string) => void;\n className?: string;\n}\n\n/**\n * Render a browsable list of stored workflow runs in the plain-CSS surface.\n *\n * @param props Run collection and optional selection callback.\n * @returns The workflow runs page.\n */\nexport function WorkflowRunsPage(props: WorkflowRunsPageProps): ReactElement {\n return (\n <div className={cx(\"ai-workflow__runs-page\", props.className)}>\n <div className=\"ai-workflow__runs-header\">\n <h1 className=\"ai-workflow__runs-title\">Workflow Runs</h1>\n <span className=\"ai-workflow__runs-count\">\n {props.runs.length} runs\n </span>\n </div>\n {props.runs.length === 0 ? (\n <div className=\"ai-workflow__runs-empty\">\n <p>No runs yet.</p>\n </div>\n ) : (\n <div role=\"list\">\n {props.runs.map((run) => {\n const completedSteps = run.stepResults.filter(\n (step) => step.status === \"completed\",\n ).length;\n return (\n <div\n key={run.id}\n className={cx(\n \"ai-workflow__run-card\",\n \"ai-workflow__focus-visible\",\n )}\n role=\"listitem\"\n tabIndex={0}\n onClick={() => props.onSelectRun?.(run.id)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n props.onSelectRun?.(run.id);\n }\n }}\n >\n <div className=\"ai-workflow__run-card-header\">\n <span className=\"ai-workflow__run-card-status\">\n {SI[run.status]} {run.status}\n </span>\n <span className=\"ai-workflow__run-card-id\">\n {run.id.slice(0, 8)}…\n </span>\n </div>\n <div className=\"ai-workflow__run-card-meta\">\n <span>\n {completedSteps}/{run.stepResults.length} steps\n </span>\n <span>{new Date(run.startedAt).toLocaleString()}</span>\n </div>\n {run.error && (\n <p className=\"ai-workflow__run-card-error\">{run.error}</p>\n )}\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n"]}
|