@cascade-flow/backend-postgres 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.
@@ -0,0 +1,265 @@
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
+ * PostgreSQL backend implementation
4
+ * Stores workflow execution state in PostgreSQL using event sourcing
5
+ *
6
+ * Features:
7
+ * - Event sourcing with immutable append-only events
8
+ * - Automatic schema initialization via idempotent migrations
9
+ * - Race-safe step claiming using SELECT FOR UPDATE SKIP LOCKED
10
+ * - Events-as-queue pattern (no separate queue table)
11
+ * - JSONB storage for flexible schema evolution
12
+ */
13
+ export declare class PostgresBackend extends Backend {
14
+ private pool;
15
+ private initialized;
16
+ /**
17
+ * Create a new Postgres backend
18
+ *
19
+ * @param connectionString - PostgreSQL connection string (e.g., postgres://user:pass@host/db)
20
+ */
21
+ constructor(connectionString: string);
22
+ /**
23
+ * Initialize the backend by running database migrations
24
+ * This should be called by the worker on startup to ensure the database schema is ready.
25
+ * Other components (submit CLI, UI) can skip this and assume the schema already exists.
26
+ */
27
+ initialize(): Promise<void>;
28
+ /**
29
+ * Generate a unique run ID
30
+ */
31
+ private generateRunId;
32
+ /**
33
+ * Hash an idempotency key
34
+ */
35
+ private hashIdempotencyKey;
36
+ /**
37
+ * Generate a unique event ID using microsecond timestamp
38
+ */
39
+ private generateEventId;
40
+ initializeRun(workflowSlug: string, runId: string): Promise<void>;
41
+ runExists(workflowSlug: string, runId: string): Promise<boolean>;
42
+ loadRun(workflowSlug: string, runId: string): Promise<StepRecord[]>;
43
+ getStepOutputPath(workflowSlug: string, runId: string, stepId: string, attemptNumber: number): string;
44
+ appendEvent(workflowSlug: string, runId: string, event: Event): Promise<void>;
45
+ loadEvents(workflowSlug: string, runId: string, options: {
46
+ category: "step";
47
+ stepId?: string;
48
+ }): Promise<StepEvent[]>;
49
+ loadEvents(workflowSlug: string, runId: string, options: {
50
+ category: "workflow";
51
+ }): Promise<WorkflowEvent[]>;
52
+ loadEvents(workflowSlug: string, runId: string, options?: {
53
+ category?: "workflow" | "step";
54
+ stepId?: string;
55
+ }): Promise<Event[]>;
56
+ saveStepScheduled(workflowSlug: string, runId: string, stepId: string, metadata: {
57
+ availableAt: number;
58
+ reason: "initial" | "retry" | "dependency-satisfied";
59
+ attemptNumber: number;
60
+ retryDelayMs?: number;
61
+ }): Promise<void>;
62
+ saveStepStart(workflowSlug: string, runId: string, stepId: string, workerId: string, metadata: StepStartMetadata): Promise<void>;
63
+ saveStepComplete(workflowSlug: string, runId: string, stepId: string, output: unknown, metadata: StepCompleteMetadata, exportOutput?: boolean): Promise<void>;
64
+ saveStepFailed(workflowSlug: string, runId: string, stepId: string, error: StepError, metadata: {
65
+ duration: number;
66
+ attemptNumber: number;
67
+ terminal: boolean;
68
+ nextRetryAt?: number;
69
+ failureReason: "exhausted-retries" | "worker-crash" | "timeout" | "cancelled" | "execution-error";
70
+ }): Promise<void>;
71
+ saveStepFailedAndScheduleRetry(workflowSlug: string, runId: string, stepId: string, error: StepError, failureMetadata: {
72
+ duration: number;
73
+ attemptNumber: number;
74
+ nextRetryAt: number;
75
+ failureReason: "execution-error" | "timeout";
76
+ }, scheduleMetadata: {
77
+ availableAt: number;
78
+ nextAttemptNumber: number;
79
+ retryDelayMs: number;
80
+ maxRetries: number;
81
+ }): Promise<void>;
82
+ saveStepSkipped(workflowSlug: string, runId: string, stepId: string, metadata: {
83
+ skipType: "primary" | "cascade";
84
+ reason: string;
85
+ metadata?: Record<string, any>;
86
+ duration: number;
87
+ attemptNumber: number;
88
+ cascadedFrom?: string;
89
+ }): Promise<void>;
90
+ saveStepHeartbeat(workflowSlug: string, runId: string, stepId: string, workerId: string, attemptNumber: number): Promise<void>;
91
+ saveStepReclaimed(workflowSlug: string, runId: string, stepId: string, metadata: {
92
+ originalWorkerId: string;
93
+ reclaimedBy: string;
94
+ lastHeartbeat: number;
95
+ staleThreshold: number;
96
+ staleDuration: number;
97
+ attemptNumber: number;
98
+ }): Promise<void>;
99
+ saveStepLogs(workflowSlug: string, runId: string, stepId: string, logs: LogEntry[]): Promise<void>;
100
+ loadStepLogs(workflowSlug: string, runId: string, stepId: string, attemptNumber?: number): Promise<LogEntry[] | null>;
101
+ saveWorkflowStart(workflowSlug: string, runId: string, metadata: {
102
+ workflowAttemptNumber: number;
103
+ hasInputSchema: boolean;
104
+ hasInput: boolean;
105
+ }): Promise<void>;
106
+ saveWorkflowInputValidation(workflowSlug: string, runId: string, result: {
107
+ workflowAttemptNumber: number;
108
+ hasSchema: boolean;
109
+ success: boolean;
110
+ error?: StepError;
111
+ validationErrors?: Array<{
112
+ path: string;
113
+ message: string;
114
+ }>;
115
+ }): Promise<void>;
116
+ saveWorkflowComplete(workflowSlug: string, runId: string, output: unknown, metadata: {
117
+ workflowAttemptNumber: number;
118
+ timestamp: number;
119
+ duration: number;
120
+ totalSteps: number;
121
+ }): Promise<void>;
122
+ saveWorkflowFailed(workflowSlug: string, runId: string, error: StepError, metadata: {
123
+ workflowAttemptNumber: number;
124
+ duration: number;
125
+ completedSteps: number;
126
+ failedStep?: string;
127
+ }, failureReason: "step-failed" | "worker-crash" | "timeout" | "cancelled"): Promise<void>;
128
+ saveWorkflowResumed(workflowSlug: string, runId: string, metadata: {
129
+ originalRunId: string;
130
+ resumedSteps: number;
131
+ pendingSteps: number;
132
+ }): Promise<void>;
133
+ saveWorkflowCancelled(workflowSlug: string, runId: string, metadata: {
134
+ workflowAttemptNumber: number;
135
+ reason?: string;
136
+ duration: number;
137
+ completedSteps: number;
138
+ }): Promise<void>;
139
+ saveWorkflowRetryStarted(workflowSlug: string, runId: string, metadata: {
140
+ workflowAttemptNumber: number;
141
+ previousAttemptNumber: number;
142
+ retriedSteps: string[];
143
+ reason?: string;
144
+ }): Promise<void>;
145
+ saveRunSubmitted(workflowSlug: string, runId: string, metadata: {
146
+ availableAt: number;
147
+ priority: number;
148
+ input?: string;
149
+ hasInputSchema: boolean;
150
+ timeout?: number;
151
+ idempotencyKey?: string;
152
+ metadata?: Record<string, unknown>;
153
+ tags?: string[];
154
+ }): Promise<void>;
155
+ submitRun(submission: RunSubmission): Promise<{
156
+ runId: string;
157
+ isNew: boolean;
158
+ }>;
159
+ listRuns(options?: {
160
+ workflowSlug?: string;
161
+ status?: RunState["status"][];
162
+ tags?: string[];
163
+ limit?: number;
164
+ }): Promise<RunState[]>;
165
+ cancelRun(runId: string, reason?: string): Promise<void>;
166
+ getRun(runId: string): Promise<RunState | null>;
167
+ getFailedSteps(workflowSlug: string, runId: string): Promise<Array<{
168
+ stepId: string;
169
+ error: StepError;
170
+ attemptNumber: number;
171
+ }>>;
172
+ listActiveWorkflows(): Promise<string[]>;
173
+ listScheduledSteps(options?: {
174
+ availableBefore?: number;
175
+ workflowSlug?: string;
176
+ limit?: number;
177
+ }): Promise<Array<{
178
+ workflowSlug: string;
179
+ runId: string;
180
+ stepId: string;
181
+ }>>;
182
+ isStepClaimable(workflowSlug: string, runId: string, stepId: string): Promise<boolean>;
183
+ claimScheduledStep(workflowSlug: string, runId: string, stepId: string, workerId: string, metadata: StepStartMetadata): Promise<{
184
+ attemptNumber: number;
185
+ } | null>;
186
+ reclaimStaleSteps(staleThreshold: number, reclaimedBy: string): Promise<Array<{
187
+ workflowSlug: string;
188
+ runId: string;
189
+ stepId: string;
190
+ }>>;
191
+ registerWorkflow(registration: WorkflowRegistration): Promise<void>;
192
+ getWorkflowMetadata(slug: string): Promise<WorkflowMetadata | null>;
193
+ listWorkflowMetadata(): Promise<WorkflowMetadata[]>;
194
+ getWorkflowSteps(slug: string): Promise<StepDefinition[]>;
195
+ listRunIds(workflowSlug: string): Promise<string[]>;
196
+ /**
197
+ * Close the database connection pool
198
+ * Call this when shutting down the application
199
+ */
200
+ close(): Promise<void>;
201
+ /**
202
+ * Helper to load all events within a time range and optional filters
203
+ * Uses raw SQL queries for better performance with large datasets
204
+ */
205
+ private loadEventsForAnalytics;
206
+ getErrorAnalysis(options?: AnalyticsOptions): Promise<ErrorAnalysis>;
207
+ getErrorsList(options?: {
208
+ timeRange?: {
209
+ start: number;
210
+ end: number;
211
+ };
212
+ workflowSlug?: string;
213
+ groupingStrategy?: 'exact' | 'normalized' | 'portable';
214
+ limit?: number;
215
+ offset?: number;
216
+ }): Promise<{
217
+ errors: Array<{
218
+ fingerprint: string;
219
+ errorMessage: string;
220
+ errorName: string;
221
+ sampleStack: string;
222
+ count: number;
223
+ affectedRuns: number;
224
+ firstSeen: number;
225
+ lastSeen: number;
226
+ }>;
227
+ total: number;
228
+ }>;
229
+ getErrorDetail(fingerprint: string, groupingStrategy: 'exact' | 'normalized' | 'portable', options?: {
230
+ timeRange?: {
231
+ start: number;
232
+ end: number;
233
+ };
234
+ limit?: number;
235
+ offset?: number;
236
+ }): Promise<{
237
+ fingerprint: string;
238
+ errorMessage: string;
239
+ errorName: string;
240
+ sampleStack: string;
241
+ totalCount: number;
242
+ affectedRuns: number;
243
+ firstSeen: number;
244
+ lastSeen: number;
245
+ occurrences: Array<{
246
+ workflowSlug: string;
247
+ runId: string;
248
+ stepId: string;
249
+ attemptNumber: number;
250
+ timestampUs: number;
251
+ }>;
252
+ total: number;
253
+ }>;
254
+ getRetryAnalysis(options?: AnalyticsOptions): Promise<RetryAnalysis>;
255
+ getSchedulingLatency(options?: AnalyticsOptions): Promise<SchedulingLatency>;
256
+ getStepDuration(options?: AnalyticsOptions): Promise<StepDuration>;
257
+ getWorkflowDuration(options?: AnalyticsOptions): Promise<WorkflowDuration>;
258
+ getWorkerStability(options?: AnalyticsOptions): Promise<WorkerStability>;
259
+ getThroughput(options?: AnalyticsOptions): Promise<Throughput>;
260
+ getQueueDepth(options?: Pick<AnalyticsOptions, "workflowSlug">): Promise<QueueDepth>;
261
+ getQueueDepthByWorkflow(): Promise<QueueDepthByWorkflow>;
262
+ getSuccessRate(options?: AnalyticsOptions): Promise<SuccessRate>;
263
+ getAnalyticsSummary(options?: AnalyticsOptions): Promise<AnalyticsSummary>;
264
+ }
265
+ //# 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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"}