@uipath/maestro-builder-sdk 6.17.1 → 6.17.3

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/dist/api-index.md CHANGED
@@ -57,7 +57,7 @@ could hand you spans for a version you do not have.
57
57
  | `apiWorkflow` | function | `dist/core/actions.d.ts:2886-2920` | Actions | Invoke a deployed API workflow — a coded workflow published to Orchestrator, run as a serverless job rather than by a… |
58
58
  | `ApiWorkflowInputs` | interface | `dist/core/actions.d.ts:1049-1080` | Option shapes | 5 field(s) |
59
59
  | `AppRef` | interface | `dist/core/actions.d.ts:506-551` | Supporting types | A deployed Action App that supplies a human task's form — the `'action-app'` variant's subject. |
60
- | `ArmBuilder` | class | `dist/flow-sdk.d.ts:1136-1159` | Builders | The sub-builder an ARM callback receives — a `StepList` that can also name itself with `.label(...)`. |
60
+ | `ArmBuilder` | class | `dist/flow-sdk.d.ts:1140-1163` | Builders | The sub-builder an ARM callback receives — a `StepList` that can also name itself with `.label(...)`. |
61
61
  | `AskedField` | interface | `dist/core/actions.d.ts:354-364` | Supporting types | A value the reviewer FILLS IN: read downstream with `out('<step>', '<id>')`. |
62
62
  | `batchTransform` | function | `dist/core/actions.d.ts:2689-2723` | Actions | Add AI-generated columns to a CSV — the platform's **Batch transform** node, `uipath.pattern.batch-transform` (service… |
63
63
  | `BatchTransformInputs` | interface | `dist/core/actions.d.ts:846-861` | Option shapes | 4 field(s) |
@@ -128,10 +128,10 @@ could hand you spans for a version you do not have.
128
128
  | `FilterCondition` | type | `dist/core/actions.d.ts:233-234` | Supporting types | Comparison a filter rule applies to a field. |
129
129
  | `FilterMatch` | type | `dist/core/actions.d.ts:231-232` | Supporting types | How a filter combines its rules: every rule must match, or any one. |
130
130
  | `FilterRule` | interface | `dist/core/actions.d.ts:235-247` | Supporting types | 3 field(s) |
131
- | `flow` | function | `dist/flow-sdk.d.ts:1430-1445` | Flow construction | Start building a flow with the given id. |
131
+ | `flow` | function | `dist/flow-sdk.d.ts:1434-1449` | Flow construction | Start building a flow with the given id. |
132
132
  | `FlowAction` | class | `dist/core/node-classes.d.ts:158-164` | Supporting types | A node placed as a step — pass an instance to `.step(name, …)`. |
133
133
  | `FlowActionSpec` | type | `dist/flow-sdk.d.ts:41-42` | Supporting types | What `.step()` accepts here: the shared actions plus this SDK's subflow. |
134
- | `FlowBuilder` | class | `dist/flow-sdk.d.ts:1160-1429` | Builders | 13 member(s) |
134
+ | `FlowBuilder` | class | `dist/flow-sdk.d.ts:1164-1433` | Builders | 13 member(s) |
135
135
  | `FlowLayout` | interface | `dist/flow-sdk.d.ts:649-662` | Supporting types | Designer layout for a flow, keyed by AUTHOR-level ids: node entries by step name (plus the trigger id and `end`), edge… |
136
136
  | `FlowNode` | class | `dist/core/node-classes.d.ts:122-157` | Supporting types | The abstract root of every definition-backed node the builder can place. |
137
137
  | `FlowResource` | class | `dist/core/node-classes.d.ts:172-179` | Supporting types | A node attached to another semantic node — an inline agent's tool, context, memory, or escalation. |
@@ -224,11 +224,11 @@ could hand you spans for a version you do not have.
224
224
  | `SendMessageInputs` | interface | `dist/core/actions.d.ts:624-643` | Option shapes | 4 field(s) |
225
225
  | `ShownField` | interface | `dist/core/actions.d.ts:338-353` | Supporting types | A value the reviewer READS: shown on the form, filled in from the flow. |
226
226
  | `Step` | type | `dist/flow-sdk.d.ts:460-571` | Supporting types | |
227
- | `StepList` | class | `dist/flow-sdk.d.ts:712-1135` | Builders | Collects a sequence of steps. |
227
+ | `StepList` | class | `dist/flow-sdk.d.ts:712-1139` | Builders | Collects a sequence of steps. |
228
228
  | `STICKY_NOTE_COLORS` | const | `dist/flow-sdk.d.ts:602-607` | Flow construction | The designer's sticky-note palette. |
229
229
  | `StickyNote` | interface | `dist/flow-sdk.d.ts:614-648` | Supporting types | A canvas sticky note — free text pinned to the diagram, for the humans reading it. |
230
230
  | `StickyNoteColor` | type | `dist/flow-sdk.d.ts:608-613` | Supporting types | A sticky note's swatch. |
231
- | `subflow` | function | `dist/flow-sdk.d.ts:1446-1485` | Flow construction | Run another flow as one step, and read back what it returns. |
231
+ | `subflow` | function | `dist/flow-sdk.d.ts:1450-1489` | Flow construction | Run another flow as one step, and read back what it returns. |
232
232
  | `SubflowSpec` | interface | `dist/flow-sdk.d.ts:33-40` | Supporting types | A step that runs a child flow. |
233
233
  | `summarize` | function | `dist/core/actions.d.ts:2648-2688` | Actions | Summarize a document with citations — the platform's **Summarize** node. |
234
234
  | `SummarizeInputs` | interface | `dist/core/actions.d.ts:806-838` | Option shapes | 3 field(s) |
@@ -63,7 +63,7 @@ not find it either.
63
63
  | `app` | property | `HumanTaskOpts` | `dist/bpmn/bpmn-sdk.d.ts:1337-1338` |
64
64
  | `appSystemName` | property | `AppRef` | `dist/core/actions.d.ts:536-541` |
65
65
  | `appVersion` | property | `HumanTaskOpts` | `dist/bpmn/bpmn-sdk.d.ts:1339-1340` |
66
- | `armLabel` | property | `ArmBuilder` | `dist/flow-sdk.d.ts:1148` |
66
+ | `armLabel` | property | `ArmBuilder` | `dist/flow-sdk.d.ts:1152` |
67
67
  | `assignee` | property | `HitlRecipient` | `dist/core/actions.d.ts:426-437` |
68
68
  | `async` | property | `OrchestratorAsyncOpts` | `dist/bpmn/bpmn-sdk.d.ts:1281-1285` |
69
69
  | `atRiskPercentage` | property | `EscalationOpts` | `dist/case/case-sdk.d.ts:132-137` |
@@ -93,14 +93,14 @@ not find it either.
93
93
  | `body` | property | `TypedContextRow` | `dist/bpmn/typed-node.d.ts:176-181` |
94
94
  | `body` | property | `TypedInputRow` | `dist/bpmn/typed-node.d.ts:207-208` |
95
95
  | `boundaryEvent` | method | `ScopeBuilder` | `dist/bpmn/bpmn-sdk.d.ts:2239-2246` |
96
- | `branch` | method | `StepList` | `dist/flow-sdk.d.ts:909-927` |
96
+ | `branch` | method | `StepList` | `dist/flow-sdk.d.ts:913-931` |
97
97
  | `branches` | property | `HttpInputsBase` | `dist/core/actions.d.ts:31-36` |
98
- | `break` | method | `StepList` | `dist/flow-sdk.d.ts:1035-1044` |
98
+ | `break` | method | `StepList` | `dist/flow-sdk.d.ts:1039-1048` |
99
99
  | `breakEnabled` | property | `DoWhileOptions` | `dist/flow-sdk.d.ts:457-458` |
100
100
  | `breakEnabled` | property | `LoopOptions` | `dist/flow-sdk.d.ts:444-448` |
101
101
  | `build` | method | `BpmnBuilder` | `dist/bpmn/bpmn-sdk.d.ts:3483-3488` |
102
102
  | `build` | method | `CaseBuilder` | `dist/case/case-sdk.d.ts:1269-1274` |
103
- | `build` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1422-1428` |
103
+ | `build` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1426-1432` |
104
104
  | `businessRule` | method | `ScopeBuilder` | `dist/bpmn/bpmn-sdk.d.ts:2527-2573` |
105
105
  | `by` | property | `LookupResolution` | `dist/core/lookups.d.ts:164` |
106
106
  | `by` | property | `LookupSpec` | `dist/core/lookups.d.ts:27-28` |
@@ -209,7 +209,7 @@ not find it either.
209
209
  | `description` | property | `CustomGuardrail` | `dist/core/actions.d.ts:1393` |
210
210
  | `description` | property | `EscalationRef` | `dist/core/actions.d.ts:1987-1988` |
211
211
  | `description` | property | `EventTriggerOpts` | `dist/case/case-sdk.d.ts:241` |
212
- | `description` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1184-1191` |
212
+ | `description` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1188-1195` |
213
213
  | `description` | property | `HttpRequestToolRef` | `dist/core/actions.d.ts:1792` |
214
214
  | `description` | property | `IxpExtractInputs` | `dist/core/actions.d.ts:945-952` |
215
215
  | `description` | property | `IxpToolRef` | `dist/core/actions.d.ts:1965-1966` |
@@ -250,7 +250,7 @@ not find it either.
250
250
  | `displayName` | property | `TriggerMeta` | `dist/core/connectors.d.ts:127-128` |
251
251
  | `document` | property | `HitlInputs` | `dist/core/actions.d.ts:618-622` |
252
252
  | `documentId` | property | `DocValidationInputs` | `dist/core/actions.d.ts:458-459` |
253
- | `doWhile` | method | `StepList` | `dist/flow-sdk.d.ts:1010-1034` |
253
+ | `doWhile` | method | `StepList` | `dist/flow-sdk.d.ts:1014-1038` |
254
254
  | `dueDate` | property | `QueueItemInputs` | `dist/core/actions.d.ts:2122-2123` |
255
255
  | `duration` | property | `TimerSpec` | `dist/bpmn/bpmn-sdk.d.ts:33-34` |
256
256
  | `dynamicFewShotLearning` | property | `AgentMemoryRef` | `dist/core/actions.d.ts:1828-1829` |
@@ -272,7 +272,7 @@ not find it either.
272
272
  | `entity` | property | `DataServiceOpts` | `dist/bpmn/bpmn-sdk.d.ts:1090-1091` |
273
273
  | `entry` | property | `BuiltStage` | `dist/case/case-sdk.d.ts:528` |
274
274
  | `entry` | property | `BuiltTask` | `dist/case/case-sdk.d.ts:520` |
275
- | `entryPoint` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1248-1298` |
275
+ | `entryPoint` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1252-1302` |
276
276
  | `entryPointId` | property | `ProcessMetadata` | `dist/bpmn/bpmn-sdk.d.ts:534-539` |
277
277
  | `entryPoints` | property | `BuiltFlow` | `dist/flow-sdk.d.ts:702-703` |
278
278
  | `entryWhen` | method | `StageBuilder` | `dist/case/case-sdk.d.ts:1004-1011` |
@@ -438,7 +438,7 @@ not find it either.
438
438
  | `inclusive` | property | `ChooseOpts` | `dist/bpmn/bpmn-sdk.d.ts:1820-1824` |
439
439
  | `inclusiveGateway` | method | `ScopeBuilder` | `dist/bpmn/bpmn-sdk.d.ts:2266-2273` |
440
440
  | `input` | method | `CaseBuilder` | `dist/case/case-sdk.d.ts:1160-1185` |
441
- | `input` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1373-1385` |
441
+ | `input` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1377-1389` |
442
442
  | `input` | property | `HumanTaskOpts` | `dist/bpmn/bpmn-sdk.d.ts:1355-1356` |
443
443
  | `input` | property | `OrchestratorOpts` | `dist/bpmn/bpmn-sdk.d.ts:1241-1242` |
444
444
  | `input` | method | `ScopeBuilder` | `dist/bpmn/bpmn-sdk.d.ts:3068-3076` |
@@ -510,7 +510,7 @@ not find it either.
510
510
  | `kind` | property | `SubflowSpec` | `dist/flow-sdk.d.ts:35` |
511
511
  | `kind` | property | `WhenExpression` | `dist/case/case-sdk.d.ts:99-100` |
512
512
  | `kValue` | property | `AgentMemoryRef` | `dist/core/actions.d.ts:1832-1833` |
513
- | `label` | method | `ArmBuilder` | `dist/flow-sdk.d.ts:1149-1158` |
513
+ | `label` | method | `ArmBuilder` | `dist/flow-sdk.d.ts:1153-1162` |
514
514
  | `label` | property | `AskedField` | `dist/core/actions.d.ts:358-359` |
515
515
  | `label` | property | `BuiltStage` | `dist/case/case-sdk.d.ts:523` |
516
516
  | `label` | property | `InOutField` | `dist/core/actions.d.ts:374-375` |
@@ -524,7 +524,7 @@ not find it either.
524
524
  | `layout` | property | `BuiltCase` | `dist/case/case-sdk.d.ts:646-647` |
525
525
  | `layout` | property | `BuiltFlow` | `dist/flow-sdk.d.ts:698-699` |
526
526
  | `layout` | method | `CaseBuilder` | `dist/case/case-sdk.d.ts:1139-1159` |
527
- | `layout` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1192-1202` |
527
+ | `layout` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1196-1206` |
528
528
  | `limit` | property | `DataFabricReadInputs` | `dist/core/actions.d.ts:2243-2248` |
529
529
  | `limit` | property | `DoWhileOptions` | `dist/flow-sdk.d.ts:455-456` |
530
530
  | `literal` | property | `Expr` | `dist/core/expr.d.ts:18` |
@@ -534,7 +534,7 @@ not find it either.
534
534
  | `lookups` | property | `ConnectorMeta` | `dist/core/connectors.d.ts:76-87` |
535
535
  | `loop` | property | `ActivityNodeFields` | `dist/bpmn/bpmn-sdk.d.ts:335-336` |
536
536
  | `loop` | property | `ActivityOpts` | `dist/bpmn/bpmn-sdk.d.ts:832-833` |
537
- | `loop` | method | `StepList` | `dist/flow-sdk.d.ts:998-1009` |
537
+ | `loop` | method | `StepList` | `dist/flow-sdk.d.ts:1002-1013` |
538
538
  | `managed` | property | `HttpInputsBase` | `dist/core/actions.d.ts:43-73` |
539
539
  | `marksCaseComplete` | property | `BuiltCaseExitCondition` | `dist/case/case-sdk.d.ts:354` |
540
540
  | `marksStageComplete` | property | `BuiltExitCondition` | `dist/case/case-sdk.d.ts:321` |
@@ -622,7 +622,7 @@ not find it either.
622
622
  | `name` | property | `EventSubProcessOpts` | `dist/bpmn/bpmn-sdk.d.ts:1840-1841` |
623
623
  | `name` | property | `EventTriggerOpts` | `dist/case/case-sdk.d.ts:240` |
624
624
  | `name` | property | `ExternalTaskOpts` | `dist/bpmn/bpmn-sdk.d.ts:1499-1500` |
625
- | `name` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1176-1183` |
625
+ | `name` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1180-1187` |
626
626
  | `name` | property | `FlowOpts` | `dist/bpmn/bpmn-sdk.d.ts:1637-1638` |
627
627
  | `name` | property | `GatewayOpts` | `dist/bpmn/bpmn-sdk.d.ts:760-761` |
628
628
  | `name` | property | `HandlerOpts` | `dist/bpmn/bpmn-sdk.d.ts:1735-1736` |
@@ -702,7 +702,7 @@ not find it either.
702
702
  | `outcomes` | property | `EscalationRef` | `dist/core/actions.d.ts:2033-2038` |
703
703
  | `outcomes` | property | `HitlInputs` | `dist/core/actions.d.ts:577-591` |
704
704
  | `output` | method | `CaseBuilder` | `dist/case/case-sdk.d.ts:1186-1198` |
705
- | `output` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1386-1411` |
705
+ | `output` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1390-1415` |
706
706
  | `output` | property | `RegistryTypeSpec` | `dist/bpmn/typed-node.d.ts:90` |
707
707
  | `output` | method | `ScopeBuilder` | `dist/bpmn/bpmn-sdk.d.ts:3077-3085` |
708
708
  | `outputColumns` | property | `BatchTransformInputs` | `dist/core/actions.d.ts:854-858` |
@@ -738,7 +738,7 @@ not find it either.
738
738
  | `pageRange` | property | `DynamicExtractInputs` | `dist/core/actions.d.ts:2407-2408` |
739
739
  | `pageRange` | property | `IxpExtractInputs` | `dist/core/actions.d.ts:934-935` |
740
740
  | `parallel` | property | `LoopOptions` | `dist/flow-sdk.d.ts:437-438` |
741
- | `parallel` | method | `StepList` | `dist/flow-sdk.d.ts:962-997` |
741
+ | `parallel` | method | `StepList` | `dist/flow-sdk.d.ts:966-1001` |
742
742
  | `parallelGateway` | method | `ScopeBuilder` | `dist/bpmn/bpmn-sdk.d.ts:2256-2265` |
743
743
  | `parameters` | property | `ConnectorEventOpts` | `dist/bpmn/bpmn-sdk.d.ts:1479-1480` |
744
744
  | `parameters` | property | `HttpOpts` | `dist/bpmn/bpmn-sdk.d.ts:1140-1145` |
@@ -835,7 +835,7 @@ not find it either.
835
835
  | `retry` | property | `ActivityOpts` | `dist/bpmn/bpmn-sdk.d.ts:830-831` |
836
836
  | `retryable` | property | `ErrorMappingRow` | `dist/bpmn/bpmn-sdk.d.ts:308-309` |
837
837
  | `retryCount` | property | `HttpInputsBase` | `dist/core/actions.d.ts:115-129` |
838
- | `return` | method | `StepList` | `dist/flow-sdk.d.ts:1125-1134` |
838
+ | `return` | method | `StepList` | `dist/flow-sdk.d.ts:1129-1138` |
839
839
  | `returnCitations` | property | `SummarizeInputs` | `dist/core/actions.d.ts:832-837` |
840
840
  | `returns` | property | `AgentInputs` | `dist/core/actions.d.ts:1279-1298` |
841
841
  | `returns` | property | `ApiWorkflowInputs` | `dist/core/actions.d.ts:1067-1079` |
@@ -875,7 +875,7 @@ not find it either.
875
875
  | `schemaVersion` | method | `BpmnBuilder` | `dist/bpmn/bpmn-sdk.d.ts:3375-3404` |
876
876
  | `schemaVersion` | property | `BuiltFlow` | `dist/flow-sdk.d.ts:682-688` |
877
877
  | `schemaVersion` | method | `CaseBuilder` | `dist/case/case-sdk.d.ts:1068-1094` |
878
- | `schemaVersion` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1333-1372` |
878
+ | `schemaVersion` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1337-1376` |
879
879
  | `scope` | property | `EscalationRecipient` | `dist/case/case-sdk.d.ts:121` |
880
880
  | `scopes` | property | `GuardrailSelector` | `dist/core/actions.d.ts:1339` |
881
881
  | `script` | property | `ScriptTaskOpts` | `dist/bpmn/bpmn-sdk.d.ts:846-862` |
@@ -950,11 +950,11 @@ not find it either.
950
950
  | `steps` | property | `BuiltFlow` | `dist/flow-sdk.d.ts:692` |
951
951
  | `steps` | property | `StepList` | `dist/flow-sdk.d.ts:714` |
952
952
  | `stepSwitch` | method | `StepList` | `dist/flow-sdk.d.ts:757-799` |
953
- | `stepToList` | method | `StepList` | `dist/flow-sdk.d.ts:876-900` |
954
- | `stepToRef` | method | `StepList` | `dist/flow-sdk.d.ts:1076-1104` |
955
- | `stepToRef` | method | `StepList` | `dist/flow-sdk.d.ts:1105-1124` |
953
+ | `stepToList` | method | `StepList` | `dist/flow-sdk.d.ts:876-904` |
954
+ | `stepToRef` | method | `StepList` | `dist/flow-sdk.d.ts:1080-1108` |
955
+ | `stepToRef` | method | `StepList` | `dist/flow-sdk.d.ts:1109-1128` |
956
956
  | `stickyNotes` | property | `BuiltFlow` | `dist/flow-sdk.d.ts:700-701` |
957
- | `stickyNotes` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1203-1228` |
957
+ | `stickyNotes` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1207-1232` |
958
958
  | `storageBucket` | property | `DocValidationInputs` | `dist/core/actions.d.ts:456-457` |
959
959
  | `strategy` | property | `LookupSpec` | `dist/core/lookups.d.ts:33` |
960
960
  | `style` | property | `CaseNodeLayout` | `dist/case/case-sdk.d.ts:597-598` |
@@ -966,7 +966,7 @@ not find it either.
966
966
  | `subType` | property | `VarOpts` | `dist/bpmn/bpmn-sdk.d.ts:1709-1714` |
967
967
  | `subType` | property | `VarSpec` | `dist/flow-sdk.d.ts:72-73` |
968
968
  | `summary` | property | `CaseAppConfig` | `dist/case/case-sdk.d.ts:585-586` |
969
- | `switch` | method | `StepList` | `dist/flow-sdk.d.ts:928-961` |
969
+ | `switch` | method | `StepList` | `dist/flow-sdk.d.ts:932-965` |
970
970
  | `systemPrompt` | property | `ConversationalAgentInputs` | `dist/core/actions.d.ts:686-691` |
971
971
  | `systemPrompt` | property | `InlineAgentInputs` | `dist/core/actions.d.ts:1452-1501` |
972
972
  | `systemPrompt` | property | `VoiceAgentInputs` | `dist/core/actions.d.ts:773-778` |
@@ -991,7 +991,7 @@ not find it either.
991
991
  | `temperature` | property | `InlineAgentInputs` | `dist/core/actions.d.ts:1562-1563` |
992
992
  | `temperature` | property | `VoiceSettings` | `dist/core/actions.d.ts:765-766` |
993
993
  | `terminate` | property | `EndOpts` | `dist/bpmn/bpmn-sdk.d.ts:692-693` |
994
- | `terminate` | method | `StepList` | `dist/flow-sdk.d.ts:1045-1075` |
994
+ | `terminate` | method | `StepList` | `dist/flow-sdk.d.ts:1049-1079` |
995
995
  | `threshold` | property | `ContextIndexRef` | `dist/core/actions.d.ts:2076-2077` |
996
996
  | `timeCycle` | property | `BuiltTrigger` | `dist/case/case-sdk.d.ts:201-202` |
997
997
  | `timeout` | property | `HttpInputsBase` | `dist/core/actions.d.ts:97-114` |
@@ -1014,11 +1014,11 @@ not find it either.
1014
1014
  | `trigger` | property | `BuiltFlow` | `dist/flow-sdk.d.ts:693-695` |
1015
1015
  | `trigger` | method | `CaseBuilder` | `dist/case/case-sdk.d.ts:1224-1232` |
1016
1016
  | `trigger` | property | `EscalationOpts` | `dist/case/case-sdk.d.ts:128-129` |
1017
- | `trigger` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1229-1247` |
1017
+ | `trigger` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1233-1251` |
1018
1018
  | `trigger` | property | `StartOpts` | `dist/bpmn/bpmn-sdk.d.ts:624-671` |
1019
1019
  | `triggeredByEvent` | property | `SubProcessOpts` | `dist/bpmn/bpmn-sdk.d.ts:976-977` |
1020
1020
  | `triggerId` | property | `BuiltFlow` | `dist/flow-sdk.d.ts:704-710` |
1021
- | `triggerId` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1299-1318` |
1021
+ | `triggerId` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1303-1322` |
1022
1022
  | `triggerOptions` | property | `BuiltFlow` | `dist/flow-sdk.d.ts:696-697` |
1023
1023
  | `triggers` | property | `BuiltCase` | `dist/case/case-sdk.d.ts:644-645` |
1024
1024
  | `triggers` | property | `CaseLayout` | `dist/case/case-sdk.d.ts:620-621` |
@@ -1074,7 +1074,7 @@ not find it either.
1074
1074
  | `value` | property | `TypedInputRow` | `dist/bpmn/typed-node.d.ts:205-206` |
1075
1075
  | `values` | property | `DataFabricCreateInputs` | `dist/core/actions.d.ts:2280-2285` |
1076
1076
  | `var` | method | `CaseBuilder` | `dist/case/case-sdk.d.ts:1199-1223` |
1077
- | `var` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1412-1421` |
1077
+ | `var` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1416-1425` |
1078
1078
  | `var` | method | `ScopeBuilder` | `dist/bpmn/bpmn-sdk.d.ts:3059-3067` |
1079
1079
  | `var` | property | `TaskOutputBinding` | `dist/case/case-sdk.d.ts:494-495` |
1080
1080
  | `var` | property | `TypedOutputRow` | `dist/bpmn/typed-node.d.ts:251-252` |
@@ -1097,7 +1097,7 @@ not find it either.
1097
1097
  | `version` | property | `ConnectorToolRef` | `dist/core/actions.d.ts:1870-1871` |
1098
1098
  | `version` | property | `EventSubscription` | `dist/core/actions.d.ts:3566` |
1099
1099
  | `version` | property | `ExternalTaskOpts` | `dist/bpmn/bpmn-sdk.d.ts:1507-1508` |
1100
- | `version` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1319-1332` |
1100
+ | `version` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1323-1336` |
1101
1101
  | `version` | property | `NodeOptions` | `dist/flow-sdk.d.ts:354-361` |
1102
1102
  | `version` | property | `TriggerMeta` | `dist/core/connectors.d.ts:126` |
1103
1103
  | `version` | property | `TriggerOptions` | `dist/core/actions.d.ts:3523-3524` |
package/dist/check.js CHANGED
@@ -777,10 +777,10 @@ function checkFlow(built, ancestors, opts = {}) {
777
777
  }
778
778
  // An exit with no arm compiles to an End node, so the run FINISHES
779
779
  // there instead of reaching a port with no edge and stalling. Better
780
- // than stalling, still probably not what the author meant — and the
781
- // End carries none of the flow's output mappings, so the run answers
782
- // with nothing (flow-builder-sdk#742). An `action: 'End'` outcome
783
- // already ends the run and needs no arm.
780
+ // than stalling, still probably not what the author meant: the End
781
+ // maps each output from its variable, so the run answers whatever
782
+ // those hold at that point, usually nothing (flow-builder-sdk#742).
783
+ // An `action: 'End'` outcome already ends the run and needs no arm.
784
784
  const unrouted = exits.filter((e) => !seenExit.has(e.port) && e.endsProcess !== true);
785
785
  if (unrouted.length > 0) {
786
786
  const outs = built.outputs.map((o) => o.name);
@@ -790,8 +790,9 @@ function checkFlow(built, ancestors, opts = {}) {
790
790
  + `${unrouted.map((e) => JSON.stringify(e.value)).join(', ')}. Each compiles to an End node, `
791
791
  + `so the run finishes there`
792
792
  + (outs.length > 0
793
- ? ` without writing the flow's declared output${outs.length === 1 ? '' : 's'} `
794
- + `(${outs.join(', ')}).`
793
+ ? `, and nothing on that path sets the flow's declared output${outs.length === 1 ? '' : 's'} `
794
+ + `(${outs.join(', ')}): the End answers whatever ${outs.length === 1 ? 'its variable holds' : 'their variables hold'}, `
795
+ + `usually nothing.`
795
796
  : '.'),
796
797
  suggestion: `{ value: '${unrouted[0].value}', body: (b) => … }`,
797
798
  });
@@ -1295,9 +1296,7 @@ function checkFlow(built, ancestors, opts = {}) {
1295
1296
  }
1296
1297
  }
1297
1298
  // The End compile appends when the root path runs out of steps (#941).
1298
- const fallOff = checkFallOffEnd(built);
1299
- if (fallOff)
1300
- diags.push(fallOff);
1299
+ diags.push(...checkFallOffEnd(built));
1301
1300
  // Check every child flow with the same rules, in its OWN scope — a child's
1302
1301
  // steps never see the parent's variables, so its undeclared references,
1303
1302
  // duplicate step names and type mismatches are its own. Diagnostics come back
@@ -1385,32 +1384,29 @@ function checkLoopListEnvelope(loop, connectors, opts, diags) {
1385
1384
  });
1386
1385
  }
1387
1386
  /**
1388
- * NO_RETURN: a path that runs off the end of the flow, where a declared output
1389
- * is never written (#941).
1387
+ * NO_RETURN: a path that runs off the end of the flow, or off the end of a
1388
+ * `.stepToList` / `.onError` body, where a declared output is never written
1389
+ * (#941, #742).
1390
1390
  *
1391
1391
  * It asks serialize's question, not "is there a `.return()` anywhere?".
1392
1392
  * serialize appends an End exactly when the root walk has tails left
1393
1393
  * (`if (finalTails.length)`), and `armTails` mirrors that walk tail for tail.
1394
1394
  * So a `.terminate()` path appends no End, and a branch where one arm returns
1395
- * and the other falls off DOES append one.
1395
+ * and the other falls off DOES append one. A `.stepToList` body is a side exit:
1396
+ * it never rejoins the main path, and when it runs out of steps `emitPortList`
1397
+ * gives it an End of its own. `writtenTails` collects those bodies' tails.
1396
1398
  *
1397
- * The appended End maps every output from its own variable
1399
+ * Every such End maps every output from its own variable
1398
1400
  * (`result <- $vars.result`), the same as a `.return()` that names no value.
1399
1401
  * That loses nothing when the flow declares no outputs, or when each output
1400
1402
  * was set on the way: by a `default`, a `{ shared }` input that every root
1401
- * feeds, or `{ updates }` on a step of that path. The warning names the outputs
1402
- * that are not, and the steps the path falls off from.
1403
- *
1404
- * Not covered: the private End a `.stepToList` body gets (#742). `armTails`
1405
- * skips those bodies, and that End is a different emission site with no
1406
- * output mappings at all.
1403
+ * feeds, or `{ updates }` on a step of that path. One warning per End: it
1404
+ * names the outputs that are not set, and the steps the path runs out from.
1407
1405
  */
1408
1406
  function checkFallOffEnd(built) {
1409
1407
  if (built.outputs.length === 0)
1410
- return undefined;
1408
+ return [];
1411
1409
  const from = built.triggerId ?? 'start';
1412
- if (armTails(built.steps, [{ from }]).length === 0)
1413
- return undefined;
1414
1410
  const preset = new Set(built.outputs.filter((o) => o.default !== undefined).map((o) => o.name));
1415
1411
  // A shared input sets its variable only on runs that enter through a root
1416
1412
  // feeding it, so it counts as preset only when every root does.
@@ -1419,21 +1415,42 @@ function checkFallOffEnd(built) {
1419
1415
  if (t.declaredAs === 'output' && roots.every((r) => t.feeds.some((f) => f.root === r.id)))
1420
1416
  preset.add(t.name);
1421
1417
  }
1422
- const tails = writtenTails(built.steps, [{ from, written: preset }], []);
1423
- const missing = built.outputs.map((o) => o.name).filter((n) => tails.some((t) => !t.written.has(n)));
1424
- if (missing.length === 0)
1425
- return undefined;
1426
- const steps = [...new Set(tails.filter((t) => missing.some((n) => !t.written.has(n))).map((t) => t.from))];
1427
- const one = missing.length === 1;
1428
- return {
1429
- level: 'warning',
1430
- code: 'NO_RETURN',
1431
- message: `Path ending at ${steps.map((x) => `"${x}"`).join(', ')} falls into the End compile appends. `
1432
- + `${one ? 'Output' : 'Outputs'} ${missing.map((n) => `"${n}"`).join(', ')} may be unset there. `
1433
- + `End the path with .return({ … }) or set ${one ? 'it' : 'them'} with { updates } (a loop body may run zero times).`,
1434
- step: steps[0],
1435
- suggestion: `.return({ ${missing.map((n) => `${n}: …`).join(', ')} })`,
1418
+ const sideEnds = [];
1419
+ const rootTails = writtenTails(built.steps, [{ from, written: preset }], { breaks: [], sideEnds });
1420
+ const diags = [];
1421
+ const unset = (tails) => {
1422
+ const missing = built.outputs.map((o) => o.name).filter((n) => tails.some((t) => !t.written.has(n)));
1423
+ if (missing.length === 0)
1424
+ return undefined;
1425
+ return { missing, steps: [...new Set(tails.filter((t) => missing.some((n) => !t.written.has(n))).map((t) => t.from))] };
1436
1426
  };
1427
+ // `lead(at)` is the sentence saying where the path ends and which End it falls into.
1428
+ const warn = (lead, u, fix) => {
1429
+ const one = u.missing.length === 1;
1430
+ return {
1431
+ level: 'warning',
1432
+ code: 'NO_RETURN',
1433
+ message: `${lead(u.steps.map((x) => `"${x}"`).join(', '))} ${one ? 'Output' : 'Outputs'} `
1434
+ + `${u.missing.map((n) => `"${n}"`).join(', ')} may be unset there. ${fix(one ? 'it' : 'them')}`,
1435
+ step: u.steps[0],
1436
+ suggestion: `.return({ ${u.missing.map((n) => `${n}: …`).join(', ')} })`,
1437
+ };
1438
+ };
1439
+ // `armTails` and `writtenTails` hand on the same tails; the root End exists
1440
+ // exactly when there are any.
1441
+ const root = rootTails.length ? unset(rootTails) : undefined;
1442
+ if (root) {
1443
+ diags.push(warn((at) => `Path ending at ${at} falls into the End compile appends.`, root, (it) => `End the path with .return({ … }) or set ${it} with { updates } (a loop body may run zero times).`));
1444
+ }
1445
+ for (const side of sideEnds) {
1446
+ const u = unset(side.tails);
1447
+ if (!u)
1448
+ continue;
1449
+ const call = side.port === 'error' ? '.onError(…)' : `.stepToList('${side.port}', …)`;
1450
+ diags.push(warn((at) => `The ${call} path from "${side.source}" ends at ${at} and does not rejoin the main path, `
1451
+ + `so compile ends the run there on an End of its own.`, u, (it) => `End the path with .return({ … }), set ${it} with { updates }, or hand it back with .stepToRef('<step>').`));
1452
+ }
1453
+ return diags;
1437
1454
  }
1438
1455
  /**
1439
1456
  * `armTails`, step for step, carrying what each path has surely written. A
@@ -1447,12 +1464,31 @@ function checkFallOffEnd(built) {
1447
1464
  * runs at least once, and is left by its end or by a `.break()`, so what all of
1448
1465
  * those wrote counts. Every `.parallel` arm runs, so what each surely writes
1449
1466
  * counts.
1467
+ *
1468
+ * A `.stepToList` body leaves the main path as it was (as in `armTails`), but
1469
+ * it is walked too: it starts with what was written before its port fired, and
1470
+ * if it hands back tails, serialize ends it on an End of its own, so those
1471
+ * tails go to `sideEnds`. On the `error` port the step failed, so its own
1472
+ * `{ updates }` are not counted (they usually read the output it never made).
1473
+ * Bodies nested anywhere, a plain loop's included, are walked with the same
1474
+ * `sideEnds`.
1450
1475
  */
1451
- function writtenTails(steps, incoming, breaks) {
1476
+ function writtenTails(steps, incoming, sinks) {
1477
+ const { breaks, sideEnds } = sinks;
1452
1478
  let tails = incoming;
1479
+ // What was written before the last step on this path, i.e. without its own `{ updates }`.
1480
+ let beforeLast = surelyWritten(tails);
1453
1481
  for (const st of steps) {
1454
- if (st.kind === 'stepToList')
1482
+ if (st.kind === 'stepToList') {
1483
+ const source = tails[0]?.from;
1484
+ if (source === undefined)
1485
+ continue;
1486
+ const entry = st.port === 'error' ? beforeLast : surelyWritten(tails);
1487
+ const ends = writtenTails(st.body, [{ from: source, written: entry }], sinks);
1488
+ if (ends.length)
1489
+ sideEnds.push({ port: st.port, source, tails: ends });
1455
1490
  continue;
1491
+ }
1456
1492
  if (st.kind === 'stepToRef') {
1457
1493
  if (st.port === 'output')
1458
1494
  tails = [];
@@ -1465,8 +1501,9 @@ function writtenTails(steps, incoming, breaks) {
1465
1501
  if (st.kind === 'return' || st.kind === 'terminate')
1466
1502
  return [];
1467
1503
  const before = surelyWritten(tails);
1504
+ beforeLast = before;
1468
1505
  const written = new Set([...before, ...Object.keys(st.options?.updates ?? {})]);
1469
- const arm = (body) => writtenTails(body, [{ from: st.name, written }], breaks);
1506
+ const arm = (body) => writtenTails(body, [{ from: st.name, written }], sinks);
1470
1507
  if (st.kind === 'action') {
1471
1508
  tails = actionTails(st.name, st.spec, st.options?.version)
1472
1509
  .map((t) => ({ from: t.from, written }));
@@ -1482,7 +1519,7 @@ function writtenTails(steps, incoming, breaks) {
1482
1519
  }
1483
1520
  else if (st.kind === 'doWhile') {
1484
1521
  const exits = [];
1485
- exits.push(...writtenTails(st.body, [{ from: st.name, written }], exits));
1522
+ exits.push(...writtenTails(st.body, [{ from: st.name, written }], { breaks: exits, sideEnds }));
1486
1523
  surelyWritten(exits).forEach((n) => written.add(n));
1487
1524
  tails = [{ from: st.name, written }];
1488
1525
  }
@@ -1492,6 +1529,9 @@ function writtenTails(steps, incoming, breaks) {
1492
1529
  tails = [{ from: st.name, written }];
1493
1530
  }
1494
1531
  else {
1532
+ // A plain loop's body writes nothing for sure, but its side exits still end runs.
1533
+ if (st.kind === 'loop')
1534
+ writtenTails(st.body, [{ from: st.name, written }], { breaks: [], sideEnds });
1495
1535
  tails = [{ from: st.name, written }];
1496
1536
  }
1497
1537
  }
package/dist/decompile.js CHANGED
@@ -1710,6 +1710,27 @@ function emitEventSubscription(node, imp, inputNames) {
1710
1710
  ['folder', folder !== undefined ? str(folder) : undefined],
1711
1711
  ]) + unboundMarker(node, { connection: conn, folder }, connector, event);
1712
1712
  }
1713
+ /**
1714
+ * Read back the expression template older SDK builds emitted on an in-solution
1715
+ * `agent()` input (#1013): `{ type: 'literal', expression: '{{ <js> }}' }`.
1716
+ * serialize now emits the platform's `{ type: 'jsExpression', expression }`
1717
+ * instead, but `.flow` files written between 2026-08-10 and the fix still carry
1718
+ * the template, and the runtime evaluates it (the agent receives the value, not
1719
+ * the braces). So on an in-solution agent node a literal that is exactly one
1720
+ * `{{ … }}` is that expression, and it decompiles to the reference it was
1721
+ * written from rather than to a string. Anything else is returned unchanged.
1722
+ */
1723
+ function legacyAgentTemplateInput(v) {
1724
+ if (!v || typeof v !== 'object' || Array.isArray(v))
1725
+ return v;
1726
+ const o = v;
1727
+ if (o.type !== 'literal' || typeof o.expression !== 'string')
1728
+ return v;
1729
+ const m = /^\{\{\s*([\s\S]+?)\s*\}\}$/.exec(o.expression);
1730
+ if (!m || m[1].includes('}}') || m[1].includes('{{'))
1731
+ return v;
1732
+ return { ...o, type: 'jsExpression', expression: m[1] };
1733
+ }
1713
1734
  function emitPublishedResource(node, imp, inputNames) {
1714
1735
  const FAMILIES = [
1715
1736
  { prefix: 'uipath.core.rpa-workflow.', factory: 'rpaWorkflow' },
@@ -1751,6 +1772,10 @@ function emitPublishedResource(node, imp, inputNames) {
1751
1772
  // author's map, so it comes back off here.
1752
1773
  const fireAndForget = unwrapPlain(inputs.fireAndForget) === true;
1753
1774
  delete inputs.fireAndForget;
1775
+ if (family.factory === 'agent' && (def?.model?.isInSolution === true || def?.model?.projectId !== undefined)) {
1776
+ for (const [k, v] of Object.entries(inputs))
1777
+ inputs[k] = legacyAgentTemplateInput(v);
1778
+ }
1754
1779
  const inputRows = Object.entries(inputs)
1755
1780
  .map(([k, v]) => [k, emitVal(v, imp, inputNames)]);
1756
1781
  const schema = def?.outputDefinition?.output?.schema?.properties;
@@ -881,6 +881,10 @@ declare class StepList {
881
881
  * The body is its own path. It ends by answering (`.return`), stopping the run
882
882
  * (`.terminate`), or handing control back with `.stepToRef(...)`; a body that
883
883
  * simply runs out of steps gets its own End, exactly as an error handler does.
884
+ * It does not rejoin the main path. That End maps each flow output from its
885
+ * variable, as the End a flow falls off the bottom into does, so set the
886
+ * outputs on the way with `{ updates }` or end the body with `.return({…})`;
887
+ * `check` warns NO_RETURN when an output is left unset on that path.
884
888
  *
885
889
  * The main path is untouched — an edge out of a NON-default port is a side exit,
886
890
  * so whatever you chain after this call still belongs to the step's normal
package/dist/flow-sdk.js CHANGED
@@ -495,6 +495,10 @@ class StepList {
495
495
  * The body is its own path. It ends by answering (`.return`), stopping the run
496
496
  * (`.terminate`), or handing control back with `.stepToRef(...)`; a body that
497
497
  * simply runs out of steps gets its own End, exactly as an error handler does.
498
+ * It does not rejoin the main path. That End maps each flow output from its
499
+ * variable, as the End a flow falls off the bottom into does, so set the
500
+ * outputs on the way with `{ updates }` or end the body with `.return({…})`;
501
+ * `check` warns NO_RETURN when an output is left unset on that path.
498
502
  *
499
503
  * The main path is untouched — an edge out of a NON-default port is a side exit,
500
504
  * so whatever you chain after this call still belongs to the step's normal
package/dist/serialize.js CHANGED
@@ -4578,10 +4578,11 @@ function isTypeDesc(type) {
4578
4578
  *
4579
4579
  * Emitting the full set is not cosmetic. The product's output-mapping rule warns
4580
4580
  * `MISSING_OUTPUT_MAPPING` once per (End node × unmapped output variable), and
4581
- * the SDK used to leave three whole classes unmapped: the implicit End node a
4582
- * flow falls off the bottom into, every `.var(…)` anywhere, and any output a
4583
- * `.return(…)` didn't name. A four-output flow with two End nodes could collect
4584
- * eight warnings for a graph that was completely correct.
4581
+ * an End with no map answers the run with nothing. So every End site goes
4582
+ * through `emitEnd`, which calls this: the implicit End a flow falls off the
4583
+ * bottom into, a `.return(…)`'s End, the End a `.stepToList` / `.onError` body
4584
+ * gets when it runs out of steps, and the End for a `.stepSwitch` exit with no
4585
+ * arm (or a human task's `action: 'End'` outcome).
4585
4586
  */
4586
4587
  function endOutputs(scope, explicit = {}) {
4587
4588
  const outs = {};
@@ -4881,6 +4882,32 @@ export function serialize(built, opts = {}) {
4881
4882
  node.parentId = o.parentId;
4882
4883
  return node;
4883
4884
  }
4885
+ /**
4886
+ * Emit an End node, map the flow's outputs on it, and wire `tails` into it.
4887
+ *
4888
+ * Every End goes through here: the `.return()` End, the End a root or
4889
+ * subflow path falls off into, a `.stepToList` / `.onError` body that runs
4890
+ * out of steps, a `.stepSwitch` exit with no arm, and a fan-out human task's
4891
+ * `action: 'End'` outcome. An End finishes the run, and the run's outputs are
4892
+ * whatever its `outputs` map says, so an End built without that map answers
4893
+ * with nothing at all, even on a path that set every output variable
4894
+ * (flow-builder-sdk#742). Building the node and its mappings in one place
4895
+ * makes that impossible to forget.
4896
+ *
4897
+ * `explicit` holds the sources a `.return({…})` named; every other output
4898
+ * maps to its own variable (`endOutputs`).
4899
+ */
4900
+ function emitEnd(scope, id, tails, o = {}) {
4901
+ const node = makeNode(NODE_TYPE.end, id, o.label ?? 'End', { parentId: o.parentId, requestedVersion: o.requestedVersion });
4902
+ node.inputs = {};
4903
+ const outs = endOutputs(scope, o.explicit);
4904
+ if (Object.keys(outs).length)
4905
+ node.outputs = outs;
4906
+ scope.nodes.push(node);
4907
+ for (const t of tails)
4908
+ addEdge(scope, t, id);
4909
+ return node;
4910
+ }
4884
4911
  /**
4885
4912
  * Emit a child flow into its own scope and register it under the calling
4886
4913
  * node's id — that key is how the format names a subflow body, and how
@@ -4921,19 +4948,10 @@ export function serialize(built, opts = {}) {
4921
4948
  start.inputs = {};
4922
4949
  scope.nodes.push(start);
4923
4950
  const tails = emit(child.steps, [{ node: startId, port: 'output' }], scope);
4924
- if (tails.length) {
4925
- const endId = uid(scope, 'end');
4926
- const end = makeNode(NODE_TYPE.end, endId, 'End');
4927
- end.inputs = {};
4928
- // Same as the root's implicit End — mapped against the SUBFLOW's own
4929
- // outputs, which is the scope the product validates a subflow body in.
4930
- const outs = endOutputs(scope);
4931
- if (Object.keys(outs).length)
4932
- end.outputs = outs;
4933
- scope.nodes.push(end);
4934
- for (const t of tails)
4935
- addEdge(scope, t, endId);
4936
- }
4951
+ // Same as the root's implicit End — mapped against the SUBFLOW's own
4952
+ // outputs, which is the scope the product validates a subflow body in.
4953
+ if (tails.length)
4954
+ emitEnd(scope, uid(scope, 'end'), tails);
4937
4955
  const globals = [];
4938
4956
  for (const inp of child.inputs)
4939
4957
  globals.push({ id: inp.name, name: inp.name, direction: 'in', type: inp.type, triggerNodeId: startId, ...varMeta(inp) });
@@ -5266,18 +5284,15 @@ export function serialize(built, opts = {}) {
5266
5284
  // three published families — 58 of 61 deployed agent instances carry no
5267
5285
  // node-level `model` at all.
5268
5286
  delete node.model;
5287
+ // Expression inputs stay `=js:` strings here, published or in-solution, and
5288
+ // the format migration wraps them as `{ type: 'jsExpression', expression }`
5289
+ // — the shape flow-core writes for an in-solution agent (52 of 54 v1
5290
+ // expression inputs, 09-01 → 10-08; the other 2 are bare `=js:` strings,
5291
+ // none is a `{{ }}` template). A `{ type: 'literal',
5292
+ // expression: '{{ … }}' }` template used to be emitted instead (#1013): it
5293
+ // ran, but it is the same envelope as a literal string, so decompile read
5294
+ // it back as one.
5269
5295
  node.inputs = renderMap(s.inputs, scope.rename);
5270
- if (inSolution) {
5271
- for (const [name, value] of Object.entries(node.inputs)) {
5272
- if (typeof value === 'string' && value.startsWith('=js:')) {
5273
- node.inputs[name] = {
5274
- type: 'literal',
5275
- expression: `{{ ${value.slice(4)} }}`,
5276
- fieldType: def.inputDefinition?.properties?.[name]?.type ?? 'string',
5277
- };
5278
- }
5279
- }
5280
- }
5281
5296
  scope.nodes.push(node);
5282
5297
  for (const t of tails)
5283
5298
  addEdge(scope, t, id);
@@ -6491,11 +6506,7 @@ export function serialize(built, opts = {}) {
6491
6506
  * outcome.
6492
6507
  */
6493
6508
  function endExit(scope, nodeId, port, stepName, parentId) {
6494
- const endId = uid(scope, `${stepName}${port.charAt(0).toUpperCase()}${port.slice(1)}End`);
6495
- const end = makeNode(NODE_TYPE.end, endId, 'End', parentId ? { parentId } : {});
6496
- end.inputs = {};
6497
- scope.nodes.push(end);
6498
- addEdge(scope, { node: nodeId, port }, endId);
6509
+ emitEnd(scope, uid(scope, `${stepName}${port.charAt(0).toUpperCase()}${port.slice(1)}End`), [{ node: nodeId, port }], { parentId });
6499
6510
  }
6500
6511
  /**
6501
6512
  * Refuse a side exit on a human task's port that the step's tails already
@@ -6541,13 +6552,12 @@ export function serialize(built, opts = {}) {
6541
6552
  node.inputs = { ...(node.inputs ?? {}), errorHandlingEnabled: true };
6542
6553
  }
6543
6554
  const handlerTails = emit(handler, [{ node: nodeId, port: step.port }], scope, parentId, breakTarget);
6555
+ // A body that runs out of steps ends the run on an End of its own (no
6556
+ // merge-back is inferred). That End maps the outputs like any other, so a
6557
+ // body that set them with `{ updates }` still answers (#742).
6544
6558
  if (handlerTails.length) {
6545
6559
  const endId = uid(scope, `${source}${step.port === 'error' ? 'Error' : step.port.charAt(0).toUpperCase() + step.port.slice(1)}End`);
6546
- const end = makeNode(NODE_TYPE.end, endId, 'End', parentId ? { parentId } : {});
6547
- end.inputs = {};
6548
- scope.nodes.push(end);
6549
- for (const t of handlerTails)
6550
- addEdge(scope, t, endId);
6560
+ emitEnd(scope, endId, handlerTails, { parentId });
6551
6561
  }
6552
6562
  return tails;
6553
6563
  }
@@ -6669,8 +6679,8 @@ export function serialize(built, opts = {}) {
6669
6679
  routed.add(exit.port);
6670
6680
  // Arms CONVERGE, exactly as `.switch()`'s do: every arm that does not
6671
6681
  // end in `.return()` contributes its tail, so the next step fans in
6672
- // from all of them. (`.stepToList` instead gives each arm a private
6673
- // End, which silently drops the flow's outputs on that path —
6682
+ // from all of them. (`.stepToList` instead gives an arm that runs out
6683
+ // of steps an End of its own; `emitEnd` maps the outputs on it,
6674
6684
  // flow-builder-sdk#742.)
6675
6685
  const caseTails = emit(c.body, [{ node: nodeId, port: exit.port }], scope, parentId, breakTarget);
6676
6686
  if (caseTails.length === 0 && stopsAtEnd(c.body))
@@ -6953,8 +6963,6 @@ export function serialize(built, opts = {}) {
6953
6963
  // source must be able to ask for the id the original file had, or the
6954
6964
  // round trip cannot reproduce its own layout block (ReturnOptions.name).
6955
6965
  const id = uid(scope, step.options?.name ?? 'end');
6956
- const node = makeNode(NODE_TYPE.end, id, step.options?.label ?? 'End', { parentId, requestedVersion: step.options?.version });
6957
- node.inputs = {};
6958
6966
  const explicit = {};
6959
6967
  const updates = [];
6960
6968
  for (const [name, expr] of Object.entries(step.values)) {
@@ -6965,12 +6973,7 @@ export function serialize(built, opts = {}) {
6965
6973
  // variable; a variableUpdate for one would be a no-op assignment.
6966
6974
  updates.push({ variableId: name, expression: src });
6967
6975
  }
6968
- const outs = endOutputs(scope, explicit);
6969
- if (Object.keys(outs).length)
6970
- node.outputs = outs;
6971
- scope.nodes.push(node);
6972
- for (const t of tails)
6973
- addEdge(scope, t, id);
6976
+ emitEnd(scope, id, tails, { label: step.options?.label, parentId, requestedVersion: step.options?.version, explicit });
6974
6977
  const extra = step.options?.updates ?? {};
6975
6978
  for (const name of Object.keys(extra)) {
6976
6979
  if (name in step.values) {
@@ -6986,20 +6989,11 @@ export function serialize(built, opts = {}) {
6986
6989
  return tails;
6987
6990
  }
6988
6991
  const finalTails = emit(built.steps, [{ node: built.triggerId ?? 'start', port: 'output' }], root);
6989
- if (finalTails.length) {
6990
- const id = uid(root, 'end');
6991
- const node = makeNode(NODE_TYPE.end, id, 'End');
6992
- node.inputs = {};
6993
- // The implicit End a flow falls off the bottom into still terminates the
6994
- // flow, so it maps the flow's outputs — each to itself, since no `.return`
6995
- // named a value here.
6996
- const outs = endOutputs(root);
6997
- if (Object.keys(outs).length)
6998
- node.outputs = outs;
6999
- root.nodes.push(node);
7000
- for (const t of finalTails)
7001
- addEdge(root, t, id);
7002
- }
6992
+ // The implicit End a flow falls off the bottom into still terminates the
6993
+ // flow, so it maps the flow's outputs — each to itself, since no `.return`
6994
+ // named a value here.
6995
+ if (finalTails.length)
6996
+ emitEnd(root, uid(root, 'end'), finalTails);
7003
6997
  // ── Additional entry points (design §5.1) ────────────────────────────────
7004
6998
  // Emitted AFTER the shared body so their prefixes can join it by name. Once a
7005
6999
  // flow has more than one root, every root carries the platform's entry-point
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uipath/maestro-builder-sdk",
3
- "version": "6.17.1",
3
+ "version": "6.17.3",
4
4
  "description": "Build UiPath Flow, Case, and BPMN artifacts by writing TypeScript.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://docs.uipath.com/maestro",
@@ -92,5 +92,5 @@
92
92
  "@types/node": "^22.7.0",
93
93
  "esbuild": "^0.28.1"
94
94
  },
95
- "gitref": "16311a1f95f57ac9799d42eca556b25e4879fb5d"
95
+ "gitref": "8da4aeeb1592a342b2ac705939e646cd77baa891"
96
96
  }