@eigenpal/cli 0.10.18 → 0.10.20
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/CHANGELOG.md +12 -0
- package/dist/cli.js +418 -48
- package/dist/skill/reference/step-types.md +73 -30
- package/dist/skill/reference/workflow-yaml.md +39 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @eigenpal/cli
|
|
2
2
|
|
|
3
|
+
## 0.10.20
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 28f2e84: The bundled workflow reference now documents durable retry policies, inheritance, supported step types, and retry safety limits.
|
|
8
|
+
|
|
9
|
+
## 0.10.19
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- b84a877: Workflow YAML reference docs now describe `action.invoke-workflow` as the single composition primitive, including inline and child execution modes.
|
|
14
|
+
|
|
3
15
|
## 0.10.16
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/dist/cli.js
CHANGED
|
@@ -61939,6 +61939,123 @@ function script(${typedParams}): StepOutput {
|
|
|
61939
61939
|
}
|
|
61940
61940
|
var SCRIPT_FN_MAX_BYTES = 50000;
|
|
61941
61941
|
|
|
61942
|
+
// ../types/src/workflow/retry.ts
|
|
61943
|
+
function normalizePolicy(policy) {
|
|
61944
|
+
if (policy === undefined || policy === "inherit")
|
|
61945
|
+
return policy;
|
|
61946
|
+
if (policy === "automatic")
|
|
61947
|
+
return { mode: "automatic" };
|
|
61948
|
+
if (policy === "never")
|
|
61949
|
+
return { mode: "never" };
|
|
61950
|
+
return policy;
|
|
61951
|
+
}
|
|
61952
|
+
function resolveRetryPolicy(args) {
|
|
61953
|
+
const step = normalizePolicy(args.step);
|
|
61954
|
+
const workflow = normalizePolicy(args.workflow);
|
|
61955
|
+
let policy;
|
|
61956
|
+
let source;
|
|
61957
|
+
if (step && step !== "inherit") {
|
|
61958
|
+
policy = policyForCapability(step, args.capability);
|
|
61959
|
+
source = "step";
|
|
61960
|
+
} else if (workflow && workflow !== "inherit") {
|
|
61961
|
+
policy = policyForCapability(workflow, args.capability);
|
|
61962
|
+
source = "workflow";
|
|
61963
|
+
} else {
|
|
61964
|
+
policy = { mode: "never" };
|
|
61965
|
+
source = "step_type";
|
|
61966
|
+
}
|
|
61967
|
+
const ceilings = args.ceilings ?? { maxAttempts: 10, maxElapsedMs: 86400000 };
|
|
61968
|
+
if (policy.mode === "never")
|
|
61969
|
+
return { policy, source, capped: false };
|
|
61970
|
+
const maxAttempts = Math.min(policy.maxAttempts ?? 3, ceilings.maxAttempts);
|
|
61971
|
+
const capped = maxAttempts !== (policy.maxAttempts ?? 3);
|
|
61972
|
+
return {
|
|
61973
|
+
policy: { ...policy, maxAttempts },
|
|
61974
|
+
source: capped ? "tenant_ceiling" : source,
|
|
61975
|
+
capped
|
|
61976
|
+
};
|
|
61977
|
+
}
|
|
61978
|
+
function policyForCapability(policy, capability) {
|
|
61979
|
+
if (policy.mode === "never")
|
|
61980
|
+
return policy;
|
|
61981
|
+
if (capability.replaySafety === "never")
|
|
61982
|
+
return { mode: "never" };
|
|
61983
|
+
if (capability.hasProviderRequestRetries || capability.automaticCategories.length === 0 || capability.replaySafety === "requires-idempotency") {
|
|
61984
|
+
return { mode: "automatic", maxAttempts: 1 };
|
|
61985
|
+
}
|
|
61986
|
+
return policy;
|
|
61987
|
+
}
|
|
61988
|
+
var RetryCategorySchema, AutomaticRetryPolicySchema, NeverRetryPolicySchema, ResolvedRetryPolicySchema, StepRetryPolicySchema, WorkflowRetryPolicySchema, RetryPolicySourceSchema, RetryTerminalReasonSchema, ExecutionFailureSchema, RetryDecisionSchema, StepRetryCapabilitySchema;
|
|
61989
|
+
var init_retry = __esm(() => {
|
|
61990
|
+
init_zod();
|
|
61991
|
+
RetryCategorySchema = exports_external.enum([
|
|
61992
|
+
"timeout",
|
|
61993
|
+
"rate_limited",
|
|
61994
|
+
"temporarily_unavailable",
|
|
61995
|
+
"invalid_provider_output",
|
|
61996
|
+
"validation",
|
|
61997
|
+
"authentication",
|
|
61998
|
+
"authorization",
|
|
61999
|
+
"not_found",
|
|
62000
|
+
"business",
|
|
62001
|
+
"cancelled",
|
|
62002
|
+
"unknown"
|
|
62003
|
+
]);
|
|
62004
|
+
AutomaticRetryPolicySchema = exports_external.object({
|
|
62005
|
+
mode: exports_external.literal("automatic"),
|
|
62006
|
+
maxAttempts: exports_external.number().int().min(1).max(10).optional()
|
|
62007
|
+
});
|
|
62008
|
+
NeverRetryPolicySchema = exports_external.object({
|
|
62009
|
+
mode: exports_external.literal("never")
|
|
62010
|
+
});
|
|
62011
|
+
ResolvedRetryPolicySchema = exports_external.discriminatedUnion("mode", [
|
|
62012
|
+
AutomaticRetryPolicySchema,
|
|
62013
|
+
NeverRetryPolicySchema
|
|
62014
|
+
]);
|
|
62015
|
+
StepRetryPolicySchema = exports_external.union([
|
|
62016
|
+
exports_external.literal("inherit"),
|
|
62017
|
+
exports_external.literal("automatic"),
|
|
62018
|
+
exports_external.literal("never"),
|
|
62019
|
+
ResolvedRetryPolicySchema
|
|
62020
|
+
]);
|
|
62021
|
+
WorkflowRetryPolicySchema = exports_external.union([
|
|
62022
|
+
exports_external.literal("automatic"),
|
|
62023
|
+
exports_external.literal("never"),
|
|
62024
|
+
ResolvedRetryPolicySchema
|
|
62025
|
+
]);
|
|
62026
|
+
RetryPolicySourceSchema = exports_external.enum(["step", "workflow", "step_type", "tenant_ceiling"]);
|
|
62027
|
+
RetryTerminalReasonSchema = exports_external.enum([
|
|
62028
|
+
"non_retryable",
|
|
62029
|
+
"unsafe_to_replay",
|
|
62030
|
+
"cancelled",
|
|
62031
|
+
"attempts_exhausted",
|
|
62032
|
+
"elapsed_time_exhausted",
|
|
62033
|
+
"retry_after_exceeds_budget",
|
|
62034
|
+
"operator_ceiling"
|
|
62035
|
+
]);
|
|
62036
|
+
ExecutionFailureSchema = exports_external.object({
|
|
62037
|
+
code: exports_external.string().min(1),
|
|
62038
|
+
category: RetryCategorySchema,
|
|
62039
|
+
message: exports_external.string(),
|
|
62040
|
+
transient: exports_external.boolean(),
|
|
62041
|
+
retryAfterMs: exports_external.number().int().nonnegative().optional(),
|
|
62042
|
+
httpStatus: exports_external.number().int().min(100).max(599).optional(),
|
|
62043
|
+
provider: exports_external.string().optional()
|
|
62044
|
+
});
|
|
62045
|
+
RetryDecisionSchema = exports_external.object({
|
|
62046
|
+
retry: exports_external.boolean(),
|
|
62047
|
+
delayMs: exports_external.number().int().nonnegative().optional(),
|
|
62048
|
+
nextAttemptAt: exports_external.coerce.date().optional(),
|
|
62049
|
+
policySource: RetryPolicySourceSchema,
|
|
62050
|
+
terminalReason: RetryTerminalReasonSchema.optional()
|
|
62051
|
+
});
|
|
62052
|
+
StepRetryCapabilitySchema = exports_external.object({
|
|
62053
|
+
replaySafety: exports_external.enum(["safe", "requires-idempotency", "never"]),
|
|
62054
|
+
automaticCategories: exports_external.array(RetryCategorySchema),
|
|
62055
|
+
hasProviderRequestRetries: exports_external.boolean().optional()
|
|
62056
|
+
});
|
|
62057
|
+
});
|
|
62058
|
+
|
|
61942
62059
|
// ../types/src/workflow/steps.ts
|
|
61943
62060
|
function parseStepType(type) {
|
|
61944
62061
|
const [category, operation] = type.split(".");
|
|
@@ -61947,9 +62064,10 @@ function parseStepType(type) {
|
|
|
61947
62064
|
function isStepCategory(type, category) {
|
|
61948
62065
|
return type.startsWith(`${category}.`);
|
|
61949
62066
|
}
|
|
61950
|
-
var AI_STEP_TYPES, TRANSFORM_STEP_TYPES, ACTION_STEP_TYPES, CONTROL_STEP_TYPES, STEP_TYPES, StepTypeValue, StepTypeSchema, BaseStepSchema, AIStepSchema, TransformStepSchema, HttpMethodSchema, ActionStepSchema, WaitStepSchema, FailStepSchema,
|
|
62067
|
+
var AI_STEP_TYPES, TRANSFORM_STEP_TYPES, ACTION_STEP_TYPES, CONTROL_STEP_TYPES, STEP_TYPES, StepTypeValue, StepTypeSchema, BaseStepSchema, ControlContainerBaseStepSchema, AIStepSchema, TransformStepSchema, HttpMethodSchema, ActionStepSchema, WaitStepSchema, FailStepSchema, LegacyBlockStepSchemaInner, IfStepSchemaInner, SwitchCaseSchemaInner, SwitchStepSchemaInner, ParallelBranchSchemaInner, ParallelStepSchemaInner, ForeachStepSchemaInner, ParallelMapStepSchemaInner, StepSchema, LegacyBlockStepSchema, IfStepSchema, SwitchStepSchema, ParallelBranchSchema, ParallelStepSchema, ForeachStepSchema, ParallelMapStepSchema;
|
|
61951
62068
|
var init_steps = __esm(() => {
|
|
61952
62069
|
init_zod();
|
|
62070
|
+
init_retry();
|
|
61953
62071
|
AI_STEP_TYPES = [
|
|
61954
62072
|
"ai.parse",
|
|
61955
62073
|
"ai.extract",
|
|
@@ -61982,7 +62100,6 @@ var init_steps = __esm(() => {
|
|
|
61982
62100
|
"control.parallel",
|
|
61983
62101
|
"control.parallel_map",
|
|
61984
62102
|
"control.wait",
|
|
61985
|
-
"control.block",
|
|
61986
62103
|
"control.fail"
|
|
61987
62104
|
];
|
|
61988
62105
|
STEP_TYPES = [
|
|
@@ -62017,7 +62134,6 @@ var init_steps = __esm(() => {
|
|
|
62017
62134
|
CONTROL_PARALLEL: "control.parallel",
|
|
62018
62135
|
CONTROL_PARALLEL_MAP: "control.parallel_map",
|
|
62019
62136
|
CONTROL_WAIT: "control.wait",
|
|
62020
|
-
CONTROL_BLOCK: "control.block",
|
|
62021
62137
|
CONTROL_FAIL: "control.fail"
|
|
62022
62138
|
};
|
|
62023
62139
|
StepTypeSchema = exports_external.enum(STEP_TYPES);
|
|
@@ -62027,17 +62143,19 @@ var init_steps = __esm(() => {
|
|
|
62027
62143
|
description: exports_external.string().optional(),
|
|
62028
62144
|
if: exports_external.string().optional(),
|
|
62029
62145
|
timeout: exports_external.number().positive().optional(),
|
|
62146
|
+
retry: StepRetryPolicySchema.optional(),
|
|
62030
62147
|
retries: exports_external.number().int().min(0).optional(),
|
|
62031
62148
|
retryDelay: exports_external.number().positive().optional(),
|
|
62032
62149
|
with: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
|
|
62033
|
-
});
|
|
62150
|
+
}).strict();
|
|
62151
|
+
ControlContainerBaseStepSchema = BaseStepSchema.omit({ retry: true });
|
|
62034
62152
|
AIStepSchema = BaseStepSchema.extend({
|
|
62035
62153
|
type: exports_external.enum(AI_STEP_TYPES)
|
|
62036
62154
|
});
|
|
62037
62155
|
TransformStepSchema = BaseStepSchema.extend({
|
|
62038
62156
|
type: exports_external.enum(TRANSFORM_STEP_TYPES)
|
|
62039
62157
|
});
|
|
62040
|
-
HttpMethodSchema = exports_external.enum(["GET", "POST", "PUT", "PATCH", "DELETE"]);
|
|
62158
|
+
HttpMethodSchema = exports_external.enum(["GET", "HEAD", "POST", "PUT", "PATCH", "DELETE"]);
|
|
62041
62159
|
ActionStepSchema = BaseStepSchema.extend({
|
|
62042
62160
|
type: exports_external.enum(ACTION_STEP_TYPES)
|
|
62043
62161
|
});
|
|
@@ -62051,12 +62169,14 @@ var init_steps = __esm(() => {
|
|
|
62051
62169
|
statusCode: exports_external.number().int().min(400).max(599).optional(),
|
|
62052
62170
|
message: exports_external.string().min(1)
|
|
62053
62171
|
});
|
|
62054
|
-
|
|
62172
|
+
LegacyBlockStepSchemaInner = BaseStepSchema.extend({
|
|
62055
62173
|
type: exports_external.literal("control.block"),
|
|
62174
|
+
retries: exports_external.number().int().min(0).optional(),
|
|
62175
|
+
retryDelay: exports_external.number().positive().optional(),
|
|
62056
62176
|
blockName: exports_external.string().min(1),
|
|
62057
62177
|
inputs: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
|
|
62058
62178
|
});
|
|
62059
|
-
IfStepSchemaInner =
|
|
62179
|
+
IfStepSchemaInner = ControlContainerBaseStepSchema.extend({
|
|
62060
62180
|
type: exports_external.literal("control.if"),
|
|
62061
62181
|
condition: exports_external.string(),
|
|
62062
62182
|
then: exports_external.lazy(() => exports_external.array(StepSchema)),
|
|
@@ -62066,7 +62186,7 @@ var init_steps = __esm(() => {
|
|
|
62066
62186
|
when: exports_external.union([exports_external.string(), exports_external.number(), exports_external.boolean()]),
|
|
62067
62187
|
steps: exports_external.lazy(() => exports_external.array(StepSchema))
|
|
62068
62188
|
});
|
|
62069
|
-
SwitchStepSchemaInner =
|
|
62189
|
+
SwitchStepSchemaInner = ControlContainerBaseStepSchema.extend({
|
|
62070
62190
|
type: exports_external.literal("control.switch"),
|
|
62071
62191
|
on: exports_external.string(),
|
|
62072
62192
|
cases: exports_external.array(SwitchCaseSchemaInner),
|
|
@@ -62076,18 +62196,18 @@ var init_steps = __esm(() => {
|
|
|
62076
62196
|
name: exports_external.string().min(1),
|
|
62077
62197
|
steps: exports_external.lazy(() => exports_external.array(StepSchema))
|
|
62078
62198
|
});
|
|
62079
|
-
ParallelStepSchemaInner =
|
|
62199
|
+
ParallelStepSchemaInner = ControlContainerBaseStepSchema.extend({
|
|
62080
62200
|
type: exports_external.literal("control.parallel"),
|
|
62081
62201
|
branches: exports_external.array(ParallelBranchSchemaInner)
|
|
62082
62202
|
});
|
|
62083
|
-
ForeachStepSchemaInner =
|
|
62203
|
+
ForeachStepSchemaInner = ControlContainerBaseStepSchema.extend({
|
|
62084
62204
|
type: exports_external.literal("control.foreach"),
|
|
62085
62205
|
items: exports_external.string(),
|
|
62086
62206
|
as: exports_external.string(),
|
|
62087
62207
|
indexAs: exports_external.string().optional(),
|
|
62088
62208
|
steps: exports_external.lazy(() => exports_external.array(StepSchema))
|
|
62089
62209
|
});
|
|
62090
|
-
ParallelMapStepSchemaInner =
|
|
62210
|
+
ParallelMapStepSchemaInner = ControlContainerBaseStepSchema.extend({
|
|
62091
62211
|
type: exports_external.literal("control.parallel_map"),
|
|
62092
62212
|
items: exports_external.string(),
|
|
62093
62213
|
as: exports_external.string(),
|
|
@@ -62101,14 +62221,14 @@ var init_steps = __esm(() => {
|
|
|
62101
62221
|
ActionStepSchema,
|
|
62102
62222
|
WaitStepSchema,
|
|
62103
62223
|
FailStepSchema,
|
|
62104
|
-
|
|
62224
|
+
LegacyBlockStepSchemaInner,
|
|
62105
62225
|
IfStepSchemaInner,
|
|
62106
62226
|
SwitchStepSchemaInner,
|
|
62107
62227
|
ParallelStepSchemaInner,
|
|
62108
62228
|
ForeachStepSchemaInner,
|
|
62109
62229
|
ParallelMapStepSchemaInner
|
|
62110
62230
|
]));
|
|
62111
|
-
|
|
62231
|
+
LegacyBlockStepSchema = LegacyBlockStepSchemaInner;
|
|
62112
62232
|
IfStepSchema = IfStepSchemaInner;
|
|
62113
62233
|
SwitchStepSchema = SwitchStepSchemaInner;
|
|
62114
62234
|
ParallelBranchSchema = ParallelBranchSchemaInner;
|
|
@@ -62118,6 +62238,9 @@ var init_steps = __esm(() => {
|
|
|
62118
62238
|
});
|
|
62119
62239
|
|
|
62120
62240
|
// ../types/src/workflow/step-configs.ts
|
|
62241
|
+
function getStepRetryCapability(stepType) {
|
|
62242
|
+
return STEP_RETRY_CAPABILITIES[stepType];
|
|
62243
|
+
}
|
|
62121
62244
|
function getStepSchema(stepType) {
|
|
62122
62245
|
return STEP_SCHEMAS[stepType];
|
|
62123
62246
|
}
|
|
@@ -62190,7 +62313,7 @@ function isOutputSchemaUnknown(stepType) {
|
|
|
62190
62313
|
const def = schema._def;
|
|
62191
62314
|
return def?.typeName === "ZodUnknown";
|
|
62192
62315
|
}
|
|
62193
|
-
var AiParseConfigSchema, AiParseOutputSchema, AiExtractConfigSchema, AiExtractOutputSchema, AiSplitConfigSchema, AiSplitOutputSchema, AiSegmentConfigSchema, AiSegmentOutputSchema, AiClassifyConfigSchema, AiClassifyOutputSchema, TransformSetConfigSchema, TransformSetOutputSchema, TransformRemoveConfigSchema, TransformRemoveOutputSchema, TransformCombineConfigSchema, TransformCombineOutputSchema, TransformSplitConfigSchema, TransformSplitOutputSchema, TransformMergeConfigSchema, TransformMergeOutputSchema, TransformTemplateConfigSchema, TransformTemplateOutputSchema, TransformPdfEmbedConfigSchema, TransformPdfEmbedOutputSchema, TransformXlsxToJsonConfigSchema, TransformXlsxToJsonOutputSchema, TransformScriptConfigSchema, TransformScriptOutputSchema, ParsedDocPageSchema, TransformTextChunkerConfigSchema, TransformTextChunkerOutputSchema, RegexNormalizerSchema, RegexFormatSchema, REGEX_FLAGS, RegexFieldSchema, TransformRegexExtractConfigSchema, TransformRegexExtractOutputSchema, ActionHttpConfigSchema, ActionHttpOutputSchema, ActionInvokeWorkflowConfigSchema, ActionInvokeWorkflowOutputSchema, ActionWebsiteReaderConfigSchema, ActionWebsiteReaderOutputSchema, ControlIfConfigSchema, ControlIfOutputSchema, ControlSwitchConfigSchema, ControlSwitchOutputSchema, ControlForeachConfigSchema, ControlForeachOutputSchema, ControlParallelMapConfigSchema, ControlParallelMapOutputSchema, ControlParallelConfigSchema, ControlParallelOutputSchema, ControlWaitConfigSchema, ControlWaitOutputSchema,
|
|
62316
|
+
var AiParseConfigSchema, AiParseOutputSchema, AiExtractConfigSchema, AiExtractOutputSchema, AiSplitConfigSchema, AiSplitOutputSchema, AiSegmentConfigSchema, AiSegmentOutputSchema, AiClassifyConfigSchema, AiClassifyOutputSchema, TransformSetConfigSchema, TransformSetOutputSchema, TransformRemoveConfigSchema, TransformRemoveOutputSchema, TransformCombineConfigSchema, TransformCombineOutputSchema, TransformSplitConfigSchema, TransformSplitOutputSchema, TransformMergeConfigSchema, TransformMergeOutputSchema, TransformTemplateConfigSchema, TransformTemplateOutputSchema, TransformPdfEmbedConfigSchema, TransformPdfEmbedOutputSchema, TransformXlsxToJsonConfigSchema, TransformXlsxToJsonOutputSchema, TransformScriptConfigSchema, TransformScriptOutputSchema, ParsedDocPageSchema, TransformTextChunkerConfigSchema, TransformTextChunkerOutputSchema, RegexNormalizerSchema, RegexFormatSchema, REGEX_FLAGS, RegexFieldSchema, TransformRegexExtractConfigSchema, TransformRegexExtractOutputSchema, ActionHttpConfigSchema, ActionHttpOutputSchema, ActionInvokeWorkflowConfigSchema, ActionInvokeWorkflowOutputSchema, ActionWebsiteReaderConfigSchema, ActionWebsiteReaderOutputSchema, ControlIfConfigSchema, ControlIfOutputSchema, ControlSwitchConfigSchema, ControlSwitchOutputSchema, ControlForeachConfigSchema, ControlForeachOutputSchema, ControlParallelMapConfigSchema, ControlParallelMapOutputSchema, ControlParallelConfigSchema, ControlParallelOutputSchema, ControlWaitConfigSchema, ControlWaitOutputSchema, ControlFailConfigSchema, ControlFailOutputSchema, AI_RETRY_CAPABILITY, DETERMINISTIC_RETRY_CAPABILITY, CONTROL_RETRY_CAPABILITY, FILE_OUTPUT_RETRY_CAPABILITY, STEP_RETRY_CAPABILITIES, STEP_SCHEMAS;
|
|
62194
62317
|
var init_step_configs = __esm(() => {
|
|
62195
62318
|
init_zod();
|
|
62196
62319
|
init_common();
|
|
@@ -62516,7 +62639,7 @@ var init_step_configs = __esm(() => {
|
|
|
62516
62639
|
TransformRegexExtractOutputSchema = exports_external.record(exports_external.string(), exports_external.unknown()).describe("Field name → extracted value (or default), plus `_evidence: { [field]: { pageIndex, matchOffset, raw } }` and `_unmatched: string[]`.");
|
|
62517
62640
|
ActionHttpConfigSchema = exports_external.object({
|
|
62518
62641
|
url: exports_external.string().min(1, "URL is required").describe("Request URL (supports template expressions)"),
|
|
62519
|
-
method: exports_external.enum(["GET", "POST", "PUT", "PATCH", "DELETE"]).default("GET").optional(),
|
|
62642
|
+
method: exports_external.enum(["GET", "HEAD", "POST", "PUT", "PATCH", "DELETE"]).default("GET").optional(),
|
|
62520
62643
|
headers: exports_external.record(exports_external.string(), exports_external.string()).optional().describe("HTTP headers"),
|
|
62521
62644
|
body: exports_external.unknown().optional().describe("Request body (JSON or string)"),
|
|
62522
62645
|
timeout: exports_external.number().positive().default(30000).optional().describe("Timeout in milliseconds"),
|
|
@@ -62530,11 +62653,54 @@ var init_step_configs = __esm(() => {
|
|
|
62530
62653
|
responseCharset: exports_external.string().describe("Charset used to decode the response body (e.g. utf-8, windows-1250)")
|
|
62531
62654
|
});
|
|
62532
62655
|
ActionInvokeWorkflowConfigSchema = exports_external.object({
|
|
62533
|
-
|
|
62656
|
+
workflow: exports_external.string().min(1).optional().describe("Workflow to invoke — definition name or wf_ id (tenant-scoped)"),
|
|
62657
|
+
workflowId: exports_external.string().min(1).optional().describe("Legacy alias for workflow when the value is a wf_ id"),
|
|
62658
|
+
execution: exports_external.enum(["inline", "child"]).optional().describe("inline: run target steps in this execution (default). child: spawn a separate run with lineage."),
|
|
62534
62659
|
input: exports_external.record(exports_external.string(), exports_external.unknown()).optional().describe("Input record keyed by the invoked workflow's declared inputs"),
|
|
62535
|
-
wait: exports_external.boolean().optional().describe("Wait for the invoked workflow to complete and return its output (default: true). Set false for fire-and-forget."),
|
|
62536
|
-
timeout: exports_external.number().optional().describe("Max wait time in ms when waiting (default: 300000)"),
|
|
62537
|
-
pollInterval: exports_external.number().optional().describe("How often to poll status in ms when waiting (default: 1000)")
|
|
62660
|
+
wait: exports_external.boolean().optional().describe("Child mode only. Wait for the invoked workflow to complete and return its output (default: true). Set false for fire-and-forget."),
|
|
62661
|
+
timeout: exports_external.number().optional().describe("Child mode only. Max wait time in ms when waiting (default: 300000)"),
|
|
62662
|
+
pollInterval: exports_external.number().optional().describe("Child mode only. How often to poll status in ms when waiting (default: 1000)")
|
|
62663
|
+
}).superRefine((data, ctx) => {
|
|
62664
|
+
const hasWorkflow = typeof data.workflow === "string" && data.workflow.length > 0;
|
|
62665
|
+
const hasWorkflowId = typeof data.workflowId === "string" && data.workflowId.length > 0;
|
|
62666
|
+
if (hasWorkflow && hasWorkflowId) {
|
|
62667
|
+
ctx.addIssue({
|
|
62668
|
+
code: "custom",
|
|
62669
|
+
message: "Cannot set both workflow and workflowId",
|
|
62670
|
+
path: ["workflow"]
|
|
62671
|
+
});
|
|
62672
|
+
}
|
|
62673
|
+
if (!hasWorkflow && !hasWorkflowId) {
|
|
62674
|
+
ctx.addIssue({
|
|
62675
|
+
code: "custom",
|
|
62676
|
+
message: "workflow or workflowId is required",
|
|
62677
|
+
path: ["workflow"]
|
|
62678
|
+
});
|
|
62679
|
+
}
|
|
62680
|
+
const mode = data.execution === "child" ? "child" : "inline";
|
|
62681
|
+
if (mode === "inline") {
|
|
62682
|
+
if (data.wait === false) {
|
|
62683
|
+
ctx.addIssue({
|
|
62684
|
+
code: "custom",
|
|
62685
|
+
message: "wait: false is not supported with execution: inline",
|
|
62686
|
+
path: ["wait"]
|
|
62687
|
+
});
|
|
62688
|
+
}
|
|
62689
|
+
if (data.timeout !== undefined) {
|
|
62690
|
+
ctx.addIssue({
|
|
62691
|
+
code: "custom",
|
|
62692
|
+
message: "timeout is only supported with execution: child",
|
|
62693
|
+
path: ["timeout"]
|
|
62694
|
+
});
|
|
62695
|
+
}
|
|
62696
|
+
if (data.pollInterval !== undefined) {
|
|
62697
|
+
ctx.addIssue({
|
|
62698
|
+
code: "custom",
|
|
62699
|
+
message: "pollInterval is only supported with execution: child",
|
|
62700
|
+
path: ["pollInterval"]
|
|
62701
|
+
});
|
|
62702
|
+
}
|
|
62703
|
+
}
|
|
62538
62704
|
});
|
|
62539
62705
|
ActionInvokeWorkflowOutputSchema = exports_external.record(exports_external.string(), exports_external.unknown()).describe("When wait is true, the invoked workflow's declared output fields are flattened to the top level alongside a `files` array — reference them as {{ steps.<invoke>.output.<field> }} (there is no `.data` or `.result` wrapper). When wait is false, execution metadata. Call get_workflow_output_schema to see the exact resolved fields.");
|
|
62540
62706
|
ActionWebsiteReaderConfigSchema = exports_external.object({
|
|
@@ -62599,17 +62765,71 @@ var init_step_configs = __esm(() => {
|
|
|
62599
62765
|
ControlWaitOutputSchema = exports_external.object({
|
|
62600
62766
|
waited: exports_external.number().describe("Actual milliseconds waited")
|
|
62601
62767
|
});
|
|
62602
|
-
ControlBlockConfigSchema = exports_external.object({
|
|
62603
|
-
blockName: exports_external.string().min(1, "Block name is required").describe("Name of the block to execute"),
|
|
62604
|
-
inputs: exports_external.record(exports_external.string(), exports_external.unknown()).optional().describe("Input mapping for the block")
|
|
62605
|
-
});
|
|
62606
|
-
ControlBlockOutputSchema = exports_external.record(exports_external.string(), exports_external.unknown()).describe("Output from block's declared output mapping");
|
|
62607
62768
|
ControlFailConfigSchema = exports_external.object({
|
|
62608
62769
|
condition: exports_external.string().optional().describe("Optional LiquidJS expression. When set, the step only fails if this evaluates truthy; when omitted, it always fails when reached (compose with control.if for legacy gating)."),
|
|
62609
62770
|
statusCode: exports_external.number().int().min(400).max(599).default(422).describe("HTTP-style status code returned to the caller (sync runs) and persisted on the execution. Default 422 (Unprocessable Entity)."),
|
|
62610
62771
|
message: exports_external.string().min(1).describe('Human-readable failure message. Supports template expressions, e.g. "Document classified as {{ steps.classify.output.label }}".')
|
|
62611
62772
|
});
|
|
62612
62773
|
ControlFailOutputSchema = exports_external.never().describe("control.fail never produces output — it terminates the workflow when triggered.");
|
|
62774
|
+
AI_RETRY_CAPABILITY = {
|
|
62775
|
+
replaySafety: "safe",
|
|
62776
|
+
automaticCategories: [
|
|
62777
|
+
"timeout",
|
|
62778
|
+
"rate_limited",
|
|
62779
|
+
"temporarily_unavailable",
|
|
62780
|
+
"invalid_provider_output"
|
|
62781
|
+
],
|
|
62782
|
+
hasProviderRequestRetries: true
|
|
62783
|
+
};
|
|
62784
|
+
DETERMINISTIC_RETRY_CAPABILITY = {
|
|
62785
|
+
replaySafety: "safe",
|
|
62786
|
+
automaticCategories: []
|
|
62787
|
+
};
|
|
62788
|
+
CONTROL_RETRY_CAPABILITY = {
|
|
62789
|
+
replaySafety: "never",
|
|
62790
|
+
automaticCategories: []
|
|
62791
|
+
};
|
|
62792
|
+
FILE_OUTPUT_RETRY_CAPABILITY = {
|
|
62793
|
+
replaySafety: "never",
|
|
62794
|
+
automaticCategories: []
|
|
62795
|
+
};
|
|
62796
|
+
STEP_RETRY_CAPABILITIES = {
|
|
62797
|
+
"ai.parse": AI_RETRY_CAPABILITY,
|
|
62798
|
+
"ai.extract": AI_RETRY_CAPABILITY,
|
|
62799
|
+
"ai.split": AI_RETRY_CAPABILITY,
|
|
62800
|
+
"ai.segment": AI_RETRY_CAPABILITY,
|
|
62801
|
+
"ai.classify": AI_RETRY_CAPABILITY,
|
|
62802
|
+
"transform.set": DETERMINISTIC_RETRY_CAPABILITY,
|
|
62803
|
+
"transform.remove": DETERMINISTIC_RETRY_CAPABILITY,
|
|
62804
|
+
"transform.combine": DETERMINISTIC_RETRY_CAPABILITY,
|
|
62805
|
+
"transform.split": DETERMINISTIC_RETRY_CAPABILITY,
|
|
62806
|
+
"transform.merge": DETERMINISTIC_RETRY_CAPABILITY,
|
|
62807
|
+
"transform.template": FILE_OUTPUT_RETRY_CAPABILITY,
|
|
62808
|
+
"transform.pdf-embed": FILE_OUTPUT_RETRY_CAPABILITY,
|
|
62809
|
+
"transform.xlsx-to-json": FILE_OUTPUT_RETRY_CAPABILITY,
|
|
62810
|
+
"transform.script": DETERMINISTIC_RETRY_CAPABILITY,
|
|
62811
|
+
"transform.text-chunker": DETERMINISTIC_RETRY_CAPABILITY,
|
|
62812
|
+
"transform.regex-extract": DETERMINISTIC_RETRY_CAPABILITY,
|
|
62813
|
+
"action.http": {
|
|
62814
|
+
replaySafety: "requires-idempotency",
|
|
62815
|
+
automaticCategories: ["timeout", "rate_limited", "temporarily_unavailable"]
|
|
62816
|
+
},
|
|
62817
|
+
"action.invoke-workflow": {
|
|
62818
|
+
replaySafety: "requires-idempotency",
|
|
62819
|
+
automaticCategories: ["timeout", "temporarily_unavailable"]
|
|
62820
|
+
},
|
|
62821
|
+
"action.website-reader": {
|
|
62822
|
+
replaySafety: "safe",
|
|
62823
|
+
automaticCategories: ["timeout", "rate_limited", "temporarily_unavailable"]
|
|
62824
|
+
},
|
|
62825
|
+
"control.if": CONTROL_RETRY_CAPABILITY,
|
|
62826
|
+
"control.switch": CONTROL_RETRY_CAPABILITY,
|
|
62827
|
+
"control.foreach": CONTROL_RETRY_CAPABILITY,
|
|
62828
|
+
"control.parallel": CONTROL_RETRY_CAPABILITY,
|
|
62829
|
+
"control.parallel_map": CONTROL_RETRY_CAPABILITY,
|
|
62830
|
+
"control.wait": CONTROL_RETRY_CAPABILITY,
|
|
62831
|
+
"control.fail": CONTROL_RETRY_CAPABILITY
|
|
62832
|
+
};
|
|
62613
62833
|
STEP_SCHEMAS = {
|
|
62614
62834
|
"ai.parse": {
|
|
62615
62835
|
type: "ai.parse",
|
|
@@ -62836,15 +63056,6 @@ var init_step_configs = __esm(() => {
|
|
|
62836
63056
|
outputSchema: ControlWaitOutputSchema,
|
|
62837
63057
|
configInWith: false
|
|
62838
63058
|
},
|
|
62839
|
-
"control.block": {
|
|
62840
|
-
type: "control.block",
|
|
62841
|
-
category: "control",
|
|
62842
|
-
name: "Block",
|
|
62843
|
-
description: "Execute a reusable block workflow inline with input/output mapping",
|
|
62844
|
-
configSchema: ControlBlockConfigSchema,
|
|
62845
|
-
outputSchema: ControlBlockOutputSchema,
|
|
62846
|
-
configInWith: false
|
|
62847
|
-
},
|
|
62848
63059
|
"control.fail": {
|
|
62849
63060
|
type: "control.fail",
|
|
62850
63061
|
category: "control",
|
|
@@ -62967,6 +63178,7 @@ var WORKFLOW_NAME_PATTERN, WorkflowNameSchema, WorkflowInputDefSchema, ManualTri
|
|
|
62967
63178
|
var init_workflow = __esm(() => {
|
|
62968
63179
|
init_zod();
|
|
62969
63180
|
init_common();
|
|
63181
|
+
init_retry();
|
|
62970
63182
|
init_steps();
|
|
62971
63183
|
WORKFLOW_NAME_PATTERN = /^[a-z0-9][a-z0-9_-]*$/;
|
|
62972
63184
|
WorkflowNameSchema = exports_external.string().min(1).max(64).regex(WORKFLOW_NAME_PATTERN, 'Workflow name must start with a lowercase letter or digit and contain only lowercase letters, digits, "_" or "-".');
|
|
@@ -63046,12 +63258,13 @@ var init_workflow = __esm(() => {
|
|
|
63046
63258
|
TriggerMethodsSchema = exports_external.array(TriggerMethodSchema).default([{ type: "manual" }]);
|
|
63047
63259
|
WorkflowSettingsSchema = exports_external.object({
|
|
63048
63260
|
timeout: exports_external.number().positive().optional(),
|
|
63261
|
+
retry: WorkflowRetryPolicySchema.optional(),
|
|
63049
63262
|
retries: exports_external.number().int().min(0).optional(),
|
|
63050
63263
|
retryDelay: exports_external.number().positive().optional()
|
|
63051
|
-
});
|
|
63264
|
+
}).strict();
|
|
63052
63265
|
WorkflowDefinitionSchema = exports_external.object({
|
|
63053
63266
|
name: WorkflowNameSchema,
|
|
63054
|
-
kind: exports_external.enum(["workflow"
|
|
63267
|
+
kind: exports_external.enum(["workflow"]).default("workflow").optional(),
|
|
63055
63268
|
version: exports_external.string().default("1.0.0"),
|
|
63056
63269
|
description: exports_external.string().optional(),
|
|
63057
63270
|
enabled: exports_external.boolean().default(true),
|
|
@@ -63251,11 +63464,12 @@ function isFileOutput(value) {
|
|
|
63251
63464
|
function isWorkflowResult(value) {
|
|
63252
63465
|
return value != null && typeof value === "object" && "files" in value && Array.isArray(value.files);
|
|
63253
63466
|
}
|
|
63254
|
-
var WorkflowExecutionStatusSchema3, StepExecutionStatusSchema3, ScopeEntryTypeSchema, ScopeEntrySchema, ScopeStackSchema, StepResultSchema, ExecutionContextSchema, StepInputReferenceSchema, WorkflowExecutionSchema, StepExecutionSchema, ConnectorSchema, WorkflowFileOutputSchema, WorkflowResultSchema;
|
|
63467
|
+
var WorkflowExecutionStatusSchema3, StepExecutionStatusSchema3, ScopeEntryTypeSchema, ScopeEntrySchema, ScopeStackSchema, StepResultSchema, ExecutionContextSchema, StepInputReferenceSchema, WorkflowExecutionSchema, StepExecutionSchema, StepExecutionAttemptSchema, ConnectorSchema, WorkflowFileOutputSchema, WorkflowResultSchema;
|
|
63255
63468
|
var init_execution2 = __esm(() => {
|
|
63256
63469
|
init_zod();
|
|
63257
63470
|
init_common();
|
|
63258
63471
|
init_execution();
|
|
63472
|
+
init_retry();
|
|
63259
63473
|
init_workflow();
|
|
63260
63474
|
WorkflowExecutionStatusSchema3 = WorkflowExecutionStatusSchema2;
|
|
63261
63475
|
StepExecutionStatusSchema3 = StepExecutionStatusSchema2;
|
|
@@ -63266,6 +63480,7 @@ var init_execution2 = __esm(() => {
|
|
|
63266
63480
|
"parallel-branch",
|
|
63267
63481
|
"foreach-iteration",
|
|
63268
63482
|
"parallel-map-iteration",
|
|
63483
|
+
"inline-invoke",
|
|
63269
63484
|
"block"
|
|
63270
63485
|
]);
|
|
63271
63486
|
ScopeEntrySchema = exports_external.object({
|
|
@@ -63315,6 +63530,7 @@ var init_execution2 = __esm(() => {
|
|
|
63315
63530
|
result: exports_external.unknown().nullable(),
|
|
63316
63531
|
error: exports_external.string().nullable(),
|
|
63317
63532
|
priority: exports_external.number().default(50),
|
|
63533
|
+
availableAt: TimestampSchema2,
|
|
63318
63534
|
leaseId: exports_external.string().nullable(),
|
|
63319
63535
|
leaseExpiresAt: TimestampSchema2.nullable(),
|
|
63320
63536
|
workerId: exports_external.string().nullable(),
|
|
@@ -63339,6 +63555,11 @@ var init_execution2 = __esm(() => {
|
|
|
63339
63555
|
scopeHash: exports_external.string(),
|
|
63340
63556
|
executionOrder: exports_external.number(),
|
|
63341
63557
|
stepAttempt: exports_external.number().default(0),
|
|
63558
|
+
stepPath: exports_external.string().nullable().optional(),
|
|
63559
|
+
effectiveRetryPolicy: ResolvedRetryPolicySchema.nullable().optional(),
|
|
63560
|
+
retryPolicySource: RetryPolicySourceSchema.nullable().optional(),
|
|
63561
|
+
latestAttempt: exports_external.number().default(0),
|
|
63562
|
+
nextAttemptAt: TimestampSchema2.nullable().optional(),
|
|
63342
63563
|
inputData: exports_external.unknown().nullable(),
|
|
63343
63564
|
outputData: exports_external.unknown().nullable(),
|
|
63344
63565
|
status: StepExecutionStatusSchema3,
|
|
@@ -63348,6 +63569,21 @@ var init_execution2 = __esm(() => {
|
|
|
63348
63569
|
startedAt: TimestampSchema2.nullable(),
|
|
63349
63570
|
completedAt: TimestampSchema2.nullable()
|
|
63350
63571
|
});
|
|
63572
|
+
StepExecutionAttemptSchema = exports_external.object({
|
|
63573
|
+
id: exports_external.string(),
|
|
63574
|
+
stepExecutionId: exports_external.string(),
|
|
63575
|
+
executionId: exports_external.string(),
|
|
63576
|
+
tenantId: exports_external.string(),
|
|
63577
|
+
attemptNumber: exports_external.number().int().min(1),
|
|
63578
|
+
status: exports_external.enum(["running", "success", "failure", "cancelled"]),
|
|
63579
|
+
resolvedConfig: exports_external.unknown().nullable(),
|
|
63580
|
+
failure: ExecutionFailureSchema.nullable(),
|
|
63581
|
+
retryDecision: RetryDecisionSchema.nullable(),
|
|
63582
|
+
replaySafe: exports_external.boolean().nullable(),
|
|
63583
|
+
startedAt: TimestampSchema2,
|
|
63584
|
+
completedAt: TimestampSchema2.nullable(),
|
|
63585
|
+
durationMs: exports_external.number().nullable()
|
|
63586
|
+
});
|
|
63351
63587
|
ConnectorSchema = exports_external.object({
|
|
63352
63588
|
id: exports_external.string(),
|
|
63353
63589
|
tenantId: exports_external.string(),
|
|
@@ -63448,6 +63684,21 @@ function hasDeclaredOutput(output) {
|
|
|
63448
63684
|
return output.trim().length > 0;
|
|
63449
63685
|
return !!output && Object.keys(output).length > 0;
|
|
63450
63686
|
}
|
|
63687
|
+
function isWorkflowIdRef(ref) {
|
|
63688
|
+
return ref.startsWith("wf_");
|
|
63689
|
+
}
|
|
63690
|
+
function getInvokeExecutionMode(withConfig) {
|
|
63691
|
+
return withConfig?.execution === "child" ? "child" : "inline";
|
|
63692
|
+
}
|
|
63693
|
+
function getInvokeWorkflowRef(withConfig) {
|
|
63694
|
+
const workflow = withConfig?.workflow;
|
|
63695
|
+
if (typeof workflow === "string" && workflow.length > 0)
|
|
63696
|
+
return workflow;
|
|
63697
|
+
const workflowId = withConfig?.workflowId;
|
|
63698
|
+
if (typeof workflowId === "string" && workflowId.length > 0)
|
|
63699
|
+
return workflowId;
|
|
63700
|
+
return;
|
|
63701
|
+
}
|
|
63451
63702
|
function* iterateSteps(steps) {
|
|
63452
63703
|
if (!Array.isArray(steps))
|
|
63453
63704
|
return;
|
|
@@ -63472,23 +63723,51 @@ function* iterateSteps(steps) {
|
|
|
63472
63723
|
}
|
|
63473
63724
|
}
|
|
63474
63725
|
}
|
|
63726
|
+
function collectInvokeWorkflowTargets(definition) {
|
|
63727
|
+
const seen = new Set;
|
|
63728
|
+
const targets = [];
|
|
63729
|
+
for (const step of iterateSteps(definition?.steps)) {
|
|
63730
|
+
if (step.type !== "action.invoke-workflow")
|
|
63731
|
+
continue;
|
|
63732
|
+
const withConfig = step.with;
|
|
63733
|
+
const ref = getInvokeWorkflowRef(withConfig);
|
|
63734
|
+
if (!ref)
|
|
63735
|
+
continue;
|
|
63736
|
+
const key = `${getInvokeExecutionMode(withConfig)}:${ref}`;
|
|
63737
|
+
if (seen.has(key))
|
|
63738
|
+
continue;
|
|
63739
|
+
seen.add(key);
|
|
63740
|
+
targets.push({
|
|
63741
|
+
ref,
|
|
63742
|
+
mode: getInvokeExecutionMode(withConfig),
|
|
63743
|
+
stepName: typeof step.name === "string" ? step.name : undefined
|
|
63744
|
+
});
|
|
63745
|
+
}
|
|
63746
|
+
return targets;
|
|
63747
|
+
}
|
|
63475
63748
|
function collectInvokeWorkflowTargetIds(definition) {
|
|
63476
63749
|
const ids = new Set;
|
|
63477
|
-
for (const
|
|
63478
|
-
if (
|
|
63479
|
-
|
|
63480
|
-
if (typeof id === "string" && id.length > 0)
|
|
63481
|
-
ids.add(id);
|
|
63482
|
-
}
|
|
63750
|
+
for (const { ref } of collectInvokeWorkflowTargets(definition)) {
|
|
63751
|
+
if (isWorkflowIdRef(ref))
|
|
63752
|
+
ids.add(ref);
|
|
63483
63753
|
}
|
|
63484
63754
|
return [...ids];
|
|
63485
63755
|
}
|
|
63756
|
+
function collectInvokeWorkflowTargetNames(definition) {
|
|
63757
|
+
const names = new Set;
|
|
63758
|
+
for (const { ref } of collectInvokeWorkflowTargets(definition)) {
|
|
63759
|
+
if (!isWorkflowIdRef(ref))
|
|
63760
|
+
names.add(ref);
|
|
63761
|
+
}
|
|
63762
|
+
return [...names];
|
|
63763
|
+
}
|
|
63486
63764
|
|
|
63487
63765
|
// ../types/src/workflow/index.ts
|
|
63488
63766
|
var init_workflow2 = __esm(() => {
|
|
63489
63767
|
init_step_configs();
|
|
63490
63768
|
init_actions();
|
|
63491
63769
|
init_steps();
|
|
63770
|
+
init_retry();
|
|
63492
63771
|
init_workflow();
|
|
63493
63772
|
init_expected_output();
|
|
63494
63773
|
init_local_meta();
|
|
@@ -64969,8 +65248,6 @@ function workflowMethodEnabled(methods, type) {
|
|
|
64969
65248
|
return methods.some((method) => method.type === type);
|
|
64970
65249
|
}
|
|
64971
65250
|
function triggersFromWorkflowDefinition(definition) {
|
|
64972
|
-
if (definition.kind === "block")
|
|
64973
|
-
return [];
|
|
64974
65251
|
const methods = getTriggerMethods(definition);
|
|
64975
65252
|
return [
|
|
64976
65253
|
{ type: "api", enabled: workflowMethodEnabled(methods, "api") },
|
|
@@ -66149,6 +66426,7 @@ __export(exports_src, {
|
|
|
66149
66426
|
runExpandErrorMessage: () => runExpandErrorMessage,
|
|
66150
66427
|
rootS3Path: () => rootS3Path,
|
|
66151
66428
|
resolveWorkflowPassThreshold: () => resolveWorkflowPassThreshold,
|
|
66429
|
+
resolveRetryPolicy: () => resolveRetryPolicy,
|
|
66152
66430
|
resolveEffectiveMimeType: () => resolveEffectiveMimeType,
|
|
66153
66431
|
resolveAgentOriginalSourceRef: () => resolveAgentOriginalSourceRef,
|
|
66154
66432
|
requiresSpecializedParser: () => requiresSpecializedParser,
|
|
@@ -66179,6 +66457,7 @@ __export(exports_src, {
|
|
|
66179
66457
|
judgeScoreJson: () => judgeScoreJson,
|
|
66180
66458
|
judgeLabelJson: () => judgeLabelJson,
|
|
66181
66459
|
isWorkflowResult: () => isWorkflowResult,
|
|
66460
|
+
isWorkflowIdRef: () => isWorkflowIdRef,
|
|
66182
66461
|
isTerminalExecutionStatus: () => isTerminalExecutionStatus,
|
|
66183
66462
|
isStepCategory: () => isStepCategory,
|
|
66184
66463
|
isScopedFileRef: () => isScopedFileRef,
|
|
@@ -66206,11 +66485,14 @@ __export(exports_src, {
|
|
|
66206
66485
|
getTriggerMethods: () => getTriggerMethods,
|
|
66207
66486
|
getSupportedFormatsLabel: () => getSupportedFormatsLabel,
|
|
66208
66487
|
getStepSchema: () => getStepSchema,
|
|
66488
|
+
getStepRetryCapability: () => getStepRetryCapability,
|
|
66209
66489
|
getStepOutputSchema: () => getStepOutputSchema,
|
|
66210
66490
|
getStepConfigSchema: () => getStepConfigSchema,
|
|
66211
66491
|
getRequiredOutputKeys: () => getRequiredOutputKeys,
|
|
66212
66492
|
getProcessorSchemas: () => getProcessorSchemas,
|
|
66213
66493
|
getParserCategory: () => getParserCategory,
|
|
66494
|
+
getInvokeWorkflowRef: () => getInvokeWorkflowRef,
|
|
66495
|
+
getInvokeExecutionMode: () => getInvokeExecutionMode,
|
|
66214
66496
|
getConfigSchema: () => getConfigSchema,
|
|
66215
66497
|
getConfigFieldMetadata: () => getConfigFieldMetadata,
|
|
66216
66498
|
getConfigDefaults: () => getConfigDefaults,
|
|
@@ -66246,6 +66528,8 @@ __export(exports_src, {
|
|
|
66246
66528
|
compareExpectedValues: () => compareExpectedValues,
|
|
66247
66529
|
compareExpectedError: () => compareExpectedError,
|
|
66248
66530
|
combineEvalScores: () => combineEvalScores,
|
|
66531
|
+
collectInvokeWorkflowTargets: () => collectInvokeWorkflowTargets,
|
|
66532
|
+
collectInvokeWorkflowTargetNames: () => collectInvokeWorkflowTargetNames,
|
|
66249
66533
|
collectInvokeWorkflowTargetIds: () => collectInvokeWorkflowTargetIds,
|
|
66250
66534
|
collectFileReferenceSentinels: () => collectFileReferenceSentinels,
|
|
66251
66535
|
coerceInput: () => coerceInput,
|
|
@@ -66266,6 +66550,7 @@ __export(exports_src, {
|
|
|
66266
66550
|
WorkspaceDependencySchema: () => WorkspaceDependencySchema,
|
|
66267
66551
|
WorkspaceDependencyNameSchema: () => WorkspaceDependencyNameSchema,
|
|
66268
66552
|
WorkflowSettingsSchema: () => WorkflowSettingsSchema,
|
|
66553
|
+
WorkflowRetryPolicySchema: () => WorkflowRetryPolicySchema,
|
|
66269
66554
|
WorkflowResultSchema: () => WorkflowResultSchema,
|
|
66270
66555
|
WorkflowPackageManifestSchema: () => WorkflowPackageManifestSchema,
|
|
66271
66556
|
WorkflowNameSchema: () => WorkflowNameSchema,
|
|
@@ -66319,11 +66604,14 @@ __export(exports_src, {
|
|
|
66319
66604
|
StepTypeValue: () => StepTypeValue,
|
|
66320
66605
|
StepTypeSchema: () => StepTypeSchema,
|
|
66321
66606
|
StepSchema: () => StepSchema,
|
|
66607
|
+
StepRetryPolicySchema: () => StepRetryPolicySchema,
|
|
66608
|
+
StepRetryCapabilitySchema: () => StepRetryCapabilitySchema,
|
|
66322
66609
|
StepResultSchema: () => StepResultSchema,
|
|
66323
66610
|
StepInputReferenceSchema: () => StepInputReferenceSchema,
|
|
66324
66611
|
StepExecutionStatusValue: () => StepExecutionStatusValue,
|
|
66325
66612
|
StepExecutionStatusSchema: () => StepExecutionStatusSchema,
|
|
66326
66613
|
StepExecutionSchema: () => StepExecutionSchema,
|
|
66614
|
+
StepExecutionAttemptSchema: () => StepExecutionAttemptSchema,
|
|
66327
66615
|
SplitOutputSchema: () => SplitOutputSchema,
|
|
66328
66616
|
SplitInputSchema: () => SplitInputSchema,
|
|
66329
66617
|
SplitConfigSchema: () => SplitConfigSchema,
|
|
@@ -66353,6 +66641,7 @@ __export(exports_src, {
|
|
|
66353
66641
|
ScopeEntrySchema: () => ScopeEntrySchema,
|
|
66354
66642
|
STEP_TYPES: () => STEP_TYPES,
|
|
66355
66643
|
STEP_SCHEMAS: () => STEP_SCHEMAS,
|
|
66644
|
+
STEP_RETRY_CAPABILITIES: () => STEP_RETRY_CAPABILITIES,
|
|
66356
66645
|
STEP_EXECUTION_STATUSES: () => STEP_EXECUTION_STATUSES,
|
|
66357
66646
|
SOURCE_VERSION_RANGE_PATTERN: () => SOURCE_VERSION_RANGE_PATTERN,
|
|
66358
66647
|
SOURCE_SEMVER_PATTERN: () => SOURCE_SEMVER_PATTERN,
|
|
@@ -66370,6 +66659,11 @@ __export(exports_src, {
|
|
|
66370
66659
|
RunTargetSchema: () => RunTargetSchema,
|
|
66371
66660
|
RunTargetObjectSchema: () => RunTargetObjectSchema,
|
|
66372
66661
|
RootSourceManifestSchema: () => RootSourceManifestSchema,
|
|
66662
|
+
RetryTerminalReasonSchema: () => RetryTerminalReasonSchema,
|
|
66663
|
+
RetryPolicySourceSchema: () => RetryPolicySourceSchema,
|
|
66664
|
+
RetryDecisionSchema: () => RetryDecisionSchema,
|
|
66665
|
+
RetryCategorySchema: () => RetryCategorySchema,
|
|
66666
|
+
ResolvedRetryPolicySchema: () => ResolvedRetryPolicySchema,
|
|
66373
66667
|
ResolvedProcessorFileSchema: () => ResolvedProcessorFileSchema,
|
|
66374
66668
|
ReleaseTagSchema: () => ReleaseTagSchema,
|
|
66375
66669
|
RUN_TARGET_SEGMENT_PATTERN: () => RUN_TARGET_SEGMENT_PATTERN,
|
|
@@ -66415,6 +66709,7 @@ __export(exports_src, {
|
|
|
66415
66709
|
LocalAgentResourceDirectorySchema: () => LocalAgentResourceDirectorySchema,
|
|
66416
66710
|
LlmJudgeConfigSchema: () => LlmJudgeConfigSchema,
|
|
66417
66711
|
LegacyFileIdInputSchema: () => LegacyFileIdInputSchema,
|
|
66712
|
+
LegacyBlockStepSchema: () => LegacyBlockStepSchema,
|
|
66418
66713
|
LayoutElementTypeSchema: () => LayoutElementTypeSchema,
|
|
66419
66714
|
LayoutElementSchema: () => LayoutElementSchema,
|
|
66420
66715
|
LLM_JUDGE_PROMPT_MIN_LENGTH: () => LLM_JUDGE_PROMPT_MIN_LENGTH,
|
|
@@ -66452,6 +66747,7 @@ __export(exports_src, {
|
|
|
66452
66747
|
ExpectedDocumentRefSchema: () => ExpectedDocumentRefSchema,
|
|
66453
66748
|
ExecutionTypeValue: () => ExecutionTypeValue,
|
|
66454
66749
|
ExecutionTypeSchema: () => ExecutionTypeSchema,
|
|
66750
|
+
ExecutionFailureSchema: () => ExecutionFailureSchema,
|
|
66455
66751
|
ExecutionContextSchema: () => ExecutionContextSchema,
|
|
66456
66752
|
ExactDiffConfigSchema: () => ExactDiffConfigSchema,
|
|
66457
66753
|
EvaluatorsImportRequestSchema: () => EvaluatorsImportRequestSchema,
|
|
@@ -66520,8 +66816,6 @@ __export(exports_src, {
|
|
|
66520
66816
|
ControlForeachConfigSchema: () => ControlForeachConfigSchema,
|
|
66521
66817
|
ControlFailOutputSchema: () => ControlFailOutputSchema,
|
|
66522
66818
|
ControlFailConfigSchema: () => ControlFailConfigSchema,
|
|
66523
|
-
ControlBlockOutputSchema: () => ControlBlockOutputSchema,
|
|
66524
|
-
ControlBlockConfigSchema: () => ControlBlockConfigSchema,
|
|
66525
66819
|
ConnectorSchema: () => ConnectorSchema,
|
|
66526
66820
|
ClassifyOutputSchema: () => ClassifyOutputSchema,
|
|
66527
66821
|
ClassifyLabelSchema: () => ClassifyLabelSchema,
|
|
@@ -66532,7 +66826,6 @@ __export(exports_src, {
|
|
|
66532
66826
|
CUSTOM_SCRIPT_MAX_BYTES: () => CUSTOM_SCRIPT_MAX_BYTES,
|
|
66533
66827
|
CUSTOM_SCRIPT_CONTRACT: () => CUSTOM_SCRIPT_CONTRACT,
|
|
66534
66828
|
BoundingRegionSchema: () => BoundingRegionSchema,
|
|
66535
|
-
BlockStepSchema: () => BlockStepSchema,
|
|
66536
66829
|
BaseEntitySchema: () => BaseEntitySchema,
|
|
66537
66830
|
BUILTIN_FILE_SOURCE_DESCRIPTORS: () => BUILTIN_FILE_SOURCE_DESCRIPTORS,
|
|
66538
66831
|
AutomationTargetSchema: () => AutomationTargetSchema,
|
|
@@ -181287,7 +181580,7 @@ import { fileURLToPath as fileURLToPath8 } from "url";
|
|
|
181287
181580
|
// package.json
|
|
181288
181581
|
var package_default = {
|
|
181289
181582
|
name: "@eigenpal/cli",
|
|
181290
|
-
version: "0.10.
|
|
181583
|
+
version: "0.10.20",
|
|
181291
181584
|
description: "Eigenpal CLI — author and run document workflows from your terminal. Agent-ready.",
|
|
181292
181585
|
keywords: [
|
|
181293
181586
|
"eigenpal",
|
|
@@ -189348,6 +189641,11 @@ function parseWorkflow(yaml) {
|
|
|
189348
189641
|
throw new YamlParseError(`Invalid YAML: ${message}`);
|
|
189349
189642
|
}
|
|
189350
189643
|
const upgraded = upgradeWorkflow(parsed);
|
|
189644
|
+
const deprecatedIssues = collectDeprecatedBlockIssues(upgraded);
|
|
189645
|
+
if (deprecatedIssues.length > 0) {
|
|
189646
|
+
const errorMessages = deprecatedIssues.map((e8) => `${e8.path.join(".")}: ${e8.message}`).join("; ");
|
|
189647
|
+
throw new WorkflowValidationError(`Invalid workflow definition: ${errorMessages}`, deprecatedIssues);
|
|
189648
|
+
}
|
|
189351
189649
|
const result = WorkflowDefinitionSchema.safeParse(upgraded);
|
|
189352
189650
|
if (!result.success) {
|
|
189353
189651
|
const validationIssues = result.error.issues.map((e8) => ({
|
|
@@ -189365,11 +189663,83 @@ function parseWorkflow(yaml) {
|
|
|
189365
189663
|
}
|
|
189366
189664
|
return result.data;
|
|
189367
189665
|
}
|
|
189666
|
+
function collectDeprecatedBlockIssues(definition) {
|
|
189667
|
+
const issues = [];
|
|
189668
|
+
if (definition.kind === "block") {
|
|
189669
|
+
issues.push({
|
|
189670
|
+
path: ["kind"],
|
|
189671
|
+
message: "kind: block was removed. Define a regular workflow and invoke it with action.invoke-workflow (execution: inline).",
|
|
189672
|
+
code: "deprecated_kind_block"
|
|
189673
|
+
});
|
|
189674
|
+
}
|
|
189675
|
+
function walkSteps(steps, pathPrefix) {
|
|
189676
|
+
if (!Array.isArray(steps))
|
|
189677
|
+
return;
|
|
189678
|
+
for (let i5 = 0;i5 < steps.length; i5++) {
|
|
189679
|
+
const raw = steps[i5];
|
|
189680
|
+
if (!raw || typeof raw !== "object")
|
|
189681
|
+
continue;
|
|
189682
|
+
const step = raw;
|
|
189683
|
+
const stepPath = [...pathPrefix, i5];
|
|
189684
|
+
if (step.type === "control.block") {
|
|
189685
|
+
issues.push({
|
|
189686
|
+
path: [...stepPath, "type"],
|
|
189687
|
+
message: "control.block was removed. Use action.invoke-workflow with execution: inline and workflow set to the target name or wf_ id.",
|
|
189688
|
+
code: "deprecated_control_block"
|
|
189689
|
+
});
|
|
189690
|
+
}
|
|
189691
|
+
for (const [key2, value] of Object.entries(step)) {
|
|
189692
|
+
if (!Array.isArray(value))
|
|
189693
|
+
continue;
|
|
189694
|
+
for (let j11 = 0;j11 < value.length; j11++) {
|
|
189695
|
+
const item = value[j11];
|
|
189696
|
+
if (!item || typeof item !== "object")
|
|
189697
|
+
continue;
|
|
189698
|
+
const obj = item;
|
|
189699
|
+
if ("type" in obj) {
|
|
189700
|
+
walkSteps([obj], [...stepPath, key2]);
|
|
189701
|
+
} else if (Array.isArray(obj.steps)) {
|
|
189702
|
+
walkSteps(obj.steps, [...stepPath, key2, j11, "steps"]);
|
|
189703
|
+
}
|
|
189704
|
+
}
|
|
189705
|
+
}
|
|
189706
|
+
if (Array.isArray(step.then))
|
|
189707
|
+
walkSteps(step.then, [...stepPath, "then"]);
|
|
189708
|
+
if (Array.isArray(step.else))
|
|
189709
|
+
walkSteps(step.else, [...stepPath, "else"]);
|
|
189710
|
+
if (Array.isArray(step.steps))
|
|
189711
|
+
walkSteps(step.steps, [...stepPath, "steps"]);
|
|
189712
|
+
if (Array.isArray(step.default))
|
|
189713
|
+
walkSteps(step.default, [...stepPath, "default"]);
|
|
189714
|
+
if (Array.isArray(step.cases)) {
|
|
189715
|
+
for (let j11 = 0;j11 < step.cases.length; j11++) {
|
|
189716
|
+
const c7 = step.cases[j11];
|
|
189717
|
+
if (Array.isArray(c7?.steps)) {
|
|
189718
|
+
walkSteps(c7.steps, [...stepPath, "cases", j11, "steps"]);
|
|
189719
|
+
}
|
|
189720
|
+
}
|
|
189721
|
+
}
|
|
189722
|
+
if (Array.isArray(step.branches)) {
|
|
189723
|
+
for (let j11 = 0;j11 < step.branches.length; j11++) {
|
|
189724
|
+
const b8 = step.branches[j11];
|
|
189725
|
+
if (Array.isArray(b8?.steps)) {
|
|
189726
|
+
walkSteps(b8.steps, [...stepPath, "branches", j11, "steps"]);
|
|
189727
|
+
}
|
|
189728
|
+
}
|
|
189729
|
+
}
|
|
189730
|
+
}
|
|
189731
|
+
}
|
|
189732
|
+
walkSteps(definition.steps, ["steps"]);
|
|
189733
|
+
return issues;
|
|
189734
|
+
}
|
|
189368
189735
|
function validateStepConfigsRecursive(steps, pathPrefix) {
|
|
189369
189736
|
const issues = [];
|
|
189370
189737
|
for (let i5 = 0;i5 < steps.length; i5++) {
|
|
189371
189738
|
const step = steps[i5];
|
|
189372
189739
|
const stepPath = [...pathPrefix, i5];
|
|
189740
|
+
if (step.type === "control.block") {
|
|
189741
|
+
continue;
|
|
189742
|
+
}
|
|
189373
189743
|
const schemaDef = getStepSchema(step.type);
|
|
189374
189744
|
if (schemaDef?.configInWith) {
|
|
189375
189745
|
const cfg = step.with ?? {};
|
|
@@ -25,7 +25,7 @@ implement at runtime. Server-side validation errors point you here.
|
|
|
25
25
|
- `transform.*` — deterministic data transforms (set, remove, combine, split, merge,
|
|
26
26
|
script, template, pdf-embed, xlsx-to-json). WASM sandboxed where applicable.
|
|
27
27
|
- `action.*` — external side effects (HTTP, invoke another workflow, website reader).
|
|
28
|
-
- `control.*` — flow control (if, foreach, parallel, parallel_map, wait,
|
|
28
|
+
- `control.*` — flow control (if, foreach, parallel, parallel_map, wait, fail).
|
|
29
29
|
|
|
30
30
|
The full per-type catalog with field tables is auto-generated below from
|
|
31
31
|
`STEP_SCHEMAS`. The high-level map above tells you which family you want;
|
|
@@ -105,7 +105,7 @@ Reference user-supplied schema fields the same way:
|
|
|
105
105
|
## Control containers — nested step shape and scoping
|
|
106
106
|
|
|
107
107
|
`control.parallel`, `control.parallel_map`, `control.foreach`, `control.if`,
|
|
108
|
-
and `
|
|
108
|
+
and inline `action.invoke-workflow` (`execution: inline`) contain nested steps. The auto-generated catalog below
|
|
109
109
|
cannot render that shape, so the YAML form lives here. Same for the scoping
|
|
110
110
|
rules — important because the runtime treats nested steps differently from
|
|
111
111
|
top-level ones, and getting the access path wrong silently returns
|
|
@@ -285,19 +285,23 @@ scopes), but the template breaks the moment the OTHER branch runs. Use
|
|
|
285
285
|
`steps.<if>.output.result` so the access is branch-agnostic — or compute
|
|
286
286
|
the final shape in a trailing `transform.script` that handles both cases.
|
|
287
287
|
|
|
288
|
-
### `
|
|
288
|
+
### `action.invoke-workflow` (inline) — call another workflow in the same run
|
|
289
289
|
|
|
290
290
|
```yaml
|
|
291
291
|
- name: invoice-flow
|
|
292
|
-
type:
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
292
|
+
type: action.invoke-workflow
|
|
293
|
+
with:
|
|
294
|
+
workflow: parse-invoice # target workflow name or wf_ id
|
|
295
|
+
execution: inline # default; omit for same-run execution
|
|
296
|
+
input:
|
|
297
|
+
contract: '{{ input.contract }}'
|
|
296
298
|
```
|
|
297
299
|
|
|
298
|
-
**Access the output:** the
|
|
299
|
-
top-level keys under `steps.<this-step>.output
|
|
300
|
-
|
|
300
|
+
**Access the output:** the target's declared output fields are exposed as
|
|
301
|
+
top-level keys under `steps.<this-step>.output`, with a `files` array alongside.
|
|
302
|
+
Invoked workflow steps run in an isolated scope inside the parent run.
|
|
303
|
+
|
|
304
|
+
For a separate child run (lineage, fire-and-forget, polling), set `execution: child`.
|
|
301
305
|
|
|
302
306
|
## Classify-and-fail pattern
|
|
303
307
|
|
|
@@ -354,6 +358,8 @@ _Generated from `STEP_SCHEMAS` in `@eigenpal/types/src/workflow/step-configs.ts`
|
|
|
354
358
|
|
|
355
359
|
Extract text from documents (PDF, DOCX, images) using OCR or vision models
|
|
356
360
|
|
|
361
|
+
**Durable retry:** Provider request retries are separate; the workflow engine does not durably retry this step.
|
|
362
|
+
|
|
357
363
|
**Config** (in `step.with`):
|
|
358
364
|
|
|
359
365
|
| Field | Type | Required | Default | Description |
|
|
@@ -382,6 +388,8 @@ Extract text from documents (PDF, DOCX, images) using OCR or vision models
|
|
|
382
388
|
|
|
383
389
|
Extract structured data from text using AI with a JSON schema
|
|
384
390
|
|
|
391
|
+
**Durable retry:** Provider request retries are separate; the workflow engine does not durably retry this step.
|
|
392
|
+
|
|
385
393
|
**Config** (in `step.with`):
|
|
386
394
|
|
|
387
395
|
| Field | Type | Required | Default | Description |
|
|
@@ -405,6 +413,8 @@ Extract structured data from text using AI with a JSON schema
|
|
|
405
413
|
|
|
406
414
|
Split a parsed document into named sections using an LLM. Consumes ai.parse output; emits per-section page ranges and text ready for downstream ai.extract via control.parallel_map.
|
|
407
415
|
|
|
416
|
+
**Durable retry:** Provider request retries are separate; the workflow engine does not durably retry this step.
|
|
417
|
+
|
|
408
418
|
**Config** (in `step.with`):
|
|
409
419
|
|
|
410
420
|
| Field | Type | Required | Default | Description |
|
|
@@ -425,6 +435,8 @@ Split a parsed document into named sections using an LLM. Consumes ai.parse outp
|
|
|
425
435
|
|
|
426
436
|
Separate a concatenated batch (one big scan) into typed document instances using an LLM. Consumes ai.parse output and a type taxonomy; discovers an unknown number of documents in any order and emits per-document page ranges + text + type, ready for type-specific ai.extract via control.parallel_map. The inverse of ai.split.
|
|
427
437
|
|
|
438
|
+
**Durable retry:** Provider request retries are separate; the workflow engine does not durably retry this step.
|
|
439
|
+
|
|
428
440
|
**Config** (in `step.with`):
|
|
429
441
|
|
|
430
442
|
| Field | Type | Required | Default | Description |
|
|
@@ -446,6 +458,8 @@ Separate a concatenated batch (one big scan) into typed document instances using
|
|
|
446
458
|
|
|
447
459
|
Classify a document or text into one of a fixed label set using an LLM. Output exposes the picked label (constrained to the configured names), a coarse confidence, and a short justification. Pair with control.fail to reject documents that match an undesired label.
|
|
448
460
|
|
|
461
|
+
**Durable retry:** Provider request retries are separate; the workflow engine does not durably retry this step.
|
|
462
|
+
|
|
449
463
|
**Config** (in `step.with`):
|
|
450
464
|
|
|
451
465
|
| Field | Type | Required | Default | Description |
|
|
@@ -471,6 +485,8 @@ Classify a document or text into one of a fixed label set using an LLM. Output e
|
|
|
471
485
|
|
|
472
486
|
Set key-value pairs in the output object
|
|
473
487
|
|
|
488
|
+
**Durable retry:** Transforms, including those that write files, are not durably retried.
|
|
489
|
+
|
|
474
490
|
**Config** (in `step.with`):
|
|
475
491
|
|
|
476
492
|
| Field | Type | Required | Default | Description |
|
|
@@ -486,6 +502,8 @@ Set key-value pairs in the output object
|
|
|
486
502
|
|
|
487
503
|
Remove specified fields from an object
|
|
488
504
|
|
|
505
|
+
**Durable retry:** Transforms, including those that write files, are not durably retried.
|
|
506
|
+
|
|
489
507
|
**Config** (in `step.with`):
|
|
490
508
|
|
|
491
509
|
| Field | Type | Required | Default | Description |
|
|
@@ -501,6 +519,8 @@ Remove specified fields from an object
|
|
|
501
519
|
|
|
502
520
|
Merge multiple objects or concatenate arrays
|
|
503
521
|
|
|
522
|
+
**Durable retry:** Transforms, including those that write files, are not durably retried.
|
|
523
|
+
|
|
504
524
|
**Config** (in `step.with`):
|
|
505
525
|
|
|
506
526
|
| Field | Type | Required | Default | Description |
|
|
@@ -517,6 +537,8 @@ Merge multiple objects or concatenate arrays
|
|
|
517
537
|
|
|
518
538
|
Split a string by delimiter or extract keys from an object
|
|
519
539
|
|
|
540
|
+
**Durable retry:** Transforms, including those that write files, are not durably retried.
|
|
541
|
+
|
|
520
542
|
**Config** (in `step.with`):
|
|
521
543
|
|
|
522
544
|
| Field | Type | Required | Default | Description |
|
|
@@ -536,6 +558,8 @@ Split a string by delimiter or extract keys from an object
|
|
|
536
558
|
|
|
537
559
|
Merge multiple named inputs into a single output
|
|
538
560
|
|
|
561
|
+
**Durable retry:** Transforms, including those that write files, are not durably retried.
|
|
562
|
+
|
|
539
563
|
**Config** (in `step.with`):
|
|
540
564
|
|
|
541
565
|
| Field | Type | Required | Default | Description |
|
|
@@ -555,6 +579,8 @@ Merge multiple named inputs into a single output
|
|
|
555
579
|
|
|
556
580
|
Fill a DOCX template with data from previous steps. Select a template in the workflow builder or provide a template ID from your workspace.
|
|
557
581
|
|
|
582
|
+
**Durable retry:** Transforms, including those that write files, are not durably retried.
|
|
583
|
+
|
|
558
584
|
**Config** (in `step.with`):
|
|
559
585
|
|
|
560
586
|
| Field | Type | Required | Default | Description |
|
|
@@ -575,6 +601,8 @@ Fill a DOCX template with data from previous steps. Select a template in the wor
|
|
|
575
601
|
|
|
576
602
|
Embed OCR text layer into scanned PDFs/images to make them searchable
|
|
577
603
|
|
|
604
|
+
**Durable retry:** Transforms, including those that write files, are not durably retried.
|
|
605
|
+
|
|
578
606
|
**Config** (in `step.with`):
|
|
579
607
|
|
|
580
608
|
| Field | Type | Required | Default | Description |
|
|
@@ -597,6 +625,8 @@ Embed OCR text layer into scanned PDFs/images to make them searchable
|
|
|
597
625
|
|
|
598
626
|
Convert XLSX spreadsheet to JSON array of row objects for use in scripts or downstream steps
|
|
599
627
|
|
|
628
|
+
**Durable retry:** Transforms, including those that write files, are not durably retried.
|
|
629
|
+
|
|
600
630
|
**Config** (in `step.with`):
|
|
601
631
|
|
|
602
632
|
| Field | Type | Required | Default | Description |
|
|
@@ -617,6 +647,8 @@ Convert XLSX spreadsheet to JSON array of row objects for use in scripts or down
|
|
|
617
647
|
|
|
618
648
|
Execute a TypeScript function in a QuickJS sandbox. Input keys become the function's parameter list, in declaration order, and the required `: R` return-type annotation IS this step's output schema: `inputs: { items, taxRate }` ⇒ `function script(items: …, taxRate: …): R { … }`.
|
|
619
649
|
|
|
650
|
+
**Durable retry:** Transforms, including those that write files, are not durably retried.
|
|
651
|
+
|
|
620
652
|
**Config** (in `step.with`):
|
|
621
653
|
|
|
622
654
|
| Field | Type | Required | Default | Description |
|
|
@@ -634,6 +666,8 @@ Execute a TypeScript function in a QuickJS sandbox. Input keys become the functi
|
|
|
634
666
|
|
|
635
667
|
Split long text into chunks with regex-anchored boundaries, overlap, and header preservation. Accepts raw text or a parsed-document object; chunks carry source page indexes when pages are provided.
|
|
636
668
|
|
|
669
|
+
**Durable retry:** Transforms, including those that write files, are not durably retried.
|
|
670
|
+
|
|
637
671
|
**Config** (in `step.with`):
|
|
638
672
|
|
|
639
673
|
| Field | Type | Required | Default | Description |
|
|
@@ -657,6 +691,8 @@ Split long text into chunks with regex-anchored boundaries, overlap, and header
|
|
|
657
691
|
|
|
658
692
|
Pull named fields from text via regex patterns (deterministic counterpart to ai.extract). Accepts raw text or a parsed-document object; matches carry `_evidence.pageIndex` when pages are provided.
|
|
659
693
|
|
|
694
|
+
**Durable retry:** Transforms, including those that write files, are not durably retried.
|
|
695
|
+
|
|
660
696
|
**Config** (in `step.with`):
|
|
661
697
|
|
|
662
698
|
| Field | Type | Required | Default | Description |
|
|
@@ -676,12 +712,14 @@ Pull named fields from text via regex patterns (deterministic counterpart to ai.
|
|
|
676
712
|
|
|
677
713
|
Make an HTTP request to an external API
|
|
678
714
|
|
|
715
|
+
**Durable retry:** HTTP `GET` and `HEAD` can durably retry transient timeout, rate limits, selected retryable server failures failures. Other methods are not replayed.
|
|
716
|
+
|
|
679
717
|
**Config** (in `step.with`):
|
|
680
718
|
|
|
681
719
|
| Field | Type | Required | Default | Description |
|
|
682
720
|
| --- | --- | --- | --- | --- |
|
|
683
721
|
| `url` | string | yes | | Request URL (supports template expressions) |
|
|
684
|
-
| `method` | `"GET"` \| `"POST"` \| `"PUT"` \| `"PATCH"` \| `"DELETE"` | no | `"GET"` | |
|
|
722
|
+
| `method` | `"GET"` \| `"HEAD"` \| `"POST"` \| `"PUT"` \| `"PATCH"` \| `"DELETE"` | no | `"GET"` | |
|
|
685
723
|
| `headers` | record<string, string> | no | | HTTP headers |
|
|
686
724
|
| `body` | unknown | no | | Request body (JSON or string) |
|
|
687
725
|
| `timeout` | number | no | `30000` | Timeout in milliseconds |
|
|
@@ -701,15 +739,19 @@ Make an HTTP request to an external API
|
|
|
701
739
|
|
|
702
740
|
Execute another workflow and return its output
|
|
703
741
|
|
|
742
|
+
**Durable retry:** Invoked workflows are not replayed as durable leaf attempts.
|
|
743
|
+
|
|
704
744
|
**Config** (in `step.with`):
|
|
705
745
|
|
|
706
746
|
| Field | Type | Required | Default | Description |
|
|
707
747
|
| --- | --- | --- | --- | --- |
|
|
708
|
-
| `
|
|
748
|
+
| `workflow` | string | no | | Workflow to invoke — definition name or wf_ id (tenant-scoped) |
|
|
749
|
+
| `workflowId` | string | no | | Legacy alias for workflow when the value is a wf_ id |
|
|
750
|
+
| `execution` | `"inline"` \| `"child"` | no | | inline: run target steps in this execution (default). child: spawn a separate run with lineage. |
|
|
709
751
|
| `input` | record<string, unknown> | no | | Input record keyed by the invoked workflow's declared inputs |
|
|
710
|
-
| `wait` | boolean | no | | Wait for the invoked workflow to complete and return its output (default: true). Set false for fire-and-forget. |
|
|
711
|
-
| `timeout` | number | no | | Max wait time in ms when waiting (default: 300000) |
|
|
712
|
-
| `pollInterval` | number | no | | How often to poll status in ms when waiting (default: 1000) |
|
|
752
|
+
| `wait` | boolean | no | | Child mode only. Wait for the invoked workflow to complete and return its output (default: true). Set false for fire-and-forget. |
|
|
753
|
+
| `timeout` | number | no | | Child mode only. Max wait time in ms when waiting (default: 300000) |
|
|
754
|
+
| `pollInterval` | number | no | | Child mode only. How often to poll status in ms when waiting (default: 1000) |
|
|
713
755
|
|
|
714
756
|
**Output:** `record<string, unknown>`
|
|
715
757
|
|
|
@@ -719,6 +761,8 @@ Execute another workflow and return its output
|
|
|
719
761
|
|
|
720
762
|
Fetch a webpage and convert content to markdown
|
|
721
763
|
|
|
764
|
+
**Durable retry:** Supported for transient timeout, rate limits, selected retryable server failures failures.
|
|
765
|
+
|
|
722
766
|
**Config** (in `step.with`):
|
|
723
767
|
|
|
724
768
|
| Field | Type | Required | Default | Description |
|
|
@@ -745,6 +789,8 @@ Fetch a webpage and convert content to markdown
|
|
|
745
789
|
|
|
746
790
|
Branch execution based on a condition expression
|
|
747
791
|
|
|
792
|
+
**Durable retry:** The control container itself is not retried, but eligible leaves inside its sequential scope may retry durably.
|
|
793
|
+
|
|
748
794
|
**Config** (at step level):
|
|
749
795
|
|
|
750
796
|
| Field | Type | Required | Default | Description |
|
|
@@ -763,6 +809,8 @@ Branch execution based on a condition expression
|
|
|
763
809
|
|
|
764
810
|
Multi-way routing: resolve an expression and run the first case whose value matches (else default). Cleaner than a nested control.if chain for routing an item to one of N pipelines by a discriminator field like a document type.
|
|
765
811
|
|
|
812
|
+
**Durable retry:** The control container itself is not retried, but eligible leaves inside its sequential scope may retry durably.
|
|
813
|
+
|
|
766
814
|
**Config** (at step level):
|
|
767
815
|
|
|
768
816
|
| Field | Type | Required | Default | Description |
|
|
@@ -782,6 +830,8 @@ Multi-way routing: resolve an expression and run the first case whose value matc
|
|
|
782
830
|
|
|
783
831
|
Loop over an array and execute steps for each item
|
|
784
832
|
|
|
833
|
+
**Durable retry:** The control container itself is not retried, but eligible leaves inside its sequential scope may retry durably.
|
|
834
|
+
|
|
785
835
|
**Config** (at step level):
|
|
786
836
|
|
|
787
837
|
| Field | Type | Required | Default | Description |
|
|
@@ -802,6 +852,8 @@ Loop over an array and execute steps for each item
|
|
|
802
852
|
|
|
803
853
|
Iterate over an array with concurrent execution up to a limit
|
|
804
854
|
|
|
855
|
+
**Durable retry:** The control container and leaves inside its concurrent branches do not retry durably.
|
|
856
|
+
|
|
805
857
|
**Config** (at step level):
|
|
806
858
|
|
|
807
859
|
| Field | Type | Required | Default | Description |
|
|
@@ -823,6 +875,8 @@ Iterate over an array with concurrent execution up to a limit
|
|
|
823
875
|
|
|
824
876
|
Execute multiple branches concurrently
|
|
825
877
|
|
|
878
|
+
**Durable retry:** The control container and leaves inside its concurrent branches do not retry durably.
|
|
879
|
+
|
|
826
880
|
**Config** (at step level):
|
|
827
881
|
|
|
828
882
|
_No fields._
|
|
@@ -835,6 +889,8 @@ _No fields._
|
|
|
835
889
|
|
|
836
890
|
Pause workflow execution for a specified duration
|
|
837
891
|
|
|
892
|
+
**Durable retry:** This control step is not retried durably.
|
|
893
|
+
|
|
838
894
|
**Config** (at step level):
|
|
839
895
|
|
|
840
896
|
| Field | Type | Required | Default | Description |
|
|
@@ -847,25 +903,12 @@ Pause workflow execution for a specified duration
|
|
|
847
903
|
| --- | --- | --- | --- | --- |
|
|
848
904
|
| `waited` | number | yes | | Actual milliseconds waited |
|
|
849
905
|
|
|
850
|
-
#### `control.block` — Block
|
|
851
|
-
|
|
852
|
-
Execute a reusable block workflow inline with input/output mapping
|
|
853
|
-
|
|
854
|
-
**Config** (at step level):
|
|
855
|
-
|
|
856
|
-
| Field | Type | Required | Default | Description |
|
|
857
|
-
| --- | --- | --- | --- | --- |
|
|
858
|
-
| `blockName` | string | yes | | Name of the block to execute |
|
|
859
|
-
| `inputs` | record<string, unknown> | no | | Input mapping for the block |
|
|
860
|
-
|
|
861
|
-
**Output:** `record<string, unknown>`
|
|
862
|
-
|
|
863
|
-
> Output from block's declared output mapping
|
|
864
|
-
|
|
865
906
|
#### `control.fail` — Fail
|
|
866
907
|
|
|
867
908
|
Terminate the workflow with a typed status code + message. With an optional condition, only fails when the condition is truthy; otherwise always fails when reached. Pair with ai.classify or any prior step to fail fast on bad inputs.
|
|
868
909
|
|
|
910
|
+
**Durable retry:** This control step is not retried durably.
|
|
911
|
+
|
|
869
912
|
**Config** (at step level):
|
|
870
913
|
|
|
871
914
|
| Field | Type | Required | Default | Description |
|
|
@@ -127,6 +127,44 @@ Step references resolve via Liquid template expressions:
|
|
|
127
127
|
`steps[].name` is the only handle into the step from later steps. Use
|
|
128
128
|
short, descriptive names (`parse`, `extract`, `score`).
|
|
129
129
|
|
|
130
|
+
<!-- GENERATED:RETRY_REFERENCE START -->
|
|
131
|
+
## Durable retry policies
|
|
132
|
+
|
|
133
|
+
_Policy syntax is generated from `WorkflowRetryPolicySchema` and `StepRetryPolicySchema`; step capability notes are generated from `STEP_RETRY_CAPABILITIES` in `@eigenpal/types`._
|
|
134
|
+
|
|
135
|
+
- Workflow policy values: `automatic`, `never` or an object with `mode` and `maxAttempts`.
|
|
136
|
+
- Step policy values: `inherit`, `automatic`, `never`. `automatic` supports object form with `mode` and `maxAttempts`; `never` supports `{ mode: 'never' }`; `inherit` is string-only.
|
|
137
|
+
- The schema accepts `maxAttempts` from 1 through 10. Studio offers 2-3 total attempts, and the current worker ceiling is 3.
|
|
138
|
+
- `maxAttempts` includes the first attempt. If no policy is set, durable retries are off.
|
|
139
|
+
|
|
140
|
+
```yaml
|
|
141
|
+
settings:
|
|
142
|
+
retry:
|
|
143
|
+
mode: automatic
|
|
144
|
+
maxAttempts: 3
|
|
145
|
+
|
|
146
|
+
steps:
|
|
147
|
+
- name: fetch-catalog
|
|
148
|
+
type: action.http
|
|
149
|
+
retry: inherit
|
|
150
|
+
with:
|
|
151
|
+
method: GET
|
|
152
|
+
url: 'https://api.example.com/catalog'
|
|
153
|
+
|
|
154
|
+
- name: read-product-page
|
|
155
|
+
type: action.website-reader
|
|
156
|
+
retry: never
|
|
157
|
+
with:
|
|
158
|
+
url: '{{ input.url }}'
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
`automatic` retries transient timeouts, rate limits, and selected retryable server failures. Delays use bounded exponential backoff, honor `Retry-After`, and stop after a five-minute elapsed budget.
|
|
162
|
+
|
|
163
|
+
Durable leaf retries are supported for Website Reader and HTTP `GET`/`HEAD`. Unsafe HTTP methods, Invoke Workflow, AI steps (which may have separate provider request retries), and transforms or file outputs are not durably replayed. Control containers are not attempts themselves; eligible leaves inside sequential If, Switch, and For Each scopes may retry, while concurrent Parallel and Parallel Map branches do not. See each generated step entry for its capability.
|
|
164
|
+
|
|
165
|
+
Legacy whole-run retry counts are accepted for compatibility but no longer restart failed runs. Move retry intent to the workflow retry default or an eligible step.
|
|
166
|
+
<!-- GENERATED:RETRY_REFERENCE END -->
|
|
167
|
+
|
|
130
168
|
### `output`
|
|
131
169
|
|
|
132
170
|
```yaml
|
|
@@ -471,7 +509,7 @@ _Generated from `WorkflowDefinitionSchema` in `@eigenpal/types/src/workflow/work
|
|
|
471
509
|
| Field | Type | Required | Default | Description |
|
|
472
510
|
| --- | --- | --- | --- | --- |
|
|
473
511
|
| `name` | string | yes | | |
|
|
474
|
-
| `kind` | `"workflow"`
|
|
512
|
+
| `kind` | `"workflow"` | no | `"workflow"` | |
|
|
475
513
|
| `version` | string | no | `"1.0.0"` | |
|
|
476
514
|
| `description` | string | no | | |
|
|
477
515
|
| `enabled` | boolean | no | `true` | |
|