yaml-flow 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,75 @@
1
+ // src/stores/localStorage.ts
2
+ var LocalStorageStore = class {
3
+ prefix;
4
+ constructor(options = {}) {
5
+ this.prefix = options.prefix ?? "yamlflow";
6
+ if (typeof localStorage === "undefined") {
7
+ throw new Error("LocalStorageStore requires localStorage (browser environment)");
8
+ }
9
+ }
10
+ runKey(runId) {
11
+ return `${this.prefix}:run:${runId}`;
12
+ }
13
+ dataKey(runId) {
14
+ return `${this.prefix}:data:${runId}`;
15
+ }
16
+ indexKey() {
17
+ return `${this.prefix}:runs`;
18
+ }
19
+ async saveRunState(runId, state) {
20
+ localStorage.setItem(this.runKey(runId), JSON.stringify(state));
21
+ const runs = await this.listRuns();
22
+ if (!runs.includes(runId)) {
23
+ runs.push(runId);
24
+ localStorage.setItem(this.indexKey(), JSON.stringify(runs));
25
+ }
26
+ }
27
+ async loadRunState(runId) {
28
+ const raw = localStorage.getItem(this.runKey(runId));
29
+ return raw ? JSON.parse(raw) : null;
30
+ }
31
+ async deleteRunState(runId) {
32
+ localStorage.removeItem(this.runKey(runId));
33
+ localStorage.removeItem(this.dataKey(runId));
34
+ const runs = await this.listRuns();
35
+ const filtered = runs.filter((id) => id !== runId);
36
+ localStorage.setItem(this.indexKey(), JSON.stringify(filtered));
37
+ }
38
+ async setData(runId, key, value) {
39
+ const allData = await this.getAllData(runId);
40
+ allData[key] = value;
41
+ localStorage.setItem(this.dataKey(runId), JSON.stringify(allData));
42
+ }
43
+ async getData(runId, key) {
44
+ const allData = await this.getAllData(runId);
45
+ return allData[key];
46
+ }
47
+ async getAllData(runId) {
48
+ const raw = localStorage.getItem(this.dataKey(runId));
49
+ return raw ? JSON.parse(raw) : {};
50
+ }
51
+ async clearData(runId) {
52
+ localStorage.removeItem(this.dataKey(runId));
53
+ }
54
+ async listRuns() {
55
+ const raw = localStorage.getItem(this.indexKey());
56
+ return raw ? JSON.parse(raw) : [];
57
+ }
58
+ /**
59
+ * Clear all flow data from localStorage
60
+ */
61
+ clearAll() {
62
+ const keysToRemove = [];
63
+ for (let i = 0; i < localStorage.length; i++) {
64
+ const key = localStorage.key(i);
65
+ if (key?.startsWith(this.prefix + ":")) {
66
+ keysToRemove.push(key);
67
+ }
68
+ }
69
+ keysToRemove.forEach((key) => localStorage.removeItem(key));
70
+ }
71
+ };
72
+
73
+ export { LocalStorageStore };
74
+ //# sourceMappingURL=localStorage.js.map
75
+ //# sourceMappingURL=localStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/stores/localStorage.ts"],"names":[],"mappings":"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","file":"localStorage.js","sourcesContent":["/**\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 { FlowStore, RunState } from '../core/types.js';\n\nexport interface LocalStorageStoreOptions {\n /** Key prefix for namespacing (default: 'yamlflow') */\n prefix?: string;\n}\n\nexport class LocalStorageStore implements FlowStore {\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: RunState): 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<RunState | 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"]}
@@ -0,0 +1,48 @@
1
+ 'use strict';
2
+
3
+ // src/stores/memory.ts
4
+ var MemoryStore = class {
5
+ runs = /* @__PURE__ */ new Map();
6
+ data = /* @__PURE__ */ new Map();
7
+ async saveRunState(runId, state) {
8
+ this.runs.set(runId, { ...state });
9
+ }
10
+ async loadRunState(runId) {
11
+ const state = this.runs.get(runId);
12
+ return state ? { ...state } : null;
13
+ }
14
+ async deleteRunState(runId) {
15
+ this.runs.delete(runId);
16
+ this.data.delete(runId);
17
+ }
18
+ async setData(runId, key, value) {
19
+ if (!this.data.has(runId)) {
20
+ this.data.set(runId, {});
21
+ }
22
+ const runData = this.data.get(runId);
23
+ runData[key] = value;
24
+ }
25
+ async getData(runId, key) {
26
+ return this.data.get(runId)?.[key];
27
+ }
28
+ async getAllData(runId) {
29
+ return { ...this.data.get(runId) ?? {} };
30
+ }
31
+ async clearData(runId) {
32
+ this.data.delete(runId);
33
+ }
34
+ async listRuns() {
35
+ return Array.from(this.runs.keys());
36
+ }
37
+ /**
38
+ * Clear all data (useful for testing)
39
+ */
40
+ clear() {
41
+ this.runs.clear();
42
+ this.data.clear();
43
+ }
44
+ };
45
+
46
+ exports.MemoryStore = MemoryStore;
47
+ //# sourceMappingURL=memory.cjs.map
48
+ //# sourceMappingURL=memory.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/stores/memory.ts"],"names":[],"mappings":";;;AASO,IAAM,cAAN,MAAuC;AAAA,EACpC,IAAA,uBAAkC,GAAA,EAAI;AAAA,EACtC,IAAA,uBAAiD,GAAA,EAAI;AAAA,EAE7D,MAAM,YAAA,CAAa,KAAA,EAAe,KAAA,EAAgC;AAChE,IAAA,IAAA,CAAK,KAAK,GAAA,CAAI,KAAA,EAAO,EAAE,GAAG,OAAO,CAAA;AAAA,EACnC;AAAA,EAEA,MAAM,aAAa,KAAA,EAAyC;AAC1D,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA;AACjC,IAAA,OAAO,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAM,GAAI,IAAA;AAAA,EAChC;AAAA,EAEA,MAAM,eAAe,KAAA,EAA8B;AACjD,IAAA,IAAA,CAAK,IAAA,CAAK,OAAO,KAAK,CAAA;AACtB,IAAA,IAAA,CAAK,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,EACxB;AAAA,EAEA,MAAM,OAAA,CAAQ,KAAA,EAAe,GAAA,EAAa,KAAA,EAA+B;AACvE,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,EAAG;AACzB,MAAA,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,EAAE,CAAA;AAAA,IACzB;AACA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA;AACnC,IAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,KAAA;AAAA,EACjB;AAAA,EAEA,MAAM,OAAA,CAAQ,KAAA,EAAe,GAAA,EAA+B;AAC1D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,KAAK,IAAI,GAAG,CAAA;AAAA,EACnC;AAAA,EAEA,MAAM,WAAW,KAAA,EAAiD;AAChE,IAAA,OAAO,EAAE,GAAI,IAAA,CAAK,IAAA,CAAK,IAAI,KAAK,CAAA,IAAK,EAAC,EAAG;AAAA,EAC3C;AAAA,EAEA,MAAM,UAAU,KAAA,EAA8B;AAC5C,IAAA,IAAA,CAAK,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,EACxB;AAAA,EAEA,MAAM,QAAA,GAA8B;AAClC,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,KAAK,KAAA,EAAM;AAChB,IAAA,IAAA,CAAK,KAAK,KAAA,EAAM;AAAA,EAClB;AACF","file":"memory.cjs","sourcesContent":["/**\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 { FlowStore, RunState } from '../core/types.js';\n\nexport class MemoryStore implements FlowStore {\n private runs: Map<string, RunState> = new Map();\n private data: Map<string, Record<string, unknown>> = new Map();\n\n async saveRunState(runId: string, state: RunState): Promise<void> {\n this.runs.set(runId, { ...state });\n }\n\n async loadRunState(runId: string): Promise<RunState | 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"]}
@@ -0,0 +1,27 @@
1
+ import { f as FlowStore, g as RunState } from '../types-BoWndaAJ.cjs';
2
+
3
+ /**
4
+ * yaml-flow - Memory Store
5
+ *
6
+ * In-memory store implementation. Works in both browser and Node.js.
7
+ * Data is lost when the process exits - use for testing or short-lived flows.
8
+ */
9
+
10
+ declare class MemoryStore implements FlowStore {
11
+ private runs;
12
+ private data;
13
+ saveRunState(runId: string, state: RunState): Promise<void>;
14
+ loadRunState(runId: string): Promise<RunState | null>;
15
+ deleteRunState(runId: string): Promise<void>;
16
+ setData(runId: string, key: string, value: unknown): Promise<void>;
17
+ getData(runId: string, key: string): Promise<unknown>;
18
+ getAllData(runId: string): Promise<Record<string, unknown>>;
19
+ clearData(runId: string): Promise<void>;
20
+ listRuns(): Promise<string[]>;
21
+ /**
22
+ * Clear all data (useful for testing)
23
+ */
24
+ clear(): void;
25
+ }
26
+
27
+ export { MemoryStore };
@@ -0,0 +1,27 @@
1
+ import { f as FlowStore, g as RunState } from '../types-BoWndaAJ.js';
2
+
3
+ /**
4
+ * yaml-flow - Memory Store
5
+ *
6
+ * In-memory store implementation. Works in both browser and Node.js.
7
+ * Data is lost when the process exits - use for testing or short-lived flows.
8
+ */
9
+
10
+ declare class MemoryStore implements FlowStore {
11
+ private runs;
12
+ private data;
13
+ saveRunState(runId: string, state: RunState): Promise<void>;
14
+ loadRunState(runId: string): Promise<RunState | null>;
15
+ deleteRunState(runId: string): Promise<void>;
16
+ setData(runId: string, key: string, value: unknown): Promise<void>;
17
+ getData(runId: string, key: string): Promise<unknown>;
18
+ getAllData(runId: string): Promise<Record<string, unknown>>;
19
+ clearData(runId: string): Promise<void>;
20
+ listRuns(): Promise<string[]>;
21
+ /**
22
+ * Clear all data (useful for testing)
23
+ */
24
+ clear(): void;
25
+ }
26
+
27
+ export { MemoryStore };
@@ -0,0 +1,46 @@
1
+ // src/stores/memory.ts
2
+ var MemoryStore = class {
3
+ runs = /* @__PURE__ */ new Map();
4
+ data = /* @__PURE__ */ new Map();
5
+ async saveRunState(runId, state) {
6
+ this.runs.set(runId, { ...state });
7
+ }
8
+ async loadRunState(runId) {
9
+ const state = this.runs.get(runId);
10
+ return state ? { ...state } : null;
11
+ }
12
+ async deleteRunState(runId) {
13
+ this.runs.delete(runId);
14
+ this.data.delete(runId);
15
+ }
16
+ async setData(runId, key, value) {
17
+ if (!this.data.has(runId)) {
18
+ this.data.set(runId, {});
19
+ }
20
+ const runData = this.data.get(runId);
21
+ runData[key] = value;
22
+ }
23
+ async getData(runId, key) {
24
+ return this.data.get(runId)?.[key];
25
+ }
26
+ async getAllData(runId) {
27
+ return { ...this.data.get(runId) ?? {} };
28
+ }
29
+ async clearData(runId) {
30
+ this.data.delete(runId);
31
+ }
32
+ async listRuns() {
33
+ return Array.from(this.runs.keys());
34
+ }
35
+ /**
36
+ * Clear all data (useful for testing)
37
+ */
38
+ clear() {
39
+ this.runs.clear();
40
+ this.data.clear();
41
+ }
42
+ };
43
+
44
+ export { MemoryStore };
45
+ //# sourceMappingURL=memory.js.map
46
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/stores/memory.ts"],"names":[],"mappings":";AASO,IAAM,cAAN,MAAuC;AAAA,EACpC,IAAA,uBAAkC,GAAA,EAAI;AAAA,EACtC,IAAA,uBAAiD,GAAA,EAAI;AAAA,EAE7D,MAAM,YAAA,CAAa,KAAA,EAAe,KAAA,EAAgC;AAChE,IAAA,IAAA,CAAK,KAAK,GAAA,CAAI,KAAA,EAAO,EAAE,GAAG,OAAO,CAAA;AAAA,EACnC;AAAA,EAEA,MAAM,aAAa,KAAA,EAAyC;AAC1D,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA;AACjC,IAAA,OAAO,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAM,GAAI,IAAA;AAAA,EAChC;AAAA,EAEA,MAAM,eAAe,KAAA,EAA8B;AACjD,IAAA,IAAA,CAAK,IAAA,CAAK,OAAO,KAAK,CAAA;AACtB,IAAA,IAAA,CAAK,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,EACxB;AAAA,EAEA,MAAM,OAAA,CAAQ,KAAA,EAAe,GAAA,EAAa,KAAA,EAA+B;AACvE,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,EAAG;AACzB,MAAA,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,EAAE,CAAA;AAAA,IACzB;AACA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA;AACnC,IAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,KAAA;AAAA,EACjB;AAAA,EAEA,MAAM,OAAA,CAAQ,KAAA,EAAe,GAAA,EAA+B;AAC1D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,KAAK,IAAI,GAAG,CAAA;AAAA,EACnC;AAAA,EAEA,MAAM,WAAW,KAAA,EAAiD;AAChE,IAAA,OAAO,EAAE,GAAI,IAAA,CAAK,IAAA,CAAK,IAAI,KAAK,CAAA,IAAK,EAAC,EAAG;AAAA,EAC3C;AAAA,EAEA,MAAM,UAAU,KAAA,EAA8B;AAC5C,IAAA,IAAA,CAAK,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,EACxB;AAAA,EAEA,MAAM,QAAA,GAA8B;AAClC,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,KAAK,KAAA,EAAM;AAChB,IAAA,IAAA,CAAK,KAAK,KAAA,EAAM;AAAA,EAClB;AACF","file":"memory.js","sourcesContent":["/**\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 { FlowStore, RunState } from '../core/types.js';\n\nexport class MemoryStore implements FlowStore {\n private runs: Map<string, RunState> = new Map();\n private data: Map<string, Record<string, unknown>> = new Map();\n\n async saveRunState(runId: string, state: RunState): Promise<void> {\n this.runs.set(runId, { ...state });\n }\n\n async loadRunState(runId: string): Promise<RunState | 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"]}
@@ -0,0 +1,237 @@
1
+ /**
2
+ * yaml-flow - Core Types
3
+ *
4
+ * All type definitions for the workflow engine.
5
+ */
6
+ /**
7
+ * Root flow configuration - maps to YAML file structure
8
+ */
9
+ interface FlowConfig {
10
+ /** Optional flow identifier */
11
+ id?: string;
12
+ /** Flow settings */
13
+ settings: FlowSettings;
14
+ /** Step definitions */
15
+ steps: Record<string, StepConfig>;
16
+ /** Terminal state definitions */
17
+ terminal_states: Record<string, TerminalStateConfig>;
18
+ }
19
+ /**
20
+ * Flow-level settings
21
+ */
22
+ interface FlowSettings {
23
+ /** Step to start execution from */
24
+ start_step: string;
25
+ /** Maximum steps before forced termination (default: 100) */
26
+ max_total_steps?: number;
27
+ /** Flow timeout in milliseconds (optional) */
28
+ timeout_ms?: number;
29
+ }
30
+ /**
31
+ * Individual step configuration
32
+ */
33
+ interface StepConfig {
34
+ /** Human-readable description */
35
+ description?: string;
36
+ /** Data keys this step expects as input */
37
+ expects_data?: string[];
38
+ /** Data keys this step produces as output */
39
+ produces_data?: string[];
40
+ /** Transition mapping: result -> next step name */
41
+ transitions: Record<string, string>;
42
+ /** Retry configuration for failures */
43
+ retry?: RetryConfig;
44
+ /** Circuit breaker for loops */
45
+ circuit_breaker?: CircuitBreakerConfig;
46
+ }
47
+ /**
48
+ * Retry configuration for step failures
49
+ */
50
+ interface RetryConfig {
51
+ /** Maximum retry attempts */
52
+ max_attempts: number;
53
+ /** Delay between retries in ms */
54
+ delay_ms?: number;
55
+ /** Backoff multiplier (e.g., 2 for exponential) */
56
+ backoff_multiplier?: number;
57
+ }
58
+ /**
59
+ * Circuit breaker configuration
60
+ */
61
+ interface CircuitBreakerConfig {
62
+ /** Maximum iterations before circuit opens */
63
+ max_iterations: number;
64
+ /** Step to transition to when circuit opens */
65
+ on_open: string;
66
+ }
67
+ /**
68
+ * Terminal state configuration
69
+ */
70
+ interface TerminalStateConfig {
71
+ /** Human-readable description */
72
+ description?: string;
73
+ /** Intent/status to return (e.g., 'success', 'error', 'cancelled') */
74
+ return_intent: string;
75
+ /** Data key(s) to include in result, or false to exclude */
76
+ return_artifacts?: string | string[] | false;
77
+ /** Data keys this terminal state expects */
78
+ expects_data?: string[];
79
+ }
80
+ /**
81
+ * Step handler function signature
82
+ */
83
+ type StepHandler = (input: StepInput, context: StepContext) => StepResult | Promise<StepResult>;
84
+ /**
85
+ * Input passed to step handlers
86
+ */
87
+ interface StepInput {
88
+ /** Data from previous steps based on expects_data */
89
+ [key: string]: unknown;
90
+ }
91
+ /**
92
+ * Context available to step handlers
93
+ */
94
+ interface StepContext {
95
+ /** Run identifier */
96
+ runId: string;
97
+ /** Current step name */
98
+ stepName: string;
99
+ /** Injected components (DB, API clients, etc.) */
100
+ components: Record<string, unknown>;
101
+ /** Store instance for direct access if needed */
102
+ store: FlowStore;
103
+ /** Abort signal for cancellation */
104
+ signal?: AbortSignal;
105
+ /** Emit events for UI updates */
106
+ emit: (event: string, data: unknown) => void;
107
+ }
108
+ /**
109
+ * Result returned from step handlers
110
+ */
111
+ interface StepResult {
112
+ /** Result key for transition routing (e.g., 'success', 'failure', 'retry') */
113
+ result: string;
114
+ /** Data to merge into flow state (must match produces_data) */
115
+ data?: Record<string, unknown>;
116
+ }
117
+ /**
118
+ * Engine configuration options
119
+ */
120
+ interface EngineOptions {
121
+ /** Persistence store (default: MemoryStore) */
122
+ store?: FlowStore;
123
+ /** Injected components available to handlers */
124
+ components?: Record<string, unknown>;
125
+ /** Abort signal for cancellation */
126
+ signal?: AbortSignal;
127
+ /** Callback on each step execution */
128
+ onStep?: (stepName: string, result: StepResult) => void;
129
+ /** Callback on step transition */
130
+ onTransition?: (from: string, to: string) => void;
131
+ /** Callback on flow completion */
132
+ onComplete?: (result: FlowResult) => void;
133
+ /** Callback on flow error */
134
+ onError?: (error: Error) => void;
135
+ }
136
+ /**
137
+ * Final result of flow execution
138
+ */
139
+ interface FlowResult {
140
+ /** Run identifier */
141
+ runId: string;
142
+ /** Completion status */
143
+ status: 'completed' | 'failed' | 'cancelled' | 'timeout' | 'max_iterations';
144
+ /** Return intent from terminal state */
145
+ intent?: string;
146
+ /** Returned artifacts/data */
147
+ data: Record<string, unknown>;
148
+ /** Final step name */
149
+ finalStep: string;
150
+ /** Steps executed (in order) */
151
+ stepHistory: string[];
152
+ /** Total execution time in ms */
153
+ durationMs: number;
154
+ /** Error if failed */
155
+ error?: Error;
156
+ }
157
+ /**
158
+ * Pluggable store interface for persistence
159
+ */
160
+ interface FlowStore {
161
+ /**
162
+ * Save run state
163
+ */
164
+ saveRunState(runId: string, state: RunState): Promise<void>;
165
+ /**
166
+ * Load run state
167
+ */
168
+ loadRunState(runId: string): Promise<RunState | null>;
169
+ /**
170
+ * Delete run state
171
+ */
172
+ deleteRunState(runId: string): Promise<void>;
173
+ /**
174
+ * Set a data value for a run
175
+ */
176
+ setData(runId: string, key: string, value: unknown): Promise<void>;
177
+ /**
178
+ * Get a data value for a run
179
+ */
180
+ getData(runId: string, key: string): Promise<unknown>;
181
+ /**
182
+ * Get all data for a run
183
+ */
184
+ getAllData(runId: string): Promise<Record<string, unknown>>;
185
+ /**
186
+ * Clear all data for a run
187
+ */
188
+ clearData(runId: string): Promise<void>;
189
+ /**
190
+ * List all active run IDs (optional - for management)
191
+ */
192
+ listRuns?(): Promise<string[]>;
193
+ }
194
+ /**
195
+ * Persisted run state
196
+ */
197
+ interface RunState {
198
+ /** Run identifier */
199
+ runId: string;
200
+ /** Flow identifier */
201
+ flowId: string;
202
+ /** Current step name */
203
+ currentStep: string;
204
+ /** Execution status */
205
+ status: 'running' | 'paused' | 'completed' | 'failed' | 'cancelled';
206
+ /** Ordered list of executed steps */
207
+ stepHistory: string[];
208
+ /** Iteration count per step (for circuit breakers) */
209
+ iterationCounts: Record<string, number>;
210
+ /** Retry counts per step */
211
+ retryCounts: Record<string, number>;
212
+ /** Timestamp when run started (ms since epoch) */
213
+ startedAt: number;
214
+ /** Timestamp of last update (ms since epoch) */
215
+ updatedAt: number;
216
+ /** Timestamp when paused (if applicable) */
217
+ pausedAt?: number;
218
+ }
219
+ /**
220
+ * Event types emitted by the engine
221
+ */
222
+ type FlowEventType = 'step:start' | 'step:complete' | 'step:error' | 'transition' | 'flow:start' | 'flow:complete' | 'flow:error' | 'flow:paused' | 'flow:resumed';
223
+ /**
224
+ * Event payload structure
225
+ */
226
+ interface FlowEvent {
227
+ type: FlowEventType;
228
+ runId: string;
229
+ timestamp: number;
230
+ data: Record<string, unknown>;
231
+ }
232
+ /**
233
+ * Event listener function
234
+ */
235
+ type FlowEventListener = (event: FlowEvent) => void;
236
+
237
+ export type { CircuitBreakerConfig as C, EngineOptions as E, FlowConfig as F, RetryConfig as R, StepConfig as S, TerminalStateConfig as T, FlowEvent as a, FlowEventListener as b, FlowEventType as c, FlowResult as d, FlowSettings as e, FlowStore as f, RunState as g, StepContext as h, StepHandler as i, StepInput as j, StepResult as k };