@gobing-ai/ts-dual-workflow-engine 0.2.7 → 0.2.9
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 +275 -1
- package/dist/config.d.ts +7 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +174 -22
- package/dist/schema.d.ts +32 -12
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +59 -16
- package/dist/state-machine.d.ts.map +1 -1
- package/dist/state-machine.js +17 -4
- package/dist/transition-flow.d.ts.map +1 -1
- package/dist/transition-flow.js +17 -3
- package/dist/types.d.ts +16 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -4
- package/schemas/state-machine-workflow.schema.json +79 -0
- package/schemas/transition-flow-workflow.schema.json +78 -0
- package/src/config.ts +203 -27
- package/src/schema.ts +94 -47
- package/src/state-machine.ts +23 -1
- package/src/transition-flow.ts +23 -3
- package/src/types.ts +16 -0
package/dist/schema.js
CHANGED
|
@@ -1,4 +1,23 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
/** Identifier names reserved for runtime template namespaces; not allowed as user vars. */
|
|
3
|
+
const RESERVED_VAR_NAMES = new Set(['task', 'state', 'node', 'iteration', 'run', 'runtime']);
|
|
4
|
+
/** Valid identifier pattern for variable and env names. */
|
|
5
|
+
const IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
6
|
+
/** User variables: identifier-keyed string map; reserved runtime names are rejected. */
|
|
7
|
+
const VarsSchema = z.record(z.string(), z.string()).superRefine((vars, ctx) => {
|
|
8
|
+
for (const key of Object.keys(vars)) {
|
|
9
|
+
if (!IDENTIFIER.test(key)) {
|
|
10
|
+
ctx.addIssue({ code: 'custom', message: `Invalid variable name "${key}" (must be a valid identifier)` });
|
|
11
|
+
}
|
|
12
|
+
if (RESERVED_VAR_NAMES.has(key)) {
|
|
13
|
+
ctx.addIssue({ code: 'custom', message: `Variable name "${key}" is reserved for runtime use` });
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
/** Environment allowlist: identifier-named env vars exposed to templates. */
|
|
18
|
+
const EnvSchema = z.object({
|
|
19
|
+
allow: z.array(z.string().regex(IDENTIFIER, 'env.allow entries must be valid identifiers')).optional(),
|
|
20
|
+
});
|
|
2
21
|
/** Zod schema for workflow action definitions. */
|
|
3
22
|
export const ActionDefSchema = z.object({
|
|
4
23
|
kind: z.string().min(1),
|
|
@@ -10,45 +29,69 @@ export const GuardDefSchema = z.object({
|
|
|
10
29
|
options: z.record(z.string(), z.unknown()).optional(),
|
|
11
30
|
});
|
|
12
31
|
/** Zod schema for state-machine workflow definitions. */
|
|
13
|
-
export const StateMachineWorkflowDefSchema = z
|
|
32
|
+
export const StateMachineWorkflowDefSchema = z
|
|
33
|
+
.object({
|
|
34
|
+
$schema: z.string().optional(),
|
|
14
35
|
kind: z.literal('state-machine').optional(),
|
|
15
36
|
name: z.string().min(1),
|
|
37
|
+
// Optional, behavior-free document version tag (accepted for forward/backward compat).
|
|
38
|
+
version: z.string().optional(),
|
|
39
|
+
description: z.string().optional(),
|
|
16
40
|
initialState: z.string().min(1),
|
|
17
41
|
terminalStates: z.array(z.string().min(1)).optional(),
|
|
18
42
|
iterationBound: z.number().int().positive().optional(),
|
|
19
|
-
vars:
|
|
20
|
-
env:
|
|
21
|
-
states: z.array(z
|
|
43
|
+
vars: VarsSchema.optional(),
|
|
44
|
+
env: EnvSchema.optional(),
|
|
45
|
+
states: z.array(z
|
|
46
|
+
.object({
|
|
22
47
|
id: z.string().min(1),
|
|
48
|
+
description: z.string().optional(),
|
|
23
49
|
onEnter: z.array(ActionDefSchema).optional(),
|
|
24
50
|
onExit: z.array(ActionDefSchema).optional(),
|
|
25
|
-
})
|
|
26
|
-
|
|
51
|
+
})
|
|
52
|
+
.strict()),
|
|
53
|
+
transitions: z.array(z
|
|
54
|
+
.object({
|
|
27
55
|
from: z.string().min(1),
|
|
28
56
|
to: z.string().min(1),
|
|
57
|
+
description: z.string().optional(),
|
|
29
58
|
trigger: z.string().optional(),
|
|
30
59
|
guard: GuardDefSchema.optional(),
|
|
31
|
-
})
|
|
32
|
-
|
|
60
|
+
})
|
|
61
|
+
.strict()),
|
|
62
|
+
})
|
|
63
|
+
.strict();
|
|
33
64
|
/** Zod schema for transition-flow workflow definitions. */
|
|
34
|
-
export const TransitionFlowWorkflowDefSchema = z
|
|
65
|
+
export const TransitionFlowWorkflowDefSchema = z
|
|
66
|
+
.object({
|
|
67
|
+
$schema: z.string().optional(),
|
|
35
68
|
kind: z.literal('transition-flow'),
|
|
36
69
|
name: z.string().min(1),
|
|
70
|
+
// Optional, behavior-free document version tag (accepted for forward/backward compat).
|
|
71
|
+
version: z.string().optional(),
|
|
72
|
+
description: z.string().optional(),
|
|
37
73
|
initialNode: z.string().min(1),
|
|
38
74
|
terminalNodes: z.array(z.string().min(1)).optional(),
|
|
39
75
|
iterationBound: z.number().int().positive().optional(),
|
|
40
|
-
vars:
|
|
41
|
-
env:
|
|
42
|
-
nodes: z.array(z
|
|
76
|
+
vars: VarsSchema.optional(),
|
|
77
|
+
env: EnvSchema.optional(),
|
|
78
|
+
nodes: z.array(z
|
|
79
|
+
.object({
|
|
43
80
|
id: z.string().min(1),
|
|
81
|
+
description: z.string().optional(),
|
|
44
82
|
type: z.enum(['action', 'gate', 'parallel', 'decision']).optional(),
|
|
45
83
|
action: ActionDefSchema.optional(),
|
|
46
|
-
})
|
|
47
|
-
|
|
84
|
+
})
|
|
85
|
+
.strict()),
|
|
86
|
+
edges: z.array(z
|
|
87
|
+
.object({
|
|
48
88
|
from: z.string().min(1),
|
|
49
89
|
to: z.string().min(1),
|
|
90
|
+
description: z.string().optional(),
|
|
50
91
|
condition: GuardDefSchema.optional(),
|
|
51
|
-
})
|
|
52
|
-
|
|
92
|
+
})
|
|
93
|
+
.strict()),
|
|
94
|
+
})
|
|
95
|
+
.strict();
|
|
53
96
|
/** Zod schema for either supported workflow definition shape. */
|
|
54
97
|
export const WorkflowDefSchema = z.union([StateMachineWorkflowDefSchema, TransitionFlowWorkflowDefSchema]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-machine.d.ts","sourceRoot":"","sources":["../src/state-machine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,KAAK,EAGR,uBAAuB,EACvB,0BAA0B,EAC1B,kBAAkB,EAElB,iBAAiB,EACpB,MAAM,SAAS,CAAC;AAGjB,yDAAyD;AACzD,MAAM,WAAW,yBAAyB;IACtC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAAC;CACpD;AAED,wEAAwE;AACxE,qBAAa,kBAAkB;IACf,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,yBAAyB;IAE/D,6DAA6D;IACvD,GAAG,CAAC,QAAQ,EAAE,uBAAuB,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"state-machine.d.ts","sourceRoot":"","sources":["../src/state-machine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,KAAK,EAGR,uBAAuB,EACvB,0BAA0B,EAC1B,kBAAkB,EAElB,iBAAiB,EACpB,MAAM,SAAS,CAAC;AAGjB,yDAAyD;AACzD,MAAM,WAAW,yBAAyB;IACtC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAAC;CACpD;AAED,wEAAwE;AACxE,qBAAa,kBAAkB;IACf,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,yBAAyB;IAE/D,6DAA6D;IACvD,GAAG,CAAC,QAAQ,EAAE,uBAAuB,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;YA8G5F,UAAU;YA8BV,IAAI;YAYJ,IAAI;CAYrB"}
|
package/dist/state-machine.js
CHANGED
|
@@ -28,7 +28,7 @@ export class StateMachineDriver {
|
|
|
28
28
|
await this.options.persistence.saveWorkflowState(runId, current.id, { transitionsTaken });
|
|
29
29
|
await this.options.persistence.savePhase(runId, current.id, 'running');
|
|
30
30
|
// 2. Execute this state's on-enter actions in declaration order.
|
|
31
|
-
lastActionResult = await this.runActions(current.onEnter ?? [], workflow.name, current.id, runId, vars, env, options);
|
|
31
|
+
lastActionResult = await this.runActions(current.onEnter ?? [], workflow.name, current.id, runId, vars, env, options, transitionsTaken);
|
|
32
32
|
if (lastActionResult?.ok === false)
|
|
33
33
|
return await this.fail(runId, workflow.name, mode, current.id, transitionsTaken, lastActionResult.error);
|
|
34
34
|
// 3. Stop immediately when an action explicitly declares terminal success.
|
|
@@ -51,7 +51,7 @@ export class StateMachineDriver {
|
|
|
51
51
|
return await this.fail(runId, workflow.name, mode, current.id, transitionsTaken, 'no-passing-transition');
|
|
52
52
|
}
|
|
53
53
|
// 6. Execute this state's on-exit actions before changing state.
|
|
54
|
-
const exitResult = await this.runActions(current.onExit ?? [], workflow.name, current.id, runId, vars, env, options);
|
|
54
|
+
const exitResult = await this.runActions(current.onExit ?? [], workflow.name, current.id, runId, vars, env, options, transitionsTaken);
|
|
55
55
|
if (exitResult?.ok === false)
|
|
56
56
|
return await this.fail(runId, workflow.name, mode, current.id, transitionsTaken, exitResult.error);
|
|
57
57
|
// 7. Persist transition and move to the target state.
|
|
@@ -66,13 +66,13 @@ export class StateMachineDriver {
|
|
|
66
66
|
current = nextState;
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
|
-
async runActions(actions, workflowName, stateId, runId, vars, env, options) {
|
|
69
|
+
async runActions(actions, workflowName, stateId, runId, vars, env, options, transitionsTaken) {
|
|
70
70
|
let last;
|
|
71
71
|
for (const action of actions) {
|
|
72
72
|
const resolved = resolveTemplates(action.options ?? {}, {
|
|
73
73
|
vars,
|
|
74
74
|
env,
|
|
75
|
-
builtins:
|
|
75
|
+
builtins: runtimeBuiltins(workflowName, stateId, runId, transitionsTaken),
|
|
76
76
|
});
|
|
77
77
|
last = await this.options.host.runAction(action.kind, resolved, {
|
|
78
78
|
runId,
|
|
@@ -98,6 +98,19 @@ export class StateMachineDriver {
|
|
|
98
98
|
return { runId, workflowName, mode, status: 'failed', finalState, transitionsTaken, reason };
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
|
+
/** Built-in bare template values available to state-machine action options. */
|
|
102
|
+
function runtimeBuiltins(workflowName, stateId, runId, transitionsTaken) {
|
|
103
|
+
return {
|
|
104
|
+
workflow: workflowName,
|
|
105
|
+
runId,
|
|
106
|
+
task: workflowName,
|
|
107
|
+
state: stateId,
|
|
108
|
+
node: stateId,
|
|
109
|
+
iteration: transitionsTaken,
|
|
110
|
+
run: runId,
|
|
111
|
+
runtime: 'state-machine',
|
|
112
|
+
};
|
|
113
|
+
}
|
|
101
114
|
async function firstPassingTransition(transitions, host, context) {
|
|
102
115
|
for (const transition of transitions) {
|
|
103
116
|
if (transition.guard === undefined)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transition-flow.d.ts","sourceRoot":"","sources":["../src/transition-flow.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transition-flow.d.ts","sourceRoot":"","sources":["../src/transition-flow.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,KAAK,EAER,yBAAyB,EACzB,0BAA0B,EAC1B,kBAAkB,EAElB,iBAAiB,EACpB,MAAM,SAAS,CAAC;AAGjB,2DAA2D;AAC3D,MAAM,WAAW,2BAA2B;IACxC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAAC;CACpD;AAED,0EAA0E;AAC1E,qBAAa,oBAAoB;IACjB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,2BAA2B;IAEjE,+DAA+D;IACzD,GAAG,CAAC,QAAQ,EAAE,yBAAyB,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;YA8F9F,IAAI;YAYJ,IAAI;CAYrB"}
|
package/dist/transition-flow.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { getProcessEnv } from '@gobing-ai/ts-runtime';
|
|
2
|
+
import { FSMError } from './errors.js';
|
|
2
3
|
import { mergeVars, resolveTemplates } from './variables.js';
|
|
3
4
|
/** Transition-flow workflow driver with an R7 single control function. */
|
|
4
5
|
export class TransitionFlowDriver {
|
|
@@ -21,7 +22,7 @@ export class TransitionFlowDriver {
|
|
|
21
22
|
let lastActionResult;
|
|
22
23
|
const iterationBound = workflow.iterationBound ?? 50;
|
|
23
24
|
if (current === undefined) {
|
|
24
|
-
throw new
|
|
25
|
+
throw new FSMError(`Initial node "${workflow.initialNode}" is not declared`);
|
|
25
26
|
}
|
|
26
27
|
while (true) {
|
|
27
28
|
// 1. Persist current node snapshot before action execution.
|
|
@@ -32,7 +33,7 @@ export class TransitionFlowDriver {
|
|
|
32
33
|
const resolved = resolveTemplates(current.action.options ?? {}, {
|
|
33
34
|
vars,
|
|
34
35
|
env,
|
|
35
|
-
builtins:
|
|
36
|
+
builtins: runtimeBuiltins(workflow.name, current.id, runId, transitionsTaken),
|
|
36
37
|
});
|
|
37
38
|
lastActionResult = await this.options.host.runAction(current.action.kind, resolved, {
|
|
38
39
|
runId,
|
|
@@ -74,7 +75,7 @@ export class TransitionFlowDriver {
|
|
|
74
75
|
// 7. Move to the target node and repeat.
|
|
75
76
|
const nextNode = nodes.get(edge.to);
|
|
76
77
|
if (nextNode === undefined)
|
|
77
|
-
throw new
|
|
78
|
+
throw new FSMError(`Edge target "${edge.to}" is not declared`);
|
|
78
79
|
current = nextNode;
|
|
79
80
|
}
|
|
80
81
|
}
|
|
@@ -89,6 +90,19 @@ export class TransitionFlowDriver {
|
|
|
89
90
|
return { runId, workflowName, mode, status: 'failed', finalState, transitionsTaken, reason };
|
|
90
91
|
}
|
|
91
92
|
}
|
|
93
|
+
/** Built-in bare template values available to transition-flow action options. */
|
|
94
|
+
function runtimeBuiltins(workflowName, nodeId, runId, transitionsTaken) {
|
|
95
|
+
return {
|
|
96
|
+
workflow: workflowName,
|
|
97
|
+
runId,
|
|
98
|
+
task: workflowName,
|
|
99
|
+
state: nodeId,
|
|
100
|
+
node: nodeId,
|
|
101
|
+
iteration: transitionsTaken,
|
|
102
|
+
run: runId,
|
|
103
|
+
runtime: 'transition-flow',
|
|
104
|
+
};
|
|
105
|
+
}
|
|
92
106
|
async function firstPassingEdge(edges, host, context) {
|
|
93
107
|
for (const edge of edges) {
|
|
94
108
|
if (edge.condition === undefined)
|
package/dist/types.d.ts
CHANGED
|
@@ -19,6 +19,8 @@ export interface GuardDef {
|
|
|
19
19
|
/** One state in a state-machine workflow. */
|
|
20
20
|
export interface StateDef {
|
|
21
21
|
readonly id: string;
|
|
22
|
+
/** Optional human description of what this state does. */
|
|
23
|
+
readonly description?: string;
|
|
22
24
|
readonly onEnter?: readonly ActionDef[];
|
|
23
25
|
readonly onExit?: readonly ActionDef[];
|
|
24
26
|
}
|
|
@@ -26,6 +28,8 @@ export interface StateDef {
|
|
|
26
28
|
export interface TransitionDef {
|
|
27
29
|
readonly from: string;
|
|
28
30
|
readonly to: string;
|
|
31
|
+
/** Optional human description of when/why this transition is taken. */
|
|
32
|
+
readonly description?: string;
|
|
29
33
|
readonly trigger?: string;
|
|
30
34
|
readonly guard?: GuardDef;
|
|
31
35
|
}
|
|
@@ -33,6 +37,10 @@ export interface TransitionDef {
|
|
|
33
37
|
export interface StateMachineWorkflowDef {
|
|
34
38
|
readonly kind?: 'state-machine';
|
|
35
39
|
readonly name: string;
|
|
40
|
+
/** Optional behavior-free document version tag. */
|
|
41
|
+
readonly version?: string;
|
|
42
|
+
/** Optional human description of the workflow's purpose. */
|
|
43
|
+
readonly description?: string;
|
|
36
44
|
readonly initialState: string;
|
|
37
45
|
readonly terminalStates?: readonly string[];
|
|
38
46
|
readonly iterationBound?: number;
|
|
@@ -44,6 +52,8 @@ export interface StateMachineWorkflowDef {
|
|
|
44
52
|
/** Transition-flow node definition. */
|
|
45
53
|
export interface FlowNodeDef {
|
|
46
54
|
readonly id: string;
|
|
55
|
+
/** Optional human description of what this node does. */
|
|
56
|
+
readonly description?: string;
|
|
47
57
|
readonly type?: 'action' | 'gate' | 'parallel' | 'decision';
|
|
48
58
|
readonly action?: ActionDef;
|
|
49
59
|
}
|
|
@@ -51,12 +61,18 @@ export interface FlowNodeDef {
|
|
|
51
61
|
export interface FlowEdgeDef {
|
|
52
62
|
readonly from: string;
|
|
53
63
|
readonly to: string;
|
|
64
|
+
/** Optional human description of when/why this edge is taken. */
|
|
65
|
+
readonly description?: string;
|
|
54
66
|
readonly condition?: GuardDef;
|
|
55
67
|
}
|
|
56
68
|
/** Transition-flow workflow definition. */
|
|
57
69
|
export interface TransitionFlowWorkflowDef {
|
|
58
70
|
readonly kind: 'transition-flow';
|
|
59
71
|
readonly name: string;
|
|
72
|
+
/** Optional behavior-free document version tag. */
|
|
73
|
+
readonly version?: string;
|
|
74
|
+
/** Optional human description of the workflow's purpose. */
|
|
75
|
+
readonly description?: string;
|
|
60
76
|
readonly initialNode: string;
|
|
61
77
|
readonly terminalNodes?: readonly string[];
|
|
62
78
|
readonly iterationBound?: number;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gobing-ai/ts-dual-workflow-engine",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.9",
|
|
4
4
|
"description": "@gobing-ai/ts-dual-workflow-engine — State-machine and transition-flow workflow runtime.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
},
|
|
33
33
|
"files": [
|
|
34
34
|
"dist",
|
|
35
|
+
"schemas",
|
|
35
36
|
"src",
|
|
36
37
|
"README.md"
|
|
37
38
|
],
|
|
@@ -47,9 +48,9 @@
|
|
|
47
48
|
"release": "echo 'Manual publish is disabled. Releases go through GitHub Actions via Trusted Publishing — push a tag: git tag @gobing-ai/ts-dual-workflow-engine-v<version> && git push --tags' && exit 1"
|
|
48
49
|
},
|
|
49
50
|
"dependencies": {
|
|
50
|
-
"@gobing-ai/ts-db": "^0.2.
|
|
51
|
-
"@gobing-ai/ts-runtime": "^0.2.
|
|
52
|
-
"
|
|
51
|
+
"@gobing-ai/ts-db": "^0.2.9",
|
|
52
|
+
"@gobing-ai/ts-runtime": "^0.2.9",
|
|
53
|
+
"@gobing-ai/ts-utils": "^0.2.9",
|
|
53
54
|
"zod": "^4.1.0"
|
|
54
55
|
},
|
|
55
56
|
"devDependencies": {
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://raw.githubusercontent.com/gobing-ai/ts-libs/main/packages/dual-workflow-engine/schemas/state-machine-workflow.schema.json",
|
|
4
|
+
"title": "@gobing-ai/ts-dual-workflow-engine State-machine Workflow",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["name", "initialState", "states", "transitions"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"$schema": { "type": "string" },
|
|
10
|
+
"kind": { "const": "state-machine" },
|
|
11
|
+
"name": { "type": "string", "minLength": 1 },
|
|
12
|
+
"version": { "type": "string" },
|
|
13
|
+
"description": { "type": "string" },
|
|
14
|
+
"initialState": { "type": "string", "minLength": 1 },
|
|
15
|
+
"terminalStates": { "type": "array", "items": { "type": "string", "minLength": 1 } },
|
|
16
|
+
"iterationBound": { "type": "integer", "exclusiveMinimum": 0 },
|
|
17
|
+
"vars": {
|
|
18
|
+
"type": "object",
|
|
19
|
+
"propertyNames": { "pattern": "^[A-Za-z_][A-Za-z0-9_]*$" },
|
|
20
|
+
"additionalProperties": { "type": "string" }
|
|
21
|
+
},
|
|
22
|
+
"env": {
|
|
23
|
+
"type": "object",
|
|
24
|
+
"additionalProperties": false,
|
|
25
|
+
"properties": {
|
|
26
|
+
"allow": { "type": "array", "items": { "type": "string", "pattern": "^[A-Za-z_][A-Za-z0-9_]*$" } }
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"states": {
|
|
30
|
+
"type": "array",
|
|
31
|
+
"items": {
|
|
32
|
+
"type": "object",
|
|
33
|
+
"additionalProperties": false,
|
|
34
|
+
"required": ["id"],
|
|
35
|
+
"properties": {
|
|
36
|
+
"id": { "type": "string", "minLength": 1 },
|
|
37
|
+
"description": { "type": "string" },
|
|
38
|
+
"onEnter": { "type": "array", "items": { "$ref": "#/$defs/action" } },
|
|
39
|
+
"onExit": { "type": "array", "items": { "$ref": "#/$defs/action" } }
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"transitions": {
|
|
44
|
+
"type": "array",
|
|
45
|
+
"items": {
|
|
46
|
+
"type": "object",
|
|
47
|
+
"additionalProperties": false,
|
|
48
|
+
"required": ["from", "to"],
|
|
49
|
+
"properties": {
|
|
50
|
+
"from": { "type": "string", "minLength": 1 },
|
|
51
|
+
"to": { "type": "string", "minLength": 1 },
|
|
52
|
+
"description": { "type": "string" },
|
|
53
|
+
"trigger": { "type": "string" },
|
|
54
|
+
"guard": { "$ref": "#/$defs/guard" }
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"$defs": {
|
|
60
|
+
"action": {
|
|
61
|
+
"type": "object",
|
|
62
|
+
"additionalProperties": false,
|
|
63
|
+
"required": ["kind"],
|
|
64
|
+
"properties": {
|
|
65
|
+
"kind": { "type": "string", "minLength": 1 },
|
|
66
|
+
"options": { "type": "object", "additionalProperties": true }
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
"guard": {
|
|
70
|
+
"type": "object",
|
|
71
|
+
"additionalProperties": false,
|
|
72
|
+
"required": ["kind"],
|
|
73
|
+
"properties": {
|
|
74
|
+
"kind": { "type": "string", "minLength": 1 },
|
|
75
|
+
"options": { "type": "object", "additionalProperties": true }
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://raw.githubusercontent.com/gobing-ai/ts-libs/main/packages/dual-workflow-engine/schemas/transition-flow-workflow.schema.json",
|
|
4
|
+
"title": "@gobing-ai/ts-dual-workflow-engine Transition-flow Workflow",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["kind", "name", "initialNode", "nodes", "edges"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"$schema": { "type": "string" },
|
|
10
|
+
"kind": { "const": "transition-flow" },
|
|
11
|
+
"name": { "type": "string", "minLength": 1 },
|
|
12
|
+
"version": { "type": "string" },
|
|
13
|
+
"description": { "type": "string" },
|
|
14
|
+
"initialNode": { "type": "string", "minLength": 1 },
|
|
15
|
+
"terminalNodes": { "type": "array", "items": { "type": "string", "minLength": 1 } },
|
|
16
|
+
"iterationBound": { "type": "integer", "exclusiveMinimum": 0 },
|
|
17
|
+
"vars": {
|
|
18
|
+
"type": "object",
|
|
19
|
+
"propertyNames": { "pattern": "^[A-Za-z_][A-Za-z0-9_]*$" },
|
|
20
|
+
"additionalProperties": { "type": "string" }
|
|
21
|
+
},
|
|
22
|
+
"env": {
|
|
23
|
+
"type": "object",
|
|
24
|
+
"additionalProperties": false,
|
|
25
|
+
"properties": {
|
|
26
|
+
"allow": { "type": "array", "items": { "type": "string", "pattern": "^[A-Za-z_][A-Za-z0-9_]*$" } }
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"nodes": {
|
|
30
|
+
"type": "array",
|
|
31
|
+
"items": {
|
|
32
|
+
"type": "object",
|
|
33
|
+
"additionalProperties": false,
|
|
34
|
+
"required": ["id"],
|
|
35
|
+
"properties": {
|
|
36
|
+
"id": { "type": "string", "minLength": 1 },
|
|
37
|
+
"description": { "type": "string" },
|
|
38
|
+
"type": { "enum": ["action", "gate", "parallel", "decision"] },
|
|
39
|
+
"action": { "$ref": "#/$defs/action" }
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"edges": {
|
|
44
|
+
"type": "array",
|
|
45
|
+
"items": {
|
|
46
|
+
"type": "object",
|
|
47
|
+
"additionalProperties": false,
|
|
48
|
+
"required": ["from", "to"],
|
|
49
|
+
"properties": {
|
|
50
|
+
"from": { "type": "string", "minLength": 1 },
|
|
51
|
+
"to": { "type": "string", "minLength": 1 },
|
|
52
|
+
"description": { "type": "string" },
|
|
53
|
+
"condition": { "$ref": "#/$defs/guard" }
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"$defs": {
|
|
59
|
+
"action": {
|
|
60
|
+
"type": "object",
|
|
61
|
+
"additionalProperties": false,
|
|
62
|
+
"required": ["kind"],
|
|
63
|
+
"properties": {
|
|
64
|
+
"kind": { "type": "string", "minLength": 1 },
|
|
65
|
+
"options": { "type": "object", "additionalProperties": true }
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"guard": {
|
|
69
|
+
"type": "object",
|
|
70
|
+
"additionalProperties": false,
|
|
71
|
+
"required": ["kind"],
|
|
72
|
+
"properties": {
|
|
73
|
+
"kind": { "type": "string", "minLength": 1 },
|
|
74
|
+
"options": { "type": "object", "additionalProperties": true }
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|