@forestadmin/workflow-executor 1.0.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/LICENSE +674 -0
- package/README.md +141 -0
- package/dist/adapters/activity-log-drainer.d.ts +6 -0
- package/dist/adapters/activity-log-drainer.js +21 -0
- package/dist/adapters/agent-client-agent-port.d.ts +27 -0
- package/dist/adapters/agent-client-agent-port.js +211 -0
- package/dist/adapters/ai-client-adapter.d.ts +11 -0
- package/dist/adapters/ai-client-adapter.js +38 -0
- package/dist/adapters/always-error-ai-model-port.d.ts +8 -0
- package/dist/adapters/always-error-ai-model-port.js +23 -0
- package/dist/adapters/console-logger.d.ts +7 -0
- package/dist/adapters/console-logger.js +15 -0
- package/dist/adapters/forest-server-workflow-port.d.ts +25 -0
- package/dist/adapters/forest-server-workflow-port.js +163 -0
- package/dist/adapters/forestadmin-client-activity-log-port-factory.d.ts +12 -0
- package/dist/adapters/forestadmin-client-activity-log-port-factory.js +22 -0
- package/dist/adapters/forestadmin-client-activity-log-port.d.ts +15 -0
- package/dist/adapters/forestadmin-client-activity-log-port.js +78 -0
- package/dist/adapters/pretty-logger.d.ts +9 -0
- package/dist/adapters/pretty-logger.js +37 -0
- package/dist/adapters/record-id-serializer.d.ts +4 -0
- package/dist/adapters/record-id-serializer.js +20 -0
- package/dist/adapters/run-to-available-step-mapper.d.ts +4 -0
- package/dist/adapters/run-to-available-step-mapper.js +137 -0
- package/dist/adapters/server-ai-adapter.d.ts +16 -0
- package/dist/adapters/server-ai-adapter.js +60 -0
- package/dist/adapters/server-types.d.ts +181 -0
- package/dist/adapters/server-types.js +35 -0
- package/dist/adapters/step-definition-mapper.d.ts +4 -0
- package/dist/adapters/step-definition-mapper.js +68 -0
- package/dist/adapters/step-outcome-to-update-step-mapper.d.ts +4 -0
- package/dist/adapters/step-outcome-to-update-step-mapper.js +34 -0
- package/dist/adapters/with-retry.d.ts +6 -0
- package/dist/adapters/with-retry.js +40 -0
- package/dist/build-workflow-executor.d.ts +35 -0
- package/dist/build-workflow-executor.js +175 -0
- package/dist/cli-core.d.ts +26 -0
- package/dist/cli-core.js +228 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.js +17 -0
- package/dist/defaults.d.ts +9 -0
- package/dist/defaults.js +12 -0
- package/dist/errors.d.ts +153 -0
- package/dist/errors.js +327 -0
- package/dist/executors/activity-log.d.ts +14 -0
- package/dist/executors/activity-log.js +33 -0
- package/dist/executors/agent-with-log.d.ts +33 -0
- package/dist/executors/agent-with-log.js +76 -0
- package/dist/executors/base-step-executor.d.ts +40 -0
- package/dist/executors/base-step-executor.js +267 -0
- package/dist/executors/condition-step-executor.d.ts +15 -0
- package/dist/executors/condition-step-executor.js +108 -0
- package/dist/executors/guidance-step-executor.d.ts +12 -0
- package/dist/executors/guidance-step-executor.js +39 -0
- package/dist/executors/load-related-record-step-executor.d.ts +38 -0
- package/dist/executors/load-related-record-step-executor.js +478 -0
- package/dist/executors/mcp-step-executor.d.ts +22 -0
- package/dist/executors/mcp-step-executor.js +188 -0
- package/dist/executors/read-record-step-executor.d.ts +10 -0
- package/dist/executors/read-record-step-executor.js +100 -0
- package/dist/executors/record-step-executor.d.ts +19 -0
- package/dist/executors/record-step-executor.js +108 -0
- package/dist/executors/step-executor-factory.d.ts +24 -0
- package/dist/executors/step-executor-factory.js +99 -0
- package/dist/executors/summary/step-execution-formatters.d.ts +8 -0
- package/dist/executors/summary/step-execution-formatters.js +49 -0
- package/dist/executors/summary/step-summary-builder.d.ts +7 -0
- package/dist/executors/summary/step-summary-builder.js +52 -0
- package/dist/executors/trigger-record-action-step-executor.d.ts +17 -0
- package/dist/executors/trigger-record-action-step-executor.js +169 -0
- package/dist/executors/update-record-step-executor.d.ts +13 -0
- package/dist/executors/update-record-step-executor.js +245 -0
- package/dist/http/executor-http-server.d.ts +25 -0
- package/dist/http/executor-http-server.js +170 -0
- package/dist/http/pending-data-validators.d.ts +25 -0
- package/dist/http/pending-data-validators.js +79 -0
- package/dist/http/step-serializer.d.ts +3 -0
- package/dist/http/step-serializer.js +47 -0
- package/dist/in-flight-run-registry.d.ts +9 -0
- package/dist/in-flight-run-registry.js +30 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.js +88 -0
- package/dist/ports/activity-log-port.d.ts +24 -0
- package/dist/ports/activity-log-port.js +3 -0
- package/dist/ports/agent-port.d.ts +54 -0
- package/dist/ports/agent-port.js +3 -0
- package/dist/ports/ai-model-port.d.ts +7 -0
- package/dist/ports/ai-model-port.js +3 -0
- package/dist/ports/logger-port.d.ts +6 -0
- package/dist/ports/logger-port.js +3 -0
- package/dist/ports/run-store.d.ts +9 -0
- package/dist/ports/run-store.js +3 -0
- package/dist/ports/workflow-port.d.ts +30 -0
- package/dist/ports/workflow-port.js +3 -0
- package/dist/remote-tool-fetcher.d.ts +19 -0
- package/dist/remote-tool-fetcher.js +56 -0
- package/dist/runner.d.ts +50 -0
- package/dist/runner.js +317 -0
- package/dist/schema-cache.d.ts +11 -0
- package/dist/schema-cache.js +37 -0
- package/dist/schema-resolver.d.ts +11 -0
- package/dist/schema-resolver.js +24 -0
- package/dist/stores/build-run-store.d.ts +5 -0
- package/dist/stores/build-run-store.js +28 -0
- package/dist/stores/database-store.d.ts +17 -0
- package/dist/stores/database-store.js +119 -0
- package/dist/stores/in-memory-store.d.ts +11 -0
- package/dist/stores/in-memory-store.js +48 -0
- package/dist/types/execution-context.d.ts +37 -0
- package/dist/types/execution-context.js +3 -0
- package/dist/types/step-execution-data.d.ts +137 -0
- package/dist/types/step-execution-data.js +3 -0
- package/dist/types/validated/collection.d.ts +126 -0
- package/dist/types/validated/collection.js +96 -0
- package/dist/types/validated/execution.d.ts +362 -0
- package/dist/types/validated/execution.js +43 -0
- package/dist/types/validated/step-definition.d.ts +243 -0
- package/dist/types/validated/step-definition.js +128 -0
- package/dist/types/validated/step-outcome.d.ts +108 -0
- package/dist/types/validated/step-outcome.js +66 -0
- package/dist/validate-secrets.d.ts +5 -0
- package/dist/validate-secrets.js +14 -0
- package/package.json +50 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StepDefinitionSchema = exports.RecordStepDefinitionSchema = exports.GuidanceStepDefinitionSchema = exports.McpStepDefinitionSchema = exports.LoadRelatedRecordStepDefinitionSchema = exports.TriggerActionStepDefinitionSchema = exports.UpdateRecordStepDefinitionSchema = exports.ReadRecordStepDefinitionSchema = exports.ConditionStepDefinitionSchema = exports.StepExecutionMode = exports.StepType = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
var StepType;
|
|
6
|
+
(function (StepType) {
|
|
7
|
+
StepType["Condition"] = "condition";
|
|
8
|
+
StepType["ReadRecord"] = "read-record";
|
|
9
|
+
StepType["UpdateRecord"] = "update-record";
|
|
10
|
+
StepType["TriggerAction"] = "trigger-action";
|
|
11
|
+
StepType["LoadRelatedRecord"] = "load-related-record";
|
|
12
|
+
StepType["Mcp"] = "mcp";
|
|
13
|
+
StepType["Guidance"] = "guidance";
|
|
14
|
+
})(StepType || (exports.StepType = StepType = {}));
|
|
15
|
+
/**
|
|
16
|
+
* Domain enum for how a step is executed. Decoupled from the server contract
|
|
17
|
+
* (`ServerStepExecutionTypeEnum`) — `step-definition-mapper.ts` is the single translation point.
|
|
18
|
+
*/
|
|
19
|
+
var StepExecutionMode;
|
|
20
|
+
(function (StepExecutionMode) {
|
|
21
|
+
StepExecutionMode["Manual"] = "manual";
|
|
22
|
+
StepExecutionMode["AutomatedWithConfirmation"] = "automated-with-confirmation";
|
|
23
|
+
StepExecutionMode["FullyAutomated"] = "fully-automated";
|
|
24
|
+
})(StepExecutionMode || (exports.StepExecutionMode = StepExecutionMode = {}));
|
|
25
|
+
// Shared fields across all step types. executionType is intentionally excluded —
|
|
26
|
+
// each schema declares its own valid modes with .default().catch() for normalization.
|
|
27
|
+
const sharedFields = {
|
|
28
|
+
prompt: zod_1.z.string().optional(),
|
|
29
|
+
aiConfigName: zod_1.z.string().optional(),
|
|
30
|
+
title: zod_1.z.string().optional(),
|
|
31
|
+
};
|
|
32
|
+
// Use z.enum(EnumObject), not z.nativeEnum — the latter is deprecated in zod 4.
|
|
33
|
+
const { Manual, AutomatedWithConfirmation, FullyAutomated } = StepExecutionMode;
|
|
34
|
+
exports.ConditionStepDefinitionSchema = zod_1.z.object({
|
|
35
|
+
...sharedFields,
|
|
36
|
+
type: zod_1.z.literal(StepType.Condition),
|
|
37
|
+
executionType: zod_1.z.enum([Manual, FullyAutomated]).default(FullyAutomated).catch(FullyAutomated),
|
|
38
|
+
options: zod_1.z.array(zod_1.z.string()).min(2),
|
|
39
|
+
});
|
|
40
|
+
exports.ReadRecordStepDefinitionSchema = zod_1.z.object({
|
|
41
|
+
...sharedFields,
|
|
42
|
+
type: zod_1.z.literal(StepType.ReadRecord),
|
|
43
|
+
executionType: zod_1.z.literal(FullyAutomated).default(FullyAutomated).catch(FullyAutomated),
|
|
44
|
+
preRecordedArgs: zod_1.z
|
|
45
|
+
.object({
|
|
46
|
+
selectedRecordStepIndex: zod_1.z.number().int().optional(),
|
|
47
|
+
/** Technical names of the fields to read */
|
|
48
|
+
fieldNames: zod_1.z.array(zod_1.z.string()).optional(),
|
|
49
|
+
})
|
|
50
|
+
.optional(),
|
|
51
|
+
});
|
|
52
|
+
exports.UpdateRecordStepDefinitionSchema = zod_1.z.object({
|
|
53
|
+
...sharedFields,
|
|
54
|
+
type: zod_1.z.literal(StepType.UpdateRecord),
|
|
55
|
+
executionType: zod_1.z
|
|
56
|
+
.enum([AutomatedWithConfirmation, FullyAutomated])
|
|
57
|
+
.default(AutomatedWithConfirmation)
|
|
58
|
+
.catch(AutomatedWithConfirmation),
|
|
59
|
+
preRecordedArgs: zod_1.z
|
|
60
|
+
.object({
|
|
61
|
+
selectedRecordStepIndex: zod_1.z.number().int().optional(),
|
|
62
|
+
/** Technical name of the field to update */
|
|
63
|
+
fieldName: zod_1.z.string().optional(),
|
|
64
|
+
value: zod_1.z.unknown().optional(),
|
|
65
|
+
})
|
|
66
|
+
.optional(),
|
|
67
|
+
});
|
|
68
|
+
exports.TriggerActionStepDefinitionSchema = zod_1.z.object({
|
|
69
|
+
...sharedFields,
|
|
70
|
+
type: zod_1.z.literal(StepType.TriggerAction),
|
|
71
|
+
executionType: zod_1.z
|
|
72
|
+
.enum([AutomatedWithConfirmation, FullyAutomated])
|
|
73
|
+
.default(AutomatedWithConfirmation)
|
|
74
|
+
.catch(AutomatedWithConfirmation),
|
|
75
|
+
preRecordedArgs: zod_1.z
|
|
76
|
+
.object({
|
|
77
|
+
selectedRecordStepIndex: zod_1.z.number().int().optional(),
|
|
78
|
+
/** Technical name of the action to trigger */
|
|
79
|
+
actionName: zod_1.z.string().optional(),
|
|
80
|
+
})
|
|
81
|
+
.optional(),
|
|
82
|
+
});
|
|
83
|
+
exports.LoadRelatedRecordStepDefinitionSchema = zod_1.z.object({
|
|
84
|
+
...sharedFields,
|
|
85
|
+
type: zod_1.z.literal(StepType.LoadRelatedRecord),
|
|
86
|
+
executionType: zod_1.z
|
|
87
|
+
.enum([AutomatedWithConfirmation, FullyAutomated])
|
|
88
|
+
.default(AutomatedWithConfirmation)
|
|
89
|
+
.catch(AutomatedWithConfirmation),
|
|
90
|
+
preRecordedArgs: zod_1.z
|
|
91
|
+
.object({
|
|
92
|
+
selectedRecordStepIndex: zod_1.z.number().int().optional(),
|
|
93
|
+
/** Technical name of the relation to follow */
|
|
94
|
+
relationName: zod_1.z.string().optional(),
|
|
95
|
+
selectedRecordIndex: zod_1.z.number().int().optional(),
|
|
96
|
+
})
|
|
97
|
+
.optional(),
|
|
98
|
+
});
|
|
99
|
+
exports.McpStepDefinitionSchema = zod_1.z.object({
|
|
100
|
+
...sharedFields,
|
|
101
|
+
type: zod_1.z.literal(StepType.Mcp),
|
|
102
|
+
executionType: zod_1.z
|
|
103
|
+
.enum([AutomatedWithConfirmation, FullyAutomated])
|
|
104
|
+
.default(AutomatedWithConfirmation)
|
|
105
|
+
.catch(AutomatedWithConfirmation),
|
|
106
|
+
mcpServerId: zod_1.z.string().min(1),
|
|
107
|
+
});
|
|
108
|
+
exports.GuidanceStepDefinitionSchema = zod_1.z.object({
|
|
109
|
+
...sharedFields,
|
|
110
|
+
type: zod_1.z.literal(StepType.Guidance),
|
|
111
|
+
executionType: zod_1.z.literal(Manual).default(Manual).catch(Manual),
|
|
112
|
+
});
|
|
113
|
+
exports.RecordStepDefinitionSchema = zod_1.z.discriminatedUnion('type', [
|
|
114
|
+
exports.ReadRecordStepDefinitionSchema,
|
|
115
|
+
exports.UpdateRecordStepDefinitionSchema,
|
|
116
|
+
exports.TriggerActionStepDefinitionSchema,
|
|
117
|
+
exports.LoadRelatedRecordStepDefinitionSchema,
|
|
118
|
+
]);
|
|
119
|
+
exports.StepDefinitionSchema = zod_1.z.discriminatedUnion('type', [
|
|
120
|
+
exports.ConditionStepDefinitionSchema,
|
|
121
|
+
exports.ReadRecordStepDefinitionSchema,
|
|
122
|
+
exports.UpdateRecordStepDefinitionSchema,
|
|
123
|
+
exports.TriggerActionStepDefinitionSchema,
|
|
124
|
+
exports.LoadRelatedRecordStepDefinitionSchema,
|
|
125
|
+
exports.McpStepDefinitionSchema,
|
|
126
|
+
exports.GuidanceStepDefinitionSchema,
|
|
127
|
+
]);
|
|
128
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1kZWZpbml0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3R5cGVzL3ZhbGlkYXRlZC9zdGVwLWRlZmluaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQXdCO0FBRXhCLElBQVksUUFRWDtBQVJELFdBQVksUUFBUTtJQUNsQixtQ0FBdUIsQ0FBQTtJQUN2QixzQ0FBMEIsQ0FBQTtJQUMxQiwwQ0FBOEIsQ0FBQTtJQUM5Qiw0Q0FBZ0MsQ0FBQTtJQUNoQyxxREFBeUMsQ0FBQTtJQUN6Qyx1QkFBVyxDQUFBO0lBQ1gsaUNBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQVJXLFFBQVEsd0JBQVIsUUFBUSxRQVFuQjtBQUVEOzs7R0FHRztBQUNILElBQVksaUJBSVg7QUFKRCxXQUFZLGlCQUFpQjtJQUMzQixzQ0FBaUIsQ0FBQTtJQUNqQiw4RUFBeUQsQ0FBQTtJQUN6RCx1REFBa0MsQ0FBQTtBQUNwQyxDQUFDLEVBSlcsaUJBQWlCLGlDQUFqQixpQkFBaUIsUUFJNUI7QUFFRCxpRkFBaUY7QUFDakYsc0ZBQXNGO0FBQ3RGLE1BQU0sWUFBWSxHQUFHO0lBQ25CLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzdCLFlBQVksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ25DLEtBQUssRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzdCLENBQUM7QUFFRixnRkFBZ0Y7QUFDaEYsTUFBTSxFQUFFLE1BQU0sRUFBRSx5QkFBeUIsRUFBRSxjQUFjLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQztBQUVuRSxRQUFBLDZCQUE2QixHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDcEQsR0FBRyxZQUFZO0lBQ2YsSUFBSSxFQUFFLE9BQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztJQUNuQyxh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
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { StepType } from './step-definition';
|
|
3
|
+
export declare const BaseStepStatusSchema: z.ZodEnum<{
|
|
4
|
+
success: "success";
|
|
5
|
+
error: "error";
|
|
6
|
+
}>;
|
|
7
|
+
export type BaseStepStatus = z.infer<typeof BaseStepStatusSchema>;
|
|
8
|
+
export declare const RecordStepStatusSchema: z.ZodEnum<{
|
|
9
|
+
success: "success";
|
|
10
|
+
error: "error";
|
|
11
|
+
"awaiting-input": "awaiting-input";
|
|
12
|
+
}>;
|
|
13
|
+
export type RecordStepStatus = z.infer<typeof RecordStepStatusSchema>;
|
|
14
|
+
export type StepStatus = BaseStepStatus | RecordStepStatus;
|
|
15
|
+
export declare const ConditionStepOutcomeSchema: z.ZodObject<{
|
|
16
|
+
type: z.ZodLiteral<"condition">;
|
|
17
|
+
status: z.ZodEnum<{
|
|
18
|
+
success: "success";
|
|
19
|
+
error: "error";
|
|
20
|
+
"awaiting-input": "awaiting-input";
|
|
21
|
+
}>;
|
|
22
|
+
selectedOption: z.ZodOptional<z.ZodString>;
|
|
23
|
+
stepId: z.ZodString;
|
|
24
|
+
stepIndex: z.ZodNumber;
|
|
25
|
+
error: z.ZodOptional<z.ZodString>;
|
|
26
|
+
}, z.core.$strict>;
|
|
27
|
+
export type ConditionStepOutcome = z.infer<typeof ConditionStepOutcomeSchema>;
|
|
28
|
+
export declare const RecordStepOutcomeSchema: z.ZodObject<{
|
|
29
|
+
type: z.ZodLiteral<"record">;
|
|
30
|
+
status: z.ZodEnum<{
|
|
31
|
+
success: "success";
|
|
32
|
+
error: "error";
|
|
33
|
+
"awaiting-input": "awaiting-input";
|
|
34
|
+
}>;
|
|
35
|
+
stepId: z.ZodString;
|
|
36
|
+
stepIndex: z.ZodNumber;
|
|
37
|
+
error: z.ZodOptional<z.ZodString>;
|
|
38
|
+
}, z.core.$strict>;
|
|
39
|
+
export type RecordStepOutcome = z.infer<typeof RecordStepOutcomeSchema>;
|
|
40
|
+
export declare const McpStepOutcomeSchema: z.ZodObject<{
|
|
41
|
+
type: z.ZodLiteral<"mcp">;
|
|
42
|
+
status: z.ZodEnum<{
|
|
43
|
+
success: "success";
|
|
44
|
+
error: "error";
|
|
45
|
+
"awaiting-input": "awaiting-input";
|
|
46
|
+
}>;
|
|
47
|
+
stepId: z.ZodString;
|
|
48
|
+
stepIndex: z.ZodNumber;
|
|
49
|
+
error: z.ZodOptional<z.ZodString>;
|
|
50
|
+
}, z.core.$strict>;
|
|
51
|
+
export type McpStepOutcome = z.infer<typeof McpStepOutcomeSchema>;
|
|
52
|
+
export declare const GuidanceStepOutcomeSchema: z.ZodObject<{
|
|
53
|
+
type: z.ZodLiteral<"guidance">;
|
|
54
|
+
status: z.ZodEnum<{
|
|
55
|
+
success: "success";
|
|
56
|
+
error: "error";
|
|
57
|
+
"awaiting-input": "awaiting-input";
|
|
58
|
+
}>;
|
|
59
|
+
stepId: z.ZodString;
|
|
60
|
+
stepIndex: z.ZodNumber;
|
|
61
|
+
error: z.ZodOptional<z.ZodString>;
|
|
62
|
+
}, z.core.$strict>;
|
|
63
|
+
export type GuidanceStepOutcome = z.infer<typeof GuidanceStepOutcomeSchema>;
|
|
64
|
+
export declare const StepOutcomeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
65
|
+
type: z.ZodLiteral<"condition">;
|
|
66
|
+
status: z.ZodEnum<{
|
|
67
|
+
success: "success";
|
|
68
|
+
error: "error";
|
|
69
|
+
"awaiting-input": "awaiting-input";
|
|
70
|
+
}>;
|
|
71
|
+
selectedOption: z.ZodOptional<z.ZodString>;
|
|
72
|
+
stepId: z.ZodString;
|
|
73
|
+
stepIndex: z.ZodNumber;
|
|
74
|
+
error: z.ZodOptional<z.ZodString>;
|
|
75
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
76
|
+
type: z.ZodLiteral<"record">;
|
|
77
|
+
status: z.ZodEnum<{
|
|
78
|
+
success: "success";
|
|
79
|
+
error: "error";
|
|
80
|
+
"awaiting-input": "awaiting-input";
|
|
81
|
+
}>;
|
|
82
|
+
stepId: z.ZodString;
|
|
83
|
+
stepIndex: z.ZodNumber;
|
|
84
|
+
error: z.ZodOptional<z.ZodString>;
|
|
85
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
86
|
+
type: z.ZodLiteral<"mcp">;
|
|
87
|
+
status: z.ZodEnum<{
|
|
88
|
+
success: "success";
|
|
89
|
+
error: "error";
|
|
90
|
+
"awaiting-input": "awaiting-input";
|
|
91
|
+
}>;
|
|
92
|
+
stepId: z.ZodString;
|
|
93
|
+
stepIndex: z.ZodNumber;
|
|
94
|
+
error: z.ZodOptional<z.ZodString>;
|
|
95
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
96
|
+
type: z.ZodLiteral<"guidance">;
|
|
97
|
+
status: z.ZodEnum<{
|
|
98
|
+
success: "success";
|
|
99
|
+
error: "error";
|
|
100
|
+
"awaiting-input": "awaiting-input";
|
|
101
|
+
}>;
|
|
102
|
+
stepId: z.ZodString;
|
|
103
|
+
stepIndex: z.ZodNumber;
|
|
104
|
+
error: z.ZodOptional<z.ZodString>;
|
|
105
|
+
}, z.core.$strict>], "type">;
|
|
106
|
+
export type StepOutcome = z.infer<typeof StepOutcomeSchema>;
|
|
107
|
+
export declare function stepTypeToOutcomeType(type: StepType): 'condition' | 'record' | 'mcp' | 'guidance';
|
|
108
|
+
//# sourceMappingURL=step-outcome.d.ts.map
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StepOutcomeSchema = exports.GuidanceStepOutcomeSchema = exports.McpStepOutcomeSchema = exports.RecordStepOutcomeSchema = exports.ConditionStepOutcomeSchema = exports.RecordStepStatusSchema = exports.BaseStepStatusSchema = void 0;
|
|
4
|
+
exports.stepTypeToOutcomeType = stepTypeToOutcomeType;
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const step_definition_1 = require("./step-definition");
|
|
7
|
+
exports.BaseStepStatusSchema = zod_1.z.enum(['success', 'error']);
|
|
8
|
+
// AI steps can pause mid-execution to await user input (awaiting-input).
|
|
9
|
+
exports.RecordStepStatusSchema = zod_1.z.enum(['success', 'error', 'awaiting-input']);
|
|
10
|
+
/**
|
|
11
|
+
* StepOutcome is sent to the orchestrator — it must NEVER contain client data.
|
|
12
|
+
* Any privacy-sensitive information (e.g. AI reasoning) must stay in
|
|
13
|
+
* StepExecutionData (persisted in the RunStore, client-side only).
|
|
14
|
+
*/
|
|
15
|
+
const baseOutcomeFields = {
|
|
16
|
+
stepId: zod_1.z.string().min(1),
|
|
17
|
+
stepIndex: zod_1.z.number().int().nonnegative(),
|
|
18
|
+
/** Present when status is 'error'. */
|
|
19
|
+
error: zod_1.z.string().optional(),
|
|
20
|
+
};
|
|
21
|
+
exports.ConditionStepOutcomeSchema = zod_1.z
|
|
22
|
+
.object({
|
|
23
|
+
...baseOutcomeFields,
|
|
24
|
+
type: zod_1.z.literal('condition'),
|
|
25
|
+
status: exports.RecordStepStatusSchema,
|
|
26
|
+
/** Present when status is 'success'. */
|
|
27
|
+
selectedOption: zod_1.z.string().optional(),
|
|
28
|
+
})
|
|
29
|
+
.strict();
|
|
30
|
+
exports.RecordStepOutcomeSchema = zod_1.z
|
|
31
|
+
.object({
|
|
32
|
+
...baseOutcomeFields,
|
|
33
|
+
type: zod_1.z.literal('record'),
|
|
34
|
+
status: exports.RecordStepStatusSchema,
|
|
35
|
+
})
|
|
36
|
+
.strict();
|
|
37
|
+
exports.McpStepOutcomeSchema = zod_1.z
|
|
38
|
+
.object({
|
|
39
|
+
...baseOutcomeFields,
|
|
40
|
+
type: zod_1.z.literal('mcp'),
|
|
41
|
+
status: exports.RecordStepStatusSchema,
|
|
42
|
+
})
|
|
43
|
+
.strict();
|
|
44
|
+
exports.GuidanceStepOutcomeSchema = zod_1.z
|
|
45
|
+
.object({
|
|
46
|
+
...baseOutcomeFields,
|
|
47
|
+
type: zod_1.z.literal('guidance'),
|
|
48
|
+
status: exports.RecordStepStatusSchema,
|
|
49
|
+
})
|
|
50
|
+
.strict();
|
|
51
|
+
exports.StepOutcomeSchema = zod_1.z.discriminatedUnion('type', [
|
|
52
|
+
exports.ConditionStepOutcomeSchema,
|
|
53
|
+
exports.RecordStepOutcomeSchema,
|
|
54
|
+
exports.McpStepOutcomeSchema,
|
|
55
|
+
exports.GuidanceStepOutcomeSchema,
|
|
56
|
+
]);
|
|
57
|
+
function stepTypeToOutcomeType(type) {
|
|
58
|
+
if (type === step_definition_1.StepType.Condition)
|
|
59
|
+
return 'condition';
|
|
60
|
+
if (type === step_definition_1.StepType.Mcp)
|
|
61
|
+
return 'mcp';
|
|
62
|
+
if (type === step_definition_1.StepType.Guidance)
|
|
63
|
+
return 'guidance';
|
|
64
|
+
return 'record';
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1vdXRjb21lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3R5cGVzL3ZhbGlkYXRlZC9zdGVwLW91dGNvbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBdUVBLHNEQU1DO0FBN0VELDZCQUF3QjtBQUV4Qix1REFBNkM7QUFFaEMsUUFBQSxvQkFBb0IsR0FBRyxPQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFHakUseUVBQXlFO0FBQzVELFFBQUEsc0JBQXNCLEdBQUcsT0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0FBS3JGOzs7O0dBSUc7QUFDSCxNQUFNLGlCQUFpQixHQUFHO0lBQ3hCLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN6QixTQUFTLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFBRTtJQUN6QyxzQ0FBc0M7SUFDdEMsS0FBSyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDN0IsQ0FBQztBQUVXLFFBQUEsMEJBQTBCLEdBQUcsT0FBQztLQUN4QyxNQUFNLENBQUM7SUFDTixHQUFHLGlCQUFpQjtJQUNwQixJQUFJLEVBQUUsT0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDNUIsTUFBTSxFQUFFLDhCQUFzQjtJQUM5Qix3Q0FBd0M7SUFDeEMsY0FBYyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDdEMsQ0FBQztLQUNELE1BQU0sRUFBRSxDQUFDO0FBR0MsUUFBQSx1QkFBdUIsR0FBRyxPQUFDO0tBQ3JDLE1BQU0sQ0FBQztJQUNOLEdBQUcsaUJBQWlCO0lBQ3BCLElBQUksRUFBRSxPQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUN6QixNQUFNLEVBQUUsOEJBQXNCO0NBQy9CLENBQUM7S0FDRCxNQUFNLEVBQUUsQ0FBQztBQUdDLFFBQUEsb0JBQW9CLEdBQUcsT0FBQztLQUNsQyxNQUFNLENBQUM7SUFDTixHQUFHLGlCQUFpQjtJQUNwQixJQUFJLEVBQUUsT0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDdEIsTUFBTSxFQUFFLDhCQUFzQjtDQUMvQixDQUFDO0tBQ0QsTUFBTSxFQUFFLENBQUM7QUFHQyxRQUFBLHlCQUF5QixHQUFHLE9BQUM7S0FDdkMsTUFBTSxDQUFDO0lBQ04sR0FBRyxpQkFBaUI7SUFDcEIsSUFBSSxFQUFFLE9BQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO0lBQzNCLE1BQU0sRUFBRSw4QkFBc0I7Q0FDL0IsQ0FBQztLQUNELE1BQU0sRUFBRSxDQUFDO0FBR0MsUUFBQSxpQkFBaUIsR0FBRyxPQUFDLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFO0lBQzVELGtDQUEwQjtJQUMxQiwrQkFBdUI7SUFDdkIsNEJBQW9CO0lBQ3BCLGlDQUF5QjtDQUMxQixDQUFDLENBQUM7QUFHSCxTQUFnQixxQkFBcUIsQ0FBQyxJQUFjO0lBQ2xELElBQUksSUFBSSxLQUFLLDBCQUFRLENBQUMsU0FBUztRQUFFLE9BQU8sV0FBVyxDQUFDO0lBQ3BELElBQUksSUFBSSxLQUFLLDBCQUFRLENBQUMsR0FBRztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3hDLElBQUksSUFBSSxLQUFLLDBCQUFRLENBQUMsUUFBUTtRQUFFLE9BQU8sVUFBVSxDQUFDO0lBRWxELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMifQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = validateSecrets;
|
|
4
|
+
const errors_1 = require("./errors");
|
|
5
|
+
const ENV_SECRET_PATTERN = /^[0-9a-f]{64}$/;
|
|
6
|
+
function validateSecrets(params) {
|
|
7
|
+
if (!params.authSecret || typeof params.authSecret !== 'string') {
|
|
8
|
+
throw new errors_1.ConfigurationError('authSecret must be a non-empty string');
|
|
9
|
+
}
|
|
10
|
+
if (!ENV_SECRET_PATTERN.test(params.envSecret)) {
|
|
11
|
+
throw new errors_1.ConfigurationError('envSecret must be a 64-character hex string');
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtc2VjcmV0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92YWxpZGF0ZS1zZWNyZXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBSUEsa0NBUUM7QUFaRCxxQ0FBOEM7QUFFOUMsTUFBTSxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUU1QyxTQUF3QixlQUFlLENBQUMsTUFBaUQ7SUFDdkYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksT0FBTyxNQUFNLENBQUMsVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sSUFBSSwyQkFBa0IsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQy9DLE1BQU0sSUFBSSwyQkFBa0IsQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7QUFDSCxDQUFDIn0=
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@forestadmin/workflow-executor",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "dist/index.js",
|
|
5
|
+
"bin": {
|
|
6
|
+
"forest-workflow-executor": "dist/cli.js"
|
|
7
|
+
},
|
|
8
|
+
"license": "GPL-3.0",
|
|
9
|
+
"publishConfig": {
|
|
10
|
+
"access": "public"
|
|
11
|
+
},
|
|
12
|
+
"repository": {
|
|
13
|
+
"type": "git",
|
|
14
|
+
"url": "git+https://github.com/ForestAdmin/agent-nodejs.git",
|
|
15
|
+
"directory": "packages/workflow-executor"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist/**/*.js",
|
|
19
|
+
"dist/**/*.d.ts"
|
|
20
|
+
],
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "tsc",
|
|
23
|
+
"build:watch": "tsc --watch",
|
|
24
|
+
"clean": "rm -rf coverage dist",
|
|
25
|
+
"lint": "eslint src test",
|
|
26
|
+
"test": "jest"
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@forestadmin/agent-client": "1.5.10",
|
|
30
|
+
"@forestadmin/ai-proxy": "1.10.1",
|
|
31
|
+
"@forestadmin/forestadmin-client": "1.39.9",
|
|
32
|
+
"@koa/bodyparser": "^6.1.0",
|
|
33
|
+
"@koa/router": "^13.1.0",
|
|
34
|
+
"jsonwebtoken": "^9.0.3",
|
|
35
|
+
"koa": "^3.0.1",
|
|
36
|
+
"koa-jwt": "^4.0.4",
|
|
37
|
+
"picocolors": "^1.1.1",
|
|
38
|
+
"sequelize": "^6.37.8",
|
|
39
|
+
"umzug": "^3.8.2",
|
|
40
|
+
"zod": "4.3.6"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@types/jsonwebtoken": "^9.0.10",
|
|
44
|
+
"@types/koa": "^2.13.5",
|
|
45
|
+
"@types/koa__router": "^12.0.4",
|
|
46
|
+
"@types/sequelize": "^6.12.0",
|
|
47
|
+
"sqlite3": "^6.0.1",
|
|
48
|
+
"supertest": "^7.1.3"
|
|
49
|
+
}
|
|
50
|
+
}
|