yaml-flow 1.0.0 → 2.0.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.
Files changed (50) hide show
  1. package/README.md +486 -255
  2. package/dist/constants-D1fTEbbM.d.cts +330 -0
  3. package/dist/constants-D1fTEbbM.d.ts +330 -0
  4. package/dist/event-graph/index.cjs +895 -0
  5. package/dist/event-graph/index.cjs.map +1 -0
  6. package/dist/event-graph/index.d.cts +53 -0
  7. package/dist/event-graph/index.d.ts +53 -0
  8. package/dist/event-graph/index.js +855 -0
  9. package/dist/event-graph/index.js.map +1 -0
  10. package/dist/index.cjs +1128 -312
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.d.cts +3 -2
  13. package/dist/index.d.ts +3 -2
  14. package/dist/index.js +1093 -306
  15. package/dist/index.js.map +1 -1
  16. package/dist/step-machine/index.cjs +513 -0
  17. package/dist/step-machine/index.cjs.map +1 -0
  18. package/dist/step-machine/index.d.cts +77 -0
  19. package/dist/step-machine/index.d.ts +77 -0
  20. package/dist/step-machine/index.js +502 -0
  21. package/dist/step-machine/index.js.map +1 -0
  22. package/dist/stores/file.cjs.map +1 -1
  23. package/dist/stores/file.d.cts +4 -4
  24. package/dist/stores/file.d.ts +4 -4
  25. package/dist/stores/file.js.map +1 -1
  26. package/dist/stores/index.cjs +232 -0
  27. package/dist/stores/index.cjs.map +1 -0
  28. package/dist/stores/index.d.cts +4 -0
  29. package/dist/stores/index.d.ts +4 -0
  30. package/dist/stores/index.js +228 -0
  31. package/dist/stores/index.js.map +1 -0
  32. package/dist/stores/localStorage.cjs.map +1 -1
  33. package/dist/stores/localStorage.d.cts +4 -4
  34. package/dist/stores/localStorage.d.ts +4 -4
  35. package/dist/stores/localStorage.js.map +1 -1
  36. package/dist/stores/memory.cjs.map +1 -1
  37. package/dist/stores/memory.d.cts +4 -4
  38. package/dist/stores/memory.d.ts +4 -4
  39. package/dist/stores/memory.js.map +1 -1
  40. package/dist/types-FZ_eyErS.d.cts +115 -0
  41. package/dist/types-FZ_eyErS.d.ts +115 -0
  42. package/package.json +16 -6
  43. package/dist/core/index.cjs +0 -557
  44. package/dist/core/index.cjs.map +0 -1
  45. package/dist/core/index.d.cts +0 -102
  46. package/dist/core/index.d.ts +0 -102
  47. package/dist/core/index.js +0 -549
  48. package/dist/core/index.js.map +0 -1
  49. package/dist/types-BoWndaAJ.d.cts +0 -237
  50. package/dist/types-BoWndaAJ.d.ts +0 -237
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/event-graph/constants.ts","../../src/event-graph/graph-helpers.ts","../../src/event-graph/conflict-resolution.ts","../../src/event-graph/completion.ts","../../src/event-graph/stuck-detection.ts","../../src/event-graph/scheduler.ts","../../src/event-graph/task-transitions.ts","../../src/event-graph/reducer.ts"],"names":["missingOutputs","requires","outputGroups","createDefaultTaskState","updatedTask"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Event Graph — Constants\n */\n\nimport type { CompletionStrategy, ConflictStrategy, ExecutionMode, ExecutionStatus, TaskStatus } from './types.js';\n\nexport const TASK_STATUS: Record<string, TaskStatus> = {\n NOT_STARTED: 'not-started',\n RUNNING: 'running',\n COMPLETED: 'completed',\n FAILED: 'failed',\n INACTIVATED: 'inactivated',\n} as const;\n\nexport const EXECUTION_STATUS: Record<string, ExecutionStatus> = {\n CREATED: 'created',\n RUNNING: 'running',\n PAUSED: 'paused',\n STOPPED: 'stopped',\n COMPLETED: 'completed',\n FAILED: 'failed',\n} as const;\n\nexport const COMPLETION_STRATEGIES: Record<string, CompletionStrategy> = {\n ALL_TASKS_DONE: 'all-tasks-done',\n ALL_OUTPUTS_DONE: 'all-outputs-done',\n ONLY_RESOLVED: 'only-resolved',\n GOAL_REACHED: 'goal-reached',\n MANUAL: 'manual',\n} as const;\n\nexport const EXECUTION_MODES: Record<string, ExecutionMode> = {\n DEPENDENCY_MODE: 'dependency-mode',\n ELIGIBILITY_MODE: 'eligibility-mode',\n} as const;\n\nexport const CONFLICT_STRATEGIES: Record<string, ConflictStrategy> = {\n ALPHABETICAL: 'alphabetical',\n PRIORITY_FIRST: 'priority-first',\n DURATION_FIRST: 'duration-first',\n COST_OPTIMIZED: 'cost-optimized',\n RESOURCE_AWARE: 'resource-aware',\n RANDOM_SELECT: 'random-select',\n USER_CHOICE: 'user-choice',\n PARALLEL_ALL: 'parallel-all',\n SKIP_CONFLICTS: 'skip-conflicts',\n ROUND_ROBIN: 'round-robin',\n} as const;\n\nexport const DEFAULTS = {\n EXECUTION_MODE: 'eligibility-mode' as ExecutionMode,\n CONFLICT_STRATEGY: 'alphabetical' as ConflictStrategy,\n COMPLETION_STRATEGY: 'all-outputs-done' as CompletionStrategy,\n MAX_ITERATIONS: 1000,\n} as const;\n","/**\n * Event Graph — Graph Helpers\n *\n * Pure functions for manipulating the requires/provides task dependency graph.\n * No I/O, no side effects.\n */\n\nimport type { GraphConfig, TaskConfig, TaskState, ExecutionState } from './types.js';\nimport { TASK_STATUS } from './constants.js';\n\n// ============================================================================\n// Accessors — normalize requires/provides to always be arrays\n// ============================================================================\n\nexport function getProvides(task: TaskConfig | undefined): string[] {\n if (!task) return [];\n if (Array.isArray(task.provides)) return task.provides;\n return [];\n}\n\nexport function getRequires(task: TaskConfig | undefined): string[] {\n if (!task) return [];\n if (Array.isArray(task.requires)) return task.requires;\n return [];\n}\n\nexport function getAllTasks(graph: GraphConfig): Record<string, TaskConfig> {\n return graph.tasks ?? {};\n}\n\nexport function getTask(graph: GraphConfig, taskName: string): TaskConfig | undefined {\n return graph.tasks[taskName];\n}\n\nexport function hasTask(graph: GraphConfig, taskName: string): boolean {\n return taskName in graph.tasks;\n}\n\n// ============================================================================\n// Task State Predicates\n// ============================================================================\n\nexport function isNonActiveTask(taskState: TaskState | undefined): boolean {\n if (!taskState) return false;\n return taskState.status === TASK_STATUS.FAILED || taskState.status === TASK_STATUS.INACTIVATED;\n}\n\nexport function isTaskCompleted(taskState: TaskState | undefined): boolean {\n return taskState?.status === TASK_STATUS.COMPLETED;\n}\n\nexport function isTaskRunning(taskState: TaskState | undefined): boolean {\n return taskState?.status === TASK_STATUS.RUNNING;\n}\n\nexport function isRepeatableTask(taskConfig: TaskConfig): boolean {\n return taskConfig.repeatable === true || (typeof taskConfig.repeatable === 'object' && taskConfig.repeatable !== null);\n}\n\nexport function getRepeatableMax(taskConfig: TaskConfig): number | undefined {\n if (taskConfig.repeatable === true) return undefined; // unlimited\n if (typeof taskConfig.repeatable === 'object' && taskConfig.repeatable !== null) {\n return taskConfig.repeatable.max;\n }\n return undefined;\n}\n\n// ============================================================================\n// Available Outputs Computation\n// ============================================================================\n\n/**\n * Dynamically compute available outputs from all completed tasks.\n * For repeatable tasks, outputs are versioned by epoch.\n * Pure function.\n */\nexport function computeAvailableOutputs(\n graph: GraphConfig,\n taskStates: Record<string, TaskState>\n): string[] {\n const outputs: Set<string> = new Set();\n\n for (const [taskName, taskState] of Object.entries(taskStates)) {\n if (taskState.status === TASK_STATUS.COMPLETED) {\n const taskConfig = graph.tasks[taskName];\n if (taskConfig) {\n const provides = getProvides(taskConfig);\n provides.forEach(output => outputs.add(output));\n }\n }\n }\n\n return Array.from(outputs);\n}\n\n// ============================================================================\n// Conflict Detection\n// ============================================================================\n\n/**\n * Group candidate tasks by the outputs they provide.\n * Used to detect conflicts (multiple tasks providing the same output).\n */\nexport function groupTasksByProvides(\n candidateTaskNames: string[],\n tasks: Record<string, TaskConfig>\n): Record<string, string[]> {\n const outputGroups: Record<string, string[]> = {};\n\n candidateTaskNames.forEach(taskName => {\n const task = tasks[taskName];\n if (!task) return;\n const provides = getProvides(task);\n provides.forEach(output => {\n if (!outputGroups[output]) {\n outputGroups[output] = [];\n }\n outputGroups[output].push(taskName);\n });\n });\n\n return outputGroups;\n}\n\n/**\n * Check if a task's outputs conflict with other candidates.\n */\nexport function hasOutputConflict(\n taskName: string,\n taskProvides: string[],\n candidates: string[],\n tasks: Record<string, TaskConfig>\n): boolean {\n for (const otherName of candidates) {\n if (otherName === taskName) continue;\n const otherProvides = getProvides(tasks[otherName]);\n const overlapping = taskProvides.some(output => otherProvides.includes(output));\n if (overlapping) return true;\n }\n return false;\n}\n\n// ============================================================================\n// Immutable Graph Mutation\n// ============================================================================\n\nexport function addKeyToProvides(task: TaskConfig, key: string): TaskConfig {\n const current = getProvides(task);\n if (current.includes(key)) return task;\n return { ...task, provides: [...current, key] };\n}\n\nexport function removeKeyFromProvides(task: TaskConfig, key: string): TaskConfig {\n const current = getProvides(task);\n return { ...task, provides: current.filter(p => p !== key) };\n}\n\nexport function addKeyToRequires(task: TaskConfig, key: string): TaskConfig {\n const current = getRequires(task);\n if (current.includes(key)) return task;\n return { ...task, requires: [...current, key] };\n}\n\nexport function removeKeyFromRequires(task: TaskConfig, key: string): TaskConfig {\n const current = getRequires(task);\n return { ...task, requires: current.filter(r => r !== key) };\n}\n\n// ============================================================================\n// Dynamic Task Management\n// ============================================================================\n\n/**\n * Add a new task to a graph config. Returns a new GraphConfig (immutable).\n */\nexport function addDynamicTask(\n graph: GraphConfig,\n taskName: string,\n taskConfig: TaskConfig\n): GraphConfig {\n return {\n ...graph,\n tasks: {\n ...graph.tasks,\n [taskName]: taskConfig,\n },\n };\n}\n\n/**\n * Create default task state for a new task.\n */\nexport function createDefaultTaskState(): TaskState {\n return {\n status: 'not-started',\n executionCount: 0,\n retryCount: 0,\n lastEpoch: 0,\n messages: [],\n progress: null,\n };\n}\n\n/**\n * Create the initial execution state for a graph.\n */\nexport function createInitialExecutionState(\n graph: GraphConfig,\n executionId: string\n): ExecutionState {\n const tasks: Record<string, TaskState> = {};\n for (const taskName of Object.keys(graph.tasks)) {\n tasks[taskName] = createDefaultTaskState();\n }\n\n return {\n status: 'running',\n tasks,\n availableOutputs: [],\n stuckDetection: { is_stuck: false, stuck_description: null, outputs_unresolvable: [], tasks_blocked: [] },\n lastUpdated: new Date().toISOString(),\n executionId,\n executionConfig: {\n executionMode: graph.settings.execution_mode ?? 'eligibility-mode',\n conflictStrategy: graph.settings.conflict_strategy ?? 'alphabetical',\n completionStrategy: graph.settings.completion,\n },\n };\n}\n","/**\n * Event Graph — Conflict Resolution Strategies\n *\n * Pure functions for selecting tasks when multiple candidates compete\n * for the same output.\n */\n\nimport type { TaskConfig, ExecutionState, ConflictStrategy } from './types.js';\nimport { getProvides, groupTasksByProvides, hasOutputConflict } from './graph-helpers.js';\n\n/**\n * Select the best alternative from a group of competing tasks.\n * Pure function.\n */\nexport function selectBestAlternative(\n alternatives: string[],\n graphTasks: Record<string, TaskConfig>,\n _executionState: ExecutionState,\n strategy: ConflictStrategy\n): string {\n switch (strategy) {\n case 'alphabetical':\n return selectByAlphabetical(alternatives);\n case 'priority-first':\n return selectByPriorityFirst(alternatives, graphTasks);\n case 'duration-first':\n return selectByDurationFirst(alternatives, graphTasks);\n case 'cost-optimized':\n return selectByCostOptimized(alternatives, graphTasks);\n case 'resource-aware':\n return selectByResourceAware(alternatives, graphTasks);\n case 'round-robin':\n return selectByRoundRobin(alternatives, _executionState);\n default:\n return selectByAlphabetical(alternatives);\n }\n}\n\nfunction selectByAlphabetical(alternatives: string[]): string {\n return [...alternatives].sort((a, b) => a.localeCompare(b))[0];\n}\n\nfunction selectByPriorityFirst(alternatives: string[], graphTasks: Record<string, TaskConfig>): string {\n return [...alternatives].sort((a, b) => {\n const pA = graphTasks[a]?.priority ?? 0;\n const pB = graphTasks[b]?.priority ?? 0;\n if (pA !== pB) return pB - pA; // higher priority first\n const dA = getEstimatedDuration(graphTasks[a]);\n const dB = getEstimatedDuration(graphTasks[b]);\n if (dA !== dB) return dA - dB; // shorter duration first\n return a.localeCompare(b);\n })[0];\n}\n\nfunction selectByDurationFirst(alternatives: string[], graphTasks: Record<string, TaskConfig>): string {\n return [...alternatives].sort((a, b) => {\n const dA = getEstimatedDuration(graphTasks[a]);\n const dB = getEstimatedDuration(graphTasks[b]);\n if (dA !== dB) return dA - dB;\n const pA = graphTasks[a]?.priority ?? 0;\n const pB = graphTasks[b]?.priority ?? 0;\n if (pA !== pB) return pB - pA;\n return a.localeCompare(b);\n })[0];\n}\n\nfunction selectByCostOptimized(alternatives: string[], graphTasks: Record<string, TaskConfig>): string {\n return [...alternatives].sort((a, b) => {\n const cA = graphTasks[a]?.estimatedCost ?? 0;\n const cB = graphTasks[b]?.estimatedCost ?? 0;\n if (cA !== cB) return cA - cB; // lower cost first\n const pA = graphTasks[a]?.priority ?? 0;\n const pB = graphTasks[b]?.priority ?? 0;\n if (pA !== pB) return pB - pA;\n return a.localeCompare(b);\n })[0];\n}\n\nfunction selectByResourceAware(alternatives: string[], graphTasks: Record<string, TaskConfig>): string {\n return [...alternatives].sort((a, b) => {\n const rA = graphTasks[a]?.estimatedResources?.cpu ?? 1;\n const rB = graphTasks[b]?.estimatedResources?.cpu ?? 1;\n if (rA !== rB) return rA - rB; // lower resource first\n const pA = graphTasks[a]?.priority ?? 0;\n const pB = graphTasks[b]?.priority ?? 0;\n if (pA !== pB) return pB - pA;\n return a.localeCompare(b);\n })[0];\n}\n\nfunction selectByRoundRobin(alternatives: string[], executionState: ExecutionState): string {\n // Rotate based on total execution count across tasks\n const totalExecs = Object.values(executionState.tasks)\n .reduce((sum, t) => sum + t.executionCount, 0);\n const sorted = [...alternatives].sort();\n return sorted[totalExecs % sorted.length];\n}\n\nfunction getEstimatedDuration(taskConfig: TaskConfig | undefined): number {\n return taskConfig?.estimatedDuration ?? Infinity;\n}\n\n/**\n * Get tasks that don't have output conflicts with any other candidate.\n */\nexport function getNonConflictingTasks(\n candidates: string[],\n graphTasks: Record<string, TaskConfig>\n): string[] {\n return candidates.filter(taskName => {\n const provides = getProvides(graphTasks[taskName]);\n return !hasOutputConflict(taskName, provides, candidates, graphTasks);\n });\n}\n\n/**\n * Select random task from each conflict group (for A/B testing).\n */\nexport function selectRandomTasks(\n candidates: string[],\n graphTasks: Record<string, TaskConfig>\n): string[] {\n const outputGroups = groupTasksByProvides(candidates, graphTasks);\n const selected: string[] = [];\n\n for (const groupTasks of Object.values(outputGroups)) {\n if (groupTasks.length === 1) {\n selected.push(...groupTasks);\n } else {\n const idx = Math.floor(Math.random() * groupTasks.length);\n selected.push(groupTasks[idx]);\n }\n }\n\n // Add non-conflicting tasks\n const nonConflicting = getNonConflictingTasks(candidates, graphTasks);\n nonConflicting.forEach(t => {\n if (!selected.includes(t)) selected.push(t);\n });\n\n return selected;\n}\n","/**\n * Event Graph — Completion Detection\n *\n * Pure functions to determine if a graph execution is complete.\n */\n\nimport type { GraphConfig, ExecutionState } from './types.js';\nimport { TASK_STATUS } from './constants.js';\nimport { getProvides, getAllTasks, getRequires, isNonActiveTask, computeAvailableOutputs } from './graph-helpers.js';\n\nexport interface CompletionResult {\n isComplete: boolean;\n expectedCompletion: {\n taskNames: string[];\n outputs: string[];\n };\n}\n\n/**\n * Check if graph execution is complete based on the configured strategy.\n * Pure function.\n */\nexport function isExecutionComplete(\n graph: GraphConfig,\n state: ExecutionState\n): CompletionResult {\n const strategy = state.executionConfig.completionStrategy;\n\n switch (strategy) {\n case 'all-tasks-done':\n return checkAllTasksDone(graph, state);\n case 'all-outputs-done':\n return checkAllOutputsDone(graph, state);\n case 'only-resolved':\n return checkOnlyResolved(graph, state);\n case 'goal-reached':\n return checkGoalReached(graph, state);\n case 'manual':\n return { isComplete: false, expectedCompletion: { taskNames: [], outputs: [] } };\n default:\n return checkAllOutputsDone(graph, state);\n }\n}\n\nfunction checkAllTasksDone(graph: GraphConfig, state: ExecutionState): CompletionResult {\n const graphTasks = getAllTasks(graph);\n const allTaskNames = Object.keys(graphTasks);\n\n if (allTaskNames.length === 0) {\n return { isComplete: true, expectedCompletion: { taskNames: [], outputs: [] } };\n }\n\n const allDone = allTaskNames.every(taskName => {\n const taskState = state.tasks[taskName];\n return taskState?.status === TASK_STATUS.COMPLETED || isNonActiveTask(taskState);\n });\n\n return {\n isComplete: allDone,\n expectedCompletion: { taskNames: allTaskNames, outputs: [] },\n };\n}\n\nfunction checkAllOutputsDone(graph: GraphConfig, state: ExecutionState): CompletionResult {\n const graphTasks = getAllTasks(graph);\n const allPossibleOutputs = new Set<string>();\n\n for (const taskConfig of Object.values(graphTasks)) {\n getProvides(taskConfig).forEach(output => allPossibleOutputs.add(output));\n }\n\n const availableOutputs = computeAvailableOutputs(graph, state.tasks);\n const allProduced = [...allPossibleOutputs].every(output => availableOutputs.includes(output));\n\n return {\n isComplete: allProduced,\n expectedCompletion: { taskNames: [], outputs: [...allPossibleOutputs] },\n };\n}\n\nfunction checkOnlyResolved(graph: GraphConfig, state: ExecutionState): CompletionResult {\n const graphTasks = getAllTasks(graph);\n const availableOutputs = computeAvailableOutputs(graph, state.tasks);\n\n // Collect all possible outputs and their producers\n const allPossibleOutputs = new Set<string>();\n const tasksByOutput: Record<string, string[]> = {};\n\n for (const [taskName, taskConfig] of Object.entries(graphTasks)) {\n const provides = getProvides(taskConfig);\n provides.forEach(output => {\n allPossibleOutputs.add(output);\n if (!tasksByOutput[output]) tasksByOutput[output] = [];\n tasksByOutput[output].push(taskName);\n });\n }\n\n // Check if all outputs are either available or unproduceable\n for (const output of allPossibleOutputs) {\n if (availableOutputs.includes(output)) continue;\n\n const producers = tasksByOutput[output] ?? [];\n const canStillProduce = producers.some(taskName => {\n const taskState = state.tasks[taskName];\n if (taskState?.status === TASK_STATUS.COMPLETED || isNonActiveTask(taskState)) {\n return false;\n }\n // Check if the producer's dependencies are met\n const taskConfig = graphTasks[taskName];\n const requires = getRequires(taskConfig);\n return requires.every(req => availableOutputs.includes(req));\n });\n\n if (canStillProduce) {\n return { isComplete: false, expectedCompletion: { taskNames: [], outputs: [] } };\n }\n }\n\n // Also check no eligible tasks remain\n const eligibleTasks = getEligibleCandidates(graph, state);\n if (eligibleTasks.length > 0) {\n return { isComplete: false, expectedCompletion: { taskNames: eligibleTasks, outputs: [] } };\n }\n\n // At least some work was done\n const completedCount = Object.values(state.tasks)\n .filter(t => t.status === TASK_STATUS.COMPLETED).length;\n\n return {\n isComplete: completedCount > 0 || availableOutputs.length > 0,\n expectedCompletion: { taskNames: [], outputs: [] },\n };\n}\n\nfunction checkGoalReached(graph: GraphConfig, state: ExecutionState): CompletionResult {\n const goal = graph.settings.goal ?? [];\n if (goal.length === 0) {\n // No goal defined, fall back to all-outputs-done\n return checkAllOutputsDone(graph, state);\n }\n\n const availableOutputs = computeAvailableOutputs(graph, state.tasks);\n const goalReached = goal.every(output => availableOutputs.includes(output));\n\n return {\n isComplete: goalReached,\n expectedCompletion: { taskNames: [], outputs: goal },\n };\n}\n\n/**\n * Quick eligibility check used by completion. Minimal version of scheduler logic.\n */\nfunction getEligibleCandidates(graph: GraphConfig, state: ExecutionState): string[] {\n const graphTasks = getAllTasks(graph);\n const availableOutputs = computeAvailableOutputs(graph, state.tasks);\n const candidates: string[] = [];\n\n for (const [taskName, taskConfig] of Object.entries(graphTasks)) {\n const taskState = state.tasks[taskName];\n if (taskState?.status === TASK_STATUS.COMPLETED ||\n taskState?.status === TASK_STATUS.RUNNING ||\n isNonActiveTask(taskState)) {\n continue;\n }\n\n const requires = getRequires(taskConfig);\n if (requires.every(req => availableOutputs.includes(req))) {\n const provides = getProvides(taskConfig);\n const allAlreadyAvailable = provides.length > 0 &&\n provides.every(output => availableOutputs.includes(output));\n if (!allAlreadyAvailable) {\n candidates.push(taskName);\n }\n }\n }\n\n return candidates;\n}\n","/**\n * Event Graph — Stuck Detection\n *\n * Pure function to detect when a graph execution cannot make progress.\n */\n\nimport type { GraphConfig, ExecutionState, StuckDetection } from './types.js';\nimport { TASK_STATUS } from './constants.js';\nimport { getAllTasks, getProvides, getRequires, isNonActiveTask, computeAvailableOutputs } from './graph-helpers.js';\nimport type { CompletionResult } from './completion.js';\n\n/**\n * Detect if the graph execution is stuck.\n * Stuck = no eligible tasks AND execution is not complete.\n * Pure function.\n */\nexport function detectStuckState(params: {\n graph: GraphConfig;\n state: ExecutionState;\n eligibleTasks: string[];\n completionResult?: CompletionResult;\n}): StuckDetection {\n const { graph, state, eligibleTasks, completionResult } = params;\n const tasks = state.tasks;\n const graphTasks = getAllTasks(graph);\n const availableOutputs = computeAvailableOutputs(graph, tasks);\n\n // If there are eligible tasks, we're not stuck\n if (eligibleTasks.length > 0) {\n return { is_stuck: false, stuck_description: null, outputs_unresolvable: [], tasks_blocked: [] };\n }\n\n // If any tasks are currently running, we're not stuck yet\n const hasRunningTasks = Object.values(tasks).some(t => t.status === TASK_STATUS.RUNNING);\n if (hasRunningTasks) {\n return { is_stuck: false, stuck_description: null, outputs_unresolvable: [], tasks_blocked: [] };\n }\n\n // Use completion diagnostic info if available\n if (completionResult?.expectedCompletion) {\n const { taskNames = [], outputs = [] } = completionResult.expectedCompletion;\n\n // If completion expects specific tasks but all are failed\n if (taskNames.length > 0) {\n const expectedFailed = taskNames.filter(tn => isNonActiveTask(tasks[tn]));\n if (expectedFailed.length > 0 && expectedFailed.length === taskNames.length) {\n return {\n is_stuck: true,\n stuck_description: `Completion expects tasks ${taskNames.join(', ')} but all are failed`,\n tasks_blocked: expectedFailed,\n outputs_unresolvable: outputs,\n };\n }\n }\n\n // If completion expects outputs that no viable task can produce\n if (outputs.length > 0 && state.executionConfig.completionStrategy !== 'only-resolved') {\n const missingOutputs = outputs.filter(o => !availableOutputs.includes(o));\n if (missingOutputs.length > 0) {\n const unprovidable: string[] = [];\n for (const output of missingOutputs) {\n const providers = Object.entries(graphTasks)\n .filter(([, config]) => getProvides(config).includes(output))\n .map(([name]) => name);\n const viable = providers.filter(p => !isNonActiveTask(tasks[p]));\n if (viable.length === 0) {\n unprovidable.push(output);\n }\n }\n if (unprovidable.length > 0) {\n return {\n is_stuck: true,\n stuck_description: `Completion expects outputs '${unprovidable.join(\"', '\")}' but no viable tasks can provide them`,\n tasks_blocked: [],\n outputs_unresolvable: unprovidable,\n };\n }\n }\n }\n }\n\n // General stuck check: find tasks that are not-started and have unmet dependencies\n const blockedTasks: string[] = [];\n const missingOutputs = new Set<string>();\n\n for (const [taskName, taskConfig] of Object.entries(graphTasks)) {\n const taskState = tasks[taskName];\n if (taskState?.status === TASK_STATUS.COMPLETED || isNonActiveTask(taskState) || taskState?.status === TASK_STATUS.RUNNING) {\n continue;\n }\n\n const requires = getRequires(taskConfig);\n const unmet = requires.filter(req => !availableOutputs.includes(req));\n if (unmet.length > 0) {\n // Check if unmet dependencies can ever be provided\n const canBeProvided = unmet.every(req => {\n const providers = Object.entries(graphTasks)\n .filter(([, config]) => getProvides(config).includes(req))\n .map(([name]) => name);\n return providers.some(p => !isNonActiveTask(tasks[p]) && tasks[p]?.status !== TASK_STATUS.COMPLETED);\n });\n\n if (!canBeProvided) {\n blockedTasks.push(taskName);\n unmet.forEach(u => missingOutputs.add(u));\n }\n }\n }\n\n if (blockedTasks.length > 0) {\n return {\n is_stuck: true,\n stuck_description: `Tasks [${blockedTasks.join(', ')}] blocked by unresolvable dependencies: ${[...missingOutputs].join(', ')}`,\n tasks_blocked: blockedTasks,\n outputs_unresolvable: [...missingOutputs],\n };\n }\n\n return { is_stuck: false, stuck_description: null, outputs_unresolvable: [], tasks_blocked: [] };\n}\n","/**\n * Event Graph — Scheduler\n *\n * The core pure function: f(graph, state) → { eligibleTasks, isComplete, isStuck }\n * No I/O, no side effects, deterministic.\n */\n\nimport type { GraphConfig, ExecutionState, SchedulerResult, ConflictStrategy } from './types.js';\nimport { TASK_STATUS } from './constants.js';\nimport {\n getAllTasks, getRequires, getProvides, isNonActiveTask,\n computeAvailableOutputs, groupTasksByProvides, isRepeatableTask,\n getRepeatableMax,\n} from './graph-helpers.js';\nimport { selectBestAlternative, getNonConflictingTasks, selectRandomTasks } from './conflict-resolution.js';\nimport { isExecutionComplete } from './completion.js';\nimport { detectStuckState } from './stuck-detection.js';\n\n/**\n * Determine what tasks should be executed next.\n * Pure function — the heart of the event-graph engine.\n */\nexport function next(graph: GraphConfig, state: ExecutionState): SchedulerResult {\n const processingLog: string[] = [];\n const graphTasks = getAllTasks(graph);\n\n if (Object.keys(graphTasks).length === 0) {\n return {\n eligibleTasks: [],\n isComplete: true,\n stuckDetection: { is_stuck: false, stuck_description: null, outputs_unresolvable: [], tasks_blocked: [] },\n hasConflicts: false,\n conflicts: {},\n strategy: state.executionConfig.conflictStrategy,\n processingLog: ['No tasks defined'],\n };\n }\n\n const mode = state.executionConfig.executionMode;\n const conflictStrategy = state.executionConfig.conflictStrategy;\n\n // Step 1: Find candidate tasks\n const candidates = getCandidateTasks(graph, state);\n processingLog.push(`Found ${candidates.length} candidate tasks: ${candidates.join(', ') || 'none'}`);\n\n // Step 2: Apply mode-specific selection\n let eligible: string[];\n let hasConflicts = false;\n let conflicts: Record<string, string[]> = {};\n\n if (mode === 'dependency-mode') {\n // Execute ALL eligible tasks\n eligible = candidates;\n } else {\n // eligibility-mode: intelligent selection with conflict resolution\n const selection = selectOptimalTasks(candidates, graph, state, conflictStrategy);\n eligible = selection.eligibleTasks;\n hasConflicts = selection.hasConflicts;\n conflicts = selection.conflicts;\n }\n\n processingLog.push(`Eligible after conflict resolution: ${eligible.join(', ') || 'none'}`);\n\n // Step 3: Check completion\n const completionResult = isExecutionComplete(graph, state);\n processingLog.push(`Execution complete: ${completionResult.isComplete}`);\n\n // Step 4: Stuck detection\n const stuckDetection = detectStuckState({\n graph,\n state,\n eligibleTasks: eligible,\n completionResult,\n });\n\n if (stuckDetection.is_stuck) {\n processingLog.push(`STUCK: ${stuckDetection.stuck_description}`);\n }\n\n return {\n eligibleTasks: eligible,\n isComplete: completionResult.isComplete,\n stuckDetection,\n hasConflicts,\n conflicts,\n strategy: conflictStrategy,\n processingLog,\n };\n}\n\n/**\n * Get candidate tasks whose dependencies are all met.\n * Handles repeatable tasks and circuit breakers.\n * Pure function.\n */\nexport function getCandidateTasks(graph: GraphConfig, state: ExecutionState): string[] {\n const graphTasks = getAllTasks(graph);\n // Merge computed outputs (from completed tasks) with state's available outputs (includes injected tokens)\n const computedOutputs = computeAvailableOutputs(graph, state.tasks);\n const availableOutputs = [...new Set([...computedOutputs, ...state.availableOutputs])];\n const candidates: string[] = [];\n\n for (const [taskName, taskConfig] of Object.entries(graphTasks)) {\n const taskState = state.tasks[taskName];\n\n // For non-repeatable tasks: skip if completed, running, failed, inactivated\n if (!isRepeatableTask(taskConfig)) {\n if (taskState?.status === TASK_STATUS.COMPLETED ||\n taskState?.status === TASK_STATUS.RUNNING ||\n isNonActiveTask(taskState)) {\n continue;\n }\n } else {\n // Repeatable task: skip if running or failed/inactivated\n if (taskState?.status === TASK_STATUS.RUNNING || isNonActiveTask(taskState)) {\n continue;\n }\n // Check max executions for repeatable\n const maxExec = getRepeatableMax(taskConfig);\n if (maxExec !== undefined && taskState && taskState.executionCount >= maxExec) {\n continue;\n }\n // Circuit breaker check\n if (taskConfig.circuit_breaker) {\n if (taskState && taskState.executionCount >= taskConfig.circuit_breaker.max_executions) {\n continue;\n }\n }\n // For repeatable tasks that already completed: check if inputs have been refreshed\n // A repeatable task needs its requires to have been regenerated since its last run\n if (taskState?.status === TASK_STATUS.COMPLETED) {\n // Check if any providing task has a higher epoch than this task's last epoch\n const requires = getRequires(taskConfig);\n if (requires.length > 0) {\n const hasRefreshedInputs = requires.some(req => {\n // Find which task provides this requirement and check its epoch\n for (const [otherName, otherConfig] of Object.entries(graphTasks)) {\n if (getProvides(otherConfig).includes(req)) {\n const otherState = state.tasks[otherName];\n if (otherState && otherState.executionCount > taskState.lastEpoch) {\n return true;\n }\n }\n }\n return false;\n });\n if (!hasRefreshedInputs) continue; // No new inputs since last execution\n } else {\n // No requires — for repeatable tasks with no deps, they need an external trigger\n // (inject-tokens event). If already completed and nothing new, skip.\n continue;\n }\n }\n }\n\n // Check if all requirements are met\n const requires = getRequires(taskConfig);\n if (!requires.every(req => availableOutputs.includes(req))) {\n continue;\n }\n\n // Redundancy check: skip if all outputs already available (non-repeatable only)\n if (!isRepeatableTask(taskConfig)) {\n const provides = getProvides(taskConfig);\n const allAlreadyAvailable = provides.length > 0 &&\n provides.every(output => availableOutputs.includes(output));\n if (allAlreadyAvailable) continue;\n }\n\n candidates.push(taskName);\n }\n\n return candidates;\n}\n\n/**\n * Select optimal tasks using conflict resolution strategies.\n * Pure function.\n */\nfunction selectOptimalTasks(\n candidates: string[],\n graph: GraphConfig,\n state: ExecutionState,\n conflictStrategy: ConflictStrategy\n): { eligibleTasks: string[]; hasConflicts: boolean; conflicts: Record<string, string[]> } {\n const result = { eligibleTasks: [] as string[], hasConflicts: false, conflicts: {} as Record<string, string[]> };\n\n if (candidates.length === 0) return result;\n\n const graphTasks = getAllTasks(graph);\n\n // Global strategies that apply to all candidates at once\n switch (conflictStrategy) {\n case 'parallel-all':\n result.eligibleTasks = candidates;\n return result;\n\n case 'user-choice': {\n result.eligibleTasks = candidates;\n if (candidates.length > 1) {\n const outputGroups = groupTasksByProvides(candidates, graphTasks);\n for (const [outputKey, groupTasks] of Object.entries(outputGroups)) {\n if (groupTasks.length > 1) {\n result.conflicts[outputKey] = groupTasks;\n result.hasConflicts = true;\n }\n }\n }\n return result;\n }\n\n case 'skip-conflicts':\n result.eligibleTasks = getNonConflictingTasks(candidates, graphTasks);\n return result;\n\n case 'random-select':\n result.eligibleTasks = selectRandomTasks(candidates, graphTasks);\n return result;\n }\n\n // Per-output-group strategies\n const outputGroups = groupTasksByProvides(candidates, graphTasks);\n\n // Filter out groups that conflict with running tasks\n const runningOutputs = new Set<string>();\n for (const [taskName, taskState] of Object.entries(state.tasks)) {\n if (taskState.status === TASK_STATUS.RUNNING) {\n const taskConfig = graph.tasks[taskName];\n if (taskConfig) {\n getProvides(taskConfig).forEach(o => runningOutputs.add(o));\n }\n }\n }\n\n const selectedTasks: string[] = [];\n const tasksInConflictGroups = new Set<string>();\n\n for (const [outputKey, groupTasks] of Object.entries(outputGroups)) {\n // Skip if this output is being produced by a running task\n if (runningOutputs.has(outputKey)) continue;\n\n if (groupTasks.length === 1) {\n selectedTasks.push(groupTasks[0]);\n } else {\n // Multiple alternatives — apply selection strategy\n const selected = selectBestAlternative(groupTasks, graphTasks, state, conflictStrategy);\n selectedTasks.push(selected);\n }\n groupTasks.forEach(t => tasksInConflictGroups.add(t));\n }\n\n // Include non-conflicting tasks\n const nonConflicting = candidates.filter(t => !tasksInConflictGroups.has(t));\n nonConflicting.forEach(t => {\n if (!selectedTasks.includes(t)) selectedTasks.push(t);\n });\n\n result.eligibleTasks = selectedTasks;\n return result;\n}\n","/**\n * Event Graph — Task State Transitions\n *\n * Pure functions for applying task lifecycle events to execution state.\n * Each function: f(state, ...) → newState\n */\n\nimport type { ExecutionState, TaskState, GraphConfig } from './types.js';\nimport { getProvides, isRepeatableTask } from './graph-helpers.js';\n\n/**\n * Apply task start to execution state. Pure function.\n */\nexport function applyTaskStart(state: ExecutionState, taskName: string): ExecutionState {\n const existingTask = state.tasks[taskName] ?? createDefaultTaskState();\n\n const updatedTask: TaskState = {\n ...existingTask,\n status: 'running',\n startedAt: new Date().toISOString(),\n lastUpdated: new Date().toISOString(),\n progress: 0,\n error: undefined,\n };\n\n return {\n ...state,\n tasks: { ...state.tasks, [taskName]: updatedTask },\n lastUpdated: new Date().toISOString(),\n };\n}\n\n/**\n * Apply task completion to execution state.\n * Handles: default provides, conditional provides (on), repeatable epoch tracking.\n * Pure function.\n */\nexport function applyTaskCompletion(\n state: ExecutionState,\n graph: GraphConfig,\n taskName: string,\n result?: string\n): ExecutionState {\n const existingTask = state.tasks[taskName] ?? createDefaultTaskState();\n const taskConfig = graph.tasks[taskName];\n if (!taskConfig) {\n throw new Error(`Task \"${taskName}\" not found in graph`);\n }\n\n // Determine which outputs to produce\n let outputTokens: string[];\n if (result && taskConfig.on && taskConfig.on[result]) {\n // Conditional routing — use the on[result] provides\n outputTokens = taskConfig.on[result];\n } else {\n // Default provides\n outputTokens = getProvides(taskConfig);\n }\n\n const updatedTask: TaskState = {\n ...existingTask,\n status: 'completed',\n completedAt: new Date().toISOString(),\n lastUpdated: new Date().toISOString(),\n executionCount: existingTask.executionCount + 1,\n lastEpoch: existingTask.executionCount + 1,\n error: undefined,\n };\n\n // For repeatable tasks, reset status to 'not-started' so they can run again\n // but keep executionCount incremented for epoch tracking\n if (isRepeatableTask(taskConfig)) {\n updatedTask.status = 'not-started';\n }\n\n // Merge new outputs with existing available outputs\n const newOutputs = [...new Set([...state.availableOutputs, ...outputTokens])];\n\n return {\n ...state,\n tasks: { ...state.tasks, [taskName]: updatedTask },\n availableOutputs: newOutputs,\n lastUpdated: new Date().toISOString(),\n };\n}\n\n/**\n * Apply task failure to execution state.\n * Handles: retry logic, on_failure token injection, circuit breaker.\n * Pure function.\n */\nexport function applyTaskFailure(\n state: ExecutionState,\n graph: GraphConfig,\n taskName: string,\n error: string\n): ExecutionState {\n const existingTask = state.tasks[taskName] ?? createDefaultTaskState();\n const taskConfig = graph.tasks[taskName];\n\n // Check retry\n if (taskConfig?.retry) {\n const retryCount = existingTask.retryCount + 1;\n if (retryCount <= taskConfig.retry.max_attempts) {\n // Retry — set back to not-started with incremented retry count\n const updatedTask: TaskState = {\n ...existingTask,\n status: 'not-started',\n retryCount,\n lastUpdated: new Date().toISOString(),\n error,\n };\n return {\n ...state,\n tasks: { ...state.tasks, [taskName]: updatedTask },\n lastUpdated: new Date().toISOString(),\n };\n }\n }\n\n // No more retries — mark as failed\n const updatedTask: TaskState = {\n ...existingTask,\n status: 'failed',\n failedAt: new Date().toISOString(),\n lastUpdated: new Date().toISOString(),\n error,\n executionCount: existingTask.executionCount + 1,\n };\n\n // Inject failure tokens if configured\n let newOutputs = state.availableOutputs;\n if (taskConfig?.on_failure && taskConfig.on_failure.length > 0) {\n newOutputs = [...new Set([...state.availableOutputs, ...taskConfig.on_failure])];\n }\n\n // Check circuit breaker\n if (taskConfig?.circuit_breaker && updatedTask.executionCount >= taskConfig.circuit_breaker.max_executions) {\n const breakTokens = taskConfig.circuit_breaker.on_break;\n newOutputs = [...new Set([...newOutputs, ...breakTokens])];\n }\n\n return {\n ...state,\n tasks: { ...state.tasks, [taskName]: updatedTask },\n availableOutputs: newOutputs,\n lastUpdated: new Date().toISOString(),\n };\n}\n\n/**\n * Apply task progress update. Pure function.\n */\nexport function applyTaskProgress(\n state: ExecutionState,\n taskName: string,\n message?: string,\n progress?: number\n): ExecutionState {\n const existingTask = state.tasks[taskName] ?? createDefaultTaskState();\n\n const updatedTask: TaskState = {\n ...existingTask,\n progress: typeof progress === 'number' ? progress : existingTask.progress,\n messages: [\n ...(existingTask.messages ?? []),\n ...(message ? [{ message, timestamp: new Date().toISOString(), status: existingTask.status }] : []),\n ],\n lastUpdated: new Date().toISOString(),\n };\n\n return {\n ...state,\n tasks: { ...state.tasks, [taskName]: updatedTask },\n lastUpdated: new Date().toISOString(),\n };\n}\n\nfunction createDefaultTaskState(): TaskState {\n return {\n status: 'not-started',\n executionCount: 0,\n retryCount: 0,\n lastEpoch: 0,\n messages: [],\n progress: null,\n };\n}\n","/**\n * Event Graph — Reducer\n *\n * The core state transition function: f(state, event, graph) → newState\n * No I/O, no side effects, deterministic.\n */\n\nimport type {\n GraphConfig,\n ExecutionState,\n GraphEvent,\n TaskConfig,\n} from './types.js';\nimport {\n applyTaskStart,\n applyTaskCompletion,\n applyTaskFailure,\n applyTaskProgress,\n} from './task-transitions.js';\nimport { createDefaultTaskState, createInitialExecutionState } from './graph-helpers.js';\n\n/**\n * Apply an event to the current execution state, producing a new state.\n * Pure function — the heart of the event-graph reducer.\n *\n * @param state - Current execution state\n * @param event - Event to apply\n * @param graph - Graph configuration (needed for task definitions)\n * @returns New execution state\n */\nexport function apply(\n state: ExecutionState,\n event: GraphEvent,\n graph: GraphConfig\n): ExecutionState {\n // Ghost event filtering: skip events from a different execution\n if ('executionId' in event && event.executionId && event.executionId !== state.executionId) {\n return state;\n }\n\n switch (event.type) {\n case 'task-started':\n return applyTaskStart(state, event.taskName);\n\n case 'task-completed':\n return applyTaskCompletion(state, graph, event.taskName, event.result);\n\n case 'task-failed':\n return applyTaskFailure(state, graph, event.taskName, event.error);\n\n case 'task-progress':\n return applyTaskProgress(state, event.taskName, event.message, event.progress);\n\n case 'inject-tokens':\n return applyInjectTokens(state, event.tokens);\n\n case 'agent-action':\n return applyAgentAction(state, event.action, graph, event.config);\n\n case 'task-creation':\n return applyTaskCreation(state, event.taskName, event.taskConfig);\n\n default:\n return state;\n }\n}\n\n/**\n * Apply multiple events sequentially. Pure function.\n */\nexport function applyAll(\n state: ExecutionState,\n events: GraphEvent[],\n graph: GraphConfig\n): ExecutionState {\n return events.reduce((s, e) => apply(s, e, graph), state);\n}\n\n// ============================================================================\n// Internal reducers\n// ============================================================================\n\nfunction applyInjectTokens(state: ExecutionState, tokens: string[]): ExecutionState {\n return {\n ...state,\n availableOutputs: [...new Set([...state.availableOutputs, ...tokens])],\n lastUpdated: new Date().toISOString(),\n };\n}\n\nfunction applyAgentAction(\n state: ExecutionState,\n action: 'start' | 'stop' | 'pause' | 'resume',\n graph: GraphConfig,\n config?: Partial<{ executionMode: string; conflictStrategy: string; completionStrategy: string }>\n): ExecutionState {\n const now = new Date().toISOString();\n\n switch (action) {\n case 'start': {\n const executionId = `exec-${Date.now()}`;\n const fresh = createInitialExecutionState(graph, executionId);\n // Apply any config overrides\n if (config) {\n if (config.executionMode) {\n fresh.executionConfig.executionMode = config.executionMode as ExecutionState['executionConfig']['executionMode'];\n }\n if (config.conflictStrategy) {\n fresh.executionConfig.conflictStrategy = config.conflictStrategy as ExecutionState['executionConfig']['conflictStrategy'];\n }\n if (config.completionStrategy) {\n fresh.executionConfig.completionStrategy = config.completionStrategy as ExecutionState['executionConfig']['completionStrategy'];\n }\n }\n return fresh;\n }\n\n case 'stop':\n return {\n ...state,\n status: 'stopped',\n executionId: null,\n lastUpdated: now,\n };\n\n case 'pause':\n return {\n ...state,\n status: 'paused',\n lastUpdated: now,\n };\n\n case 'resume':\n return {\n ...state,\n status: 'running',\n lastUpdated: now,\n };\n\n default:\n return state;\n }\n}\n\nfunction applyTaskCreation(\n state: ExecutionState,\n taskName: string,\n taskConfig: TaskConfig\n): ExecutionState {\n // Validate\n if (!taskName || !taskConfig || !Array.isArray(taskConfig.provides)) {\n return state;\n }\n\n return {\n ...state,\n tasks: {\n ...state.tasks,\n [taskName]: createDefaultTaskState(),\n },\n lastUpdated: new Date().toISOString(),\n };\n}\n"]}