yaml-flow 2.2.0 → 2.3.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/README.md +40 -0
- package/dist/{constants-Bwvkbr5s.d.cts → constants-BftTHiuV.d.cts} +51 -1
- package/dist/{constants-Ewufm5cK.d.ts → constants-DMbnp--H.d.ts} +51 -1
- package/dist/event-graph/index.cjs +208 -0
- package/dist/event-graph/index.cjs.map +1 -1
- package/dist/event-graph/index.d.cts +2 -2
- package/dist/event-graph/index.d.ts +2 -2
- package/dist/event-graph/index.js +208 -1
- package/dist/event-graph/index.js.map +1 -1
- package/dist/index.cjs +208 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +208 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/step-machine/reducer.ts","../src/stores/memory.ts","../src/step-machine/StepMachine.ts","../src/step-machine/loader.ts","../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","../src/event-graph/plan.ts","../src/event-graph/mermaid.ts","../src/event-graph/loader.ts","../src/stores/localStorage.ts","../src/stores/file.ts","../src/batch/runner.ts","../src/config/resolve-variables.ts","../src/config/resolve-config-templates.ts"],"names":["allData","missingOutputs","requires","outputGroups","createDefaultTaskState","updatedTask","idx"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Step Machine Reducer — Pure Functions\n *\n * currentState + stepResult → newState\n * No I/O, no side effects, deterministic.\n */\n\nimport type {\n StepFlowConfig,\n StepMachineState,\n StepResult,\n StepReducerResult,\n} from './types.js';\n\n/**\n * Apply a step result to the current state and compute the next state.\n * Pure function: no side effects.\n */\nexport function applyStepResult(\n flow: StepFlowConfig,\n state: StepMachineState,\n stepName: string,\n stepResult: StepResult\n): StepReducerResult {\n const stepConfig = flow.steps[stepName];\n\n if (!stepConfig) {\n throw new Error(`Step \"${stepName}\" not found in flow configuration`);\n }\n\n // Check retry\n if (stepResult.result === 'failure' && stepConfig.retry) {\n const retryCount = state.retryCounts[stepName] ?? 0;\n if (retryCount < stepConfig.retry.max_attempts) {\n return {\n newState: {\n ...state,\n retryCounts: {\n ...state.retryCounts,\n [stepName]: retryCount + 1,\n },\n updatedAt: Date.now(),\n },\n nextStep: stepName,\n isTerminal: false,\n isCircuitBroken: false,\n shouldRetry: true,\n };\n }\n }\n\n // Find transition\n const nextStep = stepConfig.transitions[stepResult.result];\n if (!nextStep) {\n throw new Error(\n `No transition defined for result \"${stepResult.result}\" in step \"${stepName}\"`\n );\n }\n\n // Check if next is terminal\n const isTerminal = !!flow.terminal_states[nextStep];\n\n return {\n newState: {\n ...state,\n currentStep: nextStep,\n stepHistory: [...state.stepHistory, stepName],\n retryCounts: {\n ...state.retryCounts,\n [stepName]: 0,\n },\n updatedAt: Date.now(),\n },\n nextStep,\n isTerminal,\n isCircuitBroken: false,\n shouldRetry: false,\n };\n}\n\n/**\n * Check circuit breaker for a step. Returns the redirected step if broken.\n * Pure function.\n */\nexport function checkCircuitBreaker(\n flow: StepFlowConfig,\n state: StepMachineState,\n stepName: string\n): { broken: boolean; redirectStep?: string; newState: StepMachineState } {\n const stepConfig = flow.steps[stepName];\n if (!stepConfig?.circuit_breaker) {\n return {\n broken: false,\n newState: {\n ...state,\n iterationCounts: {\n ...state.iterationCounts,\n [stepName]: (state.iterationCounts[stepName] ?? 0) + 1,\n },\n updatedAt: Date.now(),\n },\n };\n }\n\n const count = state.iterationCounts[stepName] ?? 0;\n if (count >= stepConfig.circuit_breaker.max_iterations) {\n return {\n broken: true,\n redirectStep: stepConfig.circuit_breaker.on_open,\n newState: {\n ...state,\n currentStep: stepConfig.circuit_breaker.on_open,\n updatedAt: Date.now(),\n },\n };\n }\n\n return {\n broken: false,\n newState: {\n ...state,\n iterationCounts: {\n ...state.iterationCounts,\n [stepName]: count + 1,\n },\n updatedAt: Date.now(),\n },\n };\n}\n\n/**\n * Compute what a step needs as input. Pure function.\n */\nexport function computeStepInput(\n flow: StepFlowConfig,\n stepName: string,\n allData: Record<string, unknown>\n): Record<string, unknown> {\n const stepConfig = flow.steps[stepName];\n if (!stepConfig) {\n throw new Error(`Step \"${stepName}\" not found`);\n }\n\n if (stepConfig.expects_data) {\n const input: Record<string, unknown> = {};\n for (const key of stepConfig.expects_data) {\n input[key] = allData[key];\n }\n return input;\n }\n\n // If no expects_data, pass all data\n return { ...allData };\n}\n\n/**\n * Extract return data from terminal state. Pure function.\n */\nexport function extractReturnData(\n returnArtifacts: string | string[] | false | undefined,\n allData: Record<string, unknown>\n): Record<string, unknown> {\n if (returnArtifacts === false || returnArtifacts === undefined) {\n return {};\n }\n\n if (typeof returnArtifacts === 'string') {\n return { [returnArtifacts]: allData[returnArtifacts] };\n }\n\n if (Array.isArray(returnArtifacts)) {\n const result: Record<string, unknown> = {};\n for (const key of returnArtifacts) {\n result[key] = allData[key];\n }\n return result;\n }\n\n return {};\n}\n\n/**\n * Create initial state for a new run. Pure function.\n */\nexport function createInitialState(\n flow: StepFlowConfig,\n runId: string\n): StepMachineState {\n const now = Date.now();\n return {\n runId,\n flowId: flow.id ?? 'unnamed',\n currentStep: flow.settings.start_step,\n status: 'running',\n stepHistory: [],\n iterationCounts: {},\n retryCounts: {},\n startedAt: now,\n updatedAt: now,\n };\n}\n","/**\n * yaml-flow - Memory Store\n * \n * In-memory store implementation. Works in both browser and Node.js.\n * Data is lost when the process exits - use for testing or short-lived flows.\n */\n\nimport type { StepMachineStore, StepMachineState } from '../step-machine/types.js';\n\nexport class MemoryStore implements StepMachineStore {\n private runs: Map<string, StepMachineState> = new Map();\n private data: Map<string, Record<string, unknown>> = new Map();\n\n async saveRunState(runId: string, state: StepMachineState): Promise<void> {\n this.runs.set(runId, { ...state });\n }\n\n async loadRunState(runId: string): Promise<StepMachineState | null> {\n const state = this.runs.get(runId);\n return state ? { ...state } : null;\n }\n\n async deleteRunState(runId: string): Promise<void> {\n this.runs.delete(runId);\n this.data.delete(runId);\n }\n\n async setData(runId: string, key: string, value: unknown): Promise<void> {\n if (!this.data.has(runId)) {\n this.data.set(runId, {});\n }\n const runData = this.data.get(runId)!;\n runData[key] = value;\n }\n\n async getData(runId: string, key: string): Promise<unknown> {\n return this.data.get(runId)?.[key];\n }\n\n async getAllData(runId: string): Promise<Record<string, unknown>> {\n return { ...(this.data.get(runId) ?? {}) };\n }\n\n async clearData(runId: string): Promise<void> {\n this.data.delete(runId);\n }\n\n async listRuns(): Promise<string[]> {\n return Array.from(this.runs.keys());\n }\n\n /**\n * Clear all data (useful for testing)\n */\n clear(): void {\n this.runs.clear();\n this.data.clear();\n }\n}\n","/**\n * Step Machine — Convenience Driver Class\n *\n * Wraps the pure reducer with a run loop and store I/O.\n * This is the framework layer. The reducer is the pure core.\n */\n\nimport type {\n StepFlowConfig,\n StepMachineStore,\n StepMachineResult,\n StepHandler,\n StepContext,\n StepResult,\n StepMachineState,\n StepMachineOptions,\n StepEvent,\n StepEventType,\n StepEventListener,\n} from './types.js';\nimport {\n applyStepResult,\n checkCircuitBreaker,\n computeStepInput,\n extractReturnData,\n createInitialState,\n} from './reducer.js';\nimport { MemoryStore } from '../stores/memory.js';\n\nfunction generateRunId(): string {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\nexport class StepMachine {\n private flow: StepFlowConfig;\n private handlers: Map<string, StepHandler>;\n private store: StepMachineStore;\n private components: Record<string, unknown>;\n private options: StepMachineOptions;\n private listeners: Map<StepEventType, Set<StepEventListener>> = new Map();\n private aborted = false;\n\n constructor(\n flow: StepFlowConfig,\n handlers: Record<string, StepHandler>,\n options: StepMachineOptions = {}\n ) {\n this.flow = flow;\n this.handlers = new Map(Object.entries(handlers));\n this.store = options.store ?? new MemoryStore();\n this.components = options.components ?? {};\n this.options = options;\n\n if (options.signal) {\n options.signal.addEventListener('abort', () => {\n this.aborted = true;\n });\n }\n\n this.validateFlow();\n }\n\n private validateFlow(): void {\n const { settings, steps, terminal_states } = this.flow;\n\n if (!settings?.start_step) {\n throw new Error('Flow must have settings.start_step defined');\n }\n if (!steps || Object.keys(steps).length === 0) {\n throw new Error('Flow must have at least one step defined');\n }\n if (!terminal_states || Object.keys(terminal_states).length === 0) {\n throw new Error('Flow must have at least one terminal_state defined');\n }\n if (!steps[settings.start_step] && !terminal_states[settings.start_step]) {\n throw new Error(`Start step \"${settings.start_step}\" not found`);\n }\n for (const [stepName, stepConfig] of Object.entries(steps)) {\n for (const [result, target] of Object.entries(stepConfig.transitions)) {\n if (!steps[target] && !terminal_states[target]) {\n throw new Error(\n `Step \"${stepName}\" transition \"${result}\" points to unknown step \"${target}\"`\n );\n }\n }\n }\n }\n\n on(eventType: StepEventType, listener: StepEventListener): void {\n if (!this.listeners.has(eventType)) {\n this.listeners.set(eventType, new Set());\n }\n this.listeners.get(eventType)!.add(listener);\n }\n\n off(eventType: StepEventType, listener: StepEventListener): void {\n this.listeners.get(eventType)?.delete(listener);\n }\n\n private emit(event: StepEvent): void {\n const typeListeners = this.listeners.get(event.type);\n if (typeListeners) {\n for (const listener of typeListeners) {\n try { listener(event); } catch { /* swallow listener errors */ }\n }\n }\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n async run(initialData?: Record<string, unknown>): Promise<StepMachineResult> {\n const runId = generateRunId();\n let runState = createInitialState(this.flow, runId);\n\n await this.store.saveRunState(runId, runState);\n\n if (initialData) {\n for (const [key, value] of Object.entries(initialData)) {\n await this.store.setData(runId, key, value);\n }\n }\n\n this.emit({\n type: 'flow:start',\n runId,\n timestamp: runState.startedAt,\n data: { initialData: initialData ?? {} },\n });\n\n try {\n return await this.executeLoop(runId, runState);\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n this.emit({ type: 'flow:error', runId, timestamp: Date.now(), data: { error: err.message } });\n this.options.onError?.(err);\n\n runState = { ...runState, status: 'failed', updatedAt: Date.now() };\n await this.store.saveRunState(runId, runState);\n\n return {\n runId,\n status: 'failed',\n data: await this.store.getAllData(runId),\n finalStep: runState.currentStep,\n stepHistory: runState.stepHistory,\n durationMs: Date.now() - runState.startedAt,\n error: err,\n };\n }\n }\n\n async resume(runId: string): Promise<StepMachineResult> {\n const runState = await this.store.loadRunState(runId);\n if (!runState) throw new Error(`No run found with ID: ${runId}`);\n if (runState.status === 'completed' || runState.status === 'failed') {\n throw new Error(`Cannot resume a ${runState.status} run`);\n }\n\n const updated: StepMachineState = { ...runState, status: 'running', pausedAt: undefined, updatedAt: Date.now() };\n await this.store.saveRunState(runId, updated);\n this.emit({ type: 'flow:resumed', runId, timestamp: Date.now(), data: { currentStep: updated.currentStep } });\n\n return this.executeLoop(runId, updated);\n }\n\n async pause(runId: string): Promise<void> {\n const runState = await this.store.loadRunState(runId);\n if (!runState) throw new Error(`No run found with ID: ${runId}`);\n\n const updated: StepMachineState = { ...runState, status: 'paused', pausedAt: Date.now(), updatedAt: Date.now() };\n await this.store.saveRunState(runId, updated);\n this.emit({ type: 'flow:paused', runId, timestamp: Date.now(), data: { currentStep: updated.currentStep } });\n }\n\n private async executeLoop(runId: string, runState: StepMachineState): Promise<StepMachineResult> {\n const maxSteps = this.flow.settings.max_total_steps ?? 100;\n const timeoutMs = this.flow.settings.timeout_ms;\n let current = runState;\n let iterations = 0;\n\n while (iterations < maxSteps) {\n if (this.aborted) {\n current = { ...current, status: 'cancelled', updatedAt: Date.now() };\n await this.store.saveRunState(runId, current);\n return { runId, status: 'cancelled', data: await this.store.getAllData(runId), finalStep: current.currentStep, stepHistory: current.stepHistory, durationMs: Date.now() - current.startedAt };\n }\n\n if (timeoutMs && Date.now() - current.startedAt > timeoutMs) {\n current = { ...current, status: 'completed', updatedAt: Date.now() };\n await this.store.saveRunState(runId, current);\n return { runId, status: 'timeout', intent: 'timeout', data: await this.store.getAllData(runId), finalStep: current.currentStep, stepHistory: current.stepHistory, durationMs: Date.now() - current.startedAt };\n }\n\n const stepName = current.currentStep;\n\n // Terminal state check\n const terminalState = this.flow.terminal_states[stepName];\n if (terminalState) {\n current = { ...current, status: 'completed', updatedAt: Date.now() };\n await this.store.saveRunState(runId, current);\n const allData = await this.store.getAllData(runId);\n const result: StepMachineResult = {\n runId, status: 'completed', intent: terminalState.return_intent,\n data: extractReturnData(terminalState.return_artifacts, allData),\n finalStep: stepName, stepHistory: current.stepHistory, durationMs: Date.now() - current.startedAt,\n };\n this.emit({ type: 'flow:complete', runId, timestamp: Date.now(), data: { ...result } });\n this.options.onComplete?.(result);\n return result;\n }\n\n // Circuit breaker (pure)\n const cbResult = checkCircuitBreaker(this.flow, current, stepName);\n if (cbResult.broken) {\n current = cbResult.newState;\n await this.store.saveRunState(runId, current);\n iterations++;\n continue;\n }\n current = cbResult.newState;\n\n // Execute step handler (impure — localized)\n const allData = await this.store.getAllData(runId);\n const input = computeStepInput(this.flow, stepName, allData);\n const context: StepContext = {\n runId, stepName, components: this.components, store: this.store,\n signal: this.options.signal,\n emit: (event: string, data: unknown) => {\n this.emit({ type: 'step:complete' as StepEventType, runId, timestamp: Date.now(), data: { event, payload: data } });\n },\n };\n\n this.emit({ type: 'step:start', runId, timestamp: Date.now(), data: { step: stepName, input } });\n\n let stepResult: StepResult;\n try {\n const handler = this.handlers.get(stepName);\n if (!handler) throw new Error(`No handler registered for step \"${stepName}\"`);\n stepResult = await handler(input, context);\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n this.emit({ type: 'step:error', runId, timestamp: Date.now(), data: { step: stepName, error: err.message } });\n stepResult = { result: 'failure', data: { error: err.message } };\n }\n\n // Store produced data\n if (stepResult.data) {\n for (const [key, value] of Object.entries(stepResult.data)) {\n await this.store.setData(runId, key, value);\n }\n }\n\n this.emit({ type: 'step:complete', runId, timestamp: Date.now(), data: { step: stepName, result: stepResult.result } });\n this.options.onStep?.(stepName, stepResult);\n\n // Apply step result (pure reducer)\n const reducerResult = applyStepResult(this.flow, current, stepName, stepResult);\n current = reducerResult.newState;\n\n if (reducerResult.shouldRetry) {\n await this.store.saveRunState(runId, current);\n const stepConfig = this.flow.steps[stepName];\n if (stepConfig.retry?.delay_ms) {\n const retryCount = current.retryCounts[stepName] ?? 0;\n const delay = stepConfig.retry.backoff_multiplier\n ? stepConfig.retry.delay_ms * Math.pow(stepConfig.retry.backoff_multiplier, retryCount - 1)\n : stepConfig.retry.delay_ms;\n await this.sleep(delay);\n }\n iterations++;\n continue;\n }\n\n await this.store.saveRunState(runId, current);\n this.emit({ type: 'transition', runId, timestamp: Date.now(), data: { from: stepName, to: current.currentStep, result: stepResult.result } });\n this.options.onTransition?.(stepName, current.currentStep);\n iterations++;\n }\n\n // Max iterations\n current = { ...current, status: 'completed', updatedAt: Date.now() };\n await this.store.saveRunState(runId, current);\n return { runId, status: 'max_iterations', intent: 'max_iterations', data: await this.store.getAllData(runId), finalStep: current.currentStep, stepHistory: current.stepHistory, durationMs: Date.now() - current.startedAt };\n }\n}\n\n/** Convenience factory */\nexport function createStepMachine(\n flow: StepFlowConfig,\n handlers: Record<string, StepHandler>,\n options?: StepMachineOptions\n): StepMachine {\n return new StepMachine(flow, handlers, options);\n}\n","/**\n * Step Machine — Loader\n *\n * Utilities for loading and validating step-machine flow configurations.\n */\n\nimport type { StepFlowConfig } from './types.js';\n\nexport async function parseStepFlowYaml(yamlString: string): Promise<StepFlowConfig> {\n const yaml = await import('yaml');\n return yaml.parse(yamlString) as StepFlowConfig;\n}\n\nexport async function loadStepFlowFromUrl(url: string): Promise<StepFlowConfig> {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to load flow from ${url}: ${response.statusText}`);\n }\n const contentType = response.headers.get('content-type') ?? '';\n const text = await response.text();\n if (contentType.includes('json') || url.endsWith('.json')) {\n return JSON.parse(text) as StepFlowConfig;\n }\n return parseStepFlowYaml(text);\n}\n\nexport async function loadStepFlowFromFile(filePath: string): Promise<StepFlowConfig> {\n const fs = await import('fs/promises');\n const text = await fs.readFile(filePath, 'utf-8');\n if (filePath.endsWith('.json')) {\n return JSON.parse(text) as StepFlowConfig;\n }\n return parseStepFlowYaml(text);\n}\n\nexport function validateStepFlowConfig(flow: unknown): string[] {\n const errors: string[] = [];\n if (!flow || typeof flow !== 'object') {\n return ['Flow must be an object'];\n }\n const f = flow as Record<string, unknown>;\n\n if (!f.settings || typeof f.settings !== 'object') {\n errors.push('Flow must have a \"settings\" object');\n } else {\n const settings = f.settings as Record<string, unknown>;\n if (typeof settings.start_step !== 'string') {\n errors.push('settings.start_step must be a string');\n }\n }\n\n if (!f.steps || typeof f.steps !== 'object') {\n errors.push('Flow must have a \"steps\" object');\n } else {\n const steps = f.steps as Record<string, unknown>;\n for (const [stepName, stepConfig] of Object.entries(steps)) {\n if (!stepConfig || typeof stepConfig !== 'object') {\n errors.push(`Step \"${stepName}\" must be an object`);\n continue;\n }\n const step = stepConfig as Record<string, unknown>;\n if (!step.transitions || typeof step.transitions !== 'object') {\n errors.push(`Step \"${stepName}\" must have a \"transitions\" object`);\n }\n }\n }\n\n if (!f.terminal_states || typeof f.terminal_states !== 'object') {\n errors.push('Flow must have a \"terminal_states\" object');\n } else {\n const terminals = f.terminal_states as Record<string, unknown>;\n for (const [name, config] of Object.entries(terminals)) {\n if (!config || typeof config !== 'object') {\n errors.push(`Terminal state \"${name}\" must be an object`);\n continue;\n }\n const terminal = config as Record<string, unknown>;\n if (typeof terminal.return_intent !== 'string') {\n errors.push(`Terminal state \"${name}\" must have a \"return_intent\" string`);\n }\n }\n }\n\n return errors;\n}\n\nexport async function loadStepFlow(source: string | StepFlowConfig): Promise<StepFlowConfig> {\n let flow: StepFlowConfig;\n if (typeof source === 'string') {\n if (source.startsWith('http://') || source.startsWith('https://')) {\n flow = await loadStepFlowFromUrl(source);\n } else if (source.includes('{')) {\n flow = JSON.parse(source);\n } else {\n flow = await loadStepFlowFromFile(source);\n }\n } else {\n flow = source;\n }\n const errors = validateStepFlowConfig(flow);\n if (errors.length > 0) {\n throw new Error(`Invalid step flow configuration:\\n- ${errors.join('\\n- ')}`);\n }\n return flow;\n}\n","/**\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","/**\n * Event Graph — Execution Plan (Dry Run)\n *\n * Compute the full execution plan from a GraphConfig without running anything.\n * Shows phases (what runs in parallel), dependency edges, and potential issues.\n *\n * Pure function — no I/O, no side effects.\n */\n\nimport type { GraphConfig, TaskConfig } from './types.js';\nimport { getRequires, getProvides, getAllTasks } from './graph-helpers.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface ExecutionPlan {\n /** Ordered phases — tasks within a phase can run in parallel */\n phases: string[][];\n /** Dependency edges: taskName → tasks it depends on */\n dependencies: Record<string, string[]>;\n /** Tasks that provide conflicts (same output from multiple tasks) */\n conflicts: Record<string, string[]>;\n /** Tasks that have no requires (entry points) */\n entryPoints: string[];\n /** Tasks that nothing depends on (leaf nodes) */\n leafTasks: string[];\n /** Tokens required but not produced by any task */\n unreachableTokens: string[];\n /** Tasks blocked by unreachable tokens */\n blockedTasks: string[];\n /** Total number of phases (depth of the graph) */\n depth: number;\n /** Max parallelism (widest phase) */\n maxParallelism: number;\n}\n\n// ============================================================================\n// Implementation\n// ============================================================================\n\n/**\n * Build a map: token → tasks that produce it.\n */\nfunction buildProducerMap(tasks: Record<string, TaskConfig>): Record<string, string[]> {\n const map: Record<string, string[]> = {};\n for (const [name, config] of Object.entries(tasks)) {\n for (const token of getProvides(config)) {\n if (!map[token]) map[token] = [];\n map[token].push(name);\n }\n // Also count `on` conditional provides\n if (config.on) {\n for (const tokens of Object.values(config.on)) {\n for (const token of tokens) {\n if (!map[token]) map[token] = [];\n if (!map[token].includes(name)) map[token].push(name);\n }\n }\n }\n // on_failure provides\n if (config.on_failure) {\n for (const token of config.on_failure) {\n if (!map[token]) map[token] = [];\n if (!map[token].includes(name)) map[token].push(name);\n }\n }\n }\n return map;\n}\n\n/**\n * Build task-to-task dependency edges from the token graph.\n */\nfunction buildDependencies(\n tasks: Record<string, TaskConfig>,\n producerMap: Record<string, string[]>,\n): Record<string, string[]> {\n const deps: Record<string, string[]> = {};\n for (const [name, config] of Object.entries(tasks)) {\n const required = getRequires(config);\n const taskDeps = new Set<string>();\n for (const token of required) {\n const producers = producerMap[token] || [];\n for (const producer of producers) {\n if (producer !== name) taskDeps.add(producer);\n }\n }\n deps[name] = [...taskDeps];\n }\n return deps;\n}\n\n/**\n * Topological sort into phases using Kahn's algorithm.\n * Tasks within the same phase have all deps satisfied and can run in parallel.\n */\nfunction computePhases(\n taskNames: string[],\n dependencies: Record<string, string[]>,\n): string[][] {\n // Build in-degree map (only counting edges to tasks in taskNames)\n const taskSet = new Set(taskNames);\n const inDegree: Record<string, number> = {};\n const dependents: Record<string, string[]> = {};\n\n for (const name of taskNames) {\n inDegree[name] = 0;\n dependents[name] = [];\n }\n\n for (const name of taskNames) {\n for (const dep of dependencies[name] || []) {\n if (taskSet.has(dep)) {\n inDegree[name]++;\n dependents[dep].push(name);\n }\n }\n }\n\n const phases: string[][] = [];\n const remaining = new Set(taskNames);\n\n while (remaining.size > 0) {\n // Find all tasks with in-degree 0\n const phase: string[] = [];\n for (const name of remaining) {\n if (inDegree[name] === 0) {\n phase.push(name);\n }\n }\n\n if (phase.length === 0) {\n // Remaining tasks form a cycle — add them all as a \"stuck\" phase\n phases.push([...remaining]);\n break;\n }\n\n phase.sort(); // deterministic ordering within a phase\n phases.push(phase);\n\n // Remove this phase and update in-degrees\n for (const name of phase) {\n remaining.delete(name);\n for (const dependent of dependents[name] || []) {\n if (remaining.has(dependent)) {\n inDegree[dependent]--;\n }\n }\n }\n }\n\n return phases;\n}\n\n/**\n * Compute a full execution plan from a graph config.\n *\n * Shows the order tasks would execute, what can run in parallel,\n * where conflicts exist, and what's unreachable — all without\n * actually running anything.\n *\n * @param graph - The event-graph configuration\n * @returns ExecutionPlan with phases, dependencies, conflicts, and diagnostics\n */\nexport function planExecution(graph: GraphConfig): ExecutionPlan {\n const tasks = getAllTasks(graph);\n const taskNames = Object.keys(tasks);\n\n if (taskNames.length === 0) {\n return {\n phases: [],\n dependencies: {},\n conflicts: {},\n entryPoints: [],\n leafTasks: [],\n unreachableTokens: [],\n blockedTasks: [],\n depth: 0,\n maxParallelism: 0,\n };\n }\n\n const producerMap = buildProducerMap(tasks);\n const dependencies = buildDependencies(tasks, producerMap);\n\n // Find conflicts: tokens provided by more than one task\n const conflicts: Record<string, string[]> = {};\n for (const [token, producers] of Object.entries(producerMap)) {\n if (producers.length > 1) {\n conflicts[token] = producers;\n }\n }\n\n // Entry points: tasks with no requires\n const entryPoints = taskNames.filter((name) => getRequires(tasks[name]).length === 0);\n\n // Leaf tasks: tasks that no other task depends on\n const dependedOn = new Set<string>();\n for (const deps of Object.values(dependencies)) {\n for (const dep of deps) dependedOn.add(dep);\n }\n const leafTasks = taskNames.filter((name) => !dependedOn.has(name));\n\n // Unreachable tokens: required by some task but produced by none\n const allRequired = new Set<string>();\n for (const config of Object.values(tasks)) {\n for (const token of getRequires(config)) {\n allRequired.add(token);\n }\n }\n const unreachableTokens = [...allRequired].filter((token) => !producerMap[token]);\n\n // Blocked tasks: tasks that require unreachable tokens\n const unreachableSet = new Set(unreachableTokens);\n const blockedTasks = taskNames.filter((name) =>\n getRequires(tasks[name]).some((token) => unreachableSet.has(token)),\n );\n\n // Compute phases\n const phases = computePhases(taskNames, dependencies);\n\n return {\n phases,\n dependencies,\n conflicts,\n entryPoints,\n leafTasks: leafTasks.sort(),\n unreachableTokens: unreachableTokens.sort(),\n blockedTasks: blockedTasks.sort(),\n depth: phases.length,\n maxParallelism: Math.max(0, ...phases.map((p) => p.length)),\n };\n}\n","/**\n * Mermaid Diagram Export\n *\n * Generate Mermaid diagram strings from GraphConfig (event-graph)\n * and StepFlowConfig (step-machine). Useful for documentation,\n * debugging, and CI reports.\n *\n * Pure functions — no I/O, no side effects.\n */\n\nimport type { GraphConfig } from './types.js';\nimport type { StepFlowConfig } from '../step-machine/types.js';\nimport { getRequires, getProvides, getAllTasks } from './graph-helpers.js';\n\n// ============================================================================\n// Event Graph → Mermaid\n// ============================================================================\n\nexport interface MermaidOptions {\n /** Diagram direction: TB (top-bottom), LR (left-right), etc. Default: 'TD' */\n direction?: 'TD' | 'TB' | 'LR' | 'RL' | 'BT';\n /** Show token labels on edges. Default: true */\n showTokens?: boolean;\n /** Title comment at top. Default: graph.id or 'Event Graph' */\n title?: string;\n}\n\n/**\n * Sanitize a name for Mermaid node IDs (replace hyphens, special chars).\n */\nfunction sanitizeId(name: string): string {\n return name.replace(/[^a-zA-Z0-9_]/g, '_');\n}\n\n/**\n * Generate a Mermaid dependency graph from an event-graph config.\n *\n * Tasks are nodes. Edges represent token dependencies:\n * if task B requires token X and task A provides X, then A --> B.\n *\n * @param graph - Event graph configuration\n * @param options - Diagram options\n * @returns Mermaid diagram string\n */\nexport function graphToMermaid(graph: GraphConfig, options: MermaidOptions = {}): string {\n const { direction = 'TD', showTokens = true, title } = options;\n const tasks = getAllTasks(graph);\n const taskNames = Object.keys(tasks);\n\n if (taskNames.length === 0) {\n return `graph ${direction}\\n empty[No tasks defined]`;\n }\n\n // Build producer map: token → tasks that provide it\n const producerMap: Record<string, string[]> = {};\n for (const [name, config] of Object.entries(tasks)) {\n for (const token of getProvides(config)) {\n if (!producerMap[token]) producerMap[token] = [];\n producerMap[token].push(name);\n }\n if (config.on) {\n for (const tokens of Object.values(config.on)) {\n for (const token of tokens) {\n if (!producerMap[token]) producerMap[token] = [];\n if (!producerMap[token].includes(name)) producerMap[token].push(name);\n }\n }\n }\n }\n\n const lines: string[] = [];\n const diagramTitle = title || graph.id || 'Event Graph';\n lines.push(`%% ${diagramTitle}`);\n lines.push(`graph ${direction}`);\n\n // Find leaf tasks: tasks whose tokens no other task requires\n const allRequired = new Set<string>();\n for (const config of Object.values(tasks)) {\n for (const token of getRequires(config)) {\n allRequired.add(token);\n }\n }\n const leafTaskSet = new Set(\n taskNames.filter((name) => {\n const prov = getProvides(tasks[name]);\n return prov.length === 0 || prov.every((token) => !allRequired.has(token));\n }),\n );\n\n // Declare nodes\n for (const name of taskNames) {\n const id = sanitizeId(name);\n const req = getRequires(tasks[name]);\n if (req.length === 0) {\n // Entry point — use rounded rectangle\n lines.push(` ${id}([${name}])`);\n } else if (leafTaskSet.has(name)) {\n // Leaf node — use double bracketed\n lines.push(` ${id}[[${name}]]`);\n } else {\n lines.push(` ${id}[${name}]`);\n }\n }\n\n // Edges: for each task's requires, find producers and draw edges\n const edgeSet = new Set<string>();\n for (const [name, config] of Object.entries(tasks)) {\n const required = getRequires(config);\n for (const token of required) {\n const producers = producerMap[token] || [];\n for (const producer of producers) {\n if (producer === name) continue;\n const edgeKey = `${producer}->${name}:${token}`;\n if (edgeSet.has(edgeKey)) continue;\n edgeSet.add(edgeKey);\n\n const fromId = sanitizeId(producer);\n const toId = sanitizeId(name);\n if (showTokens) {\n lines.push(` ${fromId} -->|${token}| ${toId}`);\n } else {\n lines.push(` ${fromId} --> ${toId}`);\n }\n }\n }\n\n // Unreachable requires (no producer) — mark with dotted edge from a warning node\n for (const token of required) {\n if (!producerMap[token]) {\n const warnId = `warn_${sanitizeId(token)}`;\n const toId = sanitizeId(name);\n lines.push(` ${warnId}{{⚠ ${token}}} -.->|missing| ${toId}`);\n }\n }\n }\n\n return lines.join('\\n');\n}\n\n// ============================================================================\n// Step Machine → Mermaid\n// ============================================================================\n\n/**\n * Generate a Mermaid flowchart from a step-machine config.\n *\n * Steps are nodes. Transitions are labeled edges.\n * Terminal states are shown as filled/rounded nodes.\n *\n * @param flow - Step machine flow configuration\n * @param options - Diagram options\n * @returns Mermaid diagram string\n */\nexport function flowToMermaid(flow: StepFlowConfig, options: MermaidOptions = {}): string {\n const { direction = 'TD', title } = options;\n const steps = flow.steps;\n const terminals = flow.terminal_states;\n const startStep = flow.settings.start_step;\n\n const lines: string[] = [];\n const diagramTitle = title || flow.id || 'Step Machine';\n lines.push(`%% ${diagramTitle}`);\n lines.push(`graph ${direction}`);\n\n // Start node\n lines.push(` START(( ))`);\n lines.push(` START --> ${sanitizeId(startStep)}`);\n\n // Step nodes\n for (const name of Object.keys(steps)) {\n const id = sanitizeId(name);\n lines.push(` ${id}[${name}]`);\n }\n\n // Terminal nodes (stadium shape)\n for (const [name, config] of Object.entries(terminals)) {\n const id = sanitizeId(name);\n lines.push(` ${id}([${name}: ${config.return_intent}])`);\n }\n\n // Transition edges\n for (const [stepName, stepConfig] of Object.entries(steps)) {\n const fromId = sanitizeId(stepName);\n for (const [result, target] of Object.entries(stepConfig.transitions)) {\n const toId = sanitizeId(target);\n lines.push(` ${fromId} -->|${result}| ${toId}`);\n }\n }\n\n return lines.join('\\n');\n}\n","/**\n * Event Graph — Loader & Exporter\n *\n * Load GraphConfig from YAML/JSON files or strings, and export back.\n * Mirrors the step-machine's loadStepFlow/validateStepFlowConfig pattern.\n */\n\nimport type { GraphConfig } from './types.js';\n\n// ============================================================================\n// Validation\n// ============================================================================\n\n/**\n * Validate a GraphConfig object. Returns an array of error strings.\n * Empty array = valid config.\n */\nexport function validateGraphConfig(config: unknown): string[] {\n const errors: string[] = [];\n\n if (!config || typeof config !== 'object') {\n return ['Graph config must be an object'];\n }\n\n const c = config as Record<string, unknown>;\n\n // Settings\n if (!c.settings || typeof c.settings !== 'object') {\n errors.push('Graph config must have a \"settings\" object');\n } else {\n const settings = c.settings as Record<string, unknown>;\n if (!settings.completion || typeof settings.completion !== 'string') {\n errors.push('settings.completion must be a string');\n }\n if (settings.completion === 'goal-reached') {\n if (!Array.isArray(settings.goal) || settings.goal.length === 0) {\n errors.push('settings.goal must be a non-empty array when completion is \"goal-reached\"');\n }\n }\n }\n\n // Tasks\n if (!c.tasks || typeof c.tasks !== 'object') {\n errors.push('Graph config must have a \"tasks\" object');\n } else {\n const tasks = c.tasks as Record<string, unknown>;\n if (Object.keys(tasks).length === 0) {\n errors.push('Graph config must have at least one task');\n }\n for (const [name, task] of Object.entries(tasks)) {\n if (!task || typeof task !== 'object') {\n errors.push(`Task \"${name}\" must be an object`);\n continue;\n }\n const t = task as Record<string, unknown>;\n if (!Array.isArray(t.provides)) {\n errors.push(`Task \"${name}\" must have a \"provides\" array`);\n }\n if (t.requires !== undefined && !Array.isArray(t.requires)) {\n errors.push(`Task \"${name}\".requires must be an array if present`);\n }\n if (t.on !== undefined) {\n if (typeof t.on !== 'object' || Array.isArray(t.on)) {\n errors.push(`Task \"${name}\".on must be an object mapping result keys to token arrays`);\n } else {\n for (const [key, tokens] of Object.entries(t.on as Record<string, unknown>)) {\n if (!Array.isArray(tokens)) {\n errors.push(`Task \"${name}\".on.${key} must be an array of tokens`);\n }\n }\n }\n }\n }\n }\n\n return errors;\n}\n\n// ============================================================================\n// Parsing\n// ============================================================================\n\nasync function parseGraphYaml(yamlString: string): Promise<GraphConfig> {\n const yaml = await import('yaml');\n return yaml.parse(yamlString) as GraphConfig;\n}\n\n// ============================================================================\n// Loading\n// ============================================================================\n\n/**\n * Load a GraphConfig from a file path, URL, JSON string, or object.\n * Validates the config and throws if invalid.\n *\n * @param source - File path (.yaml/.yml/.json), URL, JSON string, or GraphConfig object\n * @returns Validated GraphConfig\n */\nexport async function loadGraphConfig(source: string | GraphConfig): Promise<GraphConfig> {\n let config: GraphConfig;\n\n if (typeof source === 'string') {\n if (source.startsWith('http://') || source.startsWith('https://')) {\n const response = await fetch(source);\n if (!response.ok) {\n throw new Error(`Failed to load graph config from ${source}: ${response.statusText}`);\n }\n const text = await response.text();\n const contentType = response.headers.get('content-type') ?? '';\n if (contentType.includes('json') || source.endsWith('.json')) {\n config = JSON.parse(text) as GraphConfig;\n } else {\n config = await parseGraphYaml(text);\n }\n } else if (source.includes('{')) {\n // Looks like a JSON string\n config = JSON.parse(source) as GraphConfig;\n } else {\n // File path\n const fs = await import('fs/promises');\n const text = await fs.readFile(source, 'utf-8');\n if (source.endsWith('.json')) {\n config = JSON.parse(text) as GraphConfig;\n } else {\n config = await parseGraphYaml(text);\n }\n }\n } else {\n config = source;\n }\n\n const errors = validateGraphConfig(config);\n if (errors.length > 0) {\n throw new Error(`Invalid graph configuration:\\n- ${errors.join('\\n- ')}`);\n }\n\n return config;\n}\n\n// ============================================================================\n// Exporting\n// ============================================================================\n\nexport interface ExportOptions {\n /** Output format. Default: 'json' */\n format?: 'json' | 'yaml';\n /** Indentation for JSON (default: 2) or YAML */\n indent?: number;\n}\n\n/**\n * Export a GraphConfig to a JSON or YAML string.\n *\n * @param config - The graph configuration to export\n * @param options - Export format options\n * @returns Serialized config string\n */\nexport function exportGraphConfig(config: GraphConfig, options: ExportOptions = {}): string {\n const { format = 'json', indent = 2 } = options;\n\n if (format === 'yaml') {\n // Dynamic import isn't available in sync context — use a simple YAML serializer\n return toYaml(config, indent);\n }\n\n return JSON.stringify(config, null, indent);\n}\n\n/**\n * Export a GraphConfig to a file.\n *\n * @param config - The graph configuration to export\n * @param filePath - Output file path (.json or .yaml/.yml)\n * @param options - Export format options (format auto-detected from extension if not specified)\n */\nexport async function exportGraphConfigToFile(\n config: GraphConfig,\n filePath: string,\n options: ExportOptions = {},\n): Promise<void> {\n const format = options.format ??\n (filePath.endsWith('.yaml') || filePath.endsWith('.yml') ? 'yaml' : 'json');\n\n const content = exportGraphConfig(config, { ...options, format });\n const fs = await import('fs/promises');\n await fs.writeFile(filePath, content, 'utf-8');\n}\n\n// ============================================================================\n// Simple YAML serializer (avoids requiring the yaml package for export)\n// ============================================================================\n\nfunction toYaml(obj: unknown, indent: number, depth: number = 0): string {\n const pad = ' '.repeat(indent * depth);\n\n if (obj === null || obj === undefined) return 'null';\n if (typeof obj === 'boolean') return String(obj);\n if (typeof obj === 'number') return String(obj);\n if (typeof obj === 'string') {\n // Quote strings containing special chars\n if (obj.includes(':') || obj.includes('#') || obj.includes('\\n') ||\n obj.includes('\"') || obj.includes(\"'\") || obj.startsWith(' ') ||\n obj.startsWith('{') || obj.startsWith('[') || obj === '') {\n return JSON.stringify(obj);\n }\n return obj;\n }\n\n if (Array.isArray(obj)) {\n if (obj.length === 0) return '[]';\n // Short arrays of simple values: inline\n if (obj.every((v) => typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean')) {\n return `[${obj.map((v) => (typeof v === 'string' ? toYaml(v, indent, 0) : String(v))).join(', ')}]`;\n }\n return obj\n .map((item) => {\n const val = toYaml(item, indent, depth + 1);\n if (typeof item === 'object' && item !== null && !Array.isArray(item)) {\n // Object item: put first key on same line as dash\n const lines = val.trimStart().split('\\n');\n return `${pad}- ${lines[0]}\\n${lines.slice(1).map((l) => `${pad} ${l.trimStart() ? l : ''}`).filter(Boolean).join('\\n')}`;\n }\n return `${pad}- ${val}`;\n })\n .join('\\n');\n }\n\n if (typeof obj === 'object') {\n const entries = Object.entries(obj as Record<string, unknown>);\n if (entries.length === 0) return '{}';\n return entries\n .map(([key, value]) => {\n if (value === undefined) return '';\n const serialized = toYaml(value, indent, depth + 1);\n if (typeof value === 'object' && value !== null && !Array.isArray(value) && Object.keys(value).length > 0) {\n return `${pad}${key}:\\n${serialized}`;\n }\n if (Array.isArray(value) && value.length > 0 &&\n !value.every((v) => typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean')) {\n return `${pad}${key}:\\n${serialized}`;\n }\n return `${pad}${key}: ${serialized}`;\n })\n .filter(Boolean)\n .join('\\n');\n }\n\n return String(obj);\n}\n","/**\n * yaml-flow - LocalStorage Store\n * \n * Browser localStorage-based store implementation.\n * Data persists across page reloads but is limited to ~5MB per origin.\n */\n\nimport type { StepMachineStore, StepMachineState } from '../step-machine/types.js';\n\nexport interface LocalStorageStoreOptions {\n /** Key prefix for namespacing (default: 'yamlflow') */\n prefix?: string;\n}\n\nexport class LocalStorageStore implements StepMachineStore {\n private prefix: string;\n\n constructor(options: LocalStorageStoreOptions = {}) {\n this.prefix = options.prefix ?? 'yamlflow';\n \n // Ensure localStorage is available\n if (typeof localStorage === 'undefined') {\n throw new Error('LocalStorageStore requires localStorage (browser environment)');\n }\n }\n\n private runKey(runId: string): string {\n return `${this.prefix}:run:${runId}`;\n }\n\n private dataKey(runId: string): string {\n return `${this.prefix}:data:${runId}`;\n }\n\n private indexKey(): string {\n return `${this.prefix}:runs`;\n }\n\n async saveRunState(runId: string, state: StepMachineState): Promise<void> {\n localStorage.setItem(this.runKey(runId), JSON.stringify(state));\n \n // Update run index\n const runs = await this.listRuns();\n if (!runs.includes(runId)) {\n runs.push(runId);\n localStorage.setItem(this.indexKey(), JSON.stringify(runs));\n }\n }\n\n async loadRunState(runId: string): Promise<StepMachineState | null> {\n const raw = localStorage.getItem(this.runKey(runId));\n return raw ? JSON.parse(raw) : null;\n }\n\n async deleteRunState(runId: string): Promise<void> {\n localStorage.removeItem(this.runKey(runId));\n localStorage.removeItem(this.dataKey(runId));\n \n // Update run index\n const runs = await this.listRuns();\n const filtered = runs.filter(id => id !== runId);\n localStorage.setItem(this.indexKey(), JSON.stringify(filtered));\n }\n\n async setData(runId: string, key: string, value: unknown): Promise<void> {\n const allData = await this.getAllData(runId);\n allData[key] = value;\n localStorage.setItem(this.dataKey(runId), JSON.stringify(allData));\n }\n\n async getData(runId: string, key: string): Promise<unknown> {\n const allData = await this.getAllData(runId);\n return allData[key];\n }\n\n async getAllData(runId: string): Promise<Record<string, unknown>> {\n const raw = localStorage.getItem(this.dataKey(runId));\n return raw ? JSON.parse(raw) : {};\n }\n\n async clearData(runId: string): Promise<void> {\n localStorage.removeItem(this.dataKey(runId));\n }\n\n async listRuns(): Promise<string[]> {\n const raw = localStorage.getItem(this.indexKey());\n return raw ? JSON.parse(raw) : [];\n }\n\n /**\n * Clear all flow data from localStorage\n */\n clearAll(): void {\n const keysToRemove: string[] = [];\n \n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(this.prefix + ':')) {\n keysToRemove.push(key);\n }\n }\n \n keysToRemove.forEach(key => localStorage.removeItem(key));\n }\n}\n","/**\n * yaml-flow - File Store\n * \n * File-system based store for Node.js environments.\n * Stores each run as a JSON file in the specified directory.\n */\n\nimport type { StepMachineStore, StepMachineState } from '../step-machine/types.js';\n\nexport interface FileStoreOptions {\n /** Directory path for storing flow data */\n directory: string;\n}\n\nexport class FileStore implements StepMachineStore {\n private directory: string;\n private fs: typeof import('fs/promises') | null = null;\n private path: typeof import('path') | null = null;\n\n constructor(options: FileStoreOptions) {\n this.directory = options.directory;\n }\n\n private async ensureModules(): Promise<void> {\n if (!this.fs || !this.path) {\n // Dynamic import for Node.js modules\n this.fs = await import('fs/promises');\n this.path = await import('path');\n \n // Ensure directory exists\n await this.fs.mkdir(this.directory, { recursive: true });\n }\n }\n\n private runPath(runId: string): string {\n return this.path!.join(this.directory, `${runId}.run.json`);\n }\n\n private dataPath(runId: string): string {\n return this.path!.join(this.directory, `${runId}.data.json`);\n }\n\n async saveRunState(runId: string, state: StepMachineState): Promise<void> {\n await this.ensureModules();\n await this.fs!.writeFile(\n this.runPath(runId),\n JSON.stringify(state, null, 2),\n 'utf-8'\n );\n }\n\n async loadRunState(runId: string): Promise<StepMachineState | null> {\n await this.ensureModules();\n try {\n const raw = await this.fs!.readFile(this.runPath(runId), 'utf-8');\n return JSON.parse(raw);\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n return null;\n }\n throw err;\n }\n }\n\n async deleteRunState(runId: string): Promise<void> {\n await this.ensureModules();\n try {\n await this.fs!.unlink(this.runPath(runId));\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n try {\n await this.fs!.unlink(this.dataPath(runId));\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n }\n\n async setData(runId: string, key: string, value: unknown): Promise<void> {\n await this.ensureModules();\n const allData = await this.getAllData(runId);\n allData[key] = value;\n await this.fs!.writeFile(\n this.dataPath(runId),\n JSON.stringify(allData, null, 2),\n 'utf-8'\n );\n }\n\n async getData(runId: string, key: string): Promise<unknown> {\n const allData = await this.getAllData(runId);\n return allData[key];\n }\n\n async getAllData(runId: string): Promise<Record<string, unknown>> {\n await this.ensureModules();\n try {\n const raw = await this.fs!.readFile(this.dataPath(runId), 'utf-8');\n return JSON.parse(raw);\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n return {};\n }\n throw err;\n }\n }\n\n async clearData(runId: string): Promise<void> {\n await this.ensureModules();\n try {\n await this.fs!.unlink(this.dataPath(runId));\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n }\n\n async listRuns(): Promise<string[]> {\n await this.ensureModules();\n try {\n const files = await this.fs!.readdir(this.directory);\n return files\n .filter(f => f.endsWith('.run.json'))\n .map(f => f.replace('.run.json', ''));\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n return [];\n }\n throw err;\n }\n }\n\n /**\n * Clear all flow data from directory\n */\n async clearAll(): Promise<void> {\n await this.ensureModules();\n const runs = await this.listRuns();\n await Promise.all(runs.map(runId => this.deleteRunState(runId)));\n }\n}\n","/**\n * Batch Runner — Core\n *\n * Slot-based concurrent processor. Pure control flow — no I/O opinions.\n *\n * @example Step Machine batch\n * ```ts\n * import { batch } from 'yaml-flow/batch';\n * import { createStepMachine, loadStepFlow } from 'yaml-flow/step-machine';\n *\n * const flow = await loadStepFlow('./support-ticket.yaml');\n * const results = await batch(tickets, {\n * concurrency: 5,\n * processor: async (ticket) => {\n * const machine = createStepMachine(flow, handlers);\n * return machine.run(ticket);\n * },\n * });\n * ```\n *\n * @example Event Graph batch\n * ```ts\n * import { batch } from 'yaml-flow/batch';\n * import { next, apply, createInitialExecutionState } from 'yaml-flow/event-graph';\n *\n * const results = await batch(items, {\n * concurrency: 3,\n * processor: async (item, index) => {\n * let state = createInitialExecutionState(graph, `exec-${index}`);\n * state = apply(state, { type: 'inject-tokens', tokens: [item.token], timestamp: new Date().toISOString() }, graph);\n * // ... drive the graph loop\n * return state;\n * },\n * });\n * ```\n */\n\nimport type {\n BatchOptions,\n BatchResult,\n BatchItemResult,\n BatchProgress,\n} from './types.js';\n\n/**\n * Run an array of items through an async processor with concurrency control.\n *\n * - Items are started in order, up to `concurrency` at a time.\n * - Results are returned in the original item order.\n * - If a processor throws, the item is marked as failed; other items continue.\n * - An AbortSignal prevents new items from starting (in-flight items are not cancelled).\n */\nexport async function batch<TItem, TResult>(\n items: TItem[],\n options: BatchOptions<TItem, TResult>\n): Promise<BatchResult<TItem, TResult>> {\n const {\n concurrency = 5,\n processor,\n onItemComplete,\n onItemError,\n onProgress,\n signal,\n } = options;\n\n const total = items.length;\n const results: BatchItemResult<TItem, TResult>[] = new Array(total);\n const batchStart = Date.now();\n\n let completed = 0;\n let failed = 0;\n let nextIndex = 0;\n\n function makeProgress(active: number): BatchProgress {\n const done = completed + failed;\n return {\n completed,\n failed,\n active,\n pending: total - done - active,\n total,\n percent: total === 0 ? 100 : Math.round((done / total) * 100),\n elapsedMs: Date.now() - batchStart,\n };\n }\n\n // Empty input — short-circuit\n if (total === 0) {\n return { items: [], completed: 0, failed: 0, total: 0, durationMs: 0 };\n }\n\n return new Promise<BatchResult<TItem, TResult>>((resolve) => {\n let active = 0;\n\n function tryStartNext() {\n while (active < concurrency && nextIndex < total) {\n // Respect abort signal — don't start new items\n if (signal?.aborted) {\n // Mark remaining as failed with abort error\n while (nextIndex < total) {\n const idx = nextIndex++;\n results[idx] = {\n item: items[idx],\n index: idx,\n status: 'failed',\n error: new Error('Batch aborted'),\n durationMs: 0,\n };\n failed++;\n }\n // If nothing is in-flight, resolve immediately\n if (active === 0 && completed + failed === total) {\n resolve({\n items: results,\n completed,\n failed,\n total,\n durationMs: Date.now() - batchStart,\n });\n }\n break;\n }\n\n const idx = nextIndex++;\n const item = items[idx];\n active++;\n const itemStart = Date.now();\n\n processor(item, idx)\n .then((result) => {\n results[idx] = {\n item,\n index: idx,\n status: 'completed',\n result,\n durationMs: Date.now() - itemStart,\n };\n completed++;\n onItemComplete?.(item, result, idx);\n })\n .catch((err) => {\n const error = err instanceof Error ? err : new Error(String(err));\n results[idx] = {\n item,\n index: idx,\n status: 'failed',\n error,\n durationMs: Date.now() - itemStart,\n };\n failed++;\n onItemError?.(item, error, idx);\n })\n .finally(() => {\n active--;\n onProgress?.(makeProgress(active));\n\n if (completed + failed === total) {\n resolve({\n items: results,\n completed,\n failed,\n total,\n durationMs: Date.now() - batchStart,\n });\n } else {\n tryStartNext();\n }\n });\n }\n }\n\n tryStartNext();\n });\n}\n","/**\n * Variable interpolation for workflow configs.\n *\n * Walks any object/array and replaces `${KEY}` patterns with values from\n * a variables map. Pure function — returns a new object, never mutates.\n *\n * Works on both GraphConfig and StepFlowConfig (or any plain object).\n *\n * @example\n * ```ts\n * const resolved = resolveVariables(config, {\n * ENTITY_ID: 'ticket-42',\n * TOOLS_DIR: '/opt/tools',\n * });\n * ```\n */\n\nexport type Variables = Record<string, string | number | boolean>;\n\n/**\n * Replace `${KEY}` patterns in a string with values from the variables map.\n * Unmatched variables are left as-is.\n */\nfunction interpolateString(template: string, vars: Variables): string {\n return template.replace(/\\$\\{([^}]+)\\}/g, (match, key: string) => {\n const value = vars[key.trim()];\n return value !== undefined ? String(value) : match;\n });\n}\n\n/**\n * Recursively walk a value and interpolate any `${KEY}` patterns found in strings.\n * Returns a new object/array — never mutates the input.\n */\nfunction walkAndInterpolate<T>(value: T, vars: Variables): T {\n if (typeof value === 'string') {\n return interpolateString(value, vars) as unknown as T;\n }\n if (Array.isArray(value)) {\n return value.map((item) => walkAndInterpolate(item, vars)) as unknown as T;\n }\n if (value !== null && typeof value === 'object') {\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n result[k] = walkAndInterpolate(v, vars);\n }\n return result as T;\n }\n // numbers, booleans, null, undefined — pass through\n return value;\n}\n\n/**\n * Resolve `${KEY}` variable references in a workflow config object.\n *\n * Pure function: config in → new config out. Works on any shape\n * (GraphConfig, StepFlowConfig, or arbitrary objects).\n *\n * @param config - The config object to interpolate\n * @param variables - Key-value pairs to substitute\n * @returns A new config with all `${KEY}` patterns replaced\n */\nexport function resolveVariables<T extends Record<string, unknown>>(\n config: T,\n variables: Variables,\n): T {\n return walkAndInterpolate(config, variables);\n}\n","/**\n * Config template resolution for workflow configs.\n *\n * In large graphs, many tasks share the same base config (cmd, timeout, cwd, headers, etc.).\n * Instead of duplicating, tasks reference a named template via `config-template`.\n * This function deep-merges the template into each task's config, then removes the reference.\n *\n * Pure function — returns a new config, never mutates.\n *\n * @example\n * ```ts\n * const config = {\n * configTemplates: {\n * PYTHON_TOOL: { cmd: 'python', timeout: 30000, cwd: '/workdata' }\n * },\n * tasks: {\n * analyze: {\n * provides: ['analysis'],\n * config: { 'config-template': 'PYTHON_TOOL', 'cmd-args': 'analyze.py' }\n * }\n * }\n * };\n * const resolved = resolveConfigTemplates(config);\n * // analyze.config → { cmd: 'python', timeout: 30000, cwd: '/workdata', 'cmd-args': 'analyze.py' }\n * ```\n */\n\n/** Shape of a config-templates block */\nexport type ConfigTemplates = Record<string, Record<string, unknown>>;\n\n/**\n * Deep-merge template into task config.\n * Task-level values override template values.\n * Nested objects are merged one level deep (like SwarmX's pattern).\n */\nfunction mergeConfigs(\n template: Record<string, unknown>,\n taskConfig: Record<string, unknown>,\n): Record<string, unknown> {\n const merged: Record<string, unknown> = { ...template };\n\n for (const [key, value] of Object.entries(taskConfig)) {\n if (key === 'config-template') continue; // strip the reference\n\n // One-level deep merge for nested objects (both sides must be plain objects)\n if (\n value !== null &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n merged[key] !== null &&\n typeof merged[key] === 'object' &&\n !Array.isArray(merged[key])\n ) {\n merged[key] = {\n ...(merged[key] as Record<string, unknown>),\n ...(value as Record<string, unknown>),\n };\n } else {\n merged[key] = value;\n }\n }\n\n return merged;\n}\n\n/**\n * Resolve `config-template` references in task configs against a `configTemplates` map.\n *\n * Accepts any config object that may contain:\n * - `configTemplates` (camelCase) or `config-templates` (kebab-case) at the top level\n * - `tasks` (event-graph) or `steps` (step-machine) containing task/step objects\n * - Each task/step may have a `config` sub-object with a `config-template` key\n *\n * Returns a new config with templates merged and references removed.\n * The `configTemplates` / `config-templates` key is also removed from the output.\n */\nexport function resolveConfigTemplates<T extends Record<string, unknown>>(config: T): T {\n // Find templates — support both naming conventions\n const templates: ConfigTemplates =\n (config['configTemplates'] as ConfigTemplates) ??\n (config['config-templates'] as ConfigTemplates) ??\n {};\n\n // Find the tasks/steps container\n const tasksKey = 'tasks' in config ? 'tasks' : 'steps' in config ? 'steps' : null;\n if (!tasksKey) return config; // nothing to resolve\n\n const tasks = config[tasksKey] as Record<string, Record<string, unknown>> | undefined;\n if (!tasks || typeof tasks !== 'object') return config;\n\n const resolvedTasks: Record<string, Record<string, unknown>> = {};\n\n for (const [name, task] of Object.entries(tasks)) {\n const taskConfig = task['config'] as Record<string, unknown> | undefined;\n const templateName = taskConfig?.['config-template'] as string | undefined;\n\n if (!templateName || !taskConfig) {\n resolvedTasks[name] = task;\n continue;\n }\n\n const template = templates[templateName];\n if (!template) {\n // Template not found — leave as-is but strip the reference\n const { 'config-template': _, ...rest } = taskConfig;\n resolvedTasks[name] = { ...task, config: rest };\n continue;\n }\n\n resolvedTasks[name] = {\n ...task,\n config: mergeConfigs(template, taskConfig),\n };\n }\n\n // Build result — remove the templates key from output\n const result = { ...config, [tasksKey]: resolvedTasks };\n delete result['configTemplates'];\n delete result['config-templates'];\n return result as T;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/step-machine/reducer.ts","../src/stores/memory.ts","../src/step-machine/StepMachine.ts","../src/step-machine/loader.ts","../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","../src/event-graph/plan.ts","../src/event-graph/mermaid.ts","../src/event-graph/loader.ts","../src/event-graph/validate.ts","../src/stores/localStorage.ts","../src/stores/file.ts","../src/batch/runner.ts","../src/config/resolve-variables.ts","../src/config/resolve-config-templates.ts"],"names":["allData","missingOutputs","requires","outputGroups","createDefaultTaskState","updatedTask","buildProducerMap","idx"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Step Machine Reducer — Pure Functions\n *\n * currentState + stepResult → newState\n * No I/O, no side effects, deterministic.\n */\n\nimport type {\n StepFlowConfig,\n StepMachineState,\n StepResult,\n StepReducerResult,\n} from './types.js';\n\n/**\n * Apply a step result to the current state and compute the next state.\n * Pure function: no side effects.\n */\nexport function applyStepResult(\n flow: StepFlowConfig,\n state: StepMachineState,\n stepName: string,\n stepResult: StepResult\n): StepReducerResult {\n const stepConfig = flow.steps[stepName];\n\n if (!stepConfig) {\n throw new Error(`Step \"${stepName}\" not found in flow configuration`);\n }\n\n // Check retry\n if (stepResult.result === 'failure' && stepConfig.retry) {\n const retryCount = state.retryCounts[stepName] ?? 0;\n if (retryCount < stepConfig.retry.max_attempts) {\n return {\n newState: {\n ...state,\n retryCounts: {\n ...state.retryCounts,\n [stepName]: retryCount + 1,\n },\n updatedAt: Date.now(),\n },\n nextStep: stepName,\n isTerminal: false,\n isCircuitBroken: false,\n shouldRetry: true,\n };\n }\n }\n\n // Find transition\n const nextStep = stepConfig.transitions[stepResult.result];\n if (!nextStep) {\n throw new Error(\n `No transition defined for result \"${stepResult.result}\" in step \"${stepName}\"`\n );\n }\n\n // Check if next is terminal\n const isTerminal = !!flow.terminal_states[nextStep];\n\n return {\n newState: {\n ...state,\n currentStep: nextStep,\n stepHistory: [...state.stepHistory, stepName],\n retryCounts: {\n ...state.retryCounts,\n [stepName]: 0,\n },\n updatedAt: Date.now(),\n },\n nextStep,\n isTerminal,\n isCircuitBroken: false,\n shouldRetry: false,\n };\n}\n\n/**\n * Check circuit breaker for a step. Returns the redirected step if broken.\n * Pure function.\n */\nexport function checkCircuitBreaker(\n flow: StepFlowConfig,\n state: StepMachineState,\n stepName: string\n): { broken: boolean; redirectStep?: string; newState: StepMachineState } {\n const stepConfig = flow.steps[stepName];\n if (!stepConfig?.circuit_breaker) {\n return {\n broken: false,\n newState: {\n ...state,\n iterationCounts: {\n ...state.iterationCounts,\n [stepName]: (state.iterationCounts[stepName] ?? 0) + 1,\n },\n updatedAt: Date.now(),\n },\n };\n }\n\n const count = state.iterationCounts[stepName] ?? 0;\n if (count >= stepConfig.circuit_breaker.max_iterations) {\n return {\n broken: true,\n redirectStep: stepConfig.circuit_breaker.on_open,\n newState: {\n ...state,\n currentStep: stepConfig.circuit_breaker.on_open,\n updatedAt: Date.now(),\n },\n };\n }\n\n return {\n broken: false,\n newState: {\n ...state,\n iterationCounts: {\n ...state.iterationCounts,\n [stepName]: count + 1,\n },\n updatedAt: Date.now(),\n },\n };\n}\n\n/**\n * Compute what a step needs as input. Pure function.\n */\nexport function computeStepInput(\n flow: StepFlowConfig,\n stepName: string,\n allData: Record<string, unknown>\n): Record<string, unknown> {\n const stepConfig = flow.steps[stepName];\n if (!stepConfig) {\n throw new Error(`Step \"${stepName}\" not found`);\n }\n\n if (stepConfig.expects_data) {\n const input: Record<string, unknown> = {};\n for (const key of stepConfig.expects_data) {\n input[key] = allData[key];\n }\n return input;\n }\n\n // If no expects_data, pass all data\n return { ...allData };\n}\n\n/**\n * Extract return data from terminal state. Pure function.\n */\nexport function extractReturnData(\n returnArtifacts: string | string[] | false | undefined,\n allData: Record<string, unknown>\n): Record<string, unknown> {\n if (returnArtifacts === false || returnArtifacts === undefined) {\n return {};\n }\n\n if (typeof returnArtifacts === 'string') {\n return { [returnArtifacts]: allData[returnArtifacts] };\n }\n\n if (Array.isArray(returnArtifacts)) {\n const result: Record<string, unknown> = {};\n for (const key of returnArtifacts) {\n result[key] = allData[key];\n }\n return result;\n }\n\n return {};\n}\n\n/**\n * Create initial state for a new run. Pure function.\n */\nexport function createInitialState(\n flow: StepFlowConfig,\n runId: string\n): StepMachineState {\n const now = Date.now();\n return {\n runId,\n flowId: flow.id ?? 'unnamed',\n currentStep: flow.settings.start_step,\n status: 'running',\n stepHistory: [],\n iterationCounts: {},\n retryCounts: {},\n startedAt: now,\n updatedAt: now,\n };\n}\n","/**\n * yaml-flow - Memory Store\n * \n * In-memory store implementation. Works in both browser and Node.js.\n * Data is lost when the process exits - use for testing or short-lived flows.\n */\n\nimport type { StepMachineStore, StepMachineState } from '../step-machine/types.js';\n\nexport class MemoryStore implements StepMachineStore {\n private runs: Map<string, StepMachineState> = new Map();\n private data: Map<string, Record<string, unknown>> = new Map();\n\n async saveRunState(runId: string, state: StepMachineState): Promise<void> {\n this.runs.set(runId, { ...state });\n }\n\n async loadRunState(runId: string): Promise<StepMachineState | null> {\n const state = this.runs.get(runId);\n return state ? { ...state } : null;\n }\n\n async deleteRunState(runId: string): Promise<void> {\n this.runs.delete(runId);\n this.data.delete(runId);\n }\n\n async setData(runId: string, key: string, value: unknown): Promise<void> {\n if (!this.data.has(runId)) {\n this.data.set(runId, {});\n }\n const runData = this.data.get(runId)!;\n runData[key] = value;\n }\n\n async getData(runId: string, key: string): Promise<unknown> {\n return this.data.get(runId)?.[key];\n }\n\n async getAllData(runId: string): Promise<Record<string, unknown>> {\n return { ...(this.data.get(runId) ?? {}) };\n }\n\n async clearData(runId: string): Promise<void> {\n this.data.delete(runId);\n }\n\n async listRuns(): Promise<string[]> {\n return Array.from(this.runs.keys());\n }\n\n /**\n * Clear all data (useful for testing)\n */\n clear(): void {\n this.runs.clear();\n this.data.clear();\n }\n}\n","/**\n * Step Machine — Convenience Driver Class\n *\n * Wraps the pure reducer with a run loop and store I/O.\n * This is the framework layer. The reducer is the pure core.\n */\n\nimport type {\n StepFlowConfig,\n StepMachineStore,\n StepMachineResult,\n StepHandler,\n StepContext,\n StepResult,\n StepMachineState,\n StepMachineOptions,\n StepEvent,\n StepEventType,\n StepEventListener,\n} from './types.js';\nimport {\n applyStepResult,\n checkCircuitBreaker,\n computeStepInput,\n extractReturnData,\n createInitialState,\n} from './reducer.js';\nimport { MemoryStore } from '../stores/memory.js';\n\nfunction generateRunId(): string {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\nexport class StepMachine {\n private flow: StepFlowConfig;\n private handlers: Map<string, StepHandler>;\n private store: StepMachineStore;\n private components: Record<string, unknown>;\n private options: StepMachineOptions;\n private listeners: Map<StepEventType, Set<StepEventListener>> = new Map();\n private aborted = false;\n\n constructor(\n flow: StepFlowConfig,\n handlers: Record<string, StepHandler>,\n options: StepMachineOptions = {}\n ) {\n this.flow = flow;\n this.handlers = new Map(Object.entries(handlers));\n this.store = options.store ?? new MemoryStore();\n this.components = options.components ?? {};\n this.options = options;\n\n if (options.signal) {\n options.signal.addEventListener('abort', () => {\n this.aborted = true;\n });\n }\n\n this.validateFlow();\n }\n\n private validateFlow(): void {\n const { settings, steps, terminal_states } = this.flow;\n\n if (!settings?.start_step) {\n throw new Error('Flow must have settings.start_step defined');\n }\n if (!steps || Object.keys(steps).length === 0) {\n throw new Error('Flow must have at least one step defined');\n }\n if (!terminal_states || Object.keys(terminal_states).length === 0) {\n throw new Error('Flow must have at least one terminal_state defined');\n }\n if (!steps[settings.start_step] && !terminal_states[settings.start_step]) {\n throw new Error(`Start step \"${settings.start_step}\" not found`);\n }\n for (const [stepName, stepConfig] of Object.entries(steps)) {\n for (const [result, target] of Object.entries(stepConfig.transitions)) {\n if (!steps[target] && !terminal_states[target]) {\n throw new Error(\n `Step \"${stepName}\" transition \"${result}\" points to unknown step \"${target}\"`\n );\n }\n }\n }\n }\n\n on(eventType: StepEventType, listener: StepEventListener): void {\n if (!this.listeners.has(eventType)) {\n this.listeners.set(eventType, new Set());\n }\n this.listeners.get(eventType)!.add(listener);\n }\n\n off(eventType: StepEventType, listener: StepEventListener): void {\n this.listeners.get(eventType)?.delete(listener);\n }\n\n private emit(event: StepEvent): void {\n const typeListeners = this.listeners.get(event.type);\n if (typeListeners) {\n for (const listener of typeListeners) {\n try { listener(event); } catch { /* swallow listener errors */ }\n }\n }\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n async run(initialData?: Record<string, unknown>): Promise<StepMachineResult> {\n const runId = generateRunId();\n let runState = createInitialState(this.flow, runId);\n\n await this.store.saveRunState(runId, runState);\n\n if (initialData) {\n for (const [key, value] of Object.entries(initialData)) {\n await this.store.setData(runId, key, value);\n }\n }\n\n this.emit({\n type: 'flow:start',\n runId,\n timestamp: runState.startedAt,\n data: { initialData: initialData ?? {} },\n });\n\n try {\n return await this.executeLoop(runId, runState);\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n this.emit({ type: 'flow:error', runId, timestamp: Date.now(), data: { error: err.message } });\n this.options.onError?.(err);\n\n runState = { ...runState, status: 'failed', updatedAt: Date.now() };\n await this.store.saveRunState(runId, runState);\n\n return {\n runId,\n status: 'failed',\n data: await this.store.getAllData(runId),\n finalStep: runState.currentStep,\n stepHistory: runState.stepHistory,\n durationMs: Date.now() - runState.startedAt,\n error: err,\n };\n }\n }\n\n async resume(runId: string): Promise<StepMachineResult> {\n const runState = await this.store.loadRunState(runId);\n if (!runState) throw new Error(`No run found with ID: ${runId}`);\n if (runState.status === 'completed' || runState.status === 'failed') {\n throw new Error(`Cannot resume a ${runState.status} run`);\n }\n\n const updated: StepMachineState = { ...runState, status: 'running', pausedAt: undefined, updatedAt: Date.now() };\n await this.store.saveRunState(runId, updated);\n this.emit({ type: 'flow:resumed', runId, timestamp: Date.now(), data: { currentStep: updated.currentStep } });\n\n return this.executeLoop(runId, updated);\n }\n\n async pause(runId: string): Promise<void> {\n const runState = await this.store.loadRunState(runId);\n if (!runState) throw new Error(`No run found with ID: ${runId}`);\n\n const updated: StepMachineState = { ...runState, status: 'paused', pausedAt: Date.now(), updatedAt: Date.now() };\n await this.store.saveRunState(runId, updated);\n this.emit({ type: 'flow:paused', runId, timestamp: Date.now(), data: { currentStep: updated.currentStep } });\n }\n\n private async executeLoop(runId: string, runState: StepMachineState): Promise<StepMachineResult> {\n const maxSteps = this.flow.settings.max_total_steps ?? 100;\n const timeoutMs = this.flow.settings.timeout_ms;\n let current = runState;\n let iterations = 0;\n\n while (iterations < maxSteps) {\n if (this.aborted) {\n current = { ...current, status: 'cancelled', updatedAt: Date.now() };\n await this.store.saveRunState(runId, current);\n return { runId, status: 'cancelled', data: await this.store.getAllData(runId), finalStep: current.currentStep, stepHistory: current.stepHistory, durationMs: Date.now() - current.startedAt };\n }\n\n if (timeoutMs && Date.now() - current.startedAt > timeoutMs) {\n current = { ...current, status: 'completed', updatedAt: Date.now() };\n await this.store.saveRunState(runId, current);\n return { runId, status: 'timeout', intent: 'timeout', data: await this.store.getAllData(runId), finalStep: current.currentStep, stepHistory: current.stepHistory, durationMs: Date.now() - current.startedAt };\n }\n\n const stepName = current.currentStep;\n\n // Terminal state check\n const terminalState = this.flow.terminal_states[stepName];\n if (terminalState) {\n current = { ...current, status: 'completed', updatedAt: Date.now() };\n await this.store.saveRunState(runId, current);\n const allData = await this.store.getAllData(runId);\n const result: StepMachineResult = {\n runId, status: 'completed', intent: terminalState.return_intent,\n data: extractReturnData(terminalState.return_artifacts, allData),\n finalStep: stepName, stepHistory: current.stepHistory, durationMs: Date.now() - current.startedAt,\n };\n this.emit({ type: 'flow:complete', runId, timestamp: Date.now(), data: { ...result } });\n this.options.onComplete?.(result);\n return result;\n }\n\n // Circuit breaker (pure)\n const cbResult = checkCircuitBreaker(this.flow, current, stepName);\n if (cbResult.broken) {\n current = cbResult.newState;\n await this.store.saveRunState(runId, current);\n iterations++;\n continue;\n }\n current = cbResult.newState;\n\n // Execute step handler (impure — localized)\n const allData = await this.store.getAllData(runId);\n const input = computeStepInput(this.flow, stepName, allData);\n const context: StepContext = {\n runId, stepName, components: this.components, store: this.store,\n signal: this.options.signal,\n emit: (event: string, data: unknown) => {\n this.emit({ type: 'step:complete' as StepEventType, runId, timestamp: Date.now(), data: { event, payload: data } });\n },\n };\n\n this.emit({ type: 'step:start', runId, timestamp: Date.now(), data: { step: stepName, input } });\n\n let stepResult: StepResult;\n try {\n const handler = this.handlers.get(stepName);\n if (!handler) throw new Error(`No handler registered for step \"${stepName}\"`);\n stepResult = await handler(input, context);\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n this.emit({ type: 'step:error', runId, timestamp: Date.now(), data: { step: stepName, error: err.message } });\n stepResult = { result: 'failure', data: { error: err.message } };\n }\n\n // Store produced data\n if (stepResult.data) {\n for (const [key, value] of Object.entries(stepResult.data)) {\n await this.store.setData(runId, key, value);\n }\n }\n\n this.emit({ type: 'step:complete', runId, timestamp: Date.now(), data: { step: stepName, result: stepResult.result } });\n this.options.onStep?.(stepName, stepResult);\n\n // Apply step result (pure reducer)\n const reducerResult = applyStepResult(this.flow, current, stepName, stepResult);\n current = reducerResult.newState;\n\n if (reducerResult.shouldRetry) {\n await this.store.saveRunState(runId, current);\n const stepConfig = this.flow.steps[stepName];\n if (stepConfig.retry?.delay_ms) {\n const retryCount = current.retryCounts[stepName] ?? 0;\n const delay = stepConfig.retry.backoff_multiplier\n ? stepConfig.retry.delay_ms * Math.pow(stepConfig.retry.backoff_multiplier, retryCount - 1)\n : stepConfig.retry.delay_ms;\n await this.sleep(delay);\n }\n iterations++;\n continue;\n }\n\n await this.store.saveRunState(runId, current);\n this.emit({ type: 'transition', runId, timestamp: Date.now(), data: { from: stepName, to: current.currentStep, result: stepResult.result } });\n this.options.onTransition?.(stepName, current.currentStep);\n iterations++;\n }\n\n // Max iterations\n current = { ...current, status: 'completed', updatedAt: Date.now() };\n await this.store.saveRunState(runId, current);\n return { runId, status: 'max_iterations', intent: 'max_iterations', data: await this.store.getAllData(runId), finalStep: current.currentStep, stepHistory: current.stepHistory, durationMs: Date.now() - current.startedAt };\n }\n}\n\n/** Convenience factory */\nexport function createStepMachine(\n flow: StepFlowConfig,\n handlers: Record<string, StepHandler>,\n options?: StepMachineOptions\n): StepMachine {\n return new StepMachine(flow, handlers, options);\n}\n","/**\n * Step Machine — Loader\n *\n * Utilities for loading and validating step-machine flow configurations.\n */\n\nimport type { StepFlowConfig } from './types.js';\n\nexport async function parseStepFlowYaml(yamlString: string): Promise<StepFlowConfig> {\n const yaml = await import('yaml');\n return yaml.parse(yamlString) as StepFlowConfig;\n}\n\nexport async function loadStepFlowFromUrl(url: string): Promise<StepFlowConfig> {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to load flow from ${url}: ${response.statusText}`);\n }\n const contentType = response.headers.get('content-type') ?? '';\n const text = await response.text();\n if (contentType.includes('json') || url.endsWith('.json')) {\n return JSON.parse(text) as StepFlowConfig;\n }\n return parseStepFlowYaml(text);\n}\n\nexport async function loadStepFlowFromFile(filePath: string): Promise<StepFlowConfig> {\n const fs = await import('fs/promises');\n const text = await fs.readFile(filePath, 'utf-8');\n if (filePath.endsWith('.json')) {\n return JSON.parse(text) as StepFlowConfig;\n }\n return parseStepFlowYaml(text);\n}\n\nexport function validateStepFlowConfig(flow: unknown): string[] {\n const errors: string[] = [];\n if (!flow || typeof flow !== 'object') {\n return ['Flow must be an object'];\n }\n const f = flow as Record<string, unknown>;\n\n if (!f.settings || typeof f.settings !== 'object') {\n errors.push('Flow must have a \"settings\" object');\n } else {\n const settings = f.settings as Record<string, unknown>;\n if (typeof settings.start_step !== 'string') {\n errors.push('settings.start_step must be a string');\n }\n }\n\n if (!f.steps || typeof f.steps !== 'object') {\n errors.push('Flow must have a \"steps\" object');\n } else {\n const steps = f.steps as Record<string, unknown>;\n for (const [stepName, stepConfig] of Object.entries(steps)) {\n if (!stepConfig || typeof stepConfig !== 'object') {\n errors.push(`Step \"${stepName}\" must be an object`);\n continue;\n }\n const step = stepConfig as Record<string, unknown>;\n if (!step.transitions || typeof step.transitions !== 'object') {\n errors.push(`Step \"${stepName}\" must have a \"transitions\" object`);\n }\n }\n }\n\n if (!f.terminal_states || typeof f.terminal_states !== 'object') {\n errors.push('Flow must have a \"terminal_states\" object');\n } else {\n const terminals = f.terminal_states as Record<string, unknown>;\n for (const [name, config] of Object.entries(terminals)) {\n if (!config || typeof config !== 'object') {\n errors.push(`Terminal state \"${name}\" must be an object`);\n continue;\n }\n const terminal = config as Record<string, unknown>;\n if (typeof terminal.return_intent !== 'string') {\n errors.push(`Terminal state \"${name}\" must have a \"return_intent\" string`);\n }\n }\n }\n\n return errors;\n}\n\nexport async function loadStepFlow(source: string | StepFlowConfig): Promise<StepFlowConfig> {\n let flow: StepFlowConfig;\n if (typeof source === 'string') {\n if (source.startsWith('http://') || source.startsWith('https://')) {\n flow = await loadStepFlowFromUrl(source);\n } else if (source.includes('{')) {\n flow = JSON.parse(source);\n } else {\n flow = await loadStepFlowFromFile(source);\n }\n } else {\n flow = source;\n }\n const errors = validateStepFlowConfig(flow);\n if (errors.length > 0) {\n throw new Error(`Invalid step flow configuration:\\n- ${errors.join('\\n- ')}`);\n }\n return flow;\n}\n","/**\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","/**\n * Event Graph — Execution Plan (Dry Run)\n *\n * Compute the full execution plan from a GraphConfig without running anything.\n * Shows phases (what runs in parallel), dependency edges, and potential issues.\n *\n * Pure function — no I/O, no side effects.\n */\n\nimport type { GraphConfig, TaskConfig } from './types.js';\nimport { getRequires, getProvides, getAllTasks } from './graph-helpers.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface ExecutionPlan {\n /** Ordered phases — tasks within a phase can run in parallel */\n phases: string[][];\n /** Dependency edges: taskName → tasks it depends on */\n dependencies: Record<string, string[]>;\n /** Tasks that provide conflicts (same output from multiple tasks) */\n conflicts: Record<string, string[]>;\n /** Tasks that have no requires (entry points) */\n entryPoints: string[];\n /** Tasks that nothing depends on (leaf nodes) */\n leafTasks: string[];\n /** Tokens required but not produced by any task */\n unreachableTokens: string[];\n /** Tasks blocked by unreachable tokens */\n blockedTasks: string[];\n /** Total number of phases (depth of the graph) */\n depth: number;\n /** Max parallelism (widest phase) */\n maxParallelism: number;\n}\n\n// ============================================================================\n// Implementation\n// ============================================================================\n\n/**\n * Build a map: token → tasks that produce it.\n */\nfunction buildProducerMap(tasks: Record<string, TaskConfig>): Record<string, string[]> {\n const map: Record<string, string[]> = {};\n for (const [name, config] of Object.entries(tasks)) {\n for (const token of getProvides(config)) {\n if (!map[token]) map[token] = [];\n map[token].push(name);\n }\n // Also count `on` conditional provides\n if (config.on) {\n for (const tokens of Object.values(config.on)) {\n for (const token of tokens) {\n if (!map[token]) map[token] = [];\n if (!map[token].includes(name)) map[token].push(name);\n }\n }\n }\n // on_failure provides\n if (config.on_failure) {\n for (const token of config.on_failure) {\n if (!map[token]) map[token] = [];\n if (!map[token].includes(name)) map[token].push(name);\n }\n }\n }\n return map;\n}\n\n/**\n * Build task-to-task dependency edges from the token graph.\n */\nfunction buildDependencies(\n tasks: Record<string, TaskConfig>,\n producerMap: Record<string, string[]>,\n): Record<string, string[]> {\n const deps: Record<string, string[]> = {};\n for (const [name, config] of Object.entries(tasks)) {\n const required = getRequires(config);\n const taskDeps = new Set<string>();\n for (const token of required) {\n const producers = producerMap[token] || [];\n for (const producer of producers) {\n if (producer !== name) taskDeps.add(producer);\n }\n }\n deps[name] = [...taskDeps];\n }\n return deps;\n}\n\n/**\n * Topological sort into phases using Kahn's algorithm.\n * Tasks within the same phase have all deps satisfied and can run in parallel.\n */\nfunction computePhases(\n taskNames: string[],\n dependencies: Record<string, string[]>,\n): string[][] {\n // Build in-degree map (only counting edges to tasks in taskNames)\n const taskSet = new Set(taskNames);\n const inDegree: Record<string, number> = {};\n const dependents: Record<string, string[]> = {};\n\n for (const name of taskNames) {\n inDegree[name] = 0;\n dependents[name] = [];\n }\n\n for (const name of taskNames) {\n for (const dep of dependencies[name] || []) {\n if (taskSet.has(dep)) {\n inDegree[name]++;\n dependents[dep].push(name);\n }\n }\n }\n\n const phases: string[][] = [];\n const remaining = new Set(taskNames);\n\n while (remaining.size > 0) {\n // Find all tasks with in-degree 0\n const phase: string[] = [];\n for (const name of remaining) {\n if (inDegree[name] === 0) {\n phase.push(name);\n }\n }\n\n if (phase.length === 0) {\n // Remaining tasks form a cycle — add them all as a \"stuck\" phase\n phases.push([...remaining]);\n break;\n }\n\n phase.sort(); // deterministic ordering within a phase\n phases.push(phase);\n\n // Remove this phase and update in-degrees\n for (const name of phase) {\n remaining.delete(name);\n for (const dependent of dependents[name] || []) {\n if (remaining.has(dependent)) {\n inDegree[dependent]--;\n }\n }\n }\n }\n\n return phases;\n}\n\n/**\n * Compute a full execution plan from a graph config.\n *\n * Shows the order tasks would execute, what can run in parallel,\n * where conflicts exist, and what's unreachable — all without\n * actually running anything.\n *\n * @param graph - The event-graph configuration\n * @returns ExecutionPlan with phases, dependencies, conflicts, and diagnostics\n */\nexport function planExecution(graph: GraphConfig): ExecutionPlan {\n const tasks = getAllTasks(graph);\n const taskNames = Object.keys(tasks);\n\n if (taskNames.length === 0) {\n return {\n phases: [],\n dependencies: {},\n conflicts: {},\n entryPoints: [],\n leafTasks: [],\n unreachableTokens: [],\n blockedTasks: [],\n depth: 0,\n maxParallelism: 0,\n };\n }\n\n const producerMap = buildProducerMap(tasks);\n const dependencies = buildDependencies(tasks, producerMap);\n\n // Find conflicts: tokens provided by more than one task\n const conflicts: Record<string, string[]> = {};\n for (const [token, producers] of Object.entries(producerMap)) {\n if (producers.length > 1) {\n conflicts[token] = producers;\n }\n }\n\n // Entry points: tasks with no requires\n const entryPoints = taskNames.filter((name) => getRequires(tasks[name]).length === 0);\n\n // Leaf tasks: tasks that no other task depends on\n const dependedOn = new Set<string>();\n for (const deps of Object.values(dependencies)) {\n for (const dep of deps) dependedOn.add(dep);\n }\n const leafTasks = taskNames.filter((name) => !dependedOn.has(name));\n\n // Unreachable tokens: required by some task but produced by none\n const allRequired = new Set<string>();\n for (const config of Object.values(tasks)) {\n for (const token of getRequires(config)) {\n allRequired.add(token);\n }\n }\n const unreachableTokens = [...allRequired].filter((token) => !producerMap[token]);\n\n // Blocked tasks: tasks that require unreachable tokens\n const unreachableSet = new Set(unreachableTokens);\n const blockedTasks = taskNames.filter((name) =>\n getRequires(tasks[name]).some((token) => unreachableSet.has(token)),\n );\n\n // Compute phases\n const phases = computePhases(taskNames, dependencies);\n\n return {\n phases,\n dependencies,\n conflicts,\n entryPoints,\n leafTasks: leafTasks.sort(),\n unreachableTokens: unreachableTokens.sort(),\n blockedTasks: blockedTasks.sort(),\n depth: phases.length,\n maxParallelism: Math.max(0, ...phases.map((p) => p.length)),\n };\n}\n","/**\n * Mermaid Diagram Export\n *\n * Generate Mermaid diagram strings from GraphConfig (event-graph)\n * and StepFlowConfig (step-machine). Useful for documentation,\n * debugging, and CI reports.\n *\n * Pure functions — no I/O, no side effects.\n */\n\nimport type { GraphConfig } from './types.js';\nimport type { StepFlowConfig } from '../step-machine/types.js';\nimport { getRequires, getProvides, getAllTasks } from './graph-helpers.js';\n\n// ============================================================================\n// Event Graph → Mermaid\n// ============================================================================\n\nexport interface MermaidOptions {\n /** Diagram direction: TB (top-bottom), LR (left-right), etc. Default: 'TD' */\n direction?: 'TD' | 'TB' | 'LR' | 'RL' | 'BT';\n /** Show token labels on edges. Default: true */\n showTokens?: boolean;\n /** Title comment at top. Default: graph.id or 'Event Graph' */\n title?: string;\n}\n\n/**\n * Sanitize a name for Mermaid node IDs (replace hyphens, special chars).\n */\nfunction sanitizeId(name: string): string {\n return name.replace(/[^a-zA-Z0-9_]/g, '_');\n}\n\n/**\n * Generate a Mermaid dependency graph from an event-graph config.\n *\n * Tasks are nodes. Edges represent token dependencies:\n * if task B requires token X and task A provides X, then A --> B.\n *\n * @param graph - Event graph configuration\n * @param options - Diagram options\n * @returns Mermaid diagram string\n */\nexport function graphToMermaid(graph: GraphConfig, options: MermaidOptions = {}): string {\n const { direction = 'TD', showTokens = true, title } = options;\n const tasks = getAllTasks(graph);\n const taskNames = Object.keys(tasks);\n\n if (taskNames.length === 0) {\n return `graph ${direction}\\n empty[No tasks defined]`;\n }\n\n // Build producer map: token → tasks that provide it\n const producerMap: Record<string, string[]> = {};\n for (const [name, config] of Object.entries(tasks)) {\n for (const token of getProvides(config)) {\n if (!producerMap[token]) producerMap[token] = [];\n producerMap[token].push(name);\n }\n if (config.on) {\n for (const tokens of Object.values(config.on)) {\n for (const token of tokens) {\n if (!producerMap[token]) producerMap[token] = [];\n if (!producerMap[token].includes(name)) producerMap[token].push(name);\n }\n }\n }\n }\n\n const lines: string[] = [];\n const diagramTitle = title || graph.id || 'Event Graph';\n lines.push(`%% ${diagramTitle}`);\n lines.push(`graph ${direction}`);\n\n // Find leaf tasks: tasks whose tokens no other task requires\n const allRequired = new Set<string>();\n for (const config of Object.values(tasks)) {\n for (const token of getRequires(config)) {\n allRequired.add(token);\n }\n }\n const leafTaskSet = new Set(\n taskNames.filter((name) => {\n const prov = getProvides(tasks[name]);\n return prov.length === 0 || prov.every((token) => !allRequired.has(token));\n }),\n );\n\n // Declare nodes\n for (const name of taskNames) {\n const id = sanitizeId(name);\n const req = getRequires(tasks[name]);\n if (req.length === 0) {\n // Entry point — use rounded rectangle\n lines.push(` ${id}([${name}])`);\n } else if (leafTaskSet.has(name)) {\n // Leaf node — use double bracketed\n lines.push(` ${id}[[${name}]]`);\n } else {\n lines.push(` ${id}[${name}]`);\n }\n }\n\n // Edges: for each task's requires, find producers and draw edges\n const edgeSet = new Set<string>();\n for (const [name, config] of Object.entries(tasks)) {\n const required = getRequires(config);\n for (const token of required) {\n const producers = producerMap[token] || [];\n for (const producer of producers) {\n if (producer === name) continue;\n const edgeKey = `${producer}->${name}:${token}`;\n if (edgeSet.has(edgeKey)) continue;\n edgeSet.add(edgeKey);\n\n const fromId = sanitizeId(producer);\n const toId = sanitizeId(name);\n if (showTokens) {\n lines.push(` ${fromId} -->|${token}| ${toId}`);\n } else {\n lines.push(` ${fromId} --> ${toId}`);\n }\n }\n }\n\n // Unreachable requires (no producer) — mark with dotted edge from a warning node\n for (const token of required) {\n if (!producerMap[token]) {\n const warnId = `warn_${sanitizeId(token)}`;\n const toId = sanitizeId(name);\n lines.push(` ${warnId}{{⚠ ${token}}} -.->|missing| ${toId}`);\n }\n }\n }\n\n return lines.join('\\n');\n}\n\n// ============================================================================\n// Step Machine → Mermaid\n// ============================================================================\n\n/**\n * Generate a Mermaid flowchart from a step-machine config.\n *\n * Steps are nodes. Transitions are labeled edges.\n * Terminal states are shown as filled/rounded nodes.\n *\n * @param flow - Step machine flow configuration\n * @param options - Diagram options\n * @returns Mermaid diagram string\n */\nexport function flowToMermaid(flow: StepFlowConfig, options: MermaidOptions = {}): string {\n const { direction = 'TD', title } = options;\n const steps = flow.steps;\n const terminals = flow.terminal_states;\n const startStep = flow.settings.start_step;\n\n const lines: string[] = [];\n const diagramTitle = title || flow.id || 'Step Machine';\n lines.push(`%% ${diagramTitle}`);\n lines.push(`graph ${direction}`);\n\n // Start node\n lines.push(` START(( ))`);\n lines.push(` START --> ${sanitizeId(startStep)}`);\n\n // Step nodes\n for (const name of Object.keys(steps)) {\n const id = sanitizeId(name);\n lines.push(` ${id}[${name}]`);\n }\n\n // Terminal nodes (stadium shape)\n for (const [name, config] of Object.entries(terminals)) {\n const id = sanitizeId(name);\n lines.push(` ${id}([${name}: ${config.return_intent}])`);\n }\n\n // Transition edges\n for (const [stepName, stepConfig] of Object.entries(steps)) {\n const fromId = sanitizeId(stepName);\n for (const [result, target] of Object.entries(stepConfig.transitions)) {\n const toId = sanitizeId(target);\n lines.push(` ${fromId} -->|${result}| ${toId}`);\n }\n }\n\n return lines.join('\\n');\n}\n","/**\n * Event Graph — Loader & Exporter\n *\n * Load GraphConfig from YAML/JSON files or strings, and export back.\n * Mirrors the step-machine's loadStepFlow/validateStepFlowConfig pattern.\n */\n\nimport type { GraphConfig } from './types.js';\n\n// ============================================================================\n// Validation\n// ============================================================================\n\n/**\n * Validate a GraphConfig object. Returns an array of error strings.\n * Empty array = valid config.\n */\nexport function validateGraphConfig(config: unknown): string[] {\n const errors: string[] = [];\n\n if (!config || typeof config !== 'object') {\n return ['Graph config must be an object'];\n }\n\n const c = config as Record<string, unknown>;\n\n // Settings\n if (!c.settings || typeof c.settings !== 'object') {\n errors.push('Graph config must have a \"settings\" object');\n } else {\n const settings = c.settings as Record<string, unknown>;\n if (!settings.completion || typeof settings.completion !== 'string') {\n errors.push('settings.completion must be a string');\n }\n if (settings.completion === 'goal-reached') {\n if (!Array.isArray(settings.goal) || settings.goal.length === 0) {\n errors.push('settings.goal must be a non-empty array when completion is \"goal-reached\"');\n }\n }\n }\n\n // Tasks\n if (!c.tasks || typeof c.tasks !== 'object') {\n errors.push('Graph config must have a \"tasks\" object');\n } else {\n const tasks = c.tasks as Record<string, unknown>;\n if (Object.keys(tasks).length === 0) {\n errors.push('Graph config must have at least one task');\n }\n for (const [name, task] of Object.entries(tasks)) {\n if (!task || typeof task !== 'object') {\n errors.push(`Task \"${name}\" must be an object`);\n continue;\n }\n const t = task as Record<string, unknown>;\n if (!Array.isArray(t.provides)) {\n errors.push(`Task \"${name}\" must have a \"provides\" array`);\n }\n if (t.requires !== undefined && !Array.isArray(t.requires)) {\n errors.push(`Task \"${name}\".requires must be an array if present`);\n }\n if (t.on !== undefined) {\n if (typeof t.on !== 'object' || Array.isArray(t.on)) {\n errors.push(`Task \"${name}\".on must be an object mapping result keys to token arrays`);\n } else {\n for (const [key, tokens] of Object.entries(t.on as Record<string, unknown>)) {\n if (!Array.isArray(tokens)) {\n errors.push(`Task \"${name}\".on.${key} must be an array of tokens`);\n }\n }\n }\n }\n }\n }\n\n return errors;\n}\n\n// ============================================================================\n// Parsing\n// ============================================================================\n\nasync function parseGraphYaml(yamlString: string): Promise<GraphConfig> {\n const yaml = await import('yaml');\n return yaml.parse(yamlString) as GraphConfig;\n}\n\n// ============================================================================\n// Loading\n// ============================================================================\n\n/**\n * Load a GraphConfig from a file path, URL, JSON string, or object.\n * Validates the config and throws if invalid.\n *\n * @param source - File path (.yaml/.yml/.json), URL, JSON string, or GraphConfig object\n * @returns Validated GraphConfig\n */\nexport async function loadGraphConfig(source: string | GraphConfig): Promise<GraphConfig> {\n let config: GraphConfig;\n\n if (typeof source === 'string') {\n if (source.startsWith('http://') || source.startsWith('https://')) {\n const response = await fetch(source);\n if (!response.ok) {\n throw new Error(`Failed to load graph config from ${source}: ${response.statusText}`);\n }\n const text = await response.text();\n const contentType = response.headers.get('content-type') ?? '';\n if (contentType.includes('json') || source.endsWith('.json')) {\n config = JSON.parse(text) as GraphConfig;\n } else {\n config = await parseGraphYaml(text);\n }\n } else if (source.includes('{')) {\n // Looks like a JSON string\n config = JSON.parse(source) as GraphConfig;\n } else {\n // File path\n const fs = await import('fs/promises');\n const text = await fs.readFile(source, 'utf-8');\n if (source.endsWith('.json')) {\n config = JSON.parse(text) as GraphConfig;\n } else {\n config = await parseGraphYaml(text);\n }\n }\n } else {\n config = source;\n }\n\n const errors = validateGraphConfig(config);\n if (errors.length > 0) {\n throw new Error(`Invalid graph configuration:\\n- ${errors.join('\\n- ')}`);\n }\n\n return config;\n}\n\n// ============================================================================\n// Exporting\n// ============================================================================\n\nexport interface ExportOptions {\n /** Output format. Default: 'json' */\n format?: 'json' | 'yaml';\n /** Indentation for JSON (default: 2) or YAML */\n indent?: number;\n}\n\n/**\n * Export a GraphConfig to a JSON or YAML string.\n *\n * @param config - The graph configuration to export\n * @param options - Export format options\n * @returns Serialized config string\n */\nexport function exportGraphConfig(config: GraphConfig, options: ExportOptions = {}): string {\n const { format = 'json', indent = 2 } = options;\n\n if (format === 'yaml') {\n // Dynamic import isn't available in sync context — use a simple YAML serializer\n return toYaml(config, indent);\n }\n\n return JSON.stringify(config, null, indent);\n}\n\n/**\n * Export a GraphConfig to a file.\n *\n * @param config - The graph configuration to export\n * @param filePath - Output file path (.json or .yaml/.yml)\n * @param options - Export format options (format auto-detected from extension if not specified)\n */\nexport async function exportGraphConfigToFile(\n config: GraphConfig,\n filePath: string,\n options: ExportOptions = {},\n): Promise<void> {\n const format = options.format ??\n (filePath.endsWith('.yaml') || filePath.endsWith('.yml') ? 'yaml' : 'json');\n\n const content = exportGraphConfig(config, { ...options, format });\n const fs = await import('fs/promises');\n await fs.writeFile(filePath, content, 'utf-8');\n}\n\n// ============================================================================\n// Simple YAML serializer (avoids requiring the yaml package for export)\n// ============================================================================\n\nfunction toYaml(obj: unknown, indent: number, depth: number = 0): string {\n const pad = ' '.repeat(indent * depth);\n\n if (obj === null || obj === undefined) return 'null';\n if (typeof obj === 'boolean') return String(obj);\n if (typeof obj === 'number') return String(obj);\n if (typeof obj === 'string') {\n // Quote strings containing special chars\n if (obj.includes(':') || obj.includes('#') || obj.includes('\\n') ||\n obj.includes('\"') || obj.includes(\"'\") || obj.startsWith(' ') ||\n obj.startsWith('{') || obj.startsWith('[') || obj === '') {\n return JSON.stringify(obj);\n }\n return obj;\n }\n\n if (Array.isArray(obj)) {\n if (obj.length === 0) return '[]';\n // Short arrays of simple values: inline\n if (obj.every((v) => typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean')) {\n return `[${obj.map((v) => (typeof v === 'string' ? toYaml(v, indent, 0) : String(v))).join(', ')}]`;\n }\n return obj\n .map((item) => {\n const val = toYaml(item, indent, depth + 1);\n if (typeof item === 'object' && item !== null && !Array.isArray(item)) {\n // Object item: put first key on same line as dash\n const lines = val.trimStart().split('\\n');\n return `${pad}- ${lines[0]}\\n${lines.slice(1).map((l) => `${pad} ${l.trimStart() ? l : ''}`).filter(Boolean).join('\\n')}`;\n }\n return `${pad}- ${val}`;\n })\n .join('\\n');\n }\n\n if (typeof obj === 'object') {\n const entries = Object.entries(obj as Record<string, unknown>);\n if (entries.length === 0) return '{}';\n return entries\n .map(([key, value]) => {\n if (value === undefined) return '';\n const serialized = toYaml(value, indent, depth + 1);\n if (typeof value === 'object' && value !== null && !Array.isArray(value) && Object.keys(value).length > 0) {\n return `${pad}${key}:\\n${serialized}`;\n }\n if (Array.isArray(value) && value.length > 0 &&\n !value.every((v) => typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean')) {\n return `${pad}${key}:\\n${serialized}`;\n }\n return `${pad}${key}: ${serialized}`;\n })\n .filter(Boolean)\n .join('\\n');\n }\n\n return String(obj);\n}\n","/**\n * Event Graph — Semantic Graph Validation\n *\n * Validates the logical correctness of a static graph configuration.\n * Unlike validateGraphConfig() which checks JSON structure, this checks:\n * - Dangling requires (tokens no task produces)\n * - Circular dependencies\n * - Provide conflicts (multiple tasks producing same token)\n * - Unreachable goal tokens\n * - Dead-end tasks (no provides)\n * - Self-dependencies\n * - Orphaned tasks (disconnected from the graph)\n *\n * Pure function — config in, diagnostics out.\n */\n\nimport type { GraphConfig, TaskConfig } from './types.js';\nimport { getRequires, getProvides, getAllTasks } from './graph-helpers.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type IssueSeverity = 'error' | 'warning' | 'info';\n\nexport interface GraphIssue {\n /** Severity: error = will break execution, warning = may cause problems, info = notable */\n severity: IssueSeverity;\n /** Machine-readable issue code */\n code: string;\n /** Human-readable description */\n message: string;\n /** Affected task names (if applicable) */\n tasks?: string[];\n /** Affected tokens (if applicable) */\n tokens?: string[];\n}\n\nexport interface GraphValidationResult {\n /** true if no errors (warnings/info are allowed) */\n valid: boolean;\n /** All issues found */\n issues: GraphIssue[];\n /** Just the errors */\n errors: GraphIssue[];\n /** Just the warnings */\n warnings: GraphIssue[];\n}\n\n// ============================================================================\n// Implementation\n// ============================================================================\n\n/**\n * Build a map: token → tasks that produce it (including on-conditional and on_failure).\n */\nfunction buildProducerMap(tasks: Record<string, TaskConfig>): Record<string, string[]> {\n const map: Record<string, string[]> = {};\n for (const [name, config] of Object.entries(tasks)) {\n for (const token of getProvides(config)) {\n if (!map[token]) map[token] = [];\n map[token].push(name);\n }\n if (config.on) {\n for (const tokens of Object.values(config.on)) {\n for (const token of tokens) {\n if (!map[token]) map[token] = [];\n if (!map[token].includes(name)) map[token].push(name);\n }\n }\n }\n if (config.on_failure) {\n for (const token of config.on_failure) {\n if (!map[token]) map[token] = [];\n if (!map[token].includes(name)) map[token].push(name);\n }\n }\n }\n return map;\n}\n\n/**\n * Build task-to-task dependency edges from the token graph.\n */\nfunction buildTaskDeps(\n tasks: Record<string, TaskConfig>,\n producerMap: Record<string, string[]>,\n): Record<string, Set<string>> {\n const deps: Record<string, Set<string>> = {};\n for (const [name, config] of Object.entries(tasks)) {\n deps[name] = new Set<string>();\n for (const token of getRequires(config)) {\n for (const producer of (producerMap[token] || [])) {\n if (producer !== name) deps[name].add(producer);\n }\n }\n }\n return deps;\n}\n\n/**\n * Detect cycles using DFS. Returns arrays of task names forming cycles.\n */\nfunction detectCycles(\n taskNames: string[],\n deps: Record<string, Set<string>>,\n): string[][] {\n const WHITE = 0, GRAY = 1, BLACK = 2;\n const color: Record<string, number> = {};\n const parent: Record<string, string | null> = {};\n const cycles: string[][] = [];\n\n for (const name of taskNames) {\n color[name] = WHITE;\n parent[name] = null;\n }\n\n function dfs(node: string): void {\n color[node] = GRAY;\n for (const dep of deps[node] || []) {\n if (color[dep] === GRAY) {\n // Back edge — trace cycle\n const cycle: string[] = [dep];\n let cur = node;\n while (cur !== dep) {\n cycle.push(cur);\n cur = parent[cur]!;\n }\n cycle.push(dep);\n cycle.reverse();\n cycles.push(cycle);\n } else if (color[dep] === WHITE) {\n parent[dep] = node;\n dfs(dep);\n }\n }\n color[node] = BLACK;\n }\n\n for (const name of taskNames) {\n if (color[name] === WHITE) {\n dfs(name);\n }\n }\n\n return cycles;\n}\n\n/**\n * Validate the semantic correctness of a static event-graph configuration.\n *\n * Checks for logical issues that would cause execution failures, stuck states,\n * or unexpected behavior. Does NOT check JSON structure (use validateGraphConfig for that).\n *\n * @param graph - The event-graph configuration to validate\n * @returns Validation result with categorized issues\n */\nexport function validateGraph(graph: GraphConfig): GraphValidationResult {\n const issues: GraphIssue[] = [];\n const tasks = getAllTasks(graph);\n const taskNames = Object.keys(tasks);\n\n if (taskNames.length === 0) {\n issues.push({\n severity: 'error',\n code: 'EMPTY_GRAPH',\n message: 'Graph has no tasks',\n });\n return buildResult(issues);\n }\n\n const producerMap = buildProducerMap(tasks);\n const deps = buildTaskDeps(tasks, producerMap);\n\n // ---- 1. Dangling requires: tokens no task produces ----\n for (const [name, config] of Object.entries(tasks)) {\n for (const token of getRequires(config)) {\n if (!producerMap[token]) {\n issues.push({\n severity: 'error',\n code: 'DANGLING_REQUIRES',\n message: `Task \"${name}\" requires token \"${token}\" but no task produces it`,\n tasks: [name],\n tokens: [token],\n });\n }\n }\n }\n\n // ---- 2. Circular dependencies ----\n const cycles = detectCycles(taskNames, deps);\n for (const cycle of cycles) {\n issues.push({\n severity: 'error',\n code: 'CIRCULAR_DEPENDENCY',\n message: `Circular dependency: ${cycle.join(' → ')}`,\n tasks: cycle.filter((_t, i) => i < cycle.length - 1), // dedupe last = first\n });\n }\n\n // ---- 3. Self-dependency ----\n for (const [name, config] of Object.entries(tasks)) {\n const req = getRequires(config);\n const prov = getProvides(config);\n const self = req.filter((token) => prov.includes(token));\n if (self.length > 0) {\n issues.push({\n severity: 'error',\n code: 'SELF_DEPENDENCY',\n message: `Task \"${name}\" requires tokens it provides itself: [${self.join(', ')}]`,\n tasks: [name],\n tokens: self,\n });\n }\n }\n\n // ---- 4. Provide conflicts ----\n for (const [token, producers] of Object.entries(producerMap)) {\n if (producers.length > 1) {\n issues.push({\n severity: 'warning',\n code: 'PROVIDE_CONFLICT',\n message: `Token \"${token}\" is produced by multiple tasks: [${producers.join(', ')}]. This requires a conflict strategy.`,\n tasks: producers,\n tokens: [token],\n });\n }\n }\n\n // ---- 5. Goal tokens unreachable ----\n if (graph.settings.completion === 'goal-reached' && graph.settings.goal) {\n for (const goalToken of graph.settings.goal) {\n if (!producerMap[goalToken]) {\n issues.push({\n severity: 'error',\n code: 'UNREACHABLE_GOAL',\n message: `Goal token \"${goalToken}\" cannot be produced by any task`,\n tokens: [goalToken],\n });\n }\n }\n }\n\n // ---- 6. Dead-end tasks (no provides and not the only task) ----\n if (taskNames.length > 1) {\n for (const [name, config] of Object.entries(tasks)) {\n const prov = getProvides(config);\n const onProv = config.on ? Object.values(config.on).flat() : [];\n const failProv = config.on_failure || [];\n if (prov.length === 0 && onProv.length === 0 && failProv.length === 0) {\n issues.push({\n severity: 'warning',\n code: 'DEAD_END_TASK',\n message: `Task \"${name}\" has no provides — it cannot unblock any downstream task`,\n tasks: [name],\n });\n }\n }\n }\n\n // ---- 7. Orphaned tasks (no requires AND no task depends on their provides) ----\n const allRequired = new Set<string>();\n for (const config of Object.values(tasks)) {\n for (const token of getRequires(config)) {\n allRequired.add(token);\n }\n }\n for (const [name, config] of Object.entries(tasks)) {\n const req = getRequires(config);\n const prov = getProvides(config);\n const onProv = config.on ? Object.values(config.on).flat() : [];\n const allProv = [...prov, ...onProv];\n const isEntryPoint = req.length === 0;\n const hasDownstream = allProv.some((token) => allRequired.has(token));\n\n // If this has requires and provides and is connected — fine\n // If it's an entry point with downstream — fine\n // If it's an entry point with NO downstream and not a goal-relevant task — orphan\n if (isEntryPoint && !hasDownstream && taskNames.length > 1) {\n // Check if it produces goal tokens\n const isGoalRelevant =\n graph.settings.completion === 'goal-reached' &&\n graph.settings.goal?.some((g) => allProv.includes(g));\n if (!isGoalRelevant) {\n issues.push({\n severity: 'info',\n code: 'ISOLATED_TASK',\n message: `Task \"${name}\" is disconnected — it has no requires and nothing depends on its provides`,\n tasks: [name],\n });\n }\n }\n }\n\n // ---- 8. Completion strategy sanity ----\n if (graph.settings.completion === 'goal-reached' && !graph.settings.goal) {\n issues.push({\n severity: 'error',\n code: 'MISSING_GOAL',\n message: 'Completion strategy is \"goal-reached\" but no goal tokens are defined',\n });\n }\n\n return buildResult(issues);\n}\n\nfunction buildResult(issues: GraphIssue[]): GraphValidationResult {\n const errors = issues.filter((i) => i.severity === 'error');\n const warnings = issues.filter((i) => i.severity === 'warning');\n return {\n valid: errors.length === 0,\n issues,\n errors,\n warnings,\n };\n}\n","/**\n * yaml-flow - LocalStorage Store\n * \n * Browser localStorage-based store implementation.\n * Data persists across page reloads but is limited to ~5MB per origin.\n */\n\nimport type { StepMachineStore, StepMachineState } from '../step-machine/types.js';\n\nexport interface LocalStorageStoreOptions {\n /** Key prefix for namespacing (default: 'yamlflow') */\n prefix?: string;\n}\n\nexport class LocalStorageStore implements StepMachineStore {\n private prefix: string;\n\n constructor(options: LocalStorageStoreOptions = {}) {\n this.prefix = options.prefix ?? 'yamlflow';\n \n // Ensure localStorage is available\n if (typeof localStorage === 'undefined') {\n throw new Error('LocalStorageStore requires localStorage (browser environment)');\n }\n }\n\n private runKey(runId: string): string {\n return `${this.prefix}:run:${runId}`;\n }\n\n private dataKey(runId: string): string {\n return `${this.prefix}:data:${runId}`;\n }\n\n private indexKey(): string {\n return `${this.prefix}:runs`;\n }\n\n async saveRunState(runId: string, state: StepMachineState): Promise<void> {\n localStorage.setItem(this.runKey(runId), JSON.stringify(state));\n \n // Update run index\n const runs = await this.listRuns();\n if (!runs.includes(runId)) {\n runs.push(runId);\n localStorage.setItem(this.indexKey(), JSON.stringify(runs));\n }\n }\n\n async loadRunState(runId: string): Promise<StepMachineState | null> {\n const raw = localStorage.getItem(this.runKey(runId));\n return raw ? JSON.parse(raw) : null;\n }\n\n async deleteRunState(runId: string): Promise<void> {\n localStorage.removeItem(this.runKey(runId));\n localStorage.removeItem(this.dataKey(runId));\n \n // Update run index\n const runs = await this.listRuns();\n const filtered = runs.filter(id => id !== runId);\n localStorage.setItem(this.indexKey(), JSON.stringify(filtered));\n }\n\n async setData(runId: string, key: string, value: unknown): Promise<void> {\n const allData = await this.getAllData(runId);\n allData[key] = value;\n localStorage.setItem(this.dataKey(runId), JSON.stringify(allData));\n }\n\n async getData(runId: string, key: string): Promise<unknown> {\n const allData = await this.getAllData(runId);\n return allData[key];\n }\n\n async getAllData(runId: string): Promise<Record<string, unknown>> {\n const raw = localStorage.getItem(this.dataKey(runId));\n return raw ? JSON.parse(raw) : {};\n }\n\n async clearData(runId: string): Promise<void> {\n localStorage.removeItem(this.dataKey(runId));\n }\n\n async listRuns(): Promise<string[]> {\n const raw = localStorage.getItem(this.indexKey());\n return raw ? JSON.parse(raw) : [];\n }\n\n /**\n * Clear all flow data from localStorage\n */\n clearAll(): void {\n const keysToRemove: string[] = [];\n \n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(this.prefix + ':')) {\n keysToRemove.push(key);\n }\n }\n \n keysToRemove.forEach(key => localStorage.removeItem(key));\n }\n}\n","/**\n * yaml-flow - File Store\n * \n * File-system based store for Node.js environments.\n * Stores each run as a JSON file in the specified directory.\n */\n\nimport type { StepMachineStore, StepMachineState } from '../step-machine/types.js';\n\nexport interface FileStoreOptions {\n /** Directory path for storing flow data */\n directory: string;\n}\n\nexport class FileStore implements StepMachineStore {\n private directory: string;\n private fs: typeof import('fs/promises') | null = null;\n private path: typeof import('path') | null = null;\n\n constructor(options: FileStoreOptions) {\n this.directory = options.directory;\n }\n\n private async ensureModules(): Promise<void> {\n if (!this.fs || !this.path) {\n // Dynamic import for Node.js modules\n this.fs = await import('fs/promises');\n this.path = await import('path');\n \n // Ensure directory exists\n await this.fs.mkdir(this.directory, { recursive: true });\n }\n }\n\n private runPath(runId: string): string {\n return this.path!.join(this.directory, `${runId}.run.json`);\n }\n\n private dataPath(runId: string): string {\n return this.path!.join(this.directory, `${runId}.data.json`);\n }\n\n async saveRunState(runId: string, state: StepMachineState): Promise<void> {\n await this.ensureModules();\n await this.fs!.writeFile(\n this.runPath(runId),\n JSON.stringify(state, null, 2),\n 'utf-8'\n );\n }\n\n async loadRunState(runId: string): Promise<StepMachineState | null> {\n await this.ensureModules();\n try {\n const raw = await this.fs!.readFile(this.runPath(runId), 'utf-8');\n return JSON.parse(raw);\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n return null;\n }\n throw err;\n }\n }\n\n async deleteRunState(runId: string): Promise<void> {\n await this.ensureModules();\n try {\n await this.fs!.unlink(this.runPath(runId));\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n try {\n await this.fs!.unlink(this.dataPath(runId));\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n }\n\n async setData(runId: string, key: string, value: unknown): Promise<void> {\n await this.ensureModules();\n const allData = await this.getAllData(runId);\n allData[key] = value;\n await this.fs!.writeFile(\n this.dataPath(runId),\n JSON.stringify(allData, null, 2),\n 'utf-8'\n );\n }\n\n async getData(runId: string, key: string): Promise<unknown> {\n const allData = await this.getAllData(runId);\n return allData[key];\n }\n\n async getAllData(runId: string): Promise<Record<string, unknown>> {\n await this.ensureModules();\n try {\n const raw = await this.fs!.readFile(this.dataPath(runId), 'utf-8');\n return JSON.parse(raw);\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n return {};\n }\n throw err;\n }\n }\n\n async clearData(runId: string): Promise<void> {\n await this.ensureModules();\n try {\n await this.fs!.unlink(this.dataPath(runId));\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n }\n\n async listRuns(): Promise<string[]> {\n await this.ensureModules();\n try {\n const files = await this.fs!.readdir(this.directory);\n return files\n .filter(f => f.endsWith('.run.json'))\n .map(f => f.replace('.run.json', ''));\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n return [];\n }\n throw err;\n }\n }\n\n /**\n * Clear all flow data from directory\n */\n async clearAll(): Promise<void> {\n await this.ensureModules();\n const runs = await this.listRuns();\n await Promise.all(runs.map(runId => this.deleteRunState(runId)));\n }\n}\n","/**\n * Batch Runner — Core\n *\n * Slot-based concurrent processor. Pure control flow — no I/O opinions.\n *\n * @example Step Machine batch\n * ```ts\n * import { batch } from 'yaml-flow/batch';\n * import { createStepMachine, loadStepFlow } from 'yaml-flow/step-machine';\n *\n * const flow = await loadStepFlow('./support-ticket.yaml');\n * const results = await batch(tickets, {\n * concurrency: 5,\n * processor: async (ticket) => {\n * const machine = createStepMachine(flow, handlers);\n * return machine.run(ticket);\n * },\n * });\n * ```\n *\n * @example Event Graph batch\n * ```ts\n * import { batch } from 'yaml-flow/batch';\n * import { next, apply, createInitialExecutionState } from 'yaml-flow/event-graph';\n *\n * const results = await batch(items, {\n * concurrency: 3,\n * processor: async (item, index) => {\n * let state = createInitialExecutionState(graph, `exec-${index}`);\n * state = apply(state, { type: 'inject-tokens', tokens: [item.token], timestamp: new Date().toISOString() }, graph);\n * // ... drive the graph loop\n * return state;\n * },\n * });\n * ```\n */\n\nimport type {\n BatchOptions,\n BatchResult,\n BatchItemResult,\n BatchProgress,\n} from './types.js';\n\n/**\n * Run an array of items through an async processor with concurrency control.\n *\n * - Items are started in order, up to `concurrency` at a time.\n * - Results are returned in the original item order.\n * - If a processor throws, the item is marked as failed; other items continue.\n * - An AbortSignal prevents new items from starting (in-flight items are not cancelled).\n */\nexport async function batch<TItem, TResult>(\n items: TItem[],\n options: BatchOptions<TItem, TResult>\n): Promise<BatchResult<TItem, TResult>> {\n const {\n concurrency = 5,\n processor,\n onItemComplete,\n onItemError,\n onProgress,\n signal,\n } = options;\n\n const total = items.length;\n const results: BatchItemResult<TItem, TResult>[] = new Array(total);\n const batchStart = Date.now();\n\n let completed = 0;\n let failed = 0;\n let nextIndex = 0;\n\n function makeProgress(active: number): BatchProgress {\n const done = completed + failed;\n return {\n completed,\n failed,\n active,\n pending: total - done - active,\n total,\n percent: total === 0 ? 100 : Math.round((done / total) * 100),\n elapsedMs: Date.now() - batchStart,\n };\n }\n\n // Empty input — short-circuit\n if (total === 0) {\n return { items: [], completed: 0, failed: 0, total: 0, durationMs: 0 };\n }\n\n return new Promise<BatchResult<TItem, TResult>>((resolve) => {\n let active = 0;\n\n function tryStartNext() {\n while (active < concurrency && nextIndex < total) {\n // Respect abort signal — don't start new items\n if (signal?.aborted) {\n // Mark remaining as failed with abort error\n while (nextIndex < total) {\n const idx = nextIndex++;\n results[idx] = {\n item: items[idx],\n index: idx,\n status: 'failed',\n error: new Error('Batch aborted'),\n durationMs: 0,\n };\n failed++;\n }\n // If nothing is in-flight, resolve immediately\n if (active === 0 && completed + failed === total) {\n resolve({\n items: results,\n completed,\n failed,\n total,\n durationMs: Date.now() - batchStart,\n });\n }\n break;\n }\n\n const idx = nextIndex++;\n const item = items[idx];\n active++;\n const itemStart = Date.now();\n\n processor(item, idx)\n .then((result) => {\n results[idx] = {\n item,\n index: idx,\n status: 'completed',\n result,\n durationMs: Date.now() - itemStart,\n };\n completed++;\n onItemComplete?.(item, result, idx);\n })\n .catch((err) => {\n const error = err instanceof Error ? err : new Error(String(err));\n results[idx] = {\n item,\n index: idx,\n status: 'failed',\n error,\n durationMs: Date.now() - itemStart,\n };\n failed++;\n onItemError?.(item, error, idx);\n })\n .finally(() => {\n active--;\n onProgress?.(makeProgress(active));\n\n if (completed + failed === total) {\n resolve({\n items: results,\n completed,\n failed,\n total,\n durationMs: Date.now() - batchStart,\n });\n } else {\n tryStartNext();\n }\n });\n }\n }\n\n tryStartNext();\n });\n}\n","/**\n * Variable interpolation for workflow configs.\n *\n * Walks any object/array and replaces `${KEY}` patterns with values from\n * a variables map. Pure function — returns a new object, never mutates.\n *\n * Works on both GraphConfig and StepFlowConfig (or any plain object).\n *\n * @example\n * ```ts\n * const resolved = resolveVariables(config, {\n * ENTITY_ID: 'ticket-42',\n * TOOLS_DIR: '/opt/tools',\n * });\n * ```\n */\n\nexport type Variables = Record<string, string | number | boolean>;\n\n/**\n * Replace `${KEY}` patterns in a string with values from the variables map.\n * Unmatched variables are left as-is.\n */\nfunction interpolateString(template: string, vars: Variables): string {\n return template.replace(/\\$\\{([^}]+)\\}/g, (match, key: string) => {\n const value = vars[key.trim()];\n return value !== undefined ? String(value) : match;\n });\n}\n\n/**\n * Recursively walk a value and interpolate any `${KEY}` patterns found in strings.\n * Returns a new object/array — never mutates the input.\n */\nfunction walkAndInterpolate<T>(value: T, vars: Variables): T {\n if (typeof value === 'string') {\n return interpolateString(value, vars) as unknown as T;\n }\n if (Array.isArray(value)) {\n return value.map((item) => walkAndInterpolate(item, vars)) as unknown as T;\n }\n if (value !== null && typeof value === 'object') {\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n result[k] = walkAndInterpolate(v, vars);\n }\n return result as T;\n }\n // numbers, booleans, null, undefined — pass through\n return value;\n}\n\n/**\n * Resolve `${KEY}` variable references in a workflow config object.\n *\n * Pure function: config in → new config out. Works on any shape\n * (GraphConfig, StepFlowConfig, or arbitrary objects).\n *\n * @param config - The config object to interpolate\n * @param variables - Key-value pairs to substitute\n * @returns A new config with all `${KEY}` patterns replaced\n */\nexport function resolveVariables<T extends Record<string, unknown>>(\n config: T,\n variables: Variables,\n): T {\n return walkAndInterpolate(config, variables);\n}\n","/**\n * Config template resolution for workflow configs.\n *\n * In large graphs, many tasks share the same base config (cmd, timeout, cwd, headers, etc.).\n * Instead of duplicating, tasks reference a named template via `config-template`.\n * This function deep-merges the template into each task's config, then removes the reference.\n *\n * Pure function — returns a new config, never mutates.\n *\n * @example\n * ```ts\n * const config = {\n * configTemplates: {\n * PYTHON_TOOL: { cmd: 'python', timeout: 30000, cwd: '/workdata' }\n * },\n * tasks: {\n * analyze: {\n * provides: ['analysis'],\n * config: { 'config-template': 'PYTHON_TOOL', 'cmd-args': 'analyze.py' }\n * }\n * }\n * };\n * const resolved = resolveConfigTemplates(config);\n * // analyze.config → { cmd: 'python', timeout: 30000, cwd: '/workdata', 'cmd-args': 'analyze.py' }\n * ```\n */\n\n/** Shape of a config-templates block */\nexport type ConfigTemplates = Record<string, Record<string, unknown>>;\n\n/**\n * Deep-merge template into task config.\n * Task-level values override template values.\n * Nested objects are merged one level deep (like SwarmX's pattern).\n */\nfunction mergeConfigs(\n template: Record<string, unknown>,\n taskConfig: Record<string, unknown>,\n): Record<string, unknown> {\n const merged: Record<string, unknown> = { ...template };\n\n for (const [key, value] of Object.entries(taskConfig)) {\n if (key === 'config-template') continue; // strip the reference\n\n // One-level deep merge for nested objects (both sides must be plain objects)\n if (\n value !== null &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n merged[key] !== null &&\n typeof merged[key] === 'object' &&\n !Array.isArray(merged[key])\n ) {\n merged[key] = {\n ...(merged[key] as Record<string, unknown>),\n ...(value as Record<string, unknown>),\n };\n } else {\n merged[key] = value;\n }\n }\n\n return merged;\n}\n\n/**\n * Resolve `config-template` references in task configs against a `configTemplates` map.\n *\n * Accepts any config object that may contain:\n * - `configTemplates` (camelCase) or `config-templates` (kebab-case) at the top level\n * - `tasks` (event-graph) or `steps` (step-machine) containing task/step objects\n * - Each task/step may have a `config` sub-object with a `config-template` key\n *\n * Returns a new config with templates merged and references removed.\n * The `configTemplates` / `config-templates` key is also removed from the output.\n */\nexport function resolveConfigTemplates<T extends Record<string, unknown>>(config: T): T {\n // Find templates — support both naming conventions\n const templates: ConfigTemplates =\n (config['configTemplates'] as ConfigTemplates) ??\n (config['config-templates'] as ConfigTemplates) ??\n {};\n\n // Find the tasks/steps container\n const tasksKey = 'tasks' in config ? 'tasks' : 'steps' in config ? 'steps' : null;\n if (!tasksKey) return config; // nothing to resolve\n\n const tasks = config[tasksKey] as Record<string, Record<string, unknown>> | undefined;\n if (!tasks || typeof tasks !== 'object') return config;\n\n const resolvedTasks: Record<string, Record<string, unknown>> = {};\n\n for (const [name, task] of Object.entries(tasks)) {\n const taskConfig = task['config'] as Record<string, unknown> | undefined;\n const templateName = taskConfig?.['config-template'] as string | undefined;\n\n if (!templateName || !taskConfig) {\n resolvedTasks[name] = task;\n continue;\n }\n\n const template = templates[templateName];\n if (!template) {\n // Template not found — leave as-is but strip the reference\n const { 'config-template': _, ...rest } = taskConfig;\n resolvedTasks[name] = { ...task, config: rest };\n continue;\n }\n\n resolvedTasks[name] = {\n ...task,\n config: mergeConfigs(template, taskConfig),\n };\n }\n\n // Build result — remove the templates key from output\n const result = { ...config, [tasksKey]: resolvedTasks };\n delete result['configTemplates'];\n delete result['config-templates'];\n return result as T;\n}\n"]}
|