@shipfox/api-definitions-dto 5.0.0 → 9.0.1
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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +22 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/inter-module.d.ts +44 -0
- package/dist/inter-module.d.ts.map +1 -0
- package/dist/inter-module.js +29 -0
- package/dist/inter-module.js.map +1 -0
- package/dist/tsconfig.test.tsbuildinfo +1 -1
- package/dist/workflow-model.d.ts +153 -0
- package/dist/workflow-model.d.ts.map +1 -0
- package/dist/workflow-model.js +34 -0
- package/dist/workflow-model.js.map +1 -0
- package/package.json +11 -13
- package/src/index.ts +10 -0
- package/src/inter-module.test.ts +24 -0
- package/src/inter-module.ts +25 -0
- package/src/workflow-model.ts +187 -0
- package/tsconfig.build.tsbuildinfo +1 -1
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import type { ExpressionType, OutputDeclarations, ResolvedFieldSegment, WorkflowExpression } from '@shipfox/expression';
|
|
2
|
+
import type { AgentThinking, Harness } from '@shipfox/workflow-document';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
export declare const DEFAULT_RUN_TIMEOUT_MS: number;
|
|
5
|
+
export declare const DEFAULT_JOB_SUCCESS = "!executions.exists(e, e.status == 'failed')";
|
|
6
|
+
export interface WorkflowModelJobCheckout {
|
|
7
|
+
readonly permissions: {
|
|
8
|
+
readonly contents: 'read' | 'write';
|
|
9
|
+
};
|
|
10
|
+
readonly persistCredentials: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare const DEFAULT_JOB_CHECKOUT: WorkflowModelJobCheckout;
|
|
13
|
+
export type WorkflowFieldTemplate = readonly ResolvedFieldSegment[];
|
|
14
|
+
export type WorkflowEnvTemplates = Readonly<Record<string, WorkflowFieldTemplate>>;
|
|
15
|
+
export type WorkflowOutputTemplates = Readonly<Record<string, WorkflowFieldTemplate>>;
|
|
16
|
+
export interface WorkflowModel {
|
|
17
|
+
readonly kind: 'workflow';
|
|
18
|
+
readonly name: string;
|
|
19
|
+
readonly env?: Readonly<Record<string, string>>;
|
|
20
|
+
readonly templates?: {
|
|
21
|
+
readonly env?: WorkflowEnvTemplates;
|
|
22
|
+
};
|
|
23
|
+
readonly triggers: readonly WorkflowModelTrigger[];
|
|
24
|
+
readonly jobs: readonly WorkflowModelJob[];
|
|
25
|
+
readonly dependencies: readonly WorkflowModelDependency[];
|
|
26
|
+
}
|
|
27
|
+
export interface WorkflowModelTrigger {
|
|
28
|
+
readonly id: string;
|
|
29
|
+
readonly key: string;
|
|
30
|
+
readonly source: string;
|
|
31
|
+
readonly event: string;
|
|
32
|
+
readonly inputs?: Readonly<Record<string, unknown>>;
|
|
33
|
+
readonly filter?: string;
|
|
34
|
+
readonly config?: Readonly<Record<string, unknown>>;
|
|
35
|
+
}
|
|
36
|
+
export interface WorkflowModelJob {
|
|
37
|
+
readonly id: string;
|
|
38
|
+
readonly key: string;
|
|
39
|
+
readonly mode: 'one_shot' | 'listening';
|
|
40
|
+
readonly runner: readonly string[];
|
|
41
|
+
readonly runnerTemplates?: readonly WorkflowFieldTemplate[];
|
|
42
|
+
readonly checkout: WorkflowModelJobCheckout;
|
|
43
|
+
readonly if?: WorkflowExpression;
|
|
44
|
+
readonly success?: string;
|
|
45
|
+
readonly outputs?: WorkflowOutputTemplates;
|
|
46
|
+
readonly outputTypes?: Readonly<Record<string, ExpressionType>>;
|
|
47
|
+
readonly executionTimeoutMs?: number;
|
|
48
|
+
readonly listening?: WorkflowModelJobListening;
|
|
49
|
+
readonly name?: WorkflowFieldTemplate;
|
|
50
|
+
readonly env?: Readonly<Record<string, string>>;
|
|
51
|
+
readonly templates?: {
|
|
52
|
+
readonly env?: WorkflowEnvTemplates;
|
|
53
|
+
};
|
|
54
|
+
readonly dependencies: readonly string[];
|
|
55
|
+
readonly steps: readonly WorkflowModelStep[];
|
|
56
|
+
}
|
|
57
|
+
export interface WorkflowModelJobListening {
|
|
58
|
+
readonly on: readonly WorkflowModelListeningTrigger[];
|
|
59
|
+
readonly until?: readonly WorkflowModelListeningTrigger[];
|
|
60
|
+
readonly timeoutMs?: number;
|
|
61
|
+
readonly maxExecutions?: number;
|
|
62
|
+
readonly batch?: WorkflowModelListeningBatch;
|
|
63
|
+
readonly onResolve: 'finish' | 'cancel';
|
|
64
|
+
}
|
|
65
|
+
export interface WorkflowModelListeningTrigger {
|
|
66
|
+
readonly source: string;
|
|
67
|
+
readonly event: string;
|
|
68
|
+
readonly inputs?: Readonly<Record<string, unknown>>;
|
|
69
|
+
readonly filter?: string;
|
|
70
|
+
}
|
|
71
|
+
export interface WorkflowModelListeningBatch {
|
|
72
|
+
readonly debounceMs?: number;
|
|
73
|
+
readonly maxSize?: number;
|
|
74
|
+
readonly maxWaitMs?: number;
|
|
75
|
+
}
|
|
76
|
+
export type WorkflowModelStep = WorkflowModelRunStep | WorkflowModelAgentStep;
|
|
77
|
+
interface WorkflowModelStepBase {
|
|
78
|
+
readonly id: string;
|
|
79
|
+
readonly key?: string;
|
|
80
|
+
readonly if?: WorkflowExpression;
|
|
81
|
+
readonly name?: string;
|
|
82
|
+
readonly outputs?: OutputDeclarations;
|
|
83
|
+
readonly gate?: WorkflowModelStepGate;
|
|
84
|
+
readonly sourceLocation?: WorkflowSourceLocation;
|
|
85
|
+
}
|
|
86
|
+
export interface WorkflowModelRunStep extends WorkflowModelStepBase {
|
|
87
|
+
readonly kind: 'run';
|
|
88
|
+
readonly command: {
|
|
89
|
+
readonly kind: 'shell';
|
|
90
|
+
readonly value: string;
|
|
91
|
+
};
|
|
92
|
+
readonly env?: Readonly<Record<string, string>>;
|
|
93
|
+
readonly templates?: {
|
|
94
|
+
readonly command?: WorkflowFieldTemplate;
|
|
95
|
+
readonly name?: WorkflowFieldTemplate;
|
|
96
|
+
readonly env?: WorkflowEnvTemplates;
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
export interface WorkflowModelAgentStep extends WorkflowModelStepBase {
|
|
100
|
+
readonly kind: 'agent';
|
|
101
|
+
readonly harness?: Harness;
|
|
102
|
+
readonly model?: string;
|
|
103
|
+
readonly provider?: string;
|
|
104
|
+
readonly thinking?: AgentThinking;
|
|
105
|
+
readonly tools?: readonly string[];
|
|
106
|
+
readonly integrations?: readonly WorkflowModelStepIntegration[];
|
|
107
|
+
readonly prompt: string;
|
|
108
|
+
readonly templates?: {
|
|
109
|
+
readonly prompt?: WorkflowFieldTemplate;
|
|
110
|
+
readonly model?: WorkflowFieldTemplate;
|
|
111
|
+
readonly provider?: WorkflowFieldTemplate;
|
|
112
|
+
readonly name?: WorkflowFieldTemplate;
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
export interface WorkflowModelStepIntegration {
|
|
116
|
+
readonly connection?: string;
|
|
117
|
+
readonly include: readonly string[];
|
|
118
|
+
readonly exclude?: readonly string[];
|
|
119
|
+
readonly allowWrite: boolean;
|
|
120
|
+
}
|
|
121
|
+
export interface WorkflowSourceLocation {
|
|
122
|
+
readonly startLine: number;
|
|
123
|
+
readonly endLine: number;
|
|
124
|
+
}
|
|
125
|
+
export type WorkflowStepSourceLocationMap = ReadonlyMap<string, ReadonlyMap<number, WorkflowSourceLocation>>;
|
|
126
|
+
export interface WorkflowModelStepGate {
|
|
127
|
+
readonly success?: WorkflowExpression;
|
|
128
|
+
readonly onFailure?: WorkflowModelStepFailureAction;
|
|
129
|
+
}
|
|
130
|
+
export interface WorkflowModelStepFailureAction {
|
|
131
|
+
readonly restartFrom: string;
|
|
132
|
+
readonly feedback?: string;
|
|
133
|
+
readonly feedbackTemplate?: WorkflowFieldTemplate;
|
|
134
|
+
}
|
|
135
|
+
export interface WorkflowModelDependency {
|
|
136
|
+
readonly from: string;
|
|
137
|
+
readonly to: string;
|
|
138
|
+
}
|
|
139
|
+
export interface WorkflowSourceSnapshot {
|
|
140
|
+
readonly content: string;
|
|
141
|
+
readonly format: 'yaml';
|
|
142
|
+
}
|
|
143
|
+
export declare const workflowModelSnapshotSchema: z.ZodObject<{
|
|
144
|
+
version: z.ZodLiteral<1>;
|
|
145
|
+
model: z.ZodCustom<WorkflowModel, WorkflowModel>;
|
|
146
|
+
}, z.core.$strip>;
|
|
147
|
+
export type WorkflowModelSnapshot = z.infer<typeof workflowModelSnapshotSchema>;
|
|
148
|
+
export declare function createWorkflowModelSnapshot(model: WorkflowModel): WorkflowModelSnapshot;
|
|
149
|
+
export declare function workflowModelFromSnapshot(snapshot: WorkflowModelSnapshot): WorkflowModel;
|
|
150
|
+
/** Reads both current snapshots and the unversioned attempt rows written before snapshots existed. */
|
|
151
|
+
export declare function readPersistedWorkflowModel(value: WorkflowModel | WorkflowModelSnapshot): WorkflowModel;
|
|
152
|
+
export {};
|
|
153
|
+
//# sourceMappingURL=workflow-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-model.d.ts","sourceRoot":"","sources":["../src/workflow-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAC,aAAa,EAAE,OAAO,EAAC,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,eAAO,MAAM,sBAAsB,QAA2B,CAAC;AAC/D,eAAO,MAAM,mBAAmB,gDAAgD,CAAC;AAEjF,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,WAAW,EAAE;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAA;KAAC,CAAC;IAC5D,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;CACtC;AAED,eAAO,MAAM,oBAAoB,EAAE,wBAGlC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,SAAS,oBAAoB,EAAE,CAAC;AACpE,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;AACnF,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;AAEtF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,QAAQ,CAAC,SAAS,CAAC,EAAE;QAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,oBAAoB,CAAA;KAAC,CAAC;IAC3D,QAAQ,CAAC,QAAQ,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACnD,QAAQ,CAAC,IAAI,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC3C,QAAQ,CAAC,YAAY,EAAE,SAAS,uBAAuB,EAAE,CAAC;CAC3D;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC5D,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,CAAC;IAC5C,QAAQ,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;IAChE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,yBAAyB,CAAC;IAC/C,QAAQ,CAAC,IAAI,CAAC,EAAE,qBAAqB,CAAC;IACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,QAAQ,CAAC,SAAS,CAAC,EAAE;QAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,oBAAoB,CAAA;KAAC,CAAC;IAC3D,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,EAAE,SAAS,6BAA6B,EAAE,CAAC;IACtD,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,6BAA6B,EAAE,CAAC;IAC1D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,2BAA2B,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAC;CACzC;AACD,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AACD,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AACD,MAAM,MAAM,iBAAiB,GAAG,oBAAoB,GAAG,sBAAsB,CAAC;AAC9E,UAAU,qBAAqB;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,qBAAqB,CAAC;IACtC,QAAQ,CAAC,cAAc,CAAC,EAAE,sBAAsB,CAAC;CAClD;AACD,MAAM,WAAW,oBAAqB,SAAQ,qBAAqB;IACjE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE;QAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC;IACnE,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,QAAQ,CAAC,SAAS,CAAC,EAAE;QACnB,QAAQ,CAAC,OAAO,CAAC,EAAE,qBAAqB,CAAC;QACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,qBAAqB,CAAC;QACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,oBAAoB,CAAC;KACrC,CAAC;CACH;AACD,MAAM,WAAW,sBAAuB,SAAQ,qBAAqB;IACnE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,4BAA4B,EAAE,CAAC;IAChE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE;QACnB,QAAQ,CAAC,MAAM,CAAC,EAAE,qBAAqB,CAAC;QACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,qBAAqB,CAAC;QACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE,qBAAqB,CAAC;KACvC,CAAC;CACH;AACD,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AACD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AACD,MAAM,MAAM,6BAA6B,GAAG,WAAW,CACrD,MAAM,EACN,WAAW,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAC5C,CAAC;AACF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,8BAA8B,CAAC;CACrD;AACD,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;CACnD;AACD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AACD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAWD,eAAO,MAAM,2BAA2B;;;iBAGtC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,aAAa,GAAG,qBAAqB,CAEvF;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,aAAa,CAKxF;AAED,sGAAsG;AACtG,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,aAAa,GAAG,qBAAqB,GAC3C,aAAa,CAIf"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const DEFAULT_RUN_TIMEOUT_MS = 30 * 24 * 60 * 60 * 1000;
|
|
3
|
+
export const DEFAULT_JOB_SUCCESS = "!executions.exists(e, e.status == 'failed')";
|
|
4
|
+
export const DEFAULT_JOB_CHECKOUT = {
|
|
5
|
+
permissions: {
|
|
6
|
+
contents: 'read'
|
|
7
|
+
},
|
|
8
|
+
persistCredentials: true
|
|
9
|
+
};
|
|
10
|
+
const workflowModelSchema = z.custom((value)=>typeof value === 'object' && value !== null && !Array.isArray(value) && value.kind === 'workflow', {
|
|
11
|
+
message: 'Expected a normalized workflow model'
|
|
12
|
+
});
|
|
13
|
+
export const workflowModelSnapshotSchema = z.object({
|
|
14
|
+
version: z.literal(1),
|
|
15
|
+
model: workflowModelSchema
|
|
16
|
+
});
|
|
17
|
+
export function createWorkflowModelSnapshot(model) {
|
|
18
|
+
return {
|
|
19
|
+
version: 1,
|
|
20
|
+
model
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export function workflowModelFromSnapshot(snapshot) {
|
|
24
|
+
switch(snapshot.version){
|
|
25
|
+
case 1:
|
|
26
|
+
return snapshot.model;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/** Reads both current snapshots and the unversioned attempt rows written before snapshots existed. */ export function readPersistedWorkflowModel(value) {
|
|
30
|
+
if ('version' in value) return workflowModelFromSnapshot(workflowModelSnapshotSchema.parse(value));
|
|
31
|
+
return workflowModelSchema.parse(value);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=workflow-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/workflow-model.ts"],"sourcesContent":["import type {\n ExpressionType,\n OutputDeclarations,\n ResolvedFieldSegment,\n WorkflowExpression,\n} from '@shipfox/expression';\nimport type {AgentThinking, Harness} from '@shipfox/workflow-document';\nimport {z} from 'zod';\n\nexport const DEFAULT_RUN_TIMEOUT_MS = 30 * 24 * 60 * 60 * 1000;\nexport const DEFAULT_JOB_SUCCESS = \"!executions.exists(e, e.status == 'failed')\";\n\nexport interface WorkflowModelJobCheckout {\n readonly permissions: {readonly contents: 'read' | 'write'};\n readonly persistCredentials: boolean;\n}\n\nexport const DEFAULT_JOB_CHECKOUT: WorkflowModelJobCheckout = {\n permissions: {contents: 'read'},\n persistCredentials: true,\n};\n\nexport type WorkflowFieldTemplate = readonly ResolvedFieldSegment[];\nexport type WorkflowEnvTemplates = Readonly<Record<string, WorkflowFieldTemplate>>;\nexport type WorkflowOutputTemplates = Readonly<Record<string, WorkflowFieldTemplate>>;\n\nexport interface WorkflowModel {\n readonly kind: 'workflow';\n readonly name: string;\n readonly env?: Readonly<Record<string, string>>;\n readonly templates?: {readonly env?: WorkflowEnvTemplates};\n readonly triggers: readonly WorkflowModelTrigger[];\n readonly jobs: readonly WorkflowModelJob[];\n readonly dependencies: readonly WorkflowModelDependency[];\n}\n\nexport interface WorkflowModelTrigger {\n readonly id: string;\n readonly key: string;\n readonly source: string;\n readonly event: string;\n readonly inputs?: Readonly<Record<string, unknown>>;\n readonly filter?: string;\n readonly config?: Readonly<Record<string, unknown>>;\n}\n\nexport interface WorkflowModelJob {\n readonly id: string;\n readonly key: string;\n readonly mode: 'one_shot' | 'listening';\n readonly runner: readonly string[];\n readonly runnerTemplates?: readonly WorkflowFieldTemplate[];\n readonly checkout: WorkflowModelJobCheckout;\n readonly if?: WorkflowExpression;\n readonly success?: string;\n readonly outputs?: WorkflowOutputTemplates;\n readonly outputTypes?: Readonly<Record<string, ExpressionType>>;\n readonly executionTimeoutMs?: number;\n readonly listening?: WorkflowModelJobListening;\n readonly name?: WorkflowFieldTemplate;\n readonly env?: Readonly<Record<string, string>>;\n readonly templates?: {readonly env?: WorkflowEnvTemplates};\n readonly dependencies: readonly string[];\n readonly steps: readonly WorkflowModelStep[];\n}\n\nexport interface WorkflowModelJobListening {\n readonly on: readonly WorkflowModelListeningTrigger[];\n readonly until?: readonly WorkflowModelListeningTrigger[];\n readonly timeoutMs?: number;\n readonly maxExecutions?: number;\n readonly batch?: WorkflowModelListeningBatch;\n readonly onResolve: 'finish' | 'cancel';\n}\nexport interface WorkflowModelListeningTrigger {\n readonly source: string;\n readonly event: string;\n readonly inputs?: Readonly<Record<string, unknown>>;\n readonly filter?: string;\n}\nexport interface WorkflowModelListeningBatch {\n readonly debounceMs?: number;\n readonly maxSize?: number;\n readonly maxWaitMs?: number;\n}\nexport type WorkflowModelStep = WorkflowModelRunStep | WorkflowModelAgentStep;\ninterface WorkflowModelStepBase {\n readonly id: string;\n readonly key?: string;\n readonly if?: WorkflowExpression;\n readonly name?: string;\n readonly outputs?: OutputDeclarations;\n readonly gate?: WorkflowModelStepGate;\n readonly sourceLocation?: WorkflowSourceLocation;\n}\nexport interface WorkflowModelRunStep extends WorkflowModelStepBase {\n readonly kind: 'run';\n readonly command: {readonly kind: 'shell'; readonly value: string};\n readonly env?: Readonly<Record<string, string>>;\n readonly templates?: {\n readonly command?: WorkflowFieldTemplate;\n readonly name?: WorkflowFieldTemplate;\n readonly env?: WorkflowEnvTemplates;\n };\n}\nexport interface WorkflowModelAgentStep extends WorkflowModelStepBase {\n readonly kind: 'agent';\n readonly harness?: Harness;\n readonly model?: string;\n readonly provider?: string;\n readonly thinking?: AgentThinking;\n readonly tools?: readonly string[];\n readonly integrations?: readonly WorkflowModelStepIntegration[];\n readonly prompt: string;\n readonly templates?: {\n readonly prompt?: WorkflowFieldTemplate;\n readonly model?: WorkflowFieldTemplate;\n readonly provider?: WorkflowFieldTemplate;\n readonly name?: WorkflowFieldTemplate;\n };\n}\nexport interface WorkflowModelStepIntegration {\n readonly connection?: string;\n readonly include: readonly string[];\n readonly exclude?: readonly string[];\n readonly allowWrite: boolean;\n}\nexport interface WorkflowSourceLocation {\n readonly startLine: number;\n readonly endLine: number;\n}\nexport type WorkflowStepSourceLocationMap = ReadonlyMap<\n string,\n ReadonlyMap<number, WorkflowSourceLocation>\n>;\nexport interface WorkflowModelStepGate {\n readonly success?: WorkflowExpression;\n readonly onFailure?: WorkflowModelStepFailureAction;\n}\nexport interface WorkflowModelStepFailureAction {\n readonly restartFrom: string;\n readonly feedback?: string;\n readonly feedbackTemplate?: WorkflowFieldTemplate;\n}\nexport interface WorkflowModelDependency {\n readonly from: string;\n readonly to: string;\n}\nexport interface WorkflowSourceSnapshot {\n readonly content: string;\n readonly format: 'yaml';\n}\n\nconst workflowModelSchema = z.custom<WorkflowModel>(\n (value) =>\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n (value as {kind?: unknown}).kind === 'workflow',\n {message: 'Expected a normalized workflow model'},\n);\n\nexport const workflowModelSnapshotSchema = z.object({\n version: z.literal(1),\n model: workflowModelSchema,\n});\nexport type WorkflowModelSnapshot = z.infer<typeof workflowModelSnapshotSchema>;\n\nexport function createWorkflowModelSnapshot(model: WorkflowModel): WorkflowModelSnapshot {\n return {version: 1, model};\n}\n\nexport function workflowModelFromSnapshot(snapshot: WorkflowModelSnapshot): WorkflowModel {\n switch (snapshot.version) {\n case 1:\n return snapshot.model;\n }\n}\n\n/** Reads both current snapshots and the unversioned attempt rows written before snapshots existed. */\nexport function readPersistedWorkflowModel(\n value: WorkflowModel | WorkflowModelSnapshot,\n): WorkflowModel {\n if ('version' in value)\n return workflowModelFromSnapshot(workflowModelSnapshotSchema.parse(value));\n return workflowModelSchema.parse(value);\n}\n"],"names":["z","DEFAULT_RUN_TIMEOUT_MS","DEFAULT_JOB_SUCCESS","DEFAULT_JOB_CHECKOUT","permissions","contents","persistCredentials","workflowModelSchema","custom","value","Array","isArray","kind","message","workflowModelSnapshotSchema","object","version","literal","model","createWorkflowModelSnapshot","workflowModelFromSnapshot","snapshot","readPersistedWorkflowModel","parse"],"mappings":"AAOA,SAAQA,CAAC,QAAO,MAAM;AAEtB,OAAO,MAAMC,yBAAyB,KAAK,KAAK,KAAK,KAAK,KAAK;AAC/D,OAAO,MAAMC,sBAAsB,8CAA8C;AAOjF,OAAO,MAAMC,uBAAiD;IAC5DC,aAAa;QAACC,UAAU;IAAM;IAC9BC,oBAAoB;AACtB,EAAE;AAqIF,MAAMC,sBAAsBP,EAAEQ,MAAM,CAClC,CAACC,QACC,OAAOA,UAAU,YACjBA,UAAU,QACV,CAACC,MAAMC,OAAO,CAACF,UACf,AAACA,MAA2BG,IAAI,KAAK,YACvC;IAACC,SAAS;AAAsC;AAGlD,OAAO,MAAMC,8BAA8Bd,EAAEe,MAAM,CAAC;IAClDC,SAAShB,EAAEiB,OAAO,CAAC;IACnBC,OAAOX;AACT,GAAG;AAGH,OAAO,SAASY,4BAA4BD,KAAoB;IAC9D,OAAO;QAACF,SAAS;QAAGE;IAAK;AAC3B;AAEA,OAAO,SAASE,0BAA0BC,QAA+B;IACvE,OAAQA,SAASL,OAAO;QACtB,KAAK;YACH,OAAOK,SAASH,KAAK;IACzB;AACF;AAEA,oGAAoG,GACpG,OAAO,SAASI,2BACdb,KAA4C;IAE5C,IAAI,aAAaA,OACf,OAAOW,0BAA0BN,4BAA4BS,KAAK,CAACd;IACrE,OAAOF,oBAAoBgB,KAAK,CAACd;AACnC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shipfox/api-definitions-dto",
|
|
3
3
|
"license": "MIT",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "9.0.1",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "git+https://github.com/ShipfoxHQ/shipfox.git",
|
|
@@ -11,26 +11,24 @@
|
|
|
11
11
|
"type": "module",
|
|
12
12
|
"main": "dist/index.js",
|
|
13
13
|
"types": "dist/index.d.ts",
|
|
14
|
-
"imports": {
|
|
15
|
-
"#test/*": "./test/*",
|
|
16
|
-
"#*": "./dist/*"
|
|
17
|
-
},
|
|
18
14
|
"exports": {
|
|
19
15
|
".": {
|
|
20
16
|
"types": "./dist/index.d.ts",
|
|
21
17
|
"default": "./dist/index.js"
|
|
18
|
+
},
|
|
19
|
+
"./inter-module": {
|
|
20
|
+
"types": "./dist/inter-module.d.ts",
|
|
21
|
+
"default": "./dist/inter-module.js"
|
|
22
22
|
}
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"zod": "^4.4.3"
|
|
25
|
+
"zod": "^4.4.3",
|
|
26
|
+
"@shipfox/expression": "1.1.4",
|
|
27
|
+
"@shipfox/inter-module": "0.2.1",
|
|
28
|
+
"@shipfox/workflow-document": "2.1.2"
|
|
26
29
|
},
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"@shipfox/depcruise": "1.0.2",
|
|
30
|
-
"@shipfox/swc": "1.2.6",
|
|
31
|
-
"@shipfox/ts-config": "1.3.8",
|
|
32
|
-
"@shipfox/typescript": "1.1.7",
|
|
33
|
-
"@shipfox/vitest": "1.2.3"
|
|
30
|
+
"imports": {
|
|
31
|
+
"#*": "./dist/*"
|
|
34
32
|
},
|
|
35
33
|
"scripts": {
|
|
36
34
|
"build": "shipfox-swc",
|
package/src/index.ts
CHANGED
|
@@ -28,3 +28,13 @@ export {
|
|
|
28
28
|
definitionResolvedEventSchema,
|
|
29
29
|
definitionsEventSchemas,
|
|
30
30
|
} from './events.js';
|
|
31
|
+
export type * from './workflow-model.js';
|
|
32
|
+
export {
|
|
33
|
+
createWorkflowModelSnapshot,
|
|
34
|
+
DEFAULT_JOB_CHECKOUT,
|
|
35
|
+
DEFAULT_JOB_SUCCESS,
|
|
36
|
+
DEFAULT_RUN_TIMEOUT_MS,
|
|
37
|
+
readPersistedWorkflowModel,
|
|
38
|
+
workflowModelFromSnapshot,
|
|
39
|
+
workflowModelSnapshotSchema,
|
|
40
|
+
} from './workflow-model.js';
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import {definitionsInterModuleContract} from './inter-module.js';
|
|
2
|
+
import {readPersistedWorkflowModel} from './workflow-model.js';
|
|
3
|
+
|
|
4
|
+
describe('definitionsInterModuleContract', () => {
|
|
5
|
+
test('exposes a versioned workflow snapshot', () => {
|
|
6
|
+
const result = definitionsInterModuleContract.methods.getDefinitionForWorkflowRun.output.parse({
|
|
7
|
+
definition: {
|
|
8
|
+
id: '00000000-0000-4000-8000-000000000001',
|
|
9
|
+
projectId: '00000000-0000-4000-8000-000000000002',
|
|
10
|
+
name: 'Deploy',
|
|
11
|
+
model: {version: 1, model: {kind: 'workflow'}},
|
|
12
|
+
sourceSnapshot: null,
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
expect(result.definition?.model.version).toBe(1);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
test('rejects an unknown persisted snapshot version', () => {
|
|
20
|
+
expect(() =>
|
|
21
|
+
readPersistedWorkflowModel({version: 2, model: {kind: 'workflow'}} as never),
|
|
22
|
+
).toThrow();
|
|
23
|
+
});
|
|
24
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {defineInterModuleContract, type InterModuleClient} from '@shipfox/inter-module';
|
|
2
|
+
import {z} from 'zod';
|
|
3
|
+
import {workflowModelSnapshotSchema} from './workflow-model.js';
|
|
4
|
+
|
|
5
|
+
const idSchema = z.string().uuid();
|
|
6
|
+
const definitionSnapshotSchema = z.object({
|
|
7
|
+
id: idSchema,
|
|
8
|
+
projectId: idSchema,
|
|
9
|
+
name: z.string(),
|
|
10
|
+
model: workflowModelSnapshotSchema,
|
|
11
|
+
sourceSnapshot: z.object({content: z.string(), format: z.literal('yaml')}).nullable(),
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
export const definitionsInterModuleContract = defineInterModuleContract({
|
|
15
|
+
module: 'definitions',
|
|
16
|
+
methods: {
|
|
17
|
+
getDefinitionForWorkflowRun: {
|
|
18
|
+
input: z.object({definitionId: idSchema}),
|
|
19
|
+
output: z.object({definition: definitionSnapshotSchema.nullable()}),
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
export type DefinitionsInterModuleClient = InterModuleClient<typeof definitionsInterModuleContract>;
|
|
25
|
+
export type DefinitionWorkflowSnapshot = z.infer<typeof definitionSnapshotSchema>;
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ExpressionType,
|
|
3
|
+
OutputDeclarations,
|
|
4
|
+
ResolvedFieldSegment,
|
|
5
|
+
WorkflowExpression,
|
|
6
|
+
} from '@shipfox/expression';
|
|
7
|
+
import type {AgentThinking, Harness} from '@shipfox/workflow-document';
|
|
8
|
+
import {z} from 'zod';
|
|
9
|
+
|
|
10
|
+
export const DEFAULT_RUN_TIMEOUT_MS = 30 * 24 * 60 * 60 * 1000;
|
|
11
|
+
export const DEFAULT_JOB_SUCCESS = "!executions.exists(e, e.status == 'failed')";
|
|
12
|
+
|
|
13
|
+
export interface WorkflowModelJobCheckout {
|
|
14
|
+
readonly permissions: {readonly contents: 'read' | 'write'};
|
|
15
|
+
readonly persistCredentials: boolean;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const DEFAULT_JOB_CHECKOUT: WorkflowModelJobCheckout = {
|
|
19
|
+
permissions: {contents: 'read'},
|
|
20
|
+
persistCredentials: true,
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export type WorkflowFieldTemplate = readonly ResolvedFieldSegment[];
|
|
24
|
+
export type WorkflowEnvTemplates = Readonly<Record<string, WorkflowFieldTemplate>>;
|
|
25
|
+
export type WorkflowOutputTemplates = Readonly<Record<string, WorkflowFieldTemplate>>;
|
|
26
|
+
|
|
27
|
+
export interface WorkflowModel {
|
|
28
|
+
readonly kind: 'workflow';
|
|
29
|
+
readonly name: string;
|
|
30
|
+
readonly env?: Readonly<Record<string, string>>;
|
|
31
|
+
readonly templates?: {readonly env?: WorkflowEnvTemplates};
|
|
32
|
+
readonly triggers: readonly WorkflowModelTrigger[];
|
|
33
|
+
readonly jobs: readonly WorkflowModelJob[];
|
|
34
|
+
readonly dependencies: readonly WorkflowModelDependency[];
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface WorkflowModelTrigger {
|
|
38
|
+
readonly id: string;
|
|
39
|
+
readonly key: string;
|
|
40
|
+
readonly source: string;
|
|
41
|
+
readonly event: string;
|
|
42
|
+
readonly inputs?: Readonly<Record<string, unknown>>;
|
|
43
|
+
readonly filter?: string;
|
|
44
|
+
readonly config?: Readonly<Record<string, unknown>>;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export interface WorkflowModelJob {
|
|
48
|
+
readonly id: string;
|
|
49
|
+
readonly key: string;
|
|
50
|
+
readonly mode: 'one_shot' | 'listening';
|
|
51
|
+
readonly runner: readonly string[];
|
|
52
|
+
readonly runnerTemplates?: readonly WorkflowFieldTemplate[];
|
|
53
|
+
readonly checkout: WorkflowModelJobCheckout;
|
|
54
|
+
readonly if?: WorkflowExpression;
|
|
55
|
+
readonly success?: string;
|
|
56
|
+
readonly outputs?: WorkflowOutputTemplates;
|
|
57
|
+
readonly outputTypes?: Readonly<Record<string, ExpressionType>>;
|
|
58
|
+
readonly executionTimeoutMs?: number;
|
|
59
|
+
readonly listening?: WorkflowModelJobListening;
|
|
60
|
+
readonly name?: WorkflowFieldTemplate;
|
|
61
|
+
readonly env?: Readonly<Record<string, string>>;
|
|
62
|
+
readonly templates?: {readonly env?: WorkflowEnvTemplates};
|
|
63
|
+
readonly dependencies: readonly string[];
|
|
64
|
+
readonly steps: readonly WorkflowModelStep[];
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export interface WorkflowModelJobListening {
|
|
68
|
+
readonly on: readonly WorkflowModelListeningTrigger[];
|
|
69
|
+
readonly until?: readonly WorkflowModelListeningTrigger[];
|
|
70
|
+
readonly timeoutMs?: number;
|
|
71
|
+
readonly maxExecutions?: number;
|
|
72
|
+
readonly batch?: WorkflowModelListeningBatch;
|
|
73
|
+
readonly onResolve: 'finish' | 'cancel';
|
|
74
|
+
}
|
|
75
|
+
export interface WorkflowModelListeningTrigger {
|
|
76
|
+
readonly source: string;
|
|
77
|
+
readonly event: string;
|
|
78
|
+
readonly inputs?: Readonly<Record<string, unknown>>;
|
|
79
|
+
readonly filter?: string;
|
|
80
|
+
}
|
|
81
|
+
export interface WorkflowModelListeningBatch {
|
|
82
|
+
readonly debounceMs?: number;
|
|
83
|
+
readonly maxSize?: number;
|
|
84
|
+
readonly maxWaitMs?: number;
|
|
85
|
+
}
|
|
86
|
+
export type WorkflowModelStep = WorkflowModelRunStep | WorkflowModelAgentStep;
|
|
87
|
+
interface WorkflowModelStepBase {
|
|
88
|
+
readonly id: string;
|
|
89
|
+
readonly key?: string;
|
|
90
|
+
readonly if?: WorkflowExpression;
|
|
91
|
+
readonly name?: string;
|
|
92
|
+
readonly outputs?: OutputDeclarations;
|
|
93
|
+
readonly gate?: WorkflowModelStepGate;
|
|
94
|
+
readonly sourceLocation?: WorkflowSourceLocation;
|
|
95
|
+
}
|
|
96
|
+
export interface WorkflowModelRunStep extends WorkflowModelStepBase {
|
|
97
|
+
readonly kind: 'run';
|
|
98
|
+
readonly command: {readonly kind: 'shell'; readonly value: string};
|
|
99
|
+
readonly env?: Readonly<Record<string, string>>;
|
|
100
|
+
readonly templates?: {
|
|
101
|
+
readonly command?: WorkflowFieldTemplate;
|
|
102
|
+
readonly name?: WorkflowFieldTemplate;
|
|
103
|
+
readonly env?: WorkflowEnvTemplates;
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
export interface WorkflowModelAgentStep extends WorkflowModelStepBase {
|
|
107
|
+
readonly kind: 'agent';
|
|
108
|
+
readonly harness?: Harness;
|
|
109
|
+
readonly model?: string;
|
|
110
|
+
readonly provider?: string;
|
|
111
|
+
readonly thinking?: AgentThinking;
|
|
112
|
+
readonly tools?: readonly string[];
|
|
113
|
+
readonly integrations?: readonly WorkflowModelStepIntegration[];
|
|
114
|
+
readonly prompt: string;
|
|
115
|
+
readonly templates?: {
|
|
116
|
+
readonly prompt?: WorkflowFieldTemplate;
|
|
117
|
+
readonly model?: WorkflowFieldTemplate;
|
|
118
|
+
readonly provider?: WorkflowFieldTemplate;
|
|
119
|
+
readonly name?: WorkflowFieldTemplate;
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
export interface WorkflowModelStepIntegration {
|
|
123
|
+
readonly connection?: string;
|
|
124
|
+
readonly include: readonly string[];
|
|
125
|
+
readonly exclude?: readonly string[];
|
|
126
|
+
readonly allowWrite: boolean;
|
|
127
|
+
}
|
|
128
|
+
export interface WorkflowSourceLocation {
|
|
129
|
+
readonly startLine: number;
|
|
130
|
+
readonly endLine: number;
|
|
131
|
+
}
|
|
132
|
+
export type WorkflowStepSourceLocationMap = ReadonlyMap<
|
|
133
|
+
string,
|
|
134
|
+
ReadonlyMap<number, WorkflowSourceLocation>
|
|
135
|
+
>;
|
|
136
|
+
export interface WorkflowModelStepGate {
|
|
137
|
+
readonly success?: WorkflowExpression;
|
|
138
|
+
readonly onFailure?: WorkflowModelStepFailureAction;
|
|
139
|
+
}
|
|
140
|
+
export interface WorkflowModelStepFailureAction {
|
|
141
|
+
readonly restartFrom: string;
|
|
142
|
+
readonly feedback?: string;
|
|
143
|
+
readonly feedbackTemplate?: WorkflowFieldTemplate;
|
|
144
|
+
}
|
|
145
|
+
export interface WorkflowModelDependency {
|
|
146
|
+
readonly from: string;
|
|
147
|
+
readonly to: string;
|
|
148
|
+
}
|
|
149
|
+
export interface WorkflowSourceSnapshot {
|
|
150
|
+
readonly content: string;
|
|
151
|
+
readonly format: 'yaml';
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
const workflowModelSchema = z.custom<WorkflowModel>(
|
|
155
|
+
(value) =>
|
|
156
|
+
typeof value === 'object' &&
|
|
157
|
+
value !== null &&
|
|
158
|
+
!Array.isArray(value) &&
|
|
159
|
+
(value as {kind?: unknown}).kind === 'workflow',
|
|
160
|
+
{message: 'Expected a normalized workflow model'},
|
|
161
|
+
);
|
|
162
|
+
|
|
163
|
+
export const workflowModelSnapshotSchema = z.object({
|
|
164
|
+
version: z.literal(1),
|
|
165
|
+
model: workflowModelSchema,
|
|
166
|
+
});
|
|
167
|
+
export type WorkflowModelSnapshot = z.infer<typeof workflowModelSnapshotSchema>;
|
|
168
|
+
|
|
169
|
+
export function createWorkflowModelSnapshot(model: WorkflowModel): WorkflowModelSnapshot {
|
|
170
|
+
return {version: 1, model};
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
export function workflowModelFromSnapshot(snapshot: WorkflowModelSnapshot): WorkflowModel {
|
|
174
|
+
switch (snapshot.version) {
|
|
175
|
+
case 1:
|
|
176
|
+
return snapshot.model;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/** Reads both current snapshots and the unversioned attempt rows written before snapshots existed. */
|
|
181
|
+
export function readPersistedWorkflowModel(
|
|
182
|
+
value: WorkflowModel | WorkflowModelSnapshot,
|
|
183
|
+
): WorkflowModel {
|
|
184
|
+
if ('version' in value)
|
|
185
|
+
return workflowModelFromSnapshot(workflowModelSnapshotSchema.parse(value));
|
|
186
|
+
return workflowModelSchema.parse(value);
|
|
187
|
+
}
|