@cascade-flow/backend-interface 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 ADDED
@@ -0,0 +1,79 @@
1
+ # Backend Interface
2
+
3
+ Abstract persistence layer for workflow orchestration.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ bun install
9
+ ```
10
+
11
+ ## Overview
12
+
13
+ Defines the `Backend` abstract class and schemas for event sourcing architecture.
14
+
15
+ ## Key Components
16
+
17
+ ### Abstract Backend Class
18
+
19
+ ```typescript
20
+ import { Backend } from "@cascade-flow/backend-interface";
21
+
22
+ class MyBackend extends Backend {
23
+ // Implement abstract methods
24
+ async registerWorkflow(registration: WorkflowRegistration) { ... }
25
+ async appendEvent(workflowSlug: string, runId: string, event: Event) { ... }
26
+ async loadEvents(workflowSlug: string, runId: string) { ... }
27
+ // ... other methods
28
+ }
29
+ ```
30
+
31
+ ### Schemas
32
+
33
+ **Event Schemas** (`src/events.ts`):
34
+ - Step events: `StepScheduled`, `StepStarted`, `StepHeartbeat`, `StepCompleted`, `StepFailed`, `StepReclaimed`, `LogEntry`
35
+ - Workflow events: `WorkflowStarted`, `WorkflowInputValidation`, `WorkflowCompleted`, `WorkflowFailed`, `WorkflowResumed`, `WorkflowCancelled`, `RunSubmitted`
36
+
37
+ **State Schemas** (`src/schemas.ts`):
38
+ - `stepStateSchema` - Step state (computed from events)
39
+ - `runStateSchema` - Run state (computed from events)
40
+ - `workflowMetadataSchema` - Backend-agnostic workflow metadata
41
+ - `stepDefinitionSchema` - Step structure
42
+
43
+ ### Projection Functions
44
+
45
+ ```typescript
46
+ import { projectStepState, projectRunStateFromEvents } from "@cascade-flow/backend-interface";
47
+
48
+ // Compute current state from events
49
+ const stepState = projectStepState(stepEvents);
50
+ const runState = projectRunStateFromEvents(workflowEvents);
51
+ ```
52
+
53
+ ## Event Structure
54
+
55
+ Events use two-level discrimination:
56
+ 1. **Category**: `"workflow"` or `"step"`
57
+ 2. **Type**: Event-specific (e.g., `"StepStarted"`, `"WorkflowCompleted"`)
58
+
59
+ ## Implementations
60
+
61
+ - **FileSystemBackend** - Stores events in `.runs/` directory
62
+ - Custom backends - Implement for databases, cloud storage, etc.
63
+
64
+ ## Exports
65
+
66
+ ```typescript
67
+ // Abstract class
68
+ export { Backend } from "./interface";
69
+
70
+ // Schemas
71
+ export * from "./schemas";
72
+ export * from "./events";
73
+
74
+ // Projection
75
+ export { projectStepState, projectRunStateFromEvents } from "./projection";
76
+
77
+ // Utilities
78
+ export * from "./serialization";
79
+ ```
@@ -0,0 +1,51 @@
1
+ import type { StepEvent, WorkflowEvent } from "./events.ts";
2
+ import type { ErrorAnalysis, RetryAnalysis, SchedulingLatency, StepDuration, WorkflowDuration, WorkerStability, Throughput, SuccessRate } from "./analytics.ts";
3
+ /**
4
+ * Helper functions for computing analytics from events
5
+ * These are pure functions that can be used by any backend implementation
6
+ */
7
+ /**
8
+ * Calculate percentiles from an array of numbers
9
+ */
10
+ export declare function calculatePercentiles(values: number[]): {
11
+ count: number;
12
+ min: number;
13
+ max: number;
14
+ average: number;
15
+ median: number;
16
+ p95: number;
17
+ p99: number;
18
+ };
19
+ /**
20
+ * Compute error analysis from step events
21
+ */
22
+ export declare function computeErrorAnalysis(stepEvents: StepEvent[], workflowSlug?: string, stepId?: string): ErrorAnalysis;
23
+ /**
24
+ * Compute retry analysis from step events
25
+ */
26
+ export declare function computeRetryAnalysis(stepEvents: StepEvent[]): RetryAnalysis;
27
+ /**
28
+ * Compute scheduling latency from step events
29
+ */
30
+ export declare function computeSchedulingLatency(stepEvents: StepEvent[], workflowSlug?: string, stepId?: string): SchedulingLatency;
31
+ /**
32
+ * Compute step duration from step events
33
+ */
34
+ export declare function computeStepDuration(stepEvents: StepEvent[], workflowSlug?: string, stepId?: string): StepDuration;
35
+ /**
36
+ * Compute workflow duration from workflow events
37
+ */
38
+ export declare function computeWorkflowDuration(workflowEvents: WorkflowEvent[], workflowSlug?: string): WorkflowDuration;
39
+ /**
40
+ * Compute worker stability from step events
41
+ */
42
+ export declare function computeWorkerStability(stepEvents: StepEvent[]): WorkerStability;
43
+ /**
44
+ * Compute throughput from events
45
+ */
46
+ export declare function computeThroughput(stepEvents: StepEvent[], workflowEvents: WorkflowEvent[], timeRangeUs: number, workflowSlug?: string): Throughput;
47
+ /**
48
+ * Compute success rate from events
49
+ */
50
+ export declare function computeSuccessRate(stepEvents: StepEvent[], workflowEvents: WorkflowEvent[], workflowSlug?: string, stepId?: string): SuccessRate;
51
+ //# sourceMappingURL=analytics-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics-helpers.d.ts","sourceRoot":"","sources":["../src/analytics-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,SAAS,EACT,aAAa,EAQd,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,WAAW,EAEZ,MAAM,gBAAgB,CAAC;AAExB;;;GAGG;AAEH;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb,CAyBA;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,SAAS,EAAE,EACvB,YAAY,CAAC,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,MAAM,GACd,aAAa,CAqGf;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,aAAa,CA2F3E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,SAAS,EAAE,EACvB,YAAY,CAAC,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,MAAM,GACd,iBAAiB,CAyCnB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,SAAS,EAAE,EACvB,YAAY,CAAC,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,MAAM,GACd,YAAY,CAsBd;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,cAAc,EAAE,aAAa,EAAE,EAC/B,YAAY,CAAC,EAAE,MAAM,GACpB,gBAAgB,CAyBlB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,eAAe,CAyC/E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,SAAS,EAAE,EACvB,cAAc,EAAE,aAAa,EAAE,EAC/B,WAAW,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,GACpB,UAAU,CAiCZ;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,SAAS,EAAE,EACvB,cAAc,EAAE,aAAa,EAAE,EAC/B,YAAY,CAAC,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,MAAM,GACd,WAAW,CAiCb"}
@@ -0,0 +1,338 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Error breakdown by failure reason
4
+ */
5
+ export declare const errorBreakdownSchema: z.ZodObject<{
6
+ failureReason: z.ZodEnum<{
7
+ cancelled: "cancelled";
8
+ timeout: "timeout";
9
+ "exhausted-retries": "exhausted-retries";
10
+ "worker-crash": "worker-crash";
11
+ "execution-error": "execution-error";
12
+ }>;
13
+ count: z.ZodNumber;
14
+ percentage: z.ZodNumber;
15
+ }, z.core.$strip>;
16
+ /**
17
+ * Error analysis for a specific workflow or step
18
+ */
19
+ export declare const errorAnalysisSchema: z.ZodObject<{
20
+ workflowSlug: z.ZodOptional<z.ZodString>;
21
+ stepId: z.ZodOptional<z.ZodString>;
22
+ totalFailures: z.ZodNumber;
23
+ uniqueErrors: z.ZodNumber;
24
+ breakdownByReason: z.ZodArray<z.ZodObject<{
25
+ failureReason: z.ZodEnum<{
26
+ cancelled: "cancelled";
27
+ timeout: "timeout";
28
+ "exhausted-retries": "exhausted-retries";
29
+ "worker-crash": "worker-crash";
30
+ "execution-error": "execution-error";
31
+ }>;
32
+ count: z.ZodNumber;
33
+ percentage: z.ZodNumber;
34
+ }, z.core.$strip>>;
35
+ mostCommonErrors: z.ZodArray<z.ZodObject<{
36
+ message: z.ZodString;
37
+ count: z.ZodNumber;
38
+ failureReason: z.ZodString;
39
+ lastOccurrence: z.ZodNumber;
40
+ occurrences: z.ZodOptional<z.ZodArray<z.ZodObject<{
41
+ workflowSlug: z.ZodString;
42
+ runId: z.ZodString;
43
+ stepId: z.ZodString;
44
+ attemptNumber: z.ZodNumber;
45
+ timestampUs: z.ZodNumber;
46
+ }, z.core.$strip>>>;
47
+ }, z.core.$strip>>;
48
+ firstFailure: z.ZodOptional<z.ZodNumber>;
49
+ lastFailure: z.ZodOptional<z.ZodNumber>;
50
+ }, z.core.$strip>;
51
+ /**
52
+ * Retry analysis
53
+ */
54
+ export declare const retryAnalysisSchema: z.ZodObject<{
55
+ totalRetries: z.ZodNumber;
56
+ retriesSucceeded: z.ZodNumber;
57
+ retriesFailed: z.ZodNumber;
58
+ averageAttemptsBeforeSuccess: z.ZodNumber;
59
+ averageAttemptsBeforeFailure: z.ZodNumber;
60
+ retryEffectivenessRate: z.ZodNumber;
61
+ }, z.core.$strip>;
62
+ /**
63
+ * Scheduling latency metrics (time from scheduled to started)
64
+ */
65
+ export declare const schedulingLatencySchema: z.ZodObject<{
66
+ workflowSlug: z.ZodOptional<z.ZodString>;
67
+ stepId: z.ZodOptional<z.ZodString>;
68
+ count: z.ZodNumber;
69
+ averageUs: z.ZodNumber;
70
+ medianUs: z.ZodNumber;
71
+ p95Us: z.ZodNumber;
72
+ p99Us: z.ZodNumber;
73
+ minUs: z.ZodNumber;
74
+ maxUs: z.ZodNumber;
75
+ }, z.core.$strip>;
76
+ /**
77
+ * Step duration metrics
78
+ */
79
+ export declare const stepDurationSchema: z.ZodObject<{
80
+ workflowSlug: z.ZodOptional<z.ZodString>;
81
+ stepId: z.ZodOptional<z.ZodString>;
82
+ count: z.ZodNumber;
83
+ averageUs: z.ZodNumber;
84
+ medianUs: z.ZodNumber;
85
+ p95Us: z.ZodNumber;
86
+ p99Us: z.ZodNumber;
87
+ minUs: z.ZodNumber;
88
+ maxUs: z.ZodNumber;
89
+ }, z.core.$strip>;
90
+ /**
91
+ * Workflow duration metrics (end-to-end time)
92
+ */
93
+ export declare const workflowDurationSchema: z.ZodObject<{
94
+ workflowSlug: z.ZodOptional<z.ZodString>;
95
+ count: z.ZodNumber;
96
+ averageUs: z.ZodNumber;
97
+ medianUs: z.ZodNumber;
98
+ p95Us: z.ZodNumber;
99
+ p99Us: z.ZodNumber;
100
+ minUs: z.ZodNumber;
101
+ maxUs: z.ZodNumber;
102
+ }, z.core.$strip>;
103
+ /**
104
+ * Worker stability metrics
105
+ */
106
+ export declare const workerStabilitySchema: z.ZodObject<{
107
+ totalReclamations: z.ZodNumber;
108
+ uniqueWorkersWithReclamations: z.ZodNumber;
109
+ stepsReclaimedByWorker: z.ZodRecord<z.ZodString, z.ZodNumber>;
110
+ averageStaleTimeUs: z.ZodNumber;
111
+ mostUnstableWorkers: z.ZodArray<z.ZodObject<{
112
+ workerId: z.ZodString;
113
+ reclamationCount: z.ZodNumber;
114
+ }, z.core.$strip>>;
115
+ }, z.core.$strip>;
116
+ /**
117
+ * Throughput metrics
118
+ */
119
+ export declare const throughputSchema: z.ZodObject<{
120
+ workflowSlug: z.ZodOptional<z.ZodString>;
121
+ timeRangeUs: z.ZodNumber;
122
+ runsCompleted: z.ZodNumber;
123
+ runsFailed: z.ZodNumber;
124
+ stepsCompleted: z.ZodNumber;
125
+ stepsFailed: z.ZodNumber;
126
+ stepsSkipped: z.ZodNumber;
127
+ runsPerHour: z.ZodNumber;
128
+ stepsPerHour: z.ZodNumber;
129
+ }, z.core.$strip>;
130
+ /**
131
+ * Queue depth metrics (current state)
132
+ */
133
+ export declare const queueDepthSchema: z.ZodObject<{
134
+ workflowSlug: z.ZodOptional<z.ZodString>;
135
+ pendingRuns: z.ZodNumber;
136
+ runningRuns: z.ZodNumber;
137
+ scheduledSteps: z.ZodNumber;
138
+ runningSteps: z.ZodNumber;
139
+ oldestScheduledStepUs: z.ZodOptional<z.ZodNumber>;
140
+ oldestPendingRunUs: z.ZodOptional<z.ZodNumber>;
141
+ }, z.core.$strip>;
142
+ /**
143
+ * Per-workflow queue depth breakdown
144
+ */
145
+ export declare const queueDepthByWorkflowSchema: z.ZodArray<z.ZodObject<{
146
+ workflowSlug: z.ZodString;
147
+ workflowName: z.ZodOptional<z.ZodString>;
148
+ pendingRuns: z.ZodNumber;
149
+ scheduledSteps: z.ZodNumber;
150
+ oldestPendingItemUs: z.ZodOptional<z.ZodNumber>;
151
+ }, z.core.$strip>>;
152
+ /**
153
+ * Success/failure rate metrics
154
+ */
155
+ export declare const successRateSchema: z.ZodObject<{
156
+ workflowSlug: z.ZodOptional<z.ZodString>;
157
+ stepId: z.ZodOptional<z.ZodString>;
158
+ totalRuns: z.ZodNumber;
159
+ successfulRuns: z.ZodNumber;
160
+ failedRuns: z.ZodNumber;
161
+ cancelledRuns: z.ZodNumber;
162
+ successRate: z.ZodNumber;
163
+ failureRate: z.ZodNumber;
164
+ totalSteps: z.ZodNumber;
165
+ successfulSteps: z.ZodNumber;
166
+ failedSteps: z.ZodNumber;
167
+ skippedSteps: z.ZodNumber;
168
+ stepSuccessRate: z.ZodNumber;
169
+ stepFailureRate: z.ZodNumber;
170
+ }, z.core.$strip>;
171
+ /**
172
+ * Complete analytics summary
173
+ */
174
+ export declare const analyticsSummarySchema: z.ZodObject<{
175
+ timeRange: z.ZodObject<{
176
+ startUs: z.ZodNumber;
177
+ endUs: z.ZodNumber;
178
+ durationUs: z.ZodNumber;
179
+ }, z.core.$strip>;
180
+ errorAnalysis: z.ZodObject<{
181
+ workflowSlug: z.ZodOptional<z.ZodString>;
182
+ stepId: z.ZodOptional<z.ZodString>;
183
+ totalFailures: z.ZodNumber;
184
+ uniqueErrors: z.ZodNumber;
185
+ breakdownByReason: z.ZodArray<z.ZodObject<{
186
+ failureReason: z.ZodEnum<{
187
+ cancelled: "cancelled";
188
+ timeout: "timeout";
189
+ "exhausted-retries": "exhausted-retries";
190
+ "worker-crash": "worker-crash";
191
+ "execution-error": "execution-error";
192
+ }>;
193
+ count: z.ZodNumber;
194
+ percentage: z.ZodNumber;
195
+ }, z.core.$strip>>;
196
+ mostCommonErrors: z.ZodArray<z.ZodObject<{
197
+ message: z.ZodString;
198
+ count: z.ZodNumber;
199
+ failureReason: z.ZodString;
200
+ lastOccurrence: z.ZodNumber;
201
+ occurrences: z.ZodOptional<z.ZodArray<z.ZodObject<{
202
+ workflowSlug: z.ZodString;
203
+ runId: z.ZodString;
204
+ stepId: z.ZodString;
205
+ attemptNumber: z.ZodNumber;
206
+ timestampUs: z.ZodNumber;
207
+ }, z.core.$strip>>>;
208
+ }, z.core.$strip>>;
209
+ firstFailure: z.ZodOptional<z.ZodNumber>;
210
+ lastFailure: z.ZodOptional<z.ZodNumber>;
211
+ }, z.core.$strip>;
212
+ retryAnalysis: z.ZodObject<{
213
+ totalRetries: z.ZodNumber;
214
+ retriesSucceeded: z.ZodNumber;
215
+ retriesFailed: z.ZodNumber;
216
+ averageAttemptsBeforeSuccess: z.ZodNumber;
217
+ averageAttemptsBeforeFailure: z.ZodNumber;
218
+ retryEffectivenessRate: z.ZodNumber;
219
+ }, z.core.$strip>;
220
+ schedulingLatency: z.ZodObject<{
221
+ workflowSlug: z.ZodOptional<z.ZodString>;
222
+ stepId: z.ZodOptional<z.ZodString>;
223
+ count: z.ZodNumber;
224
+ averageUs: z.ZodNumber;
225
+ medianUs: z.ZodNumber;
226
+ p95Us: z.ZodNumber;
227
+ p99Us: z.ZodNumber;
228
+ minUs: z.ZodNumber;
229
+ maxUs: z.ZodNumber;
230
+ }, z.core.$strip>;
231
+ stepDuration: z.ZodObject<{
232
+ workflowSlug: z.ZodOptional<z.ZodString>;
233
+ stepId: z.ZodOptional<z.ZodString>;
234
+ count: z.ZodNumber;
235
+ averageUs: z.ZodNumber;
236
+ medianUs: z.ZodNumber;
237
+ p95Us: z.ZodNumber;
238
+ p99Us: z.ZodNumber;
239
+ minUs: z.ZodNumber;
240
+ maxUs: z.ZodNumber;
241
+ }, z.core.$strip>;
242
+ workflowDuration: z.ZodObject<{
243
+ workflowSlug: z.ZodOptional<z.ZodString>;
244
+ count: z.ZodNumber;
245
+ averageUs: z.ZodNumber;
246
+ medianUs: z.ZodNumber;
247
+ p95Us: z.ZodNumber;
248
+ p99Us: z.ZodNumber;
249
+ minUs: z.ZodNumber;
250
+ maxUs: z.ZodNumber;
251
+ }, z.core.$strip>;
252
+ workerStability: z.ZodObject<{
253
+ totalReclamations: z.ZodNumber;
254
+ uniqueWorkersWithReclamations: z.ZodNumber;
255
+ stepsReclaimedByWorker: z.ZodRecord<z.ZodString, z.ZodNumber>;
256
+ averageStaleTimeUs: z.ZodNumber;
257
+ mostUnstableWorkers: z.ZodArray<z.ZodObject<{
258
+ workerId: z.ZodString;
259
+ reclamationCount: z.ZodNumber;
260
+ }, z.core.$strip>>;
261
+ }, z.core.$strip>;
262
+ throughput: z.ZodObject<{
263
+ workflowSlug: z.ZodOptional<z.ZodString>;
264
+ timeRangeUs: z.ZodNumber;
265
+ runsCompleted: z.ZodNumber;
266
+ runsFailed: z.ZodNumber;
267
+ stepsCompleted: z.ZodNumber;
268
+ stepsFailed: z.ZodNumber;
269
+ stepsSkipped: z.ZodNumber;
270
+ runsPerHour: z.ZodNumber;
271
+ stepsPerHour: z.ZodNumber;
272
+ }, z.core.$strip>;
273
+ queueDepth: z.ZodObject<{
274
+ workflowSlug: z.ZodOptional<z.ZodString>;
275
+ pendingRuns: z.ZodNumber;
276
+ runningRuns: z.ZodNumber;
277
+ scheduledSteps: z.ZodNumber;
278
+ runningSteps: z.ZodNumber;
279
+ oldestScheduledStepUs: z.ZodOptional<z.ZodNumber>;
280
+ oldestPendingRunUs: z.ZodOptional<z.ZodNumber>;
281
+ }, z.core.$strip>;
282
+ successRate: z.ZodObject<{
283
+ workflowSlug: z.ZodOptional<z.ZodString>;
284
+ stepId: z.ZodOptional<z.ZodString>;
285
+ totalRuns: z.ZodNumber;
286
+ successfulRuns: z.ZodNumber;
287
+ failedRuns: z.ZodNumber;
288
+ cancelledRuns: z.ZodNumber;
289
+ successRate: z.ZodNumber;
290
+ failureRate: z.ZodNumber;
291
+ totalSteps: z.ZodNumber;
292
+ successfulSteps: z.ZodNumber;
293
+ failedSteps: z.ZodNumber;
294
+ skippedSteps: z.ZodNumber;
295
+ stepSuccessRate: z.ZodNumber;
296
+ stepFailureRate: z.ZodNumber;
297
+ }, z.core.$strip>;
298
+ }, z.core.$strip>;
299
+ export type ErrorBreakdown = z.infer<typeof errorBreakdownSchema>;
300
+ export type ErrorAnalysis = z.infer<typeof errorAnalysisSchema>;
301
+ export type RetryAnalysis = z.infer<typeof retryAnalysisSchema>;
302
+ export type SchedulingLatency = z.infer<typeof schedulingLatencySchema>;
303
+ export type StepDuration = z.infer<typeof stepDurationSchema>;
304
+ export type WorkflowDuration = z.infer<typeof workflowDurationSchema>;
305
+ export type WorkerStability = z.infer<typeof workerStabilitySchema>;
306
+ export type Throughput = z.infer<typeof throughputSchema>;
307
+ export type QueueDepth = z.infer<typeof queueDepthSchema>;
308
+ export type QueueDepthByWorkflow = z.infer<typeof queueDepthByWorkflowSchema>;
309
+ export type SuccessRate = z.infer<typeof successRateSchema>;
310
+ export type AnalyticsSummary = z.infer<typeof analyticsSummarySchema>;
311
+ /**
312
+ * Common options for analytics queries
313
+ */
314
+ export interface AnalyticsOptions {
315
+ /**
316
+ * Start of time range (microseconds since epoch)
317
+ * Defaults to 24 hours ago
318
+ */
319
+ startUs?: number;
320
+ /**
321
+ * End of time range (microseconds since epoch)
322
+ * Defaults to now
323
+ */
324
+ endUs?: number;
325
+ /**
326
+ * Filter by workflow slug
327
+ */
328
+ workflowSlug?: string;
329
+ /**
330
+ * Filter by step ID
331
+ */
332
+ stepId?: string;
333
+ /**
334
+ * Filter by run IDs
335
+ */
336
+ runIds?: string[];
337
+ }
338
+ //# sourceMappingURL=analytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../src/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;iBAU/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyB9B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;iBAO9B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;iBAUlC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;iBAU7B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;iBASjC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;iBAWhC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;iBAU3B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;iBAQ3B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,0BAA0B;;;;;;kBAQtC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;iBAe5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAejC,CAAC;AAMH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAMtE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB"}
@@ -0,0 +1,43 @@
1
+ import type { StepError } from './schemas.ts';
2
+ export interface ErrorFingerprints {
3
+ nameHash: string;
4
+ messageHash: string;
5
+ stackExactHash: string;
6
+ stackNormalizedHash: string;
7
+ stackPortableHash: string;
8
+ }
9
+ /**
10
+ * Compute all error fingerprint hashes for flexible grouping
11
+ */
12
+ export declare function computeErrorFingerprints(error: StepError, stack?: string): ErrorFingerprints;
13
+ /**
14
+ * Extract the top N frames from a stack trace
15
+ */
16
+ export declare function extractTopFrames(stack: string, count: number): string;
17
+ /**
18
+ * Remove line and column numbers from stack trace
19
+ * Example: "at foo (/path/file.js:123:45)" -> "at foo (/path/file.js)"
20
+ */
21
+ export declare function removeLineNumbers(stack: string): string;
22
+ /**
23
+ * Normalize file paths in stack trace (remove absolute paths, keep relative)
24
+ * Example: "at foo (/Users/me/project/src/file.js:10:5)" -> "at foo (src/file.js:10:5)"
25
+ */
26
+ export declare function normalizePaths(stack: string): string;
27
+ /**
28
+ * Create SHA-1 hash of input string
29
+ */
30
+ export declare function hashString(input: string): string;
31
+ /**
32
+ * Compose a fingerprint from individual hash components
33
+ */
34
+ export declare function composeFingerprint(fingerprints: ErrorFingerprints, strategy: 'exact' | 'normalized' | 'portable'): string;
35
+ /**
36
+ * Parse a composite fingerprint back into components
37
+ */
38
+ export declare function parseFingerprint(fingerprint: string): {
39
+ nameHash: string;
40
+ messageHash: string;
41
+ stackHash: string;
42
+ };
43
+ //# sourceMappingURL=error-fingerprint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-fingerprint.d.ts","sourceRoot":"","sources":["../src/error-fingerprint.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,SAAS,EAChB,KAAK,CAAC,EAAE,MAAM,GACb,iBAAiB,CAiBnB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAerE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIvD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWpD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,iBAAiB,EAC/B,QAAQ,EAAE,OAAO,GAAG,YAAY,GAAG,UAAU,GAC5C,MAAM,CASR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,CAWA"}