@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 +79 -0
- package/dist/analytics-helpers.d.ts +51 -0
- package/dist/analytics-helpers.d.ts.map +1 -0
- package/dist/analytics.d.ts +338 -0
- package/dist/analytics.d.ts.map +1 -0
- package/dist/error-fingerprint.d.ts +43 -0
- package/dist/error-fingerprint.d.ts.map +1 -0
- package/dist/events.d.ts +818 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13780 -0
- package/dist/index.js.map +85 -0
- package/dist/interface.d.ts +745 -0
- package/dist/interface.d.ts.map +1 -0
- package/dist/projection.d.ts +93 -0
- package/dist/projection.d.ts.map +1 -0
- package/dist/schema-conversion.d.ts +40 -0
- package/dist/schema-conversion.d.ts.map +1 -0
- package/dist/schemas.d.ts +271 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/serialization.d.ts +37 -0
- package/dist/serialization.d.ts.map +1 -0
- package/dist/time-utils.d.ts +28 -0
- package/dist/time-utils.d.ts.map +1 -0
- package/package.json +52 -0
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"}
|