@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
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Agentic Process Node — Implementation
|
|
2
|
+
|
|
3
|
+
Agentic process nodes invoke orchestration processes. Pattern: `uipath.core.agentic-process.{key}`.
|
|
4
|
+
|
|
5
|
+
## Discovery
|
|
6
|
+
|
|
7
|
+
### Published (tenant registry)
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
uip maestro flow registry pull --force
|
|
11
|
+
uip maestro flow registry search "uipath.core.agentic-process" --output json
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
### In-solution (sibling projects)
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
uip maestro flow registry list --local --output json
|
|
18
|
+
uip maestro flow registry get "<node-type>" --local --output json
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Registry Validation
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# Published
|
|
25
|
+
uip maestro flow registry get "uipath.core.agentic-process.{key}" --output json
|
|
26
|
+
|
|
27
|
+
# In-solution
|
|
28
|
+
uip maestro flow registry get "uipath.core.agentic-process.{key}" --local --output json
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Confirm:
|
|
32
|
+
|
|
33
|
+
- Input port: `input`
|
|
34
|
+
- Output port: `output`
|
|
35
|
+
- `model.serviceType` — `Orchestrator.StartAgenticProcess`
|
|
36
|
+
- `model.bindings.resourceSubType` — `ProcessOrchestration`
|
|
37
|
+
- `model.bindings.resourceKey` — the `<FolderPath>.<ProcessName>` string used to scope binding resolution
|
|
38
|
+
- `inputDefinition` — typically empty
|
|
39
|
+
- `outputDefinition.error` — error schema
|
|
40
|
+
|
|
41
|
+
## Adding / Editing
|
|
42
|
+
|
|
43
|
+
For step-by-step add, delete, and wiring procedures, see [editing-operations.md](../../editing-operations.md). Use the JSON structure below for the node-specific `inputs`.
|
|
44
|
+
|
|
45
|
+
## JSON Structure
|
|
46
|
+
|
|
47
|
+
### Node instance (inside `nodes[]`)
|
|
48
|
+
|
|
49
|
+
The instance carries only per-instance data (`inputs`, `outputs`, `display`). BPMN type, serviceType, version, and binding/context templates come from the definition in `definitions[]`.
|
|
50
|
+
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"id": "runOrchestration",
|
|
54
|
+
"type": "uipath.core.agentic-process.5f9ad95a-b862-46c7-98c3-a9be2e5b922f",
|
|
55
|
+
"typeVersion": "<DEFINITION_VERSION>",
|
|
56
|
+
"display": { "label": "Run Orchestration" },
|
|
57
|
+
"inputs": {},
|
|
58
|
+
"outputs": {
|
|
59
|
+
"error": {
|
|
60
|
+
"type": "object",
|
|
61
|
+
"description": "Error information if the agentic process fails",
|
|
62
|
+
"source": "=Error",
|
|
63
|
+
"var": "error"
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Declare `error` only — `output` is derived.** Authoring it makes the converter copy your `source` verbatim; `"=result.response"` then resolves to null at runtime while `flow validate` passes. See [file-format.md § Node outputs](../../../shared/file-format.md#node-outputs).
|
|
70
|
+
|
|
71
|
+
### Top-level `bindings[]` entries (sibling of `nodes`/`edges`/`definitions`)
|
|
72
|
+
|
|
73
|
+
Add one entry per `(resourceKey, propertyAttribute)` pair. Share entries across node instances that reference the same agentic process — do NOT create duplicates.
|
|
74
|
+
|
|
75
|
+
```json
|
|
76
|
+
"bindings": [
|
|
77
|
+
{
|
|
78
|
+
"id": "bRunOrchestrationName",
|
|
79
|
+
"name": "name",
|
|
80
|
+
"type": "string",
|
|
81
|
+
"resource": "process",
|
|
82
|
+
"resourceKey": "Shared.My Orchestration",
|
|
83
|
+
"default": "My Orchestration",
|
|
84
|
+
"propertyAttribute": "name",
|
|
85
|
+
"resourceSubType": "ProcessOrchestration"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"id": "bRunOrchestrationFolderPath",
|
|
89
|
+
"name": "folderPath",
|
|
90
|
+
"type": "string",
|
|
91
|
+
"resource": "process",
|
|
92
|
+
"resourceKey": "Shared.My Orchestration",
|
|
93
|
+
"default": "Shared",
|
|
94
|
+
"propertyAttribute": "folderPath",
|
|
95
|
+
"resourceSubType": "ProcessOrchestration"
|
|
96
|
+
}
|
|
97
|
+
]
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
> For the resolution mechanics and why these entries are required, see [file-format.md — Bindings](../../../shared/file-format.md#bindings--orchestrator-resource-bindings-top-level-bindings).
|
|
101
|
+
|
|
102
|
+
## Debug
|
|
103
|
+
|
|
104
|
+
| Error | Cause | Fix |
|
|
105
|
+
| --- | --- | --- |
|
|
106
|
+
| Node type not found in registry | Process not published or registry stale | Run `uip login` then `uip maestro flow registry pull --force`; for in-solution processes use `--local` |
|
|
107
|
+
| Process execution failed | Underlying orchestration errored | Check `$vars.{nodeId}.error` for details |
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Agentic Process Node — Planning
|
|
2
|
+
|
|
3
|
+
Agentic process nodes invoke orchestration processes from within a flow. Published processes appear in the registry after `uip login` + `uip maestro flow registry pull`. **In-solution** (unpublished) processes in sibling projects are discovered via `--local` — no login or publish required.
|
|
4
|
+
|
|
5
|
+
## Node Type Pattern
|
|
6
|
+
|
|
7
|
+
`uipath.core.agentic-process.{key}`
|
|
8
|
+
|
|
9
|
+
## When to Use
|
|
10
|
+
|
|
11
|
+
Use an Agentic Process node when the flow needs to invoke a published orchestration process.
|
|
12
|
+
|
|
13
|
+
### Selection Heuristics
|
|
14
|
+
|
|
15
|
+
| Situation | Use Agentic Process? |
|
|
16
|
+
| --- | --- |
|
|
17
|
+
| Invoke a published orchestration process | Yes |
|
|
18
|
+
| Invoke a published AI agent | No — use [Agent](../agent/planning.md) |
|
|
19
|
+
| Call another published flow | No — use [Flow](../flow/planning.md) |
|
|
20
|
+
| Need desktop/browser automation | No — use [RPA Workflow](../rpa/planning.md) |
|
|
21
|
+
| Process not yet published but in the same solution | Yes — discover with `--local` (no login or publish needed) |
|
|
22
|
+
| Process does not exist yet | Create it in the same solution, then use `--local` discovery |
|
|
23
|
+
|
|
24
|
+
## Ports
|
|
25
|
+
|
|
26
|
+
| Input Port | Output Port(s) |
|
|
27
|
+
| --- | --- |
|
|
28
|
+
| `input` | `output`, `error` |
|
|
29
|
+
|
|
30
|
+
The `error` port is the implicit error port shared with all action nodes — see [Implicit error port on action nodes](../../../shared/file-format.md#implicit-error-port-on-action-nodes).
|
|
31
|
+
|
|
32
|
+
## Output Variables
|
|
33
|
+
|
|
34
|
+
- `$vars.{nodeId}.error` — error details if execution fails (`code`, `message`, `detail`, `category`, `status`)
|
|
35
|
+
|
|
36
|
+
## Discovery
|
|
37
|
+
|
|
38
|
+
### Published (tenant registry)
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
uip maestro flow registry pull --force
|
|
42
|
+
uip maestro flow registry search "uipath.core.agentic-process" --output json
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Requires `uip login`. Only published agentic processes from your tenant appear.
|
|
46
|
+
|
|
47
|
+
### In-solution (sibling projects)
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
uip maestro flow registry list --local --output json
|
|
51
|
+
uip maestro flow registry get "<node-type>" --local --output json
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
No login or publish required. Discovers unpublished agentic processes in sibling projects within the same solution.
|
|
55
|
+
|
|
56
|
+
## Planning Annotation
|
|
57
|
+
|
|
58
|
+
In the architectural plan:
|
|
59
|
+
|
|
60
|
+
- If the process exists: note as `resource: <name> (agentic-process)`
|
|
61
|
+
- If it does not exist: note as `[CREATE NEW] <description>`
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# API Workflow Node — Implementation
|
|
2
|
+
|
|
3
|
+
API workflow nodes invoke API functions. Pattern: `uipath.core.api-workflow.{key}`.
|
|
4
|
+
|
|
5
|
+
## Discovery
|
|
6
|
+
|
|
7
|
+
### Published (tenant registry)
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
uip maestro flow registry pull --force
|
|
11
|
+
uip maestro flow registry search "uipath.core.api-workflow" --output json
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
### In-solution (sibling projects)
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
uip maestro flow registry list --local --output json
|
|
18
|
+
uip maestro flow registry get "<node-type>" --local --output json
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Registry Validation
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# Published
|
|
25
|
+
uip maestro flow registry get "uipath.core.api-workflow.{key}" --output json
|
|
26
|
+
|
|
27
|
+
# In-solution
|
|
28
|
+
uip maestro flow registry get "uipath.core.api-workflow.{key}" --local --output json
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Confirm:
|
|
32
|
+
|
|
33
|
+
- Input port: `input`
|
|
34
|
+
- Output port: `output`
|
|
35
|
+
- `model.serviceType` — `Orchestrator.ExecuteApiWorkflowAsync`
|
|
36
|
+
- `model.bindings.resourceSubType` — `Api`
|
|
37
|
+
- `model.bindings.resourceKey` — the `<FolderPath>.<ApiName>` string used to scope binding resolution
|
|
38
|
+
- `inputDefinition` — typically empty
|
|
39
|
+
- `outputDefinition` — always `error` (`source: "=Error"`). Whether it also declares `output` varies per published API workflow; either way, do not author `output` on the instance (see § JSON Structure)
|
|
40
|
+
|
|
41
|
+
## Adding / Editing
|
|
42
|
+
|
|
43
|
+
For step-by-step add, delete, and wiring procedures, see [editing-operations.md](../../editing-operations.md). Use the JSON structure below for the node-specific `inputs`.
|
|
44
|
+
|
|
45
|
+
## JSON Structure
|
|
46
|
+
|
|
47
|
+
### Node instance (inside `nodes[]`)
|
|
48
|
+
|
|
49
|
+
The instance carries only per-instance data (`inputs`, `outputs`, `display`). BPMN type, serviceType, version, and binding/context templates come from the definition in `definitions[]`.
|
|
50
|
+
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"id": "callApiFunction",
|
|
54
|
+
"type": "uipath.core.api-workflow.346b8959-c126-48d3-9c46-942abcf944d7",
|
|
55
|
+
"typeVersion": "<DEFINITION_VERSION>",
|
|
56
|
+
"display": { "label": "Call API Function" },
|
|
57
|
+
"inputs": {},
|
|
58
|
+
"outputs": {
|
|
59
|
+
"error": {
|
|
60
|
+
"type": "object",
|
|
61
|
+
"description": "Error information if the API workflow fails",
|
|
62
|
+
"source": "=Error",
|
|
63
|
+
"var": "error"
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Declare `error` only — `output` is derived.** Authoring it makes the converter copy your `source` verbatim; `"=result.response"` then resolves to null at runtime while `flow validate` passes. See [file-format.md § Node outputs](../../../shared/file-format.md#node-outputs).
|
|
70
|
+
|
|
71
|
+
### Top-level `bindings[]` entries (sibling of `nodes`/`edges`/`definitions`)
|
|
72
|
+
|
|
73
|
+
Add one entry per `(resourceKey, propertyAttribute)` pair. Share entries across node instances that reference the same API workflow — do NOT create duplicates.
|
|
74
|
+
|
|
75
|
+
```json
|
|
76
|
+
"bindings": [
|
|
77
|
+
{
|
|
78
|
+
"id": "bCallApiFunctionName",
|
|
79
|
+
"name": "name",
|
|
80
|
+
"type": "string",
|
|
81
|
+
"resource": "process",
|
|
82
|
+
"resourceKey": "Shared.My API Function",
|
|
83
|
+
"default": "My API Function",
|
|
84
|
+
"propertyAttribute": "name",
|
|
85
|
+
"resourceSubType": "Api"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"id": "bCallApiFunctionFolderPath",
|
|
89
|
+
"name": "folderPath",
|
|
90
|
+
"type": "string",
|
|
91
|
+
"resource": "process",
|
|
92
|
+
"resourceKey": "Shared.My API Function",
|
|
93
|
+
"default": "Shared",
|
|
94
|
+
"propertyAttribute": "folderPath",
|
|
95
|
+
"resourceSubType": "Api"
|
|
96
|
+
}
|
|
97
|
+
]
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
> For the resolution mechanics and why these entries are required, see [file-format.md — Bindings](../../../shared/file-format.md#bindings--orchestrator-resource-bindings-top-level-bindings).
|
|
101
|
+
|
|
102
|
+
## Debug
|
|
103
|
+
|
|
104
|
+
| Error | Cause | Fix |
|
|
105
|
+
| --- | --- | --- |
|
|
106
|
+
| Node type not found in registry | API workflow not published or registry stale | Run `uip login` then `uip maestro flow registry pull --force`; for in-solution API workflows use `--local` |
|
|
107
|
+
| Execution failed | Underlying API workflow errored | Check `$vars.{nodeId}.error` for details |
|
|
108
|
+
| Node Completed but `$vars.{nodeId}.output` is null downstream (consumer agent faults `AGENT_STARTUP.INPUT_VALIDATION_ERROR` / incident `170002`) | Instance declares `outputs.output` with `source: "=result.response"`, suppressing the injected `=this` output | Delete the `output` entry — keep `error` only |
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# API Workflow Node — Planning
|
|
2
|
+
|
|
3
|
+
API workflow nodes invoke API functions from within a flow. Published API workflows appear in the registry after `uip login` + `uip maestro flow registry pull`. **In-solution** (unpublished) API workflows in sibling projects are discovered via `--local` — no login or publish required.
|
|
4
|
+
|
|
5
|
+
## Node Type Pattern
|
|
6
|
+
|
|
7
|
+
`uipath.core.api-workflow.{key}`
|
|
8
|
+
|
|
9
|
+
## When to Use
|
|
10
|
+
|
|
11
|
+
Use an API Workflow node when the flow needs to call a published UiPath API function.
|
|
12
|
+
|
|
13
|
+
### Selection Heuristics
|
|
14
|
+
|
|
15
|
+
| Situation | Use API Workflow? |
|
|
16
|
+
| --- | --- |
|
|
17
|
+
| Call a published UiPath API function | Yes |
|
|
18
|
+
| Call an external REST API | No — use [HTTP](../http/planning.md) or [Connector](../connector/planning.md) |
|
|
19
|
+
| Invoke a published RPA process | No — use [RPA Workflow](../rpa/planning.md) |
|
|
20
|
+
| API workflow not yet published but in the same solution | Yes — discover with `--local` (no login or publish needed) |
|
|
21
|
+
| API workflow does not exist yet | Create it in the same solution, then use `--local` discovery |
|
|
22
|
+
|
|
23
|
+
## Ports
|
|
24
|
+
|
|
25
|
+
| Input Port | Output Port(s) |
|
|
26
|
+
| --- | --- |
|
|
27
|
+
| `input` | `output`, `error` |
|
|
28
|
+
|
|
29
|
+
The `error` port is the implicit error port shared with all action nodes — see [Implicit error port on action nodes](../../../shared/file-format.md#implicit-error-port-on-action-nodes).
|
|
30
|
+
|
|
31
|
+
## Output Variables
|
|
32
|
+
|
|
33
|
+
- `$vars.{nodeId}.error` — error details if execution fails (`code`, `message`, `detail`, `category`, `status`)
|
|
34
|
+
|
|
35
|
+
## Discovery
|
|
36
|
+
|
|
37
|
+
### Published (tenant registry)
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
uip maestro flow registry pull --force
|
|
41
|
+
uip maestro flow registry search "uipath.core.api-workflow" --output json
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Requires `uip login`. Only published API workflows from your tenant appear.
|
|
45
|
+
|
|
46
|
+
### In-solution (sibling projects)
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
uip maestro flow registry list --local --output json
|
|
50
|
+
uip maestro flow registry get "<node-type>" --local --output json
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
No login or publish required. Discovers unpublished API workflows in sibling projects within the same solution.
|
|
54
|
+
|
|
55
|
+
## Planning Annotation
|
|
56
|
+
|
|
57
|
+
In the architectural plan:
|
|
58
|
+
|
|
59
|
+
- If the API workflow exists: note as `resource: <name> (api-workflow)`
|
|
60
|
+
- If it does not exist: note as `[CREATE NEW] <description>`
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# Batch Transform Pattern Node — Implementation
|
|
2
|
+
|
|
3
|
+
Batch Transform runs an LLM row-by-row over an attached CSV and appends LLM-generated columns. Node type: `uipath.pattern.batch-transform`; BPMN service task with `serviceType: "ECS.BatchTransform"`. It has no process or connection bindings; inputs are the only configuration source.
|
|
4
|
+
|
|
5
|
+
## Registry validation
|
|
6
|
+
|
|
7
|
+
Run:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
uip maestro flow registry get uipath.pattern.batch-transform --output json
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Confirm:
|
|
14
|
+
|
|
15
|
+
- Input port: `input`.
|
|
16
|
+
- Output ports: `output`, `error`.
|
|
17
|
+
- `model.type`: `bpmn:ServiceTask`.
|
|
18
|
+
- `model.serviceType`: `ECS.BatchTransform`.
|
|
19
|
+
- `inputDefinition.properties`: `attachment` (declared `string`, but runtime requires the full Flow Attachment object `{ ID, FullName, MimeType, Metadata }`; keys are case-sensitive and `ID` is uppercase), `prompt` (string), `enableWebSearchGrounding` (boolean), and `outputColumns` (array of `{ name, description }`). Studio Web's file-picker form serializes the whole object into `attachment` and the engine deserializes it back.
|
|
20
|
+
- `outputDefinition.output.type`: `"file"`.
|
|
21
|
+
- `outputDefinition.output.source`: `"=response"` (the BPMN engine wraps the result under that key, as for every ServiceTask).
|
|
22
|
+
- `outputDefinition.error.schema.required`: `code`, `message`, `detail`, `category`, `status`.
|
|
23
|
+
|
|
24
|
+
If the command reports **"Node type not found: uipath.pattern.batch-transform"**, run `uip tools update` and `uip maestro flow registry pull --force`. If it still fails, this CLI build does not carry the node — there is no tenant setting behind it and no admin to escalate to.
|
|
25
|
+
|
|
26
|
+
## Add or edit the node
|
|
27
|
+
|
|
28
|
+
Pattern nodes are OOTB BPMN service tasks and are **user-owned** per [Author capability — Node ownership](../../CAPABILITY.md#node-ownership--who-authors-the-node). Author them by editing the `.flow` JSON directly with Edit/Write. The `uip maestro flow node add` / `edge add` CLI is reserved for CLI-owned nodes such as connectors, connector-triggers, and managed HTTP. Use Edit/Write for OOTB structural edits—adding the node, wiring edges, and adding the `attachment` flow input. See [editing-operations.md](../../editing-operations.md) for JSON authoring mechanics.
|
|
29
|
+
|
|
30
|
+
## Attachment wiring
|
|
31
|
+
|
|
32
|
+
Declare a flow `in` variable of `type: "file"` bound to the trigger by `triggerNodeId`:
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
"variables": {
|
|
36
|
+
"globals": [
|
|
37
|
+
{
|
|
38
|
+
"id": "csvFile",
|
|
39
|
+
"direction": "in",
|
|
40
|
+
"type": "file",
|
|
41
|
+
"triggerNodeId": "start"
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Reference it through the trigger output:
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
"attachment": "=js:$vars.start.output.csvFile"
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Populate it by running `uip maestro flow debug --attachment <variableId>=<localPath>` (for example, `--attachment csvFile=./path/to/data.csv`). The flag is repeatable; `<variableId>` must match a `variables.globals[]` entry's `id`. See [cli-commands.md — Pre-flight](../../../shared/cli-commands.md#pre-flight---attachment-binding). The CLI uploads the file and binds a full Flow Attachment object `{ ID, FullName, MimeType, Metadata }`; `ID` is uppercase, not `Id`.
|
|
54
|
+
|
|
55
|
+
Do not declare the variable as `type: "object"`, reference it directly as `=js:$vars.<variableId>` without the trigger output path, or pass a bare GUID, URL, path, `.ID`, or `.FullName`.
|
|
56
|
+
|
|
57
|
+
## JSON structure
|
|
58
|
+
|
|
59
|
+
```json
|
|
60
|
+
{
|
|
61
|
+
"id": "categorizeRows",
|
|
62
|
+
"type": "uipath.pattern.batch-transform",
|
|
63
|
+
"typeVersion": "1.0",
|
|
64
|
+
"display": { "label": "Categorize Invoices" },
|
|
65
|
+
"inputs": {
|
|
66
|
+
"attachment": "=js:$vars.start.output.csvFile",
|
|
67
|
+
"prompt": "Classify each invoice by category and write a one-line summary.",
|
|
68
|
+
"enableWebSearchGrounding": false,
|
|
69
|
+
"outputColumns": [
|
|
70
|
+
{ "name": "Category", "description": "One of: Utility, Software, Travel, Other" },
|
|
71
|
+
{ "name": "Summary", "description": "Plain-English one-line summary of the invoice" }
|
|
72
|
+
]
|
|
73
|
+
},
|
|
74
|
+
"outputs": {
|
|
75
|
+
"output": { "type": "file", "source": "=response", "var": "output" },
|
|
76
|
+
"error": {
|
|
77
|
+
"type": "object",
|
|
78
|
+
"description": "Error information if the node fails",
|
|
79
|
+
"source": "=Error",
|
|
80
|
+
"var": "error"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Rules:
|
|
87
|
+
|
|
88
|
+
- Do not add an instance-level `model` block. BPMN type and `serviceType: "ECS.BatchTransform"` belong only in the corresponding `definitions[]` entry; copy that entry verbatim from `uip maestro flow registry get uipath.pattern.batch-transform --output json`. Per [Author capability, rule 15](../../CAPABILITY.md), node instances normally have no `model` block.
|
|
89
|
+
- Set `typeVersion` exactly to `definitions[<batch-transform>].version` from the registry response. Do not guess; use the registry's exact single-dot `x.y` form, such as `"1.0"`, not `"1.0.0"`.
|
|
90
|
+
- `inputs.outputColumns` must be an array of objects with exactly `name` and `description`; do not use a map or string array.
|
|
91
|
+
- Set `outputs.output.source` to the literal `=response`, not `=batchTransformResult`, `=result.output`, or another value.
|
|
92
|
+
- Set `outputs.output.type` to `"file"`; the result is a file handle, not a row array.
|
|
93
|
+
|
|
94
|
+
## End-node output mapping
|
|
95
|
+
|
|
96
|
+
When exposing the result through a flow `out` variable, map the file handle with an `=js:` value expression. Per [Author capability, rule 11](../../CAPABILITY.md), use:
|
|
97
|
+
|
|
98
|
+
```json
|
|
99
|
+
{
|
|
100
|
+
"id": "end",
|
|
101
|
+
"type": "core.control.end",
|
|
102
|
+
"typeVersion": "1.0",
|
|
103
|
+
"outputs": {
|
|
104
|
+
"result": { "source": "=js:$vars.categorizeRows.output" }
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Without `=js:`, the runtime stores the literal string `"$vars.categorizeRows.output"`.
|
|
110
|
+
|
|
111
|
+
## Add via CLI (opt-in, not preferred)
|
|
112
|
+
|
|
113
|
+
The `uip maestro flow node add` / `edge add` CLI is not canonical for OOTB pattern nodes because they are user-owned. Use it only when scripting where Edit/Write is unavailable:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
uip maestro flow node add <FlowName>.flow uipath.pattern.batch-transform \
|
|
117
|
+
--label "<LABEL>" \
|
|
118
|
+
--input '{
|
|
119
|
+
"attachment": "=js:$vars.<triggerId>.output.<fileVarId>",
|
|
120
|
+
"prompt": "<INSTRUCTION describing every output column>",
|
|
121
|
+
"outputColumns": [
|
|
122
|
+
{ "name": "<COLUMN_NAME>", "description": "<WHAT TO PUT IN THIS COLUMN>" }
|
|
123
|
+
],
|
|
124
|
+
"enableWebSearchGrounding": false
|
|
125
|
+
}' \
|
|
126
|
+
--output json
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
`attachment` must resolve through `$vars.<triggerId>.output.<fileVarId>` to the full Flow Attachment object `{ ID, FullName, MimeType, Metadata }`, with case-sensitive keys and uppercase `ID`. Do not pass a bare GUID, URL, byte stream, or path, even though the OOTB `inputDefinition` declares `type: "string"`.
|
|
130
|
+
|
|
131
|
+
## Output access
|
|
132
|
+
|
|
133
|
+
`$vars.{nodeId}.output` is a file handle, not transformed rows. Pass it to a downstream file-consuming node, such as another Batch Transform, an upload/download HTTP or connector step, or a Script that fetches and parses it:
|
|
134
|
+
|
|
135
|
+
```javascript
|
|
136
|
+
const resultFile = $vars.categorizeRows.output;
|
|
137
|
+
return { resultFile };
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
To obtain rows as JSON, add a downstream step that fetches and parses the file. Batch Transform never materializes rows into `$vars`.
|
|
141
|
+
|
|
142
|
+
## Validate
|
|
143
|
+
|
|
144
|
+
Run:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
uip maestro flow validate <FlowName>.flow --output json
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
The validator checks that `attachment`, `prompt`, and `outputColumns` are present and non-empty, and that each `outputColumns` entry has `name` and `description`. It may not catch a bare attachment identifier; such mistakes can pass validation and fail at runtime.
|
|
151
|
+
|
|
152
|
+
## Debug
|
|
153
|
+
|
|
154
|
+
| Error | Cause | Fix |
|
|
155
|
+
| --- | --- | --- |
|
|
156
|
+
| `Node type not found: uipath.pattern.batch-transform` | This CLI build predates Batch Transform support | Run `uip tools update`, then `uip maestro flow registry pull --force`; no tenant setting governs this, so there is no admin to escalate to |
|
|
157
|
+
| Validate rejects `outputColumns` | Wrong shape, such as a map `{ name: description }` or string array | Use `[{ "name": "...", "description": "..." }, ...]` |
|
|
158
|
+
| Runtime error `exceeded maxColumns` | More than 10 output columns | Reduce to ≤10 or split across two Batch Transform nodes chained on the output file |
|
|
159
|
+
| All rows produce blank values for a column | `description` is vague or references fields absent from the source CSV | Name the source column(s) in the description and test with a small sample |
|
|
160
|
+
| Latency spikes / higher cost than expected | `enableWebSearchGrounding: true` is unnecessary | Set it to false unless rows need facts the LLM cannot infer from the row itself |
|
|
161
|
+
| Output file has the original row count but no new columns | Requested transformations duplicate source columns, so the LLM skipped them | Ensure every `outputColumns[].name` is new and not already in the source CSV |
|
|
162
|
+
|
|
163
|
+
## What not to do
|
|
164
|
+
|
|
165
|
+
- Do not hand-author `model.bindings`; Batch Transform has no process or connector binding. A `bindings` block may be stripped or cause validation errors.
|
|
166
|
+
- Do not pass `--source` to `uip maestro flow node add`; `--source` is only for inline agent nodes (`uipath.agent.autonomous`).
|
|
167
|
+
- Do not reshape `outputColumns` into a map; the array of `{name, description}` is contractual with the canvas property panel and BPMN `ECS.BatchTransform` serializer.
|
|
168
|
+
- Do not reference downstream rows inside the prompt; rows are processed independently and sibling rows are unavailable. Pre-aggregate or use [Summarize](../summarize/impl.md) on a synthesized document instead.
|
|
169
|
+
- Do not chain `$vars.{nodeId}.output` directly into a Script expecting rows; it is a file handle.
|
|
170
|
+
- Do not pass `attachment` as a bare string id, GUID, URL, or path. The runtime requires `{ ID, FullName, MimeType, Metadata }`, with uppercase `ID`; use a `type: "file"` flow `in` variable bound by `triggerNodeId` and reference it as `=js:$vars.<triggerId>.output.<fileVarId>` (see Key Inputs in `planning.md).
|
|
171
|
+
- Do not write `outputs.output.source: "=batchTransformResult"`; the canonical value is `"=response"`, as for every BPMN ServiceTask.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Batch Transform Pattern Node — Planning
|
|
2
|
+
|
|
3
|
+
The Batch Transform node runs an LLM over every row of an attached CSV (or similar tabular file) and appends one or more **LLM-generated columns** to each row. Think "row-wise enrichment with a prompt" — classification, summarization, entity extraction, categorization. It lives in the **Tool** section of the add-node panel (between Script and Transform).
|
|
4
|
+
|
|
5
|
+
## Node Type
|
|
6
|
+
|
|
7
|
+
`uipath.pattern.batch-transform`
|
|
8
|
+
|
|
9
|
+
This is a fixed OOTB node type — no registry suffix, one version. Whether it appears in `uip maestro flow registry list` is a property of the CLI build, not of the tenant: the CLI asks for a fixed set of OOTB node manifests, and the server only adds dynamic nodes on top — it never withholds an OOTB one. If the node is missing, upgrade the CLI.
|
|
10
|
+
|
|
11
|
+
## When to Use
|
|
12
|
+
|
|
13
|
+
Use Batch Transform when the task is **"do this to every row"** and the per-row work requires natural-language reasoning that is impractical to express as code.
|
|
14
|
+
|
|
15
|
+
### Selection Heuristics
|
|
16
|
+
|
|
17
|
+
| Situation | Use Batch Transform? |
|
|
18
|
+
| --- | --- |
|
|
19
|
+
| Add LLM-generated columns to each row of a CSV (category, sentiment, one-line summary) | Yes |
|
|
20
|
+
| Enrich rows with web-searched facts (e.g., look up a company's HQ city per row) | Yes — set `enableWebSearchGrounding: true` |
|
|
21
|
+
| Small ad-hoc data shape change (rename, filter, groupBy) on an in-memory array | No — use [Transform](../transform/planning.md) |
|
|
22
|
+
| Per-row side effects (API calls, DB writes) | No — use [Loop](../loop/planning.md) with the per-row action inside |
|
|
23
|
+
| Reason over a **single** document and produce a synthesis with citations | No — use [Summarize](../summarize/planning.md) |
|
|
24
|
+
| Row-count unknown but small (< 20) and the agent should decide how to reason | Consider [Agent](../agent/planning.md) with the collection in its context instead |
|
|
25
|
+
|
|
26
|
+
### Anti-Patterns
|
|
27
|
+
|
|
28
|
+
- **Do not use Batch Transform for deterministic work.** If the new column is a formula, regex match, or date reformat, use [Transform](../transform/planning.md) or [Script](../script/planning.md) — the LLM adds cost and latency for no accuracy gain.
|
|
29
|
+
- **Do not use Batch Transform as a general loop.** It only produces new columns attached to the same rows; it cannot call APIs or perform side effects per row. Use [Loop](../loop/planning.md) for that.
|
|
30
|
+
- **Do not pass reasoning-heavy instructions that depend on the whole document.** Each row is processed with only its own values plus the prompt — it cannot "see" other rows or an external document. For cross-row reasoning, pre-aggregate with [Transform](../transform/planning.md) first, or use [Summarize](../summarize/planning.md) over a synthesized attachment.
|
|
31
|
+
|
|
32
|
+
## Ports
|
|
33
|
+
|
|
34
|
+
| Port | Position | Direction | Use |
|
|
35
|
+
| --- | --- | --- | --- |
|
|
36
|
+
| `input` | left | target | Flow sequence input |
|
|
37
|
+
| `output` | right | source | Produced file handle with the new columns appended |
|
|
38
|
+
| `error` | right | source | Error handler (populated when the batch job fails) |
|
|
39
|
+
|
|
40
|
+
No artifact ports. Pattern-style nodes do not wire to resource files — the prompt and column definitions live on the node inputs.
|
|
41
|
+
|
|
42
|
+
## Output Variables
|
|
43
|
+
|
|
44
|
+
- `$vars.{nodeId}.output` — the result file handle. The OOTB definition declares `outputDefinition.output.type: "file"` (no nested schema today), and `source: "=response"` — i.e. the BPMN engine returns its result wrapped under the `response` key. Pass `$vars.{nodeId}.output` to downstream nodes that consume files (e.g., another Batch Transform, a connector that uploads the result, a Script that fetches and parses).
|
|
45
|
+
- `$vars.{nodeId}.error` — populated on failure: `{ code, message, detail, category, status }`.
|
|
46
|
+
|
|
47
|
+
## Key Inputs
|
|
48
|
+
|
|
49
|
+
| Input | Required | Type | Description |
|
|
50
|
+
| --- | --- | --- | --- |
|
|
51
|
+
| `attachment` | Yes | full Flow Attachment | The runtime engine wants the **full Flow Attachment object** `{ ID, FullName, MimeType, Metadata }` — keys are case-sensitive; `ID` is uppercase, not `Id`. Source it as a flow-level `in` variable of `type: "file"` bound to the trigger via `triggerNodeId: "<triggerId>"`. The variable's payload is populated by `uip maestro flow debug --attachment <fileVarId>=<path>` (repeatable; `<fileVarId>=` must match the variable's `id` — see [cli-commands.md — Pre-flight](../../../shared/cli-commands.md#pre-flight---attachment-binding)). Reference it on the Batch Transform node as `=js:$vars.<triggerId>.output.<fileVarId>` — that path resolves to the whole Attachment object at runtime. The OOTB `inputDefinition.attachment` declares `type: "string"` because Studio Web's file-picker form serializes the object into that string slot at save time; the engine deserializes it back. **Never** wire a bare GUID, URL, byte stream, file path, or `.ID`/`.FullName` subfield. |
|
|
52
|
+
| `prompt` | Yes | string | The instruction describing what each output column should contain. Can reference column names from the source via natural language ("summarize the `Description` field"). |
|
|
53
|
+
| `outputColumns` | Yes | array of `{ name, description }` | The columns to produce. Max 10. `name` is the column header; `description` tells the LLM what to put in it. |
|
|
54
|
+
| `enableWebSearchGrounding` | No | boolean | When `true`, the LLM can issue web searches per row to ground its answer. Slower and costlier — use only when rows need external facts. Default `false`. |
|
|
55
|
+
|
|
56
|
+
### `outputColumns` shape
|
|
57
|
+
|
|
58
|
+
```json
|
|
59
|
+
[
|
|
60
|
+
{ "name": "Category", "description": "One of: Invoice, Receipt, Contract, Other" },
|
|
61
|
+
{ "name": "Summary", "description": "One-line plain-English summary of the row" }
|
|
62
|
+
]
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Do not reshape — the canvas editor writes exactly this `{ name, description }` shape, and downstream serialization (BPMN `ECS.BatchTransform` service task) depends on it.
|
|
66
|
+
|
|
67
|
+
## Planning Annotation
|
|
68
|
+
|
|
69
|
+
In the architectural plan:
|
|
70
|
+
|
|
71
|
+
- `pattern: batch-transform — <one-line purpose>` with a placeholder for the attachment source (usually a `$vars.<upstream>.output.*` file handle) and the list of output column names.
|
|
72
|
+
- Call out `enableWebSearchGrounding` in **Open Questions** if the requirements hint at external lookups but are not explicit — the cost/latency jump warrants confirmation.
|