@uipath/skills 1.204.0 → 1.204.1
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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.cursor-plugin/plugin.json +1 -1
- package/CODEOWNERS +12 -14
- package/package.json +1 -1
- package/skills/uipath-agents/references/coded/embedding-in-flows.md +1 -3
- package/skills/uipath-agents/references/coded/quickstart.md +0 -2
- package/skills/uipath-agents/references/lowcode/capabilities/inline-in-flow/inline-in-flow.md +10 -8
- package/skills/uipath-agents/references/lowcode/prompting/autonomous-agent-prompting-guide.md +1 -1
- package/skills/uipath-human-in-the-loop/SKILL.md +1 -3
- package/skills/uipath-human-in-the-loop/references/hitl-node-apptask.md +0 -2
- package/skills/uipath-human-in-the-loop/references/hitl-node-coded-action-app.md +0 -2
- package/skills/uipath-human-in-the-loop/references/hitl-node-quickform.md +2 -2
- package/skills/uipath-maestro-flow/.maintenance/README.md +265 -0
- package/skills/uipath-maestro-flow/.maintenance/check-all.sh +40 -0
- package/skills/uipath-maestro-flow/.maintenance/check-anchors.sh +101 -0
- package/skills/uipath-maestro-flow/.maintenance/check-depth.sh +132 -0
- package/skills/uipath-maestro-flow/.maintenance/check-link-text.sh +123 -0
- package/skills/uipath-maestro-flow/.maintenance/check-links.sh +73 -0
- package/skills/uipath-maestro-flow/.maintenance/check-orphans.sh +93 -0
- package/skills/uipath-maestro-flow/.maintenance/check-plugin-pairs.sh +39 -0
- package/skills/uipath-maestro-flow/.maintenance/check-template.sh +42 -0
- package/skills/uipath-maestro-flow/.maintenance/check-uip-commands.sh +270 -0
- package/skills/uipath-maestro-flow/.maintenance/check-versions.sh +160 -0
- package/skills/uipath-maestro-flow/SKILL.md +69 -886
- package/skills/uipath-maestro-flow/references/author/CAPABILITY.md +207 -0
- package/skills/uipath-maestro-flow/references/author/brownfield.md +91 -0
- package/skills/uipath-maestro-flow/references/author/editing-operations-cli.md +190 -0
- package/skills/uipath-maestro-flow/references/author/editing-operations-json.md +374 -0
- package/skills/uipath-maestro-flow/references/author/editing-operations.md +104 -0
- package/skills/uipath-maestro-flow/references/author/greenfield.md +420 -0
- package/skills/uipath-maestro-flow/references/author/planning-arch.md +364 -0
- package/skills/uipath-maestro-flow/references/author/planning-impl.md +291 -0
- package/skills/uipath-maestro-flow/references/author/plugins/agent/impl.md +237 -0
- package/skills/uipath-maestro-flow/references/author/plugins/agent/planning.md +97 -0
- package/skills/uipath-maestro-flow/references/author/plugins/agentic-process/impl.md +107 -0
- package/skills/uipath-maestro-flow/references/author/plugins/agentic-process/planning.md +61 -0
- package/skills/uipath-maestro-flow/references/author/plugins/api-workflow/impl.md +108 -0
- package/skills/uipath-maestro-flow/references/author/plugins/api-workflow/planning.md +60 -0
- package/skills/uipath-maestro-flow/references/author/plugins/batch-transform/impl.md +171 -0
- package/skills/uipath-maestro-flow/references/author/plugins/batch-transform/planning.md +72 -0
- package/skills/uipath-maestro-flow/references/author/plugins/connector/impl-inline.md +120 -0
- package/skills/uipath-maestro-flow/references/author/plugins/connector/impl.md +463 -0
- package/skills/uipath-maestro-flow/references/author/plugins/connector/planning.md +186 -0
- package/skills/uipath-maestro-flow/references/author/plugins/connector-trigger/impl.md +517 -0
- package/skills/uipath-maestro-flow/references/author/plugins/connector-trigger/planning.md +115 -0
- package/skills/uipath-maestro-flow/references/author/plugins/conversational-agent/impl.md +309 -0
- package/skills/uipath-maestro-flow/references/author/plugins/conversational-agent/planning.md +133 -0
- package/skills/uipath-maestro-flow/references/author/plugins/data-fabric/impl.md +428 -0
- package/skills/uipath-maestro-flow/references/author/plugins/data-fabric/planning.md +188 -0
- package/skills/uipath-maestro-flow/references/author/plugins/decision/impl.md +83 -0
- package/skills/uipath-maestro-flow/references/author/plugins/decision/planning.md +38 -0
- package/skills/uipath-maestro-flow/references/author/plugins/delay/impl.md +38 -0
- package/skills/uipath-maestro-flow/references/author/plugins/delay/planning.md +53 -0
- package/skills/uipath-maestro-flow/references/author/plugins/end/impl.md +56 -0
- package/skills/uipath-maestro-flow/references/author/plugins/end/planning.md +28 -0
- package/skills/uipath-maestro-flow/references/author/plugins/flow/impl.md +107 -0
- package/skills/uipath-maestro-flow/references/author/plugins/flow/planning.md +58 -0
- package/skills/uipath-maestro-flow/references/author/plugins/hitl/impl.md +181 -0
- package/skills/uipath-maestro-flow/references/author/plugins/hitl/planning.md +166 -0
- package/skills/uipath-maestro-flow/references/author/plugins/http/impl-connector.md +86 -0
- package/skills/uipath-maestro-flow/references/author/plugins/http/impl-manual.md +68 -0
- package/skills/uipath-maestro-flow/references/author/plugins/http/impl.md +173 -0
- package/skills/uipath-maestro-flow/references/author/plugins/http/planning.md +107 -0
- package/skills/uipath-maestro-flow/references/author/plugins/inline-agent/impl.md +540 -0
- package/skills/uipath-maestro-flow/references/author/plugins/inline-agent/planning.md +115 -0
- package/skills/uipath-maestro-flow/references/author/plugins/inline-voice-agent/impl.md +269 -0
- package/skills/uipath-maestro-flow/references/author/plugins/inline-voice-agent/planning.md +128 -0
- package/skills/uipath-maestro-flow/references/author/plugins/ixp/impl.md +424 -0
- package/skills/uipath-maestro-flow/references/author/plugins/ixp/planning.md +95 -0
- package/skills/uipath-maestro-flow/references/author/plugins/loop/impl.md +403 -0
- package/skills/uipath-maestro-flow/references/author/plugins/loop/planning.md +60 -0
- package/skills/uipath-maestro-flow/references/author/plugins/merge/impl.md +43 -0
- package/skills/uipath-maestro-flow/references/author/plugins/merge/planning.md +24 -0
- package/skills/uipath-maestro-flow/references/author/plugins/queue/impl.md +82 -0
- package/skills/uipath-maestro-flow/references/author/plugins/queue/planning.md +44 -0
- package/skills/uipath-maestro-flow/references/author/plugins/rpa/impl.md +117 -0
- package/skills/uipath-maestro-flow/references/author/plugins/rpa/planning.md +61 -0
- package/skills/uipath-maestro-flow/references/author/plugins/scheduled-trigger/impl.md +56 -0
- package/skills/uipath-maestro-flow/references/author/plugins/scheduled-trigger/planning.md +93 -0
- package/skills/uipath-maestro-flow/references/author/plugins/script/impl.md +98 -0
- package/skills/uipath-maestro-flow/references/author/plugins/script/planning.md +42 -0
- package/skills/uipath-maestro-flow/references/author/plugins/subflow/impl.md +164 -0
- package/skills/uipath-maestro-flow/references/author/plugins/subflow/planning.md +35 -0
- package/skills/uipath-maestro-flow/references/author/plugins/summarize/impl.md +189 -0
- package/skills/uipath-maestro-flow/references/author/plugins/summarize/planning.md +66 -0
- package/skills/uipath-maestro-flow/references/author/plugins/switch/impl.md +72 -0
- package/skills/uipath-maestro-flow/references/author/plugins/switch/planning.md +34 -0
- package/skills/uipath-maestro-flow/references/author/plugins/terminate/impl.md +48 -0
- package/skills/uipath-maestro-flow/references/author/plugins/terminate/planning.md +29 -0
- package/skills/uipath-maestro-flow/references/author/plugins/transform/impl.md +252 -0
- package/skills/uipath-maestro-flow/references/author/plugins/transform/planning.md +47 -0
- package/skills/uipath-maestro-flow/references/diagnose/CAPABILITY.md +73 -0
- package/skills/uipath-maestro-flow/references/diagnose/failure-modes.md +353 -0
- package/skills/uipath-maestro-flow/references/diagnose/troubleshooting-guide.md +174 -0
- package/skills/uipath-maestro-flow/references/evaluate/CAPABILITY.md +134 -0
- package/skills/uipath-maestro-flow/references/evaluate/commands-reference.md +376 -0
- package/skills/uipath-maestro-flow/references/evaluate/eval-sets-guide.md +227 -0
- package/skills/uipath-maestro-flow/references/evaluate/evaluators-guide.md +143 -0
- package/skills/uipath-maestro-flow/references/evaluate/running-guide.md +215 -0
- package/skills/uipath-maestro-flow/references/evaluate/upload-safety.md +94 -0
- package/skills/uipath-maestro-flow/references/operate/CAPABILITY.md +77 -0
- package/skills/uipath-maestro-flow/references/operate/manage.md +39 -0
- package/skills/uipath-maestro-flow/references/operate/run.md +121 -0
- package/skills/uipath-maestro-flow/references/operate/ship.md +57 -0
- package/skills/uipath-maestro-flow/references/shared/action-nodes.md +100 -0
- package/skills/uipath-maestro-flow/references/shared/cli-commands.md +269 -0
- package/skills/uipath-maestro-flow/references/shared/cli-conventions.md +178 -0
- package/skills/uipath-maestro-flow/references/shared/file-format.md +582 -0
- package/skills/uipath-maestro-flow/references/shared/node-output-wiring.md +86 -0
- package/skills/uipath-maestro-flow/references/shared/ux-narration-and-todos.md +113 -0
- package/skills/uipath-maestro-flow/references/shared/variables-and-expressions.md +787 -0
- package/skills/uipath-platform/references/integration-service/activities.md +2 -2
- package/skills/uipath-platform/references/integration-service/activity-generation.md +8 -1
- package/skills/uipath-platform/references/integration-service/triggers.md +1 -3
- package/version-manifest.json +1 -1
- package/skills/uipath-maestro-flow/examples/AquariumSafetyStop.flow.ts +0 -26
- package/skills/uipath-maestro-flow/examples/ArchiveCardExtract.flow.ts +0 -38
- package/skills/uipath-maestro-flow/examples/BakeOffEntryForm.flow.ts +0 -27
- package/skills/uipath-maestro-flow/examples/BeeHiveLedger.flow.ts +0 -61
- package/skills/uipath-maestro-flow/examples/BeltProgression.flow.ts +0 -53
- package/skills/uipath-maestro-flow/examples/BirdCountLookup.flow.ts +0 -24
- package/skills/uipath-maestro-flow/examples/ClubDirectory.flow.ts +0 -56
- package/skills/uipath-maestro-flow/examples/ConcertSoundcheck.flow.ts +0 -59
- package/skills/uipath-maestro-flow/examples/DoorbellLog.flow.ts +0 -45
- package/skills/uipath-maestro-flow/examples/FestivalMapScaffold.flow.ts +0 -22
- package/skills/uipath-maestro-flow/examples/FieldTripQuickForm.flow.ts +0 -45
- package/skills/uipath-maestro-flow/examples/FossilCatalogEnrich.flow.ts +0 -26
- package/skills/uipath-maestro-flow/examples/GallerySubmission.flow.ts +0 -67
- package/skills/uipath-maestro-flow/examples/GreenhouseWatering.flow.ts +0 -39
- package/skills/uipath-maestro-flow/examples/HarbourRadioLine.flow.ts +0 -31
- package/skills/uipath-maestro-flow/examples/HerbariumDispatch.flow.ts +0 -34
- package/skills/uipath-maestro-flow/examples/KilnReview.flow.ts +0 -38
- package/skills/uipath-maestro-flow/examples/LibraryDeskChat.flow.ts +0 -39
- package/skills/uipath-maestro-flow/examples/LighthouseSignal.flow.ts +0 -30
- package/skills/uipath-maestro-flow/examples/MeteorShowerPages.flow.ts +0 -39
- package/skills/uipath-maestro-flow/examples/NeighborhoodWalkPlanner.flow.ts +0 -27
- package/skills/uipath-maestro-flow/examples/ObservatorySeeing.flow.ts +0 -51
- package/skills/uipath-maestro-flow/examples/OralHistoryDigest.flow.ts +0 -31
- package/skills/uipath-maestro-flow/examples/PlanetariumConfirmation.flow.ts +0 -34
- package/skills/uipath-maestro-flow/examples/PlantNameAdvisor.flow.ts +0 -28
- package/skills/uipath-maestro-flow/examples/PostcardCaption.flow.ts +0 -44
- package/skills/uipath-maestro-flow/examples/PotteryStudioCallback.flow.ts +0 -41
- package/skills/uipath-maestro-flow/examples/RecipeScaler.flow.ts +0 -62
- package/skills/uipath-maestro-flow/examples/SeedPacketReader.flow.ts +0 -49
- package/skills/uipath-maestro-flow/examples/TideTableConverter.flow.ts +0 -35
- package/skills/uipath-maestro-flow/examples/TrailLogSummary.flow.ts +0 -75
- package/skills/uipath-maestro-flow/examples/WorkshopInventory.flow.ts +0 -27
- package/skills/uipath-maestro-flow/examples/bindings.json +0 -85
- package/skills/uipath-maestro-flow/references/CLI-LOOP.md +0 -309
- package/skills/uipath-maestro-flow/references/agent-resources.md +0 -74
- package/skills/uipath-maestro-flow/references/agent.md +0 -175
- package/skills/uipath-maestro-flow/references/agentic-process.md +0 -41
- package/skills/uipath-maestro-flow/references/api-workflow.md +0 -29
- package/skills/uipath-maestro-flow/references/author.md +0 -178
- package/skills/uipath-maestro-flow/references/batch-transform.md +0 -23
- package/skills/uipath-maestro-flow/references/bindings.md +0 -178
- package/skills/uipath-maestro-flow/references/branch.md +0 -18
- package/skills/uipath-maestro-flow/references/brownfield.md +0 -152
- package/skills/uipath-maestro-flow/references/connector-params.md +0 -624
- package/skills/uipath-maestro-flow/references/conversational.md +0 -77
- package/skills/uipath-maestro-flow/references/data-fabric.md +0 -268
- package/skills/uipath-maestro-flow/references/delay.md +0 -26
- package/skills/uipath-maestro-flow/references/diagnose.md +0 -141
- package/skills/uipath-maestro-flow/references/document-pipeline.md +0 -47
- package/skills/uipath-maestro-flow/references/error-handling.md +0 -75
- package/skills/uipath-maestro-flow/references/evaluate.md +0 -168
- package/skills/uipath-maestro-flow/references/event-trigger.md +0 -155
- package/skills/uipath-maestro-flow/references/form-trigger.md +0 -41
- package/skills/uipath-maestro-flow/references/hitl.md +0 -169
- package/skills/uipath-maestro-flow/references/http.md +0 -105
- package/skills/uipath-maestro-flow/references/inline-agent.md +0 -132
- package/skills/uipath-maestro-flow/references/ixp.md +0 -167
- package/skills/uipath-maestro-flow/references/loops.md +0 -77
- package/skills/uipath-maestro-flow/references/manual-trigger.md +0 -39
- package/skills/uipath-maestro-flow/references/operate.md +0 -204
- package/skills/uipath-maestro-flow/references/or-processes.md +0 -91
- package/skills/uipath-maestro-flow/references/parallel-merge.md +0 -21
- package/skills/uipath-maestro-flow/references/placeholder.md +0 -70
- package/skills/uipath-maestro-flow/references/published-function.md +0 -66
- package/skills/uipath-maestro-flow/references/queue.md +0 -53
- package/skills/uipath-maestro-flow/references/return.md +0 -20
- package/skills/uipath-maestro-flow/references/rpa-workflow.md +0 -27
- package/skills/uipath-maestro-flow/references/scheduled-trigger.md +0 -34
- package/skills/uipath-maestro-flow/references/script.md +0 -52
- package/skills/uipath-maestro-flow/references/subflow.md +0 -33
- package/skills/uipath-maestro-flow/references/summarize.md +0 -20
- package/skills/uipath-maestro-flow/references/switch.md +0 -20
- package/skills/uipath-maestro-flow/references/terminate.md +0 -22
- package/skills/uipath-maestro-flow/references/transform.md +0 -32
- package/skills/uipath-maestro-flow/references/voice.md +0 -70
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
# Orchestrator Processes
|
|
2
|
-
|
|
3
|
-
Orchestrator has several process types:
|
|
4
|
-
|
|
5
|
-
- Agent - see [Agent](agent.md)
|
|
6
|
-
- Api - see [API Workflow](api-workflow.md)
|
|
7
|
-
- CaseManagement
|
|
8
|
-
- Flow
|
|
9
|
-
- Function
|
|
10
|
-
- Process
|
|
11
|
-
- ProcessOrchestration - see [Agentic Process](agentic-process.md)
|
|
12
|
-
- TestAutomationProcess
|
|
13
|
-
- WebApp
|
|
14
|
-
|
|
15
|
-
## Finding a process
|
|
16
|
-
|
|
17
|
-
List the available processes with the process type using either of the following commands, depending on if you know the folder:
|
|
18
|
-
|
|
19
|
-
```shell
|
|
20
|
-
uip or processes list --all-folders --process-type !!ProcessType!! --limit 200 --output json
|
|
21
|
-
uip or processes list --folder-path '<folder>' --process-type !!ProcessType!! --limit 200 --output json
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
Replace `!!ProcessType!!` with the process type, e.g. `Agent` or `ProcessOrchestration`.
|
|
25
|
-
|
|
26
|
-
The `list` command is paginated.
|
|
27
|
-
If the output field *Pagination.HasMore* flag is true, there are more results available.
|
|
28
|
-
Use `--offset` to move to the next set of results.
|
|
29
|
-
|
|
30
|
-
The resulting list will have *Name*, *ProcessKey*, and sometimes *Description* fields that may help identify the process you need.
|
|
31
|
-
Note that there is a flag *IsLatestVersion* in case there are multiple published versions with the same process key.
|
|
32
|
-
The *Key* field (GUID) is the unique id for the process.
|
|
33
|
-
|
|
34
|
-
## Getting the inputs and outputs
|
|
35
|
-
|
|
36
|
-
Once you find the process, you must use the `get` command with the *Key* to retrieve more details.
|
|
37
|
-
The inputs and outputs of a published process are buried in the *ArgumentsV2* field that is only exposed when using the `--all-fields` option.
|
|
38
|
-
The *Input* and *Output* parameters inside *ArgumentsV2* are escaped JSON strings.
|
|
39
|
-
The following CLI command can be used to extract inputs and outputs as JSON text:
|
|
40
|
-
|
|
41
|
-
```shell
|
|
42
|
-
uip or processes get BAADF00D-BAAD-F00D-BAAD-F00DBAADF00D --all-fields --output json 2>/dev/null \
|
|
43
|
-
| jq '.Data.ArgumentsV2 | {Input, Output} | map_values(if (. // "") == "" then null else fromjson end)'
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
Here is an example output of this command:
|
|
47
|
-
|
|
48
|
-
```json
|
|
49
|
-
{
|
|
50
|
-
"Input": {
|
|
51
|
-
"type": "object",
|
|
52
|
-
"properties": {
|
|
53
|
-
"productId": {
|
|
54
|
-
"type": "integer",
|
|
55
|
-
"title": "productId"
|
|
56
|
-
}
|
|
57
|
-
},
|
|
58
|
-
"required": []
|
|
59
|
-
},
|
|
60
|
-
"Output": {
|
|
61
|
-
"type": "object",
|
|
62
|
-
"properties": {
|
|
63
|
-
"status": {
|
|
64
|
-
"type": "boolean",
|
|
65
|
-
"title": "status"
|
|
66
|
-
}
|
|
67
|
-
},
|
|
68
|
-
"required": []
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
The defined inputs and outputs would be represented in an action similar to the following:
|
|
74
|
-
|
|
75
|
-
```ts
|
|
76
|
-
.step('intake',
|
|
77
|
-
agenticProcess({
|
|
78
|
-
key: 'BAADF00D-BAAD-F00D-BAAD-F00DBAADF00D',
|
|
79
|
-
name: 'ProcurementProcess',
|
|
80
|
-
folderPath: 'Shared',
|
|
81
|
-
inputs: { productId: 1 }, // input object
|
|
82
|
-
returns: { status: 'boolean' } // output object
|
|
83
|
-
}))
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
## Notes
|
|
87
|
-
|
|
88
|
-
Sometimes you need to search across multiple process types.
|
|
89
|
-
For example, the **ProcessOrchestration**, **CaseManagement**, and **Flow** process types could all be considered "Agentic Processes".
|
|
90
|
-
The `--process-type` filter does not accept multiple entries.
|
|
91
|
-
When performing a `list` command, the default fields returned do not include *ProcessType* so you will need either to use the `--all-fields` option or run multiple `list` commands with each process type.
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# Parallel / Merge
|
|
2
|
-
|
|
3
|
-
Parallel fans control into two or more arms and joins them on a Merge.
|
|
4
|
-
|
|
5
|
-
Signature: `.parallel(name, [armFn, armFn, ...])`; `name` identifies the Merge.
|
|
6
|
-
|
|
7
|
-
```ts
|
|
8
|
-
.parallel('ready', [
|
|
9
|
-
(a) => a.step('weather', http({ url: weatherUrl, managed: false })),
|
|
10
|
-
(b) => b.step('news', http({ url: newsUrl, managed: false })),
|
|
11
|
-
])
|
|
12
|
-
.step('combine', script({ code: 'return "ready";' }))
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
Use parallel only when the arms are independent: neither arm may require the
|
|
16
|
-
other's result before the join. It expresses graph independence, not a promise
|
|
17
|
-
that every executor schedules work concurrently; the local executor processes
|
|
18
|
-
arms in authored order.
|
|
19
|
-
|
|
20
|
-
Work after `.parallel(...)` continues from its `output` port and can read the
|
|
21
|
-
outputs of each arm.
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
# Placeholder
|
|
2
|
-
|
|
3
|
-
*Exact signatures, fields, and defaults: `mock()`.*
|
|
4
|
-
|
|
5
|
-
A placeholder says that a real capability belongs at this point in the graph
|
|
6
|
-
but does not exist yet.
|
|
7
|
-
|
|
8
|
-
Signature: `mock()`.
|
|
9
|
-
|
|
10
|
-
```ts
|
|
11
|
-
.step('extractInvoice', mock())
|
|
12
|
-
.step('continueWithInput', script({
|
|
13
|
-
code: 'return $vars.assumedInvoiceId;' }))
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
Use a real script when downstream work needs temporary fixed data; that script
|
|
17
|
-
has the same behavior locally and after deployment. A script is never a
|
|
18
|
-
stand-in for the capability itself (an extraction, an external service, a
|
|
19
|
-
connector action). Search first, as [SKILL.md, "Choose the node before
|
|
20
|
-
writing it"](../SKILL.md) says, and use the node it finds; for extraction, an
|
|
21
|
-
agent, or a process, run the search exactly as the family reference gives it
|
|
22
|
-
([`ixp.md`](ixp.md), [`agent.md`](agent.md)). Use a placeholder only when that
|
|
23
|
-
search comes back empty; it makes the missing capability visible. Do not use it
|
|
24
|
-
merely to disable a step or as the only work in a finished Flow.
|
|
25
|
-
|
|
26
|
-
When `check` reports `MOCK_HAS_NO_OUTPUT` because a later step reads the mock,
|
|
27
|
-
keep the mock and feed that step from a separate step, as in the example above;
|
|
28
|
-
never replace the mock with a script that fakes its output.
|
|
29
|
-
|
|
30
|
-
## Unknown node types
|
|
31
|
-
|
|
32
|
-
`mock()` is a deliberate placeholder — a node that stands in for work not yet
|
|
33
|
-
decided. It is NOT the way to carry a node the SDK has no factory for: it
|
|
34
|
-
compiles to `core.logic.mock`, so the original type is gone.
|
|
35
|
-
|
|
36
|
-
For that, use `rawNode({ nodeType, version, manifest, inputs? })`. It carries
|
|
37
|
-
the definition the platform serves for that `nodeType@version`, so the node
|
|
38
|
-
keeps its identity and its inputs:
|
|
39
|
-
|
|
40
|
-
```ts
|
|
41
|
-
.step('exotic', rawNode({
|
|
42
|
-
nodeType: 'uipath.exotic.thing', version: '2.1',
|
|
43
|
-
manifest: exoticManifest, // verbatim from `registry get`
|
|
44
|
-
inputs: { where: input('scope') },
|
|
45
|
-
}))
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
Two rules. **The manifest must be real** — an exact copy of what
|
|
49
|
-
`uip maestro flow registry get <nodeType>` returns (after
|
|
50
|
-
`registry pull --force`, since registry reads are cached). A hand-written
|
|
51
|
-
manifest validates locally and fails on the tenant, which resolves the node
|
|
52
|
-
against its own catalog. **Prefer a typed factory** whenever one exists: it
|
|
53
|
-
carries the family's check rules, its defaults and its output contract, none of
|
|
54
|
-
which a raw node can know.
|
|
55
|
-
|
|
56
|
-
**Never for a connector.** A `uipath.connector.*` node type is refused by
|
|
57
|
-
`check` (`RAW_NODE_CONNECTOR`) and by `compile`. A raw node keeps its inputs
|
|
58
|
-
verbatim, so the emitted connector node has no `inputs.detail` and no
|
|
59
|
-
connection binding: `uip maestro flow validate` only warns ("Connector is not
|
|
60
|
-
configured") and the run can never reach Integration Service. Measured on the
|
|
61
|
-
eval archive, every Data Fabric flow authored this way failed its checker. The
|
|
62
|
-
situation that tempts it — `compile` refusing a body field as `unknown input`
|
|
63
|
-
because the static library does not carry it — is what
|
|
64
|
-
`uip maestro registry prepare <key> <action>` exists for (add
|
|
65
|
-
`-f entityName=<Entity>` for a Data Service operation); see the
|
|
66
|
-
[parent-field loop](connector-params.md#schema-dynamic-operations-the-parent-field-loop).
|
|
67
|
-
|
|
68
|
-
`decompile` emits `rawNode(...)` for any node type it cannot name, hoisting the
|
|
69
|
-
manifest to a `const` beside the flow. So `mock()` in decompiled source means
|
|
70
|
-
the flow really contains a placeholder.
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
# Published function
|
|
2
|
-
|
|
3
|
-
*Exact signatures, fields, and defaults: `publishedFunction()`.*
|
|
4
|
-
|
|
5
|
-
A **Function** is a small, single-purpose unit of code deployed to Orchestrator
|
|
6
|
-
as its own resource. `publishedFunction()` invokes one as a single step
|
|
7
|
-
(`uipath.core.function.<key>`, dispatched as
|
|
8
|
-
`Orchestrator.ExecuteFunctionAsync`).
|
|
9
|
-
|
|
10
|
-
Signature: `publishedFunction({ key, name, folderPath, inputs?, returns? })`.
|
|
11
|
-
|
|
12
|
-
```ts
|
|
13
|
-
.step('echo', publishedFunction({
|
|
14
|
-
key: '7059bdb5-fdd7-4e13-9d7b-1748aaeb129d',
|
|
15
|
-
name: 'acme-echo',
|
|
16
|
-
folderPath: 'Shared/acme-echo',
|
|
17
|
-
inputs: { message: input('message') },
|
|
18
|
-
returns: { echoed: 'string' },
|
|
19
|
-
}))
|
|
20
|
-
.step('relay', script({ code: 'return $vars.echo.output.echoed;' }))
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## Identity
|
|
24
|
-
|
|
25
|
-
Three fields, none of them derivable:
|
|
26
|
-
|
|
27
|
-
- **`key`** — the function's GUID; it becomes the node type's suffix, so a wrong
|
|
28
|
-
one emits a node the tenant cannot resolve. Find it with
|
|
29
|
-
`uip maestro flow registry search "uipath.core.function"` (after
|
|
30
|
-
`registry pull --force`, since registry reads are cached).
|
|
31
|
-
- **`name`** — the function's own name in Orchestrator.
|
|
32
|
-
- **`folderPath`** — the folder it is deployed in. **A function is usually
|
|
33
|
-
deployed into a folder of its OWN name** (`'Shared/acme-echo'`, not
|
|
34
|
-
`'Shared'`). The binding's `resourceKey` is `<folderPath>.<name>`, so
|
|
35
|
-
assuming `'Shared'` points the dispatch at nothing while still validating.
|
|
36
|
-
|
|
37
|
-
Two steps on the same function share ONE binding pair, exactly as the other
|
|
38
|
-
published families do.
|
|
39
|
-
|
|
40
|
-
## Declaring what it returns
|
|
41
|
-
|
|
42
|
-
`returns` is required if anything reads the step's output. The function's real
|
|
43
|
-
output arguments live on the tenant and authoring is offline, so an undeclared
|
|
44
|
-
read is rejected (`FUNCTION_READ_WITHOUT_RETURNS`) — nothing here could tell a
|
|
45
|
-
real field from a typo. `registry get uipath.core.function.<key>` shows what the
|
|
46
|
-
platform synthesizes for a deployed one.
|
|
47
|
-
|
|
48
|
-
## Which family to reach for
|
|
49
|
-
|
|
50
|
-
| The deployed thing | Factory |
|
|
51
|
-
| --- | --- |
|
|
52
|
-
| A Function (a unit of code, its own resource) | `publishedFunction()` |
|
|
53
|
-
| A coded API workflow | `apiWorkflow()` |
|
|
54
|
-
| An RPA process | `rpaWorkflow()` |
|
|
55
|
-
| A Maestro process orchestration | `agenticProcess()` |
|
|
56
|
-
|
|
57
|
-
They share one emit path and differ only in service type and binding subtype, so
|
|
58
|
-
picking the wrong one produces a flow that validates and dispatches nothing.
|
|
59
|
-
Match the family the scenario names.
|
|
60
|
-
|
|
61
|
-
## Evidence boundary
|
|
62
|
-
|
|
63
|
-
Offline `validate` proves the node type, the binding pair and the declared
|
|
64
|
-
output schema. That the function exists, accepts those arguments, and returns
|
|
65
|
-
those fields is platform evidence — `.onError(...)` is supported for the
|
|
66
|
-
dispatch failing.
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
# Queue Item
|
|
2
|
-
|
|
3
|
-
*Exact signatures, fields, and defaults: `queueItem()`.*
|
|
4
|
-
|
|
5
|
-
Create work on an Orchestrator queue, optionally waiting for another automation
|
|
6
|
-
to process it.
|
|
7
|
-
|
|
8
|
-
Signature:
|
|
9
|
-
`queueItem({ queue, folderPath, key, item, priority?, reference?, deferDate?, dueDate?, wait?, returns? })`.
|
|
10
|
-
|
|
11
|
-
```ts
|
|
12
|
-
.step('enqueue', queueItem({ queue: 'Invoices', folderPath: 'Shared',
|
|
13
|
-
key: queueKey, item: { InvoiceId: input('invoiceId') },
|
|
14
|
-
reference: input('invoiceId'), wait: false }))
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
## Reading what the create returned
|
|
18
|
-
|
|
19
|
-
The node's output carries the Orchestrator record of the item it created — `Id`,
|
|
20
|
-
`Key`, `UniqueKey`, `Reference`, `Status` and the rest of the queue-item schema.
|
|
21
|
-
Read a field with `out('<step>', '<Field>')`; do NOT add a script step to
|
|
22
|
-
re-derive it, and do not invent a variable for the item:
|
|
23
|
-
|
|
24
|
-
```ts
|
|
25
|
-
.step('enqueue', queueItem({ queue: 'Invoices', folderPath: 'Shared',
|
|
26
|
-
key: queueKey, item: { InvoiceId: input('invoiceId') } }))
|
|
27
|
-
.return({ itemKey: out('enqueue', 'Key') })
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
`out('enqueue', 'Key')` is the whole read. It serializes to
|
|
31
|
-
`$vars.enqueue.output.Key`, the spelling the runtime resolves. A `script()` step
|
|
32
|
-
that reads the node and republishes the key is longer and adds nothing.
|
|
33
|
-
|
|
34
|
-
## Tenant settings
|
|
35
|
-
|
|
36
|
-
Queue-level settings are not present in source. A queue may require unique
|
|
37
|
-
references or enforce an item schema. Inspect it with
|
|
38
|
-
`uip or queues list --all-folders`; derive a required reference from run input
|
|
39
|
-
rather than using a constant that works only once.
|
|
40
|
-
|
|
41
|
-
## Whether to wait
|
|
42
|
-
|
|
43
|
-
Use `wait: true` only when the current Flow needs the consumer's result and a
|
|
44
|
-
real automation drains the queue. Otherwise enqueue and let a separate process
|
|
45
|
-
own consumption. For a waiting step, decide whether failed/abandoned processing
|
|
46
|
-
should be handled or should fault this Flow.
|
|
47
|
-
|
|
48
|
-
## Evidence boundary
|
|
49
|
-
|
|
50
|
-
Replay uses a synthesized item/result. Live mode creates a real item and, for a
|
|
51
|
-
wait, polls its real state. A green create proves the producer side only; a
|
|
52
|
-
green wait also depends on the external consumer and should preserve its item
|
|
53
|
-
key and terminal state as evidence.
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# Return / End
|
|
2
|
-
|
|
3
|
-
Return ends the current path and binds the Flow's declared outputs.
|
|
4
|
-
|
|
5
|
-
Signature: `.return({ outputName: expression, ... })`.
|
|
6
|
-
|
|
7
|
-
```ts
|
|
8
|
-
.branch('valid', out('check'),
|
|
9
|
-
(yes) => yes.return({ status: 'accepted' }),
|
|
10
|
-
(no) => no.return({ status: 'rejected' }))
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
Returning in each arm is appropriate when those paths are complete. Let arms
|
|
14
|
-
fall through to a shared successor when they need common work before the final
|
|
15
|
-
answer. This is different from `.terminate(...)`: Return completes its path
|
|
16
|
-
with values; Terminate aborts the whole run.
|
|
17
|
-
|
|
18
|
-
Any dangling tail gets an End automatically; an explicit `.return(...)` is required
|
|
19
|
-
only when values must be bound. Multiple path ends are emitted as `end`, `end2`,
|
|
20
|
-
`end3`, and so on.
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# RPA Workflow
|
|
2
|
-
|
|
3
|
-
*Exact signatures, fields, and defaults: `rpaWorkflow()`.*
|
|
4
|
-
|
|
5
|
-
Run a published robotic process and wait for its output arguments.
|
|
6
|
-
|
|
7
|
-
Signature: `rpaWorkflow({ key, name, folderPath, inputs?, returns? })`.
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
.step('title', rpaWorkflow({ key: releaseKey,
|
|
11
|
-
name: 'RPA Workflow', folderPath: 'Shared',
|
|
12
|
-
inputs: { problemId: 123 }, returns: { title: 'string' } }))
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Tenant contract
|
|
16
|
-
|
|
17
|
-
The release key, name, and folder must identify the same deployed process.
|
|
18
|
-
Inputs and returns are that process's own argument names and exact casing; the
|
|
19
|
-
offline SDK cannot discover their truth. Inspect the registry/process listing
|
|
20
|
-
and the deployed contract rather than copying values from a different folder.
|
|
21
|
-
|
|
22
|
-
## Evidence boundary
|
|
23
|
-
|
|
24
|
-
Replay proves the graph with synthesized job output. Live evidence should show
|
|
25
|
-
a real Orchestrator job, the intended input arguments, completion, and the
|
|
26
|
-
returned values. Whether the robot performed the right UI/business work is a
|
|
27
|
-
separate assertion from job completion.
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# Scheduled Trigger
|
|
2
|
-
|
|
3
|
-
*Exact signatures, fields, and defaults: `scheduled()`.*
|
|
4
|
-
|
|
5
|
-
A scheduled trigger asks the platform scheduler to start a Flow repeatedly.
|
|
6
|
-
|
|
7
|
-
Signature: `.trigger(scheduled({ every: string }))`.
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
export default flow('nightly')
|
|
11
|
-
.trigger(scheduled({ every: 'R/P1D' }))
|
|
12
|
-
.step('rollup', script({ code: 'return { ok: true };' }))
|
|
13
|
-
.build();
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
## Authoring judgment
|
|
17
|
-
|
|
18
|
-
A timer usually has no caller, so prefer `.var(...)` defaults or tenant-backed
|
|
19
|
-
steps over required caller inputs unless the deployment supplies configured
|
|
20
|
-
values. Pick the interval from the business requirement rather than from what
|
|
21
|
-
is convenient to test.
|
|
22
|
-
|
|
23
|
-
## Evidence boundary
|
|
24
|
-
|
|
25
|
-
Local execution starts the graph directly. It proves the scheduled node was
|
|
26
|
-
emitted with the authored interval and that the downstream graph runs; it does
|
|
27
|
-
not prove the platform scheduler fired. The scheduling claim requires a
|
|
28
|
-
deployed run observed at the requested cadence.
|
|
29
|
-
|
|
30
|
-
`every` is an ISO-8601 repeating interval (`R/PT30M`, `R/PT1H`, `R/P1W`) or a
|
|
31
|
-
Quartz cron expression (`0 0 2 * * ?`, `0 30 9 ? * MON-FRI`). A cron `every`
|
|
32
|
-
selects the trigger's 1.2 definition automatically and emits `timerValue`; an
|
|
33
|
-
ISO interval stays on 1.1 byte-identically. Pinning `{ version: '1.1' }` with a
|
|
34
|
-
cron expression is a compile error.
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
# Script
|
|
2
|
-
|
|
3
|
-
*Exact signatures, fields, and defaults: `script()`.*
|
|
4
|
-
|
|
5
|
-
Script runs inline JavaScript for a computation that has no first-class Flow
|
|
6
|
-
node. Upstream data is available through `$vars`; the result is read with
|
|
7
|
-
`out(step, path?)`.
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
.step('normalize', script({ code: `
|
|
11
|
-
const amount = Number($vars.amount);
|
|
12
|
-
return { amount, valid: Number.isFinite(amount) };
|
|
13
|
-
` }))
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
Use the named first-class node when the scenario needs a connector or HTTP for
|
|
17
|
-
any external data or API call, Transform, Delay, or another product capability,
|
|
18
|
-
whether or not the request names the node. A script is appropriate for
|
|
19
|
-
local calculation, reshaping that needs arbitrary code, or computing a value
|
|
20
|
-
before passing a bare reference to another node.
|
|
21
|
-
|
|
22
|
-
Return an object literal for named fields and read them with `out('parse', 'tag')`;
|
|
23
|
-
read a scalar return with `out('parse')`.
|
|
24
|
-
|
|
25
|
-
## What the step publishes
|
|
26
|
-
|
|
27
|
-
The node's own definition can only say `output: {type: 'object'}` — a node TYPE
|
|
28
|
-
cannot know what a particular body returns — so the designer would type every
|
|
29
|
-
script read as `Record<string, any>` and reject mapping one into a `string` flow
|
|
30
|
-
output. The compiler therefore reads the body and declares what it plainly
|
|
31
|
-
returns, so this needs nothing from you:
|
|
32
|
-
|
|
33
|
-
```ts
|
|
34
|
-
.step('flag', script({ code: 'return "pending-approval";' }))
|
|
35
|
-
.return({ status: out('flag') }) // status: types.string — fine
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
It types, it does not enumerate: an object return stays the open object rather
|
|
39
|
-
than gaining a field list, and nothing is declared unless every `return` in the
|
|
40
|
-
body agrees. A body whose return type is not written down — a runtime read, a
|
|
41
|
-
call — declares nothing, which is where `returns` comes in:
|
|
42
|
-
|
|
43
|
-
```ts
|
|
44
|
-
.step('policyLimit', script({
|
|
45
|
-
code: 'return $vars.fetchPolicy.output.body.limit;',
|
|
46
|
-
returns: 'number',
|
|
47
|
-
}))
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
`returns` always wins over the body, and takes either a type
|
|
51
|
-
(`'string' | 'number' | 'boolean' | 'object' | 'array'`) or, to name the fields
|
|
52
|
-
of an object return, a map — `returns: { total: 'number', currency: 'string' }`.
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
# Subflow
|
|
2
|
-
|
|
3
|
-
*Exact signatures, fields, and defaults: `subflow()`.*
|
|
4
|
-
|
|
5
|
-
Subflow packages a child Flow authored in the same source file as one parent
|
|
6
|
-
step.
|
|
7
|
-
|
|
8
|
-
Signature: `subflow(childFlow, { childInput: expression, ... })`.
|
|
9
|
-
|
|
10
|
-
```ts
|
|
11
|
-
const child = flow('normalize').input({ raw: types.string })
|
|
12
|
-
.output({ clean: types.string })
|
|
13
|
-
.step('trim', script({ code: js`return ${input('raw')}.trim();`.js, returns: { clean: 'string' } }))
|
|
14
|
-
.return({ clean: out('trim', 'clean') }).build();
|
|
15
|
-
export default flow('parent').input({ text: types.string }).output({ clean: types.string })
|
|
16
|
-
.step('normalized', subflow(child, { raw: input('text') })).return({ clean: out('normalized', 'clean') }).build();
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
Read the child's own inputs with `input(...)`, not a hand-written `$vars.raw`. A
|
|
20
|
-
declared input is bound to the node that starts its flow, and a child's start
|
|
21
|
-
node is named after the CALLER — `<callerStepId>Start`. The script above emits
|
|
22
|
-
`return $vars.normalizedStart.output.raw.trim();`, so hand-writing the reference
|
|
23
|
-
would both be wrong and break the moment the parent step is renamed. See
|
|
24
|
-
[`manual-trigger.md`](manual-trigger.md).
|
|
25
|
-
|
|
26
|
-
Use a child for a meaningful contract or a unit of reuse, not as a speed
|
|
27
|
-
optimization or an arbitrary split. Local instrumentation observes the parent
|
|
28
|
-
step's data path; it does not turn that boundary into a separate deployed job.
|
|
29
|
-
|
|
30
|
-
Read a child output by its declared name — `out('reverse', 'reversed')`, never a bare
|
|
31
|
-
`out('reverse')`. The compiler serializes each call's body under top-level `subflows`.
|
|
32
|
-
The same child can be reused at any nesting depth; copied node ids and references
|
|
33
|
-
are re-keyed together so every call site remains isolated.
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# Summarize
|
|
2
|
-
|
|
3
|
-
*Exact signatures, fields, and defaults: `summarize()`.*
|
|
4
|
-
|
|
5
|
-
Reads an attachment and produces a summary given a prompt.
|
|
6
|
-
|
|
7
|
-
Signature: `summarize({ attachment, prompt, returnCitations? })`
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
.step('digest',
|
|
11
|
-
summarize({
|
|
12
|
-
attachment: out('previousNode', 'document'),
|
|
13
|
-
prompt: 'Summarize decisions and owners.',
|
|
14
|
-
returnCitations: true
|
|
15
|
-
}))
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## General
|
|
19
|
-
|
|
20
|
-
- Error **460005** can be transient; retry it once before classifying the failure
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# Switch
|
|
2
|
-
|
|
3
|
-
Switch routes one value among several cases.
|
|
4
|
-
|
|
5
|
-
Signature:
|
|
6
|
-
`.switch(name, on, [{ value: string | number | boolean, label?, body }], defaultFn?)`.
|
|
7
|
-
|
|
8
|
-
```ts
|
|
9
|
-
.switch('priority', input('priority'), [
|
|
10
|
-
{ value: 'high', body: (b) => b.step('page', script({ code: 'return 1;' })) },
|
|
11
|
-
{ value: 'low', body: (b) => b.step('queue', script({ code: 'return 2;' })) },
|
|
12
|
-
], (other) => other.step('normal', script({ code: 'return 3;' })))
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
Prefer Switch when one discriminant selects three or more paths; Branch is
|
|
16
|
-
usually clearer for two. Decide whether cases end independently or rejoin a
|
|
17
|
-
shared successor.
|
|
18
|
-
|
|
19
|
-
Cases compare strictly (`===`) from top to bottom. Each case gets a generated
|
|
20
|
-
`case-<id>` port; the optional final callback uses `default`.
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# Terminate
|
|
2
|
-
|
|
3
|
-
Terminate stops the entire run. In a parallel arm it aborts sibling work; it
|
|
4
|
-
does not complete the Flow with output values.
|
|
5
|
-
|
|
6
|
-
Signature: `.terminate(name, label?)`.
|
|
7
|
-
|
|
8
|
-
```ts
|
|
9
|
-
.branch('fatal', input('fatal'),
|
|
10
|
-
(yes) => yes.terminate('abort', 'Abort run'),
|
|
11
|
-
(no) => no.step('continue', script({ code: 'return "ok";' })))
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
Choose Terminate only when the requirement is stop-all rather than return an
|
|
15
|
-
answer from one path. A green run alone is weak evidence for this node. Use an
|
|
16
|
-
abort-specific witness: for example, show that a sibling side effect never
|
|
17
|
-
happened or that the run reached the terminated state without producing normal
|
|
18
|
-
Flow outputs.
|
|
19
|
-
|
|
20
|
-
Inside a parallel arm it aborts sibling arms, whereas `.return(...)` only ends its
|
|
21
|
-
own path. Its mappings are terminal metadata, not a readable action result:
|
|
22
|
-
`out('<terminate>')` remains invalid.
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# Transform
|
|
2
|
-
|
|
3
|
-
*Exact signatures, fields, and defaults: `transform()`.*
|
|
4
|
-
|
|
5
|
-
Transform applies filter, map, or group-by operations to an array.
|
|
6
|
-
|
|
7
|
-
Signature:
|
|
8
|
-
`transform({ collection, operations, variant?: 'filter' | 'map' | 'group-by' })`.
|
|
9
|
-
Operations are the SDK's `filter`, `map`, and `groupBy` discriminated shapes.
|
|
10
|
-
|
|
11
|
-
```ts
|
|
12
|
-
.step('active', transform({ variant: 'filter', collection: input('rows'),
|
|
13
|
-
operations: [{ type: 'filter', filters: [
|
|
14
|
-
{ field: 'status', condition: 'equals', value: 'active' },
|
|
15
|
-
] }] }))
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## Choosing the shape
|
|
19
|
-
|
|
20
|
-
Prefer a named variant for one standard operation so the canvas communicates
|
|
21
|
-
intent. Use generic Transform for a chain; use Script when the requested
|
|
22
|
-
calculation does not fit the transform operations.
|
|
23
|
-
|
|
24
|
-
## Data-dependent review
|
|
25
|
-
|
|
26
|
-
Operations run in order. A map can remove a field that a later filter or group
|
|
27
|
-
expects, and a plausible misspelled field on untyped input can yield empty
|
|
28
|
-
rows without a structural failure. Review the chain against representative
|
|
29
|
-
items and assert the resulting values, not merely that the node ran.
|
|
30
|
-
|
|
31
|
-
Omit `variant` for the generic node. Set `variant: 'map' | 'filter' | 'group-by'`
|
|
32
|
-
for a single-purpose node; `operations` must then contain exactly one entry.
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
# Voice
|
|
2
|
-
|
|
3
|
-
*Exact signatures, fields, and defaults: `voiceTrigger()`, `createOutgoingCall()`, `endCall()`, `voiceAgent()`.*
|
|
4
|
-
|
|
5
|
-
A voice call is a conversation with an audio front end. It is identified by a
|
|
6
|
-
`callContext` OBJECT — not a bare conversation id — and that object is what
|
|
7
|
-
every voice step is keyed by.
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
// Inbound: the platform hands you the call.
|
|
11
|
-
export default flow('support-line')
|
|
12
|
-
.trigger(voiceTrigger())
|
|
13
|
-
.step('greet', voiceAgent({
|
|
14
|
-
systemPrompt: 'Greet {{input.customerName}} and find out why they called.',
|
|
15
|
-
inputs: { customerName: input('customerName') },
|
|
16
|
-
callContext: out('start', 'callContext'),
|
|
17
|
-
voice: { model: 'gemini-3.1-flash-live-preview', persona: 'Kore' },
|
|
18
|
-
}))
|
|
19
|
-
.step('hangUp', endCall({ callContext: out('start', 'callContext') }))
|
|
20
|
-
.build();
|
|
21
|
-
|
|
22
|
-
// Outbound: the flow places the call.
|
|
23
|
-
.step('dial', createOutgoingCall({ from: '+15550001111', to: input('customerPhone') }))
|
|
24
|
-
.step('talk', voiceAgent({
|
|
25
|
-
systemPrompt: 'Remind {{input.customerName}} about {{input.amount}}.',
|
|
26
|
-
inputs: { customerName: input('customerName'), amount: input('amount') },
|
|
27
|
-
callContext: out('dial', 'callContext'),
|
|
28
|
-
}))
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## The call context
|
|
32
|
-
|
|
33
|
-
`out('start', 'callContext')` (inbound) or `out('<dialStep>', 'callContext')`
|
|
34
|
-
(outbound) is the whole object — `{ type, id, conversationId, … }` — and that is
|
|
35
|
-
what to pass. **Reaching inside it is the mistake this family invites**:
|
|
36
|
-
`out('dial', 'callContext.conversationId')` is a string, the node's schema types
|
|
37
|
-
the field as `object`, and a scalar there passes the file's schema and then
|
|
38
|
-
fails at dispatch. `check` catches it (`VOICE_CALL_CONTEXT_NOT_OBJECT`).
|
|
39
|
-
|
|
40
|
-
Both numbers on `createOutgoingCall` are E.164 — a leading `+` and 7–15 digits
|
|
41
|
-
(`'+15551234567'`). `from` must be a number provisioned on the tenant's
|
|
42
|
-
telephony provider; anything else is rejected when the call is placed, not when
|
|
43
|
-
the flow is validated. `endCall` reads `out('<step>', 'ended')`.
|
|
44
|
-
|
|
45
|
-
## How the agent sounds
|
|
46
|
-
|
|
47
|
-
`voice` takes a VOICE model (a live/realtime one — not the text models
|
|
48
|
-
`inlineAgent` takes) and one of THAT model's personas; the two travel together:
|
|
49
|
-
|
|
50
|
-
| Model | Personas |
|
|
51
|
-
| --- | --- |
|
|
52
|
-
| `gemini-3.1-flash-live-preview` (default) | Aoede, Charon, Fenrir, Kore, Leda, Orus, Puck, Zephyr |
|
|
53
|
-
| `gpt-realtime-2` | alloy, ash, ballad, coral, echo, sage, shimmer, verse |
|
|
54
|
-
|
|
55
|
-
Omit `voice` entirely for the platform default. `maxIterations` is capped at
|
|
56
|
-
**8**, tighter than a text agent's 100, because a caller is waiting on the turn.
|
|
57
|
-
The caller's turn arrives as audio, but the system prompt can use flow context.
|
|
58
|
-
Declare each value under `inputs` and reference it as `{{input.<name>}}`; compile
|
|
59
|
-
emits the runtime bindings and matching sidecar schema. There are no declared
|
|
60
|
-
`returns`: the definition declares what comes back. Compile writes a
|
|
61
|
-
voice-dialect `<source>/agent.json` sidecar (`settings.mode: 'voice'`) beside
|
|
62
|
-
the `.flow`.
|
|
63
|
-
|
|
64
|
-
## Evidence boundary
|
|
65
|
-
|
|
66
|
-
`uipath.agent.voice` is served on this tenant; the trigger and the two call
|
|
67
|
-
actions are `AvailableOnTenant: false` and ship bundled from the workbench
|
|
68
|
-
manifests. Nothing local dials a phone: a green ladder proves the node types,
|
|
69
|
-
the call-context threading and the voice settings. A real call, real audio, and
|
|
70
|
-
what the caller heard are platform evidence.
|