@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.
Files changed (123) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +141 -0
  3. package/dist/adapters/activity-log-drainer.d.ts +6 -0
  4. package/dist/adapters/activity-log-drainer.js +21 -0
  5. package/dist/adapters/agent-client-agent-port.d.ts +27 -0
  6. package/dist/adapters/agent-client-agent-port.js +211 -0
  7. package/dist/adapters/ai-client-adapter.d.ts +11 -0
  8. package/dist/adapters/ai-client-adapter.js +38 -0
  9. package/dist/adapters/always-error-ai-model-port.d.ts +8 -0
  10. package/dist/adapters/always-error-ai-model-port.js +23 -0
  11. package/dist/adapters/console-logger.d.ts +7 -0
  12. package/dist/adapters/console-logger.js +15 -0
  13. package/dist/adapters/forest-server-workflow-port.d.ts +25 -0
  14. package/dist/adapters/forest-server-workflow-port.js +163 -0
  15. package/dist/adapters/forestadmin-client-activity-log-port-factory.d.ts +12 -0
  16. package/dist/adapters/forestadmin-client-activity-log-port-factory.js +22 -0
  17. package/dist/adapters/forestadmin-client-activity-log-port.d.ts +15 -0
  18. package/dist/adapters/forestadmin-client-activity-log-port.js +78 -0
  19. package/dist/adapters/pretty-logger.d.ts +9 -0
  20. package/dist/adapters/pretty-logger.js +37 -0
  21. package/dist/adapters/record-id-serializer.d.ts +4 -0
  22. package/dist/adapters/record-id-serializer.js +20 -0
  23. package/dist/adapters/run-to-available-step-mapper.d.ts +4 -0
  24. package/dist/adapters/run-to-available-step-mapper.js +137 -0
  25. package/dist/adapters/server-ai-adapter.d.ts +16 -0
  26. package/dist/adapters/server-ai-adapter.js +60 -0
  27. package/dist/adapters/server-types.d.ts +181 -0
  28. package/dist/adapters/server-types.js +35 -0
  29. package/dist/adapters/step-definition-mapper.d.ts +4 -0
  30. package/dist/adapters/step-definition-mapper.js +68 -0
  31. package/dist/adapters/step-outcome-to-update-step-mapper.d.ts +4 -0
  32. package/dist/adapters/step-outcome-to-update-step-mapper.js +34 -0
  33. package/dist/adapters/with-retry.d.ts +6 -0
  34. package/dist/adapters/with-retry.js +40 -0
  35. package/dist/build-workflow-executor.d.ts +35 -0
  36. package/dist/build-workflow-executor.js +175 -0
  37. package/dist/cli-core.d.ts +26 -0
  38. package/dist/cli-core.js +228 -0
  39. package/dist/cli.d.ts +3 -0
  40. package/dist/cli.js +17 -0
  41. package/dist/defaults.d.ts +9 -0
  42. package/dist/defaults.js +12 -0
  43. package/dist/errors.d.ts +153 -0
  44. package/dist/errors.js +327 -0
  45. package/dist/executors/activity-log.d.ts +14 -0
  46. package/dist/executors/activity-log.js +33 -0
  47. package/dist/executors/agent-with-log.d.ts +33 -0
  48. package/dist/executors/agent-with-log.js +76 -0
  49. package/dist/executors/base-step-executor.d.ts +40 -0
  50. package/dist/executors/base-step-executor.js +267 -0
  51. package/dist/executors/condition-step-executor.d.ts +15 -0
  52. package/dist/executors/condition-step-executor.js +108 -0
  53. package/dist/executors/guidance-step-executor.d.ts +12 -0
  54. package/dist/executors/guidance-step-executor.js +39 -0
  55. package/dist/executors/load-related-record-step-executor.d.ts +38 -0
  56. package/dist/executors/load-related-record-step-executor.js +478 -0
  57. package/dist/executors/mcp-step-executor.d.ts +22 -0
  58. package/dist/executors/mcp-step-executor.js +188 -0
  59. package/dist/executors/read-record-step-executor.d.ts +10 -0
  60. package/dist/executors/read-record-step-executor.js +100 -0
  61. package/dist/executors/record-step-executor.d.ts +19 -0
  62. package/dist/executors/record-step-executor.js +108 -0
  63. package/dist/executors/step-executor-factory.d.ts +24 -0
  64. package/dist/executors/step-executor-factory.js +99 -0
  65. package/dist/executors/summary/step-execution-formatters.d.ts +8 -0
  66. package/dist/executors/summary/step-execution-formatters.js +49 -0
  67. package/dist/executors/summary/step-summary-builder.d.ts +7 -0
  68. package/dist/executors/summary/step-summary-builder.js +52 -0
  69. package/dist/executors/trigger-record-action-step-executor.d.ts +17 -0
  70. package/dist/executors/trigger-record-action-step-executor.js +169 -0
  71. package/dist/executors/update-record-step-executor.d.ts +13 -0
  72. package/dist/executors/update-record-step-executor.js +245 -0
  73. package/dist/http/executor-http-server.d.ts +25 -0
  74. package/dist/http/executor-http-server.js +170 -0
  75. package/dist/http/pending-data-validators.d.ts +25 -0
  76. package/dist/http/pending-data-validators.js +79 -0
  77. package/dist/http/step-serializer.d.ts +3 -0
  78. package/dist/http/step-serializer.js +47 -0
  79. package/dist/in-flight-run-registry.d.ts +9 -0
  80. package/dist/in-flight-run-registry.js +30 -0
  81. package/dist/index.d.ts +38 -0
  82. package/dist/index.js +88 -0
  83. package/dist/ports/activity-log-port.d.ts +24 -0
  84. package/dist/ports/activity-log-port.js +3 -0
  85. package/dist/ports/agent-port.d.ts +54 -0
  86. package/dist/ports/agent-port.js +3 -0
  87. package/dist/ports/ai-model-port.d.ts +7 -0
  88. package/dist/ports/ai-model-port.js +3 -0
  89. package/dist/ports/logger-port.d.ts +6 -0
  90. package/dist/ports/logger-port.js +3 -0
  91. package/dist/ports/run-store.d.ts +9 -0
  92. package/dist/ports/run-store.js +3 -0
  93. package/dist/ports/workflow-port.d.ts +30 -0
  94. package/dist/ports/workflow-port.js +3 -0
  95. package/dist/remote-tool-fetcher.d.ts +19 -0
  96. package/dist/remote-tool-fetcher.js +56 -0
  97. package/dist/runner.d.ts +50 -0
  98. package/dist/runner.js +317 -0
  99. package/dist/schema-cache.d.ts +11 -0
  100. package/dist/schema-cache.js +37 -0
  101. package/dist/schema-resolver.d.ts +11 -0
  102. package/dist/schema-resolver.js +24 -0
  103. package/dist/stores/build-run-store.d.ts +5 -0
  104. package/dist/stores/build-run-store.js +28 -0
  105. package/dist/stores/database-store.d.ts +17 -0
  106. package/dist/stores/database-store.js +119 -0
  107. package/dist/stores/in-memory-store.d.ts +11 -0
  108. package/dist/stores/in-memory-store.js +48 -0
  109. package/dist/types/execution-context.d.ts +37 -0
  110. package/dist/types/execution-context.js +3 -0
  111. package/dist/types/step-execution-data.d.ts +137 -0
  112. package/dist/types/step-execution-data.js +3 -0
  113. package/dist/types/validated/collection.d.ts +126 -0
  114. package/dist/types/validated/collection.js +96 -0
  115. package/dist/types/validated/execution.d.ts +362 -0
  116. package/dist/types/validated/execution.js +43 -0
  117. package/dist/types/validated/step-definition.d.ts +243 -0
  118. package/dist/types/validated/step-definition.js +128 -0
  119. package/dist/types/validated/step-outcome.d.ts +108 -0
  120. package/dist/types/validated/step-outcome.js +66 -0
  121. package/dist/validate-secrets.d.ts +5 -0
  122. package/dist/validate-secrets.js +14 -0
  123. 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,5 @@
1
+ export default function validateSecrets(params: {
2
+ envSecret: string;
3
+ authSecret: string;
4
+ }): void;
5
+ //# sourceMappingURL=validate-secrets.d.ts.map
@@ -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
+ }