@cascade-flow/backend-filesystem 0.1.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 +56 -0
- package/dist/index.d.ts +353 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1381 -0
- package/dist/index.js.map +10 -0
- package/package.json +52 -0
package/README.md
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Backend Filesystem
|
|
2
|
+
|
|
3
|
+
Filesystem-based implementation of the Backend interface.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
bun install
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { FileSystemBackend } from "@cascade-flow/backend-filesystem";
|
|
15
|
+
|
|
16
|
+
const backend = new FileSystemBackend("./.runs");
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Storage Structure
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
.runs/
|
|
23
|
+
├── .registry/ # Workflow registry
|
|
24
|
+
│ └── {workflow-slug}/
|
|
25
|
+
│ ├── metadata.json # Workflow metadata
|
|
26
|
+
│ └── steps.json # Step definitions
|
|
27
|
+
└── {workflow-slug}/ # Execution state
|
|
28
|
+
└── {runId}/
|
|
29
|
+
├── step-events/ # Step lifecycle events
|
|
30
|
+
│ └── {timestamp}-{stepName}-{eventType}.json
|
|
31
|
+
└── workflow-events/ # Workflow lifecycle events
|
|
32
|
+
└── {timestamp}-{eventType}.json
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Features
|
|
36
|
+
|
|
37
|
+
- **Event storage** - Individual JSON files per event
|
|
38
|
+
- **Chronological ordering** - Events sorted by timestamp
|
|
39
|
+
- **Git-friendly** - Human-readable JSON files
|
|
40
|
+
- **No database required** - Simple filesystem-based storage
|
|
41
|
+
|
|
42
|
+
## Implementation
|
|
43
|
+
|
|
44
|
+
Extends `Backend` abstract class from `backend-interface`:
|
|
45
|
+
- Registry storage in `.runs/.registry/{slug}/`
|
|
46
|
+
- Event storage in `.runs/{slug}/{runId}/`
|
|
47
|
+
- State computed via event projection (no materialized views)
|
|
48
|
+
- Atomic file writes using Bun's filesystem API
|
|
49
|
+
|
|
50
|
+
## Constructor
|
|
51
|
+
|
|
52
|
+
```typescript
|
|
53
|
+
new FileSystemBackend(baseDir?: string)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
- `baseDir` - Base directory for storage (default: `./.runs`)
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
import { Backend, type StepStartMetadata, type StepCompleteMetadata, type StepError, type StepRecord, type LogEntry, type Event, type StepEvent, type WorkflowEvent, type RunSubmission, type RunState, type WorkflowMetadata, type WorkflowRegistration, type StepDefinition, type AnalyticsOptions, type ErrorAnalysis, type RetryAnalysis, type SchedulingLatency, type StepDuration, type WorkflowDuration, type WorkerStability, type Throughput, type QueueDepth, type QueueDepthByWorkflow, type SuccessRate, type AnalyticsSummary } from "@cascade-flow/backend-interface";
|
|
2
|
+
/**
|
|
3
|
+
* FileSystem backend implementation
|
|
4
|
+
* Stores workflow execution state in the local filesystem using event sourcing
|
|
5
|
+
*
|
|
6
|
+
* Directory structure:
|
|
7
|
+
* ./.runs/{workflow-slug}/{runId}/workflow-events/{timestamp}-{eventType}.json
|
|
8
|
+
* ./.runs/{workflow-slug}/{runId}/step-events/{timestamp}-{stepId}-{eventType}.json
|
|
9
|
+
*/
|
|
10
|
+
export declare class FileSystemBackend extends Backend {
|
|
11
|
+
private baseDir;
|
|
12
|
+
/**
|
|
13
|
+
* Create a new FileSystem backend
|
|
14
|
+
*
|
|
15
|
+
* @param baseDir - Base directory for storing runs (defaults to "./.runs")
|
|
16
|
+
*/
|
|
17
|
+
constructor(baseDir?: string);
|
|
18
|
+
/**
|
|
19
|
+
* Initialize the backend (no-op for filesystem - directories created as needed)
|
|
20
|
+
*/
|
|
21
|
+
initialize(): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Get the directory path for a run
|
|
24
|
+
*/
|
|
25
|
+
private getRunDir;
|
|
26
|
+
/**
|
|
27
|
+
* Get the directory path for workflow events within a run
|
|
28
|
+
*/
|
|
29
|
+
private getWorkflowEventsDir;
|
|
30
|
+
/**
|
|
31
|
+
* Get the directory path for step events within a run
|
|
32
|
+
*/
|
|
33
|
+
private getStepEventsDir;
|
|
34
|
+
/**
|
|
35
|
+
* Get the directory path for step outputs within a run
|
|
36
|
+
*/
|
|
37
|
+
private getStepOutputsDir;
|
|
38
|
+
/**
|
|
39
|
+
* Get the file path for a step's output file
|
|
40
|
+
*/
|
|
41
|
+
getStepOutputPath(workflowSlug: string, runId: string, stepId: string, attemptNumber: number): string;
|
|
42
|
+
/**
|
|
43
|
+
* Get the directory path for steps within a run
|
|
44
|
+
* @deprecated Old format - kept for reference only
|
|
45
|
+
*/
|
|
46
|
+
private getStepsDir;
|
|
47
|
+
/**
|
|
48
|
+
* Get the file path for a specific step
|
|
49
|
+
* @deprecated Old format - kept for reference only
|
|
50
|
+
*/
|
|
51
|
+
private getStepFile;
|
|
52
|
+
/**
|
|
53
|
+
* Get the file path for a step's logs
|
|
54
|
+
* @deprecated Old format - kept for reference only
|
|
55
|
+
*/
|
|
56
|
+
private getStepLogsFile;
|
|
57
|
+
/**
|
|
58
|
+
* Get the idempotency directory path (moved to top-level)
|
|
59
|
+
*/
|
|
60
|
+
private getIdempotencyDir;
|
|
61
|
+
/**
|
|
62
|
+
* Generate a unique run ID
|
|
63
|
+
*/
|
|
64
|
+
private generateRunId;
|
|
65
|
+
/**
|
|
66
|
+
* Hash an idempotency key
|
|
67
|
+
*/
|
|
68
|
+
private hashIdempotencyKey;
|
|
69
|
+
/**
|
|
70
|
+
* Generate a unique event ID using microsecond timestamp
|
|
71
|
+
* Format: {timestamp}
|
|
72
|
+
* Example: 1762916097401523
|
|
73
|
+
*
|
|
74
|
+
* The microsecond timestamp provides ~1000x better precision than milliseconds,
|
|
75
|
+
* making collisions extremely unlikely even with parallel step execution.
|
|
76
|
+
*
|
|
77
|
+
* @param timestamp - Optional timestamp in microseconds (defaults to current time)
|
|
78
|
+
*/
|
|
79
|
+
private generateEventId;
|
|
80
|
+
/**
|
|
81
|
+
* Get the filename for a workflow event
|
|
82
|
+
* Format: {timestamp}-{eventType}.json
|
|
83
|
+
* Example: 1762916097401523-WorkflowStarted.json
|
|
84
|
+
*/
|
|
85
|
+
private getWorkflowEventFilename;
|
|
86
|
+
/**
|
|
87
|
+
* Get the filename for a step event
|
|
88
|
+
* Format: {timestamp}-{stepId}-{eventType}.json
|
|
89
|
+
* Example: 1762916097401523-ai-step-1-StepStarted.json
|
|
90
|
+
*/
|
|
91
|
+
private getStepEventFilename;
|
|
92
|
+
/**
|
|
93
|
+
* Get the filesystem lock path used to claim a step attempt
|
|
94
|
+
*/
|
|
95
|
+
private getStepClaimLockPath;
|
|
96
|
+
/**
|
|
97
|
+
* Atomically write JSON data to a file
|
|
98
|
+
* Uses a temporary file and rename for atomicity
|
|
99
|
+
*/
|
|
100
|
+
private writeJsonAtomic;
|
|
101
|
+
/**
|
|
102
|
+
* Read and validate a step record from disk
|
|
103
|
+
*/
|
|
104
|
+
private readStepRecord;
|
|
105
|
+
/**
|
|
106
|
+
* Create a state change record
|
|
107
|
+
*/
|
|
108
|
+
private createStateChange;
|
|
109
|
+
initializeRun(workflowSlug: string, runId: string): Promise<void>;
|
|
110
|
+
appendEvent(workflowSlug: string, runId: string, event: Event): Promise<void>;
|
|
111
|
+
loadEvents(workflowSlug: string, runId: string, options: {
|
|
112
|
+
category: "step";
|
|
113
|
+
stepId?: string;
|
|
114
|
+
}): Promise<StepEvent[]>;
|
|
115
|
+
loadEvents(workflowSlug: string, runId: string, options: {
|
|
116
|
+
category: "workflow";
|
|
117
|
+
}): Promise<WorkflowEvent[]>;
|
|
118
|
+
loadEvents(workflowSlug: string, runId: string, options?: {
|
|
119
|
+
category?: "workflow" | "step";
|
|
120
|
+
stepId?: string;
|
|
121
|
+
}): Promise<Event[]>;
|
|
122
|
+
saveStepStart(workflowSlug: string, runId: string, stepId: string, workerId: string, metadata: StepStartMetadata): Promise<void>;
|
|
123
|
+
saveStepComplete(workflowSlug: string, runId: string, stepId: string, output: unknown, metadata: StepCompleteMetadata, exportOutput?: boolean): Promise<void>;
|
|
124
|
+
saveStepFailed(workflowSlug: string, runId: string, stepId: string, error: StepError, metadata: {
|
|
125
|
+
duration: number;
|
|
126
|
+
attemptNumber: number;
|
|
127
|
+
terminal: boolean;
|
|
128
|
+
nextRetryAt?: number;
|
|
129
|
+
failureReason: "exhausted-retries" | "worker-crash" | "timeout" | "cancelled" | "execution-error";
|
|
130
|
+
}): Promise<void>;
|
|
131
|
+
saveStepFailedAndScheduleRetry(workflowSlug: string, runId: string, stepId: string, error: StepError, failureMetadata: {
|
|
132
|
+
duration: number;
|
|
133
|
+
attemptNumber: number;
|
|
134
|
+
nextRetryAt: number;
|
|
135
|
+
failureReason: "execution-error" | "timeout";
|
|
136
|
+
}, scheduleMetadata: {
|
|
137
|
+
availableAt: number;
|
|
138
|
+
nextAttemptNumber: number;
|
|
139
|
+
retryDelayMs: number;
|
|
140
|
+
maxRetries: number;
|
|
141
|
+
}): Promise<void>;
|
|
142
|
+
saveStepSkipped(workflowSlug: string, runId: string, stepId: string, metadata: {
|
|
143
|
+
skipType: "primary" | "cascade";
|
|
144
|
+
reason: string;
|
|
145
|
+
metadata?: Record<string, any>;
|
|
146
|
+
duration: number;
|
|
147
|
+
attemptNumber: number;
|
|
148
|
+
cascadedFrom?: string;
|
|
149
|
+
}): Promise<void>;
|
|
150
|
+
saveStepScheduled(workflowSlug: string, runId: string, stepId: string, metadata: {
|
|
151
|
+
availableAt: number;
|
|
152
|
+
reason: "initial" | "retry" | "dependency-satisfied";
|
|
153
|
+
attemptNumber: number;
|
|
154
|
+
retryDelayMs?: number;
|
|
155
|
+
}): Promise<void>;
|
|
156
|
+
saveStepHeartbeat(workflowSlug: string, runId: string, stepId: string, workerId: string, attemptNumber: number): Promise<void>;
|
|
157
|
+
saveStepReclaimed(workflowSlug: string, runId: string, stepId: string, metadata: {
|
|
158
|
+
originalWorkerId: string;
|
|
159
|
+
reclaimedBy: string;
|
|
160
|
+
lastHeartbeat: number;
|
|
161
|
+
staleThreshold: number;
|
|
162
|
+
staleDuration: number;
|
|
163
|
+
attemptNumber: number;
|
|
164
|
+
}): Promise<void>;
|
|
165
|
+
saveWorkflowComplete(workflowSlug: string, runId: string, output: unknown, metadata: {
|
|
166
|
+
workflowAttemptNumber: number;
|
|
167
|
+
timestamp: number;
|
|
168
|
+
duration: number;
|
|
169
|
+
totalSteps: number;
|
|
170
|
+
}): Promise<void>;
|
|
171
|
+
saveStepLogs(workflowSlug: string, runId: string, stepId: string, logs: LogEntry[]): Promise<void>;
|
|
172
|
+
loadStepLogs(workflowSlug: string, runId: string, stepId: string, attemptNumber?: number): Promise<LogEntry[] | null>;
|
|
173
|
+
loadRun(workflowSlug: string, runId: string): Promise<StepRecord[]>;
|
|
174
|
+
runExists(workflowSlug: string, runId: string): Promise<boolean>;
|
|
175
|
+
saveWorkflowStart(workflowSlug: string, runId: string, metadata: {
|
|
176
|
+
workflowAttemptNumber: number;
|
|
177
|
+
hasInputSchema: boolean;
|
|
178
|
+
hasInput: boolean;
|
|
179
|
+
}): Promise<void>;
|
|
180
|
+
saveWorkflowInputValidation(workflowSlug: string, runId: string, result: {
|
|
181
|
+
workflowAttemptNumber: number;
|
|
182
|
+
hasSchema: boolean;
|
|
183
|
+
success: boolean;
|
|
184
|
+
error?: StepError;
|
|
185
|
+
validationErrors?: Array<{
|
|
186
|
+
path: string;
|
|
187
|
+
message: string;
|
|
188
|
+
}>;
|
|
189
|
+
}): Promise<void>;
|
|
190
|
+
saveWorkflowFailed(workflowSlug: string, runId: string, error: StepError, metadata: {
|
|
191
|
+
workflowAttemptNumber: number;
|
|
192
|
+
duration: number;
|
|
193
|
+
completedSteps: number;
|
|
194
|
+
failedStep?: string;
|
|
195
|
+
}, failureReason: "step-failed" | "worker-crash" | "timeout" | "cancelled"): Promise<void>;
|
|
196
|
+
saveWorkflowResumed(workflowSlug: string, runId: string, metadata: {
|
|
197
|
+
originalRunId: string;
|
|
198
|
+
resumedSteps: number;
|
|
199
|
+
pendingSteps: number;
|
|
200
|
+
}): Promise<void>;
|
|
201
|
+
saveWorkflowCancelled(workflowSlug: string, runId: string, metadata: {
|
|
202
|
+
workflowAttemptNumber: number;
|
|
203
|
+
reason?: string;
|
|
204
|
+
duration: number;
|
|
205
|
+
completedSteps: number;
|
|
206
|
+
}): Promise<void>;
|
|
207
|
+
saveWorkflowRetryStarted(workflowSlug: string, runId: string, metadata: {
|
|
208
|
+
workflowAttemptNumber: number;
|
|
209
|
+
previousAttemptNumber: number;
|
|
210
|
+
retriedSteps: string[];
|
|
211
|
+
reason?: string;
|
|
212
|
+
}): Promise<void>;
|
|
213
|
+
getFailedSteps(workflowSlug: string, runId: string): Promise<Array<{
|
|
214
|
+
stepId: string;
|
|
215
|
+
error: StepError;
|
|
216
|
+
attemptNumber: number;
|
|
217
|
+
}>>;
|
|
218
|
+
saveRunSubmitted(workflowSlug: string, runId: string, metadata: {
|
|
219
|
+
availableAt: number;
|
|
220
|
+
priority: number;
|
|
221
|
+
input?: string;
|
|
222
|
+
hasInputSchema: boolean;
|
|
223
|
+
timeout?: number;
|
|
224
|
+
idempotencyKey?: string;
|
|
225
|
+
metadata?: Record<string, unknown>;
|
|
226
|
+
tags?: string[];
|
|
227
|
+
}): Promise<void>;
|
|
228
|
+
submitRun(submission: RunSubmission): Promise<{
|
|
229
|
+
runId: string;
|
|
230
|
+
isNew: boolean;
|
|
231
|
+
}>;
|
|
232
|
+
listRuns(options?: {
|
|
233
|
+
workflowSlug?: string;
|
|
234
|
+
status?: RunState["status"][];
|
|
235
|
+
tags?: string[];
|
|
236
|
+
limit?: number;
|
|
237
|
+
}): Promise<RunState[]>;
|
|
238
|
+
cancelRun(runId: string, reason?: string): Promise<void>;
|
|
239
|
+
getRun(runId: string): Promise<RunState | null>;
|
|
240
|
+
listActiveWorkflows(): Promise<string[]>;
|
|
241
|
+
listScheduledSteps(options?: {
|
|
242
|
+
availableBefore?: number;
|
|
243
|
+
workflowSlug?: string;
|
|
244
|
+
limit?: number;
|
|
245
|
+
}): Promise<Array<{
|
|
246
|
+
workflowSlug: string;
|
|
247
|
+
runId: string;
|
|
248
|
+
stepId: string;
|
|
249
|
+
}>>;
|
|
250
|
+
isStepClaimable(workflowSlug: string, runId: string, stepId: string): Promise<boolean>;
|
|
251
|
+
claimScheduledStep(workflowSlug: string, runId: string, stepId: string, workerId: string, metadata: StepStartMetadata): Promise<{
|
|
252
|
+
attemptNumber: number;
|
|
253
|
+
} | null>;
|
|
254
|
+
reclaimStaleSteps(staleThreshold: number, reclaimedBy: string): Promise<Array<{
|
|
255
|
+
workflowSlug: string;
|
|
256
|
+
runId: string;
|
|
257
|
+
stepId: string;
|
|
258
|
+
}>>;
|
|
259
|
+
/**
|
|
260
|
+
* List all available workflows
|
|
261
|
+
*/
|
|
262
|
+
private getRegistryDir;
|
|
263
|
+
private getWorkflowRegistryDir;
|
|
264
|
+
/**
|
|
265
|
+
* Register a workflow with the backend
|
|
266
|
+
*/
|
|
267
|
+
registerWorkflow(registration: WorkflowRegistration): Promise<void>;
|
|
268
|
+
/**
|
|
269
|
+
* Get metadata for a specific workflow
|
|
270
|
+
*/
|
|
271
|
+
getWorkflowMetadata(slug: string): Promise<WorkflowMetadata | null>;
|
|
272
|
+
/**
|
|
273
|
+
* List all registered workflows
|
|
274
|
+
*/
|
|
275
|
+
listWorkflowMetadata(): Promise<WorkflowMetadata[]>;
|
|
276
|
+
/**
|
|
277
|
+
* Get step definitions for a workflow
|
|
278
|
+
*/
|
|
279
|
+
getWorkflowSteps(slug: string): Promise<StepDefinition[]>;
|
|
280
|
+
/**
|
|
281
|
+
* List all run IDs for a workflow
|
|
282
|
+
*/
|
|
283
|
+
listRunIds(workflowSlug: string): Promise<string[]>;
|
|
284
|
+
/**
|
|
285
|
+
* Close the backend and clean up resources
|
|
286
|
+
* For filesystem backend, this is a no-op as there are no persistent connections
|
|
287
|
+
*/
|
|
288
|
+
close(): Promise<void>;
|
|
289
|
+
/**
|
|
290
|
+
* Helper to load all events within a time range and optional filters
|
|
291
|
+
*/
|
|
292
|
+
private loadEventsForAnalytics;
|
|
293
|
+
getErrorAnalysis(options?: AnalyticsOptions): Promise<ErrorAnalysis>;
|
|
294
|
+
getErrorsList(options?: {
|
|
295
|
+
timeRange?: {
|
|
296
|
+
start: number;
|
|
297
|
+
end: number;
|
|
298
|
+
};
|
|
299
|
+
workflowSlug?: string;
|
|
300
|
+
groupingStrategy?: 'exact' | 'normalized' | 'portable';
|
|
301
|
+
limit?: number;
|
|
302
|
+
offset?: number;
|
|
303
|
+
}): Promise<{
|
|
304
|
+
errors: Array<{
|
|
305
|
+
fingerprint: string;
|
|
306
|
+
errorMessage: string;
|
|
307
|
+
errorName: string;
|
|
308
|
+
sampleStack: string;
|
|
309
|
+
count: number;
|
|
310
|
+
affectedRuns: number;
|
|
311
|
+
firstSeen: number;
|
|
312
|
+
lastSeen: number;
|
|
313
|
+
}>;
|
|
314
|
+
total: number;
|
|
315
|
+
}>;
|
|
316
|
+
getErrorDetail(fingerprint: string, groupingStrategy: 'exact' | 'normalized' | 'portable', options?: {
|
|
317
|
+
timeRange?: {
|
|
318
|
+
start: number;
|
|
319
|
+
end: number;
|
|
320
|
+
};
|
|
321
|
+
limit?: number;
|
|
322
|
+
offset?: number;
|
|
323
|
+
}): Promise<{
|
|
324
|
+
fingerprint: string;
|
|
325
|
+
errorMessage: string;
|
|
326
|
+
errorName: string;
|
|
327
|
+
sampleStack: string;
|
|
328
|
+
totalCount: number;
|
|
329
|
+
affectedRuns: number;
|
|
330
|
+
firstSeen: number;
|
|
331
|
+
lastSeen: number;
|
|
332
|
+
occurrences: Array<{
|
|
333
|
+
workflowSlug: string;
|
|
334
|
+
runId: string;
|
|
335
|
+
stepId: string;
|
|
336
|
+
attemptNumber: number;
|
|
337
|
+
timestampUs: number;
|
|
338
|
+
}>;
|
|
339
|
+
total: number;
|
|
340
|
+
}>;
|
|
341
|
+
getRetryAnalysis(options?: AnalyticsOptions): Promise<RetryAnalysis>;
|
|
342
|
+
getSchedulingLatency(options?: AnalyticsOptions): Promise<SchedulingLatency>;
|
|
343
|
+
getStepDuration(options?: AnalyticsOptions): Promise<StepDuration>;
|
|
344
|
+
getWorkflowDuration(options?: AnalyticsOptions): Promise<WorkflowDuration>;
|
|
345
|
+
getWorkerStability(options?: AnalyticsOptions): Promise<WorkerStability>;
|
|
346
|
+
getThroughput(options?: AnalyticsOptions): Promise<Throughput>;
|
|
347
|
+
getQueueDepth(options?: Pick<AnalyticsOptions, "workflowSlug">): Promise<QueueDepth>;
|
|
348
|
+
getQueueDepthByWorkflow(): Promise<QueueDepthByWorkflow>;
|
|
349
|
+
getSuccessRate(options?: AnalyticsOptions): Promise<SuccessRate>;
|
|
350
|
+
getAnalyticsSummary(options?: AnalyticsOptions): Promise<AnalyticsSummary>;
|
|
351
|
+
}
|
|
352
|
+
export { projectStepState, projectRunStateFromEvents, projectStepRecord } from "@cascade-flow/backend-interface";
|
|
353
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|