@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.
Files changed (191) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.cursor-plugin/plugin.json +1 -1
  4. package/CODEOWNERS +12 -14
  5. package/package.json +1 -1
  6. package/skills/uipath-agents/references/coded/embedding-in-flows.md +1 -3
  7. package/skills/uipath-agents/references/coded/quickstart.md +0 -2
  8. package/skills/uipath-agents/references/lowcode/capabilities/inline-in-flow/inline-in-flow.md +10 -8
  9. package/skills/uipath-agents/references/lowcode/prompting/autonomous-agent-prompting-guide.md +1 -1
  10. package/skills/uipath-human-in-the-loop/SKILL.md +1 -3
  11. package/skills/uipath-human-in-the-loop/references/hitl-node-apptask.md +0 -2
  12. package/skills/uipath-human-in-the-loop/references/hitl-node-coded-action-app.md +0 -2
  13. package/skills/uipath-human-in-the-loop/references/hitl-node-quickform.md +2 -2
  14. package/skills/uipath-maestro-flow/.maintenance/README.md +265 -0
  15. package/skills/uipath-maestro-flow/.maintenance/check-all.sh +40 -0
  16. package/skills/uipath-maestro-flow/.maintenance/check-anchors.sh +101 -0
  17. package/skills/uipath-maestro-flow/.maintenance/check-depth.sh +132 -0
  18. package/skills/uipath-maestro-flow/.maintenance/check-link-text.sh +123 -0
  19. package/skills/uipath-maestro-flow/.maintenance/check-links.sh +73 -0
  20. package/skills/uipath-maestro-flow/.maintenance/check-orphans.sh +93 -0
  21. package/skills/uipath-maestro-flow/.maintenance/check-plugin-pairs.sh +39 -0
  22. package/skills/uipath-maestro-flow/.maintenance/check-template.sh +42 -0
  23. package/skills/uipath-maestro-flow/.maintenance/check-uip-commands.sh +270 -0
  24. package/skills/uipath-maestro-flow/.maintenance/check-versions.sh +160 -0
  25. package/skills/uipath-maestro-flow/SKILL.md +69 -886
  26. package/skills/uipath-maestro-flow/references/author/CAPABILITY.md +207 -0
  27. package/skills/uipath-maestro-flow/references/author/brownfield.md +91 -0
  28. package/skills/uipath-maestro-flow/references/author/editing-operations-cli.md +190 -0
  29. package/skills/uipath-maestro-flow/references/author/editing-operations-json.md +374 -0
  30. package/skills/uipath-maestro-flow/references/author/editing-operations.md +104 -0
  31. package/skills/uipath-maestro-flow/references/author/greenfield.md +420 -0
  32. package/skills/uipath-maestro-flow/references/author/planning-arch.md +364 -0
  33. package/skills/uipath-maestro-flow/references/author/planning-impl.md +291 -0
  34. package/skills/uipath-maestro-flow/references/author/plugins/agent/impl.md +237 -0
  35. package/skills/uipath-maestro-flow/references/author/plugins/agent/planning.md +97 -0
  36. package/skills/uipath-maestro-flow/references/author/plugins/agentic-process/impl.md +107 -0
  37. package/skills/uipath-maestro-flow/references/author/plugins/agentic-process/planning.md +61 -0
  38. package/skills/uipath-maestro-flow/references/author/plugins/api-workflow/impl.md +108 -0
  39. package/skills/uipath-maestro-flow/references/author/plugins/api-workflow/planning.md +60 -0
  40. package/skills/uipath-maestro-flow/references/author/plugins/batch-transform/impl.md +171 -0
  41. package/skills/uipath-maestro-flow/references/author/plugins/batch-transform/planning.md +72 -0
  42. package/skills/uipath-maestro-flow/references/author/plugins/connector/impl-inline.md +120 -0
  43. package/skills/uipath-maestro-flow/references/author/plugins/connector/impl.md +463 -0
  44. package/skills/uipath-maestro-flow/references/author/plugins/connector/planning.md +186 -0
  45. package/skills/uipath-maestro-flow/references/author/plugins/connector-trigger/impl.md +517 -0
  46. package/skills/uipath-maestro-flow/references/author/plugins/connector-trigger/planning.md +115 -0
  47. package/skills/uipath-maestro-flow/references/author/plugins/conversational-agent/impl.md +309 -0
  48. package/skills/uipath-maestro-flow/references/author/plugins/conversational-agent/planning.md +133 -0
  49. package/skills/uipath-maestro-flow/references/author/plugins/data-fabric/impl.md +428 -0
  50. package/skills/uipath-maestro-flow/references/author/plugins/data-fabric/planning.md +188 -0
  51. package/skills/uipath-maestro-flow/references/author/plugins/decision/impl.md +83 -0
  52. package/skills/uipath-maestro-flow/references/author/plugins/decision/planning.md +38 -0
  53. package/skills/uipath-maestro-flow/references/author/plugins/delay/impl.md +38 -0
  54. package/skills/uipath-maestro-flow/references/author/plugins/delay/planning.md +53 -0
  55. package/skills/uipath-maestro-flow/references/author/plugins/end/impl.md +56 -0
  56. package/skills/uipath-maestro-flow/references/author/plugins/end/planning.md +28 -0
  57. package/skills/uipath-maestro-flow/references/author/plugins/flow/impl.md +107 -0
  58. package/skills/uipath-maestro-flow/references/author/plugins/flow/planning.md +58 -0
  59. package/skills/uipath-maestro-flow/references/author/plugins/hitl/impl.md +181 -0
  60. package/skills/uipath-maestro-flow/references/author/plugins/hitl/planning.md +166 -0
  61. package/skills/uipath-maestro-flow/references/author/plugins/http/impl-connector.md +86 -0
  62. package/skills/uipath-maestro-flow/references/author/plugins/http/impl-manual.md +68 -0
  63. package/skills/uipath-maestro-flow/references/author/plugins/http/impl.md +173 -0
  64. package/skills/uipath-maestro-flow/references/author/plugins/http/planning.md +107 -0
  65. package/skills/uipath-maestro-flow/references/author/plugins/inline-agent/impl.md +540 -0
  66. package/skills/uipath-maestro-flow/references/author/plugins/inline-agent/planning.md +115 -0
  67. package/skills/uipath-maestro-flow/references/author/plugins/inline-voice-agent/impl.md +269 -0
  68. package/skills/uipath-maestro-flow/references/author/plugins/inline-voice-agent/planning.md +128 -0
  69. package/skills/uipath-maestro-flow/references/author/plugins/ixp/impl.md +424 -0
  70. package/skills/uipath-maestro-flow/references/author/plugins/ixp/planning.md +95 -0
  71. package/skills/uipath-maestro-flow/references/author/plugins/loop/impl.md +403 -0
  72. package/skills/uipath-maestro-flow/references/author/plugins/loop/planning.md +60 -0
  73. package/skills/uipath-maestro-flow/references/author/plugins/merge/impl.md +43 -0
  74. package/skills/uipath-maestro-flow/references/author/plugins/merge/planning.md +24 -0
  75. package/skills/uipath-maestro-flow/references/author/plugins/queue/impl.md +82 -0
  76. package/skills/uipath-maestro-flow/references/author/plugins/queue/planning.md +44 -0
  77. package/skills/uipath-maestro-flow/references/author/plugins/rpa/impl.md +117 -0
  78. package/skills/uipath-maestro-flow/references/author/plugins/rpa/planning.md +61 -0
  79. package/skills/uipath-maestro-flow/references/author/plugins/scheduled-trigger/impl.md +56 -0
  80. package/skills/uipath-maestro-flow/references/author/plugins/scheduled-trigger/planning.md +93 -0
  81. package/skills/uipath-maestro-flow/references/author/plugins/script/impl.md +98 -0
  82. package/skills/uipath-maestro-flow/references/author/plugins/script/planning.md +42 -0
  83. package/skills/uipath-maestro-flow/references/author/plugins/subflow/impl.md +164 -0
  84. package/skills/uipath-maestro-flow/references/author/plugins/subflow/planning.md +35 -0
  85. package/skills/uipath-maestro-flow/references/author/plugins/summarize/impl.md +189 -0
  86. package/skills/uipath-maestro-flow/references/author/plugins/summarize/planning.md +66 -0
  87. package/skills/uipath-maestro-flow/references/author/plugins/switch/impl.md +72 -0
  88. package/skills/uipath-maestro-flow/references/author/plugins/switch/planning.md +34 -0
  89. package/skills/uipath-maestro-flow/references/author/plugins/terminate/impl.md +48 -0
  90. package/skills/uipath-maestro-flow/references/author/plugins/terminate/planning.md +29 -0
  91. package/skills/uipath-maestro-flow/references/author/plugins/transform/impl.md +252 -0
  92. package/skills/uipath-maestro-flow/references/author/plugins/transform/planning.md +47 -0
  93. package/skills/uipath-maestro-flow/references/diagnose/CAPABILITY.md +73 -0
  94. package/skills/uipath-maestro-flow/references/diagnose/failure-modes.md +353 -0
  95. package/skills/uipath-maestro-flow/references/diagnose/troubleshooting-guide.md +174 -0
  96. package/skills/uipath-maestro-flow/references/evaluate/CAPABILITY.md +134 -0
  97. package/skills/uipath-maestro-flow/references/evaluate/commands-reference.md +376 -0
  98. package/skills/uipath-maestro-flow/references/evaluate/eval-sets-guide.md +227 -0
  99. package/skills/uipath-maestro-flow/references/evaluate/evaluators-guide.md +143 -0
  100. package/skills/uipath-maestro-flow/references/evaluate/running-guide.md +215 -0
  101. package/skills/uipath-maestro-flow/references/evaluate/upload-safety.md +94 -0
  102. package/skills/uipath-maestro-flow/references/operate/CAPABILITY.md +77 -0
  103. package/skills/uipath-maestro-flow/references/operate/manage.md +39 -0
  104. package/skills/uipath-maestro-flow/references/operate/run.md +121 -0
  105. package/skills/uipath-maestro-flow/references/operate/ship.md +57 -0
  106. package/skills/uipath-maestro-flow/references/shared/action-nodes.md +100 -0
  107. package/skills/uipath-maestro-flow/references/shared/cli-commands.md +269 -0
  108. package/skills/uipath-maestro-flow/references/shared/cli-conventions.md +178 -0
  109. package/skills/uipath-maestro-flow/references/shared/file-format.md +582 -0
  110. package/skills/uipath-maestro-flow/references/shared/node-output-wiring.md +86 -0
  111. package/skills/uipath-maestro-flow/references/shared/ux-narration-and-todos.md +113 -0
  112. package/skills/uipath-maestro-flow/references/shared/variables-and-expressions.md +787 -0
  113. package/skills/uipath-platform/references/integration-service/activities.md +2 -2
  114. package/skills/uipath-platform/references/integration-service/activity-generation.md +8 -1
  115. package/skills/uipath-platform/references/integration-service/triggers.md +1 -3
  116. package/version-manifest.json +1 -1
  117. package/skills/uipath-maestro-flow/examples/AquariumSafetyStop.flow.ts +0 -26
  118. package/skills/uipath-maestro-flow/examples/ArchiveCardExtract.flow.ts +0 -38
  119. package/skills/uipath-maestro-flow/examples/BakeOffEntryForm.flow.ts +0 -27
  120. package/skills/uipath-maestro-flow/examples/BeeHiveLedger.flow.ts +0 -61
  121. package/skills/uipath-maestro-flow/examples/BeltProgression.flow.ts +0 -53
  122. package/skills/uipath-maestro-flow/examples/BirdCountLookup.flow.ts +0 -24
  123. package/skills/uipath-maestro-flow/examples/ClubDirectory.flow.ts +0 -56
  124. package/skills/uipath-maestro-flow/examples/ConcertSoundcheck.flow.ts +0 -59
  125. package/skills/uipath-maestro-flow/examples/DoorbellLog.flow.ts +0 -45
  126. package/skills/uipath-maestro-flow/examples/FestivalMapScaffold.flow.ts +0 -22
  127. package/skills/uipath-maestro-flow/examples/FieldTripQuickForm.flow.ts +0 -45
  128. package/skills/uipath-maestro-flow/examples/FossilCatalogEnrich.flow.ts +0 -26
  129. package/skills/uipath-maestro-flow/examples/GallerySubmission.flow.ts +0 -67
  130. package/skills/uipath-maestro-flow/examples/GreenhouseWatering.flow.ts +0 -39
  131. package/skills/uipath-maestro-flow/examples/HarbourRadioLine.flow.ts +0 -31
  132. package/skills/uipath-maestro-flow/examples/HerbariumDispatch.flow.ts +0 -34
  133. package/skills/uipath-maestro-flow/examples/KilnReview.flow.ts +0 -38
  134. package/skills/uipath-maestro-flow/examples/LibraryDeskChat.flow.ts +0 -39
  135. package/skills/uipath-maestro-flow/examples/LighthouseSignal.flow.ts +0 -30
  136. package/skills/uipath-maestro-flow/examples/MeteorShowerPages.flow.ts +0 -39
  137. package/skills/uipath-maestro-flow/examples/NeighborhoodWalkPlanner.flow.ts +0 -27
  138. package/skills/uipath-maestro-flow/examples/ObservatorySeeing.flow.ts +0 -51
  139. package/skills/uipath-maestro-flow/examples/OralHistoryDigest.flow.ts +0 -31
  140. package/skills/uipath-maestro-flow/examples/PlanetariumConfirmation.flow.ts +0 -34
  141. package/skills/uipath-maestro-flow/examples/PlantNameAdvisor.flow.ts +0 -28
  142. package/skills/uipath-maestro-flow/examples/PostcardCaption.flow.ts +0 -44
  143. package/skills/uipath-maestro-flow/examples/PotteryStudioCallback.flow.ts +0 -41
  144. package/skills/uipath-maestro-flow/examples/RecipeScaler.flow.ts +0 -62
  145. package/skills/uipath-maestro-flow/examples/SeedPacketReader.flow.ts +0 -49
  146. package/skills/uipath-maestro-flow/examples/TideTableConverter.flow.ts +0 -35
  147. package/skills/uipath-maestro-flow/examples/TrailLogSummary.flow.ts +0 -75
  148. package/skills/uipath-maestro-flow/examples/WorkshopInventory.flow.ts +0 -27
  149. package/skills/uipath-maestro-flow/examples/bindings.json +0 -85
  150. package/skills/uipath-maestro-flow/references/CLI-LOOP.md +0 -309
  151. package/skills/uipath-maestro-flow/references/agent-resources.md +0 -74
  152. package/skills/uipath-maestro-flow/references/agent.md +0 -175
  153. package/skills/uipath-maestro-flow/references/agentic-process.md +0 -41
  154. package/skills/uipath-maestro-flow/references/api-workflow.md +0 -29
  155. package/skills/uipath-maestro-flow/references/author.md +0 -178
  156. package/skills/uipath-maestro-flow/references/batch-transform.md +0 -23
  157. package/skills/uipath-maestro-flow/references/bindings.md +0 -178
  158. package/skills/uipath-maestro-flow/references/branch.md +0 -18
  159. package/skills/uipath-maestro-flow/references/brownfield.md +0 -152
  160. package/skills/uipath-maestro-flow/references/connector-params.md +0 -624
  161. package/skills/uipath-maestro-flow/references/conversational.md +0 -77
  162. package/skills/uipath-maestro-flow/references/data-fabric.md +0 -268
  163. package/skills/uipath-maestro-flow/references/delay.md +0 -26
  164. package/skills/uipath-maestro-flow/references/diagnose.md +0 -141
  165. package/skills/uipath-maestro-flow/references/document-pipeline.md +0 -47
  166. package/skills/uipath-maestro-flow/references/error-handling.md +0 -75
  167. package/skills/uipath-maestro-flow/references/evaluate.md +0 -168
  168. package/skills/uipath-maestro-flow/references/event-trigger.md +0 -155
  169. package/skills/uipath-maestro-flow/references/form-trigger.md +0 -41
  170. package/skills/uipath-maestro-flow/references/hitl.md +0 -169
  171. package/skills/uipath-maestro-flow/references/http.md +0 -105
  172. package/skills/uipath-maestro-flow/references/inline-agent.md +0 -132
  173. package/skills/uipath-maestro-flow/references/ixp.md +0 -167
  174. package/skills/uipath-maestro-flow/references/loops.md +0 -77
  175. package/skills/uipath-maestro-flow/references/manual-trigger.md +0 -39
  176. package/skills/uipath-maestro-flow/references/operate.md +0 -204
  177. package/skills/uipath-maestro-flow/references/or-processes.md +0 -91
  178. package/skills/uipath-maestro-flow/references/parallel-merge.md +0 -21
  179. package/skills/uipath-maestro-flow/references/placeholder.md +0 -70
  180. package/skills/uipath-maestro-flow/references/published-function.md +0 -66
  181. package/skills/uipath-maestro-flow/references/queue.md +0 -53
  182. package/skills/uipath-maestro-flow/references/return.md +0 -20
  183. package/skills/uipath-maestro-flow/references/rpa-workflow.md +0 -27
  184. package/skills/uipath-maestro-flow/references/scheduled-trigger.md +0 -34
  185. package/skills/uipath-maestro-flow/references/script.md +0 -52
  186. package/skills/uipath-maestro-flow/references/subflow.md +0 -33
  187. package/skills/uipath-maestro-flow/references/summarize.md +0 -20
  188. package/skills/uipath-maestro-flow/references/switch.md +0 -20
  189. package/skills/uipath-maestro-flow/references/terminate.md +0 -22
  190. package/skills/uipath-maestro-flow/references/transform.md +0 -32
  191. package/skills/uipath-maestro-flow/references/voice.md +0 -70
@@ -0,0 +1,166 @@
1
+ # HITL Node — Planning
2
+
3
+ The flow needs to pause for a human to review, approve, or fill in data. Two node types serve this need — choose based on form complexity and whether an app already exists.
4
+
5
+ ---
6
+
7
+ ## Which HITL Node to Use
8
+
9
+ | Use case | Node type | Form source |
10
+ | --- | --- | --- |
11
+ | Inline form designed right now (fields + outcomes defined in the flow) | `uipath.human-in-the-loop.quick-form` | Schema embedded in node inputs — no app needed |
12
+ | Existing coded app or Action Center app | `uipath.human-in-the-loop.coded-action-app` | Deployed app from Orchestrator |
13
+
14
+ **Prefer `uipath.human-in-the-loop.quick-form`** for new flows. It is an OOTB node — no registry discovery, no app publishing, no tenant dependency.
15
+
16
+ ---
17
+
18
+ ## Option 1 — `uipath.human-in-the-loop.quick-form` (Inline Schema — OOTB)
19
+
20
+ Node type: `uipath.human-in-the-loop.quick-form`
21
+ Available: always — no `uip login` or registry pull required.
22
+
23
+ ### When to Select
24
+
25
+ | Situation | Select? |
26
+ | --- | --- |
27
+ | Manager approval before processing | Yes |
28
+ | Human reviews extracted data before submission | Yes |
29
+ | Human resolves exceptions the automation cannot handle | Yes |
30
+ | Need a quick form with specific fields and outcomes | Yes |
31
+ | Existing coded/Action Center app should be used | No — use Option 2 |
32
+ | Fully automated processing, no human involvement | No |
33
+ | The user wants to **see** a value the flow produced | Only if a human will open the task — see below |
34
+
35
+ **A HITL node blocks until a human completes its task, so place one only where a human actually will.** The task appears in Action Center; if it has no assignee, or the run is unattended (a schedule, a `flow debug`, an eval), nobody opens it and the flow never reaches its End node. The instance stays `Running` until the caller's timeout, with no output. Every outcome port can be wired correctly and this still happens, so it does not present as the unwired-port failure below.
36
+
37
+ **"Show me the result" does not by itself mean a form.** The mechanisms differ in who can consume them, so ask what *seeing it* means before choosing:
38
+
39
+ | Mechanism | Reaches | Completes unattended |
40
+ | --- | --- | --- |
41
+ | HITL form | a person who opens Action Center | No — blocks until submitted |
42
+ | Message to a channel or mailbox (connector node) | a person wherever they already are | Yes |
43
+ | `out` variable mapped on the End node | whoever or whatever invoked the flow | Yes |
44
+
45
+ With no user to ask, pick one that terminates unattended and record which you chose and why. Do not reach for a form because the request said "display" — that word describes the goal, not the node.
46
+
47
+ ### Ports
48
+
49
+ | Input port | Output port(s) |
50
+ | --- | --- |
51
+ | `input` | one per outcome — `outcome-<outcome.id>`, derived verbatim from `inputs.schema.outcomes[].id` |
52
+
53
+ **Every outcome gets its own port — wire one edge per outcome, not a single shared port.** A schema with `outcomes: [Approve, Reject]` (ids `approve`, `reject`) produces two ports, `outcome-approve` and `outcome-reject`; each needs its own edge. Every outcome needs a non-empty string `id` — one without gets no handle at all, so an edge drawn to a guessed port name is a no-op, not a working branch. A node with any outcome port left unwired blocks the flow indefinitely on that branch.
54
+
55
+ > **`outcome-completed` is the port for a zero-outcome node, or for a real outcome whose `id` is literally `completed`.** It is an ordinary string, not a reserved one, so it can be a genuine outcome port. The instant `inputs.schema.outcomes` has one or more entries with a different `id` — including the shipped default `Submit` (id `submit`) — its port becomes `outcome-submit`, not `outcome-completed`. Never wire `outcome-completed` standing in for several different outcomes.
56
+
57
+ ### Output Variables
58
+
59
+ - `$vars.{nodeId}.output` — object containing all output and inOut fields the human filled in
60
+ - `$vars.{nodeId}.output.{fieldName}` — individual field value
61
+ - `$vars.{nodeId}.status` — selected outcome's action value (`"Continue"` or `"End"`)
62
+
63
+ ### Schema Design
64
+
65
+ The schema defines what the human sees and provides. Three field categories:
66
+
67
+ | Category | Human can… | Use for |
68
+ | --- | --- | --- |
69
+ | `inputs` | Read only | Context the human needs to decide |
70
+ | `outputs` | Write | Data the automation needs back |
71
+ | `inOuts` | Read + modify | Fields the human can see and optionally correct |
72
+
73
+ Outcomes are the action buttons (e.g., Approve/Reject). First outcome is primary.
74
+
75
+ **In the architectural plan**, describe the schema:
76
+ ```
77
+ inputs: [invoiceId (string), amount (number)]
78
+ outputs: [decision (string, required)]
79
+ outcomes: [Approve, Reject]
80
+ priority: Low
81
+ ```
82
+
83
+ Full JSON format and conversion examples: see [`uipath-human-in-the-loop` skill](../../../../../uipath-human-in-the-loop/references/hitl-node-quickform.md).
84
+
85
+ > **Note:** Skills are self-contained — cross-skill references are for documentation context only. The agent uses the `uipath-human-in-the-loop` skill to implement HITL nodes; this planning guide is for topology selection only.
86
+
87
+ ### Wiring Pattern
88
+
89
+ ```
90
+ [Upstream] -> [HITL] ->|outcome-approve| [Continue]
91
+ ->|outcome-reject| [End]
92
+ ```
93
+
94
+ Each outcome branches directly off its own handle — no separate Decision node needed to re-derive the branch from `$vars.{nodeId}.status`.
95
+
96
+ ### Common Topology Patterns
97
+
98
+ **Approval gate:**
99
+ ```
100
+ Trigger -> Fetch Data -> HITL (review, outcomes: Approve/Reject) ->
101
+ outcome-approve: Script (process) -> End
102
+ outcome-reject: Script (log rejection) -> End
103
+ ```
104
+
105
+ **Exception escalation:**
106
+ ```
107
+ Trigger -> Process -> Decision (confidence ok?) ->
108
+ true: Continue -> End
109
+ false: HITL (exception review, outcomes: Retry/Escalate) ->
110
+ outcome-retry: Script (retry with human input) -> End
111
+ outcome-escalate: End
112
+ ```
113
+
114
+ **Do not insert a Decision node after a HITL node to re-branch on outcome.** Each outcome already has its own wired handle — that handle IS the branch point. Reach for a Decision node only where the branch is on something other than the HITL outcome itself (e.g., the confidence check above, which runs before any HITL node).
115
+
116
+ ### Planning Annotation
117
+
118
+ In the node table:
119
+ ```
120
+ | hitlReview | Invoice Review | human-task | uipath.human-in-the-loop.quick-form | inputs: [invoiceId, amount] outputs: [decision] outcomes: [Approve, Reject] | output, status |
121
+ ```
122
+
123
+ ---
124
+
125
+ ## Option 2 — `uipath.core.human-task.{key}` (App-Based)
126
+
127
+ Node type: `uipath.core.human-task.{key}`
128
+ Available: tenant-specific resource — requires `uip login` + `uip maestro flow registry pull`.
129
+
130
+ ### When to Select
131
+
132
+ Use when there is an existing coded app or Action Center app that should be the task form.
133
+
134
+ ### Ports
135
+
136
+ | Input port | Output port |
137
+ | --- | --- |
138
+ | `input` | `output` |
139
+
140
+ ### Output Variables
141
+
142
+ - `$vars.{nodeId}.output` — form data submitted by the user
143
+ - `$vars.{nodeId}.error` — error details if execution fails
144
+
145
+ ### Discovery
146
+
147
+ **Published (tenant registry):**
148
+
149
+ ```bash
150
+ uip maestro flow registry pull --force
151
+ uip maestro flow registry search "uipath.core.human-task" --output json
152
+ ```
153
+
154
+ **In-solution (local, no login required):**
155
+
156
+ ```bash
157
+ uip maestro flow registry list --local --output json
158
+ uip maestro flow registry get "<node-type>" --local --output json
159
+ ```
160
+
161
+ Run from inside the flow project directory. Discovers sibling projects in the same `.uipx` solution.
162
+
163
+ ### Planning Annotation
164
+
165
+ - If the app exists: note as `resource: <name> (human-task)`
166
+ - If it does not exist: note as `[CREATE NEW] <description>` with skill `uipath-coded-apps`, use `core.logic.mock` placeholder
@@ -0,0 +1,86 @@
1
+ # HTTP Request Node — Connector Mode
2
+
3
+ Use this walkthrough when the target service has an IS connector and you want managed auth (OAuth / API key) handled by an existing IS connection.
4
+
5
+ **Prerequisite:** a healthy IS connection for the target connector. Step 2 verifies this. If none exists, propose manual mode as the fallback and confirm the switch with the user before finalizing — do not switch modes without that confirmation.
6
+
7
+ Before starting, read [impl.md](impl.md) for the node type, registry validation, and the "always use `node configure`" rule. Follow Steps 1–5 in order.
8
+
9
+ ## Step 1 — Add the node
10
+
11
+ ```bash
12
+ uip maestro flow node add <ProjectName>.flow core.action.http.v2 \
13
+ --label "<HTTP node label>" --output json
14
+ ```
15
+
16
+ > **Inside a loop body?** Add `--parent <LOOP_NODE_ID>` to set `parentId`. Without it, the node runs outside the loop context and outputs are null. See [loop/impl.md](../loop/impl.md).
17
+
18
+ The CLI copies the manifest into `definitions[]`, adds the node instance, registers `variables.nodes`, and inserts a `layout.nodes` placeholder — byte-for-byte from the registry. Save the returned `<nodeId>` — Steps 2 and 3 reuse it. Leave `inputs` empty; Step 3 populates `inputs.detail`. Do not hand-author the definition — see [impl.md — Add the node](impl.md#add-the-node).
19
+
20
+ ## Step 2 — Identify target connection
21
+
22
+ **Connector mode only works if the connector supports the HTTP request activity** — verify by running `uip is connectors get "<target-connector-key>"` and checking the `HasHttpRequest` flag. If the flag is false, **STOP** — a connection cannot help. Use the recovery question below (switch to manual mode / skip / something else; the create-a-connection option does not apply) and do not switch modes without confirmation.
23
+
24
+ ```bash
25
+ uip is connections list "<target-connector-key>" --all-folders --output json
26
+ ```
27
+
28
+ `--all-folders` is mandatory for discovery. Selection rules, empty-result recovery, and ping verification live in the platform skill — do not duplicate them here.
29
+
30
+ > **MUST READ before any `uip is connections ...` call:** [/uipath:uipath-platform — connections.md](../../../../../uipath-platform/references/integration-service/connections.md).
31
+
32
+ Record the chosen connection's `Id` and `FolderKey` — Step 3 needs both.
33
+
34
+ > **HTTP-specific recovery — no usable connection.** If platform-skill recovery yields nothing (empty after `--all-folders` + `--refresh`, user declines to create one), the HTTP node has unique fallback options. Ask the user to confirm the path — **manual mode is the recommended auto-fallback**, pre-selected, since it unblocks the node without a connection:
35
+ >
36
+ > - **Switch this node to manual mode** *(recommended)* — abandon this walkthrough and follow [impl-manual.md](impl-manual.md). Manual changes the auth model (you supply auth yourself), so this needs explicit confirmation.
37
+ > - **Create a new connection now** — `uip is connections create "<target-connector-key>"` starts the OAuth flow. User completes browser auth themselves, then re-run `uip is connections list` to pick up the new connection.
38
+ > - **Skip this node**.
39
+ > - **Something else**.
40
+ >
41
+ > Auto-try the fallback, but do not finalize a mode switch without the user's confirmation; do not invent a placeholder ID; do not skip the node without explicit selection. See the dropdown question rule in [SKILL.md](../../../../SKILL.md).
42
+
43
+ ## Step 3 — Configure the node
44
+
45
+ > **STOP — open the platform skill before configuring.** Before composing `url` / `query` / `body`, read [/uipath:uipath-platform — http-request.md](../../../../../uipath-platform/references/integration-service/http-request.md) and resolve every value you don't already have (IDs from names, required body fields, endpoint path, response shape).
46
+ >
47
+ > - **If the target connector is listed in that skill's `vendor-docs-registry.json`:** you MUST follow its **Step 0 (Ground Against the Vendor's API Docs)** — read the `docsUrl` + `notes` and confirm the exact endpoint with the `http-request` probe before running `node configure`. Pass the endpoint path verbatim: vendor method names can contain literal dots (Slack ``chat.postMessage`) — the dot is part of the path segment.
48
+ > - **If the connector is NOT listed:** the registry-grounding step does not apply — resolve missing values via the `http-request` probe / vendor docs as usual.
49
+
50
+ ```bash
51
+ uip maestro flow node configure <ProjectName>.flow <nodeId> \
52
+ --detail '{
53
+ "authentication": "connector",
54
+ "targetConnector": "<target-connector-key>",
55
+ "connectionId": "<target-connection-id>",
56
+ "folderKey": "<folder-key>",
57
+ "method": "GET",
58
+ "url": "/api/endpoint",
59
+ "query": {"param1": "value1"}
60
+ }' --output json
61
+ ```
62
+
63
+ > **Connector mode supports `application/json` request and response bodies only.**
64
+
65
+ The CLI:
66
+
67
+ - Builds the full `inputs.detail` (connector, connectionId, bodyParameters, essentialConfiguration)
68
+ - Auto-fills both `bodyParameters.path` and `bodyParameters.url` from the single `url` value you pass
69
+ - Generates `bindings_v2.json`
70
+ - Creates a connection resource file under `resources/solution_folder/connection/`
71
+
72
+ **Dynamic values:** connector input fields do not resolve `{$vars.x}` brace-templates — use `=js:` expressions for any dynamic `url` / `headers` / `body` / `query`. Pass the `=js:` string verbatim in `--detail`. Full rationale and examples: [impl.md — Dynamic values](impl.md#dynamic-values-in-url--headers--body--query).
73
+
74
+ ## Step 4 — (Optional) Response branches
75
+
76
+ Skip unless you need to route downstream paths based on response content (e.g., `items.length > 0` vs empty). For generic call-failure handling use the `error` port in Step 5 instead. Full syntax and rules: [impl.md — Conditional branches](impl.md#conditional-branches).
77
+
78
+ ## Step 5 — Wire edges
79
+
80
+ The HTTP node's target port is `input`. Source ports: `default` (success), `error` (network/non-2xx), `branch-{id}` (one per Step 4 entry). Wire `default` to the next node. Wire `error` to a handler **only when the requirements say what a failed call should do** — with no `error` edge the call faults the flow, which is the correct default, and setting `inputs.errorHandlingEnabled: true` without the edge swallows the failure into a run that reports success. See [file-format.md — Default: off](../../../shared/file-format.md#default-off--enable-only-for-a-failure-the-flow-actually-handles).
81
+
82
+ Edge JSON shapes and all four examples (upstream→node, default→downstream, error→handler, branch→downstream): [impl.md — Wire edges](impl.md#wire-edges).
83
+
84
+ ## Debug
85
+
86
+ See [impl.md — Debug](impl.md#debug). For connector mode, the most common errors are `not_authed` / 401/403 (expired connection — ping it) and `Connection not found` (wrong connector key or connection ID — re-list).
@@ -0,0 +1,68 @@
1
+ # HTTP Request Node — Manual Mode
2
+
3
+ Use this walkthrough when no IS connector exists, the API needs no auth (or auth passed in headers), or you are prototyping against an arbitrary REST endpoint. For connector-managed auth, use [impl-connector.md](impl-connector.md).
4
+
5
+ **No connection lookup is required.** Manual mode uses `ImplicitConnection`; there are no IS bindings.
6
+
7
+ Before starting, read [impl.md](impl.md) for the node type, registry validation, and the **always use `node configure`** rule. Follow Steps 1–4 in order.
8
+
9
+ ## Step 1 — Add the node
10
+
11
+ Run:
12
+
13
+ ```bash
14
+ uip maestro flow node add <ProjectName>.flow core.action.http.v2 \
15
+ --label "<HTTP node label>" --output json
16
+ ```
17
+
18
+ > **Inside a loop body?** Add `--parent <LOOP_NODE_ID>` to set `parentId`. Without it, the node runs outside the loop context and outputs are null. See [loop/impl.md](../loop/impl.md).
19
+
20
+ Save `<nodeId>` for Step 2. Leave `inputs` empty; Step 2 populates `inputs.detail`. Do not hand-author the definition. The CLI copies the manifest byte-for-byte from the registry into `definitions[]`, adds the node instance, registers `variables.nodes`, and inserts a `layout.nodes` placeholder. See [impl.md — Add the node](impl.md#add-the-node).
21
+
22
+ ## Step 2 — Configure the node
23
+
24
+ Resolve missing values before composing `url`, `query`, or `body`, including IDs from names, required body fields, and the response shape. See [/uipath:uipath-platform — http-request.md](../../../../../uipath-platform/references/integration-service/http-request.md).
25
+
26
+ Run:
27
+
28
+ ```bash
29
+ uip maestro flow node configure <ProjectName>.flow <nodeId> \
30
+ --detail '{
31
+ "authentication": "manual",
32
+ "method": "GET",
33
+ "url": "https://api.example.com/endpoint",
34
+ "query": {"param1": "value1"}
35
+ }' --output json
36
+ ```
37
+
38
+ The CLI builds `inputs.detail` with manual auth, `ImplicitConnection`, `bodyParameters`, and `essentialConfiguration`. It does **not** generate `bindings_v2.json` or a connection resource file; manual mode needs neither.
39
+
40
+ Set `url` to a full URL (scheme + host + path). Pass controlled auth headers under `headers`; for example, run:
41
+
42
+ ```bash
43
+ uip maestro flow node configure <ProjectName>.flow <nodeId> \
44
+ --detail '{
45
+ "authentication": "manual",
46
+ "method": "GET",
47
+ "url": "https://api.example.com/me",
48
+ "headers": {"Authorization": "=js:`Bearer ${$vars.apiToken}`"}
49
+ }' --output json
50
+ ```
51
+
52
+ HTTP input fields do not resolve `{$vars.x}` brace-templates. Use `=js:` expressions for dynamic `url`, `headers`, `body`, or `query`, and pass each `=js:` string verbatim in `--detail`. See [impl.md — Dynamic values](impl.md#dynamic-values-in-url--headers--body--query).
53
+
54
+ ## Step 3 — (Optional) Response branches
55
+
56
+ Skip this step unless downstream paths must be routed from response content, such as `items.length > 0` versus empty. Use the `error` port in Step 4 for generic call-failure handling. See [impl.md — Conditional branches](impl.md#conditional-branches).
57
+
58
+ ## Step 4 — Wire edges
59
+
60
+ The HTTP node's target port is `input`. Source ports are `default` (success), `error` (network/non-2xx), and `branch-{id}` (one per Step 3 entry).
61
+
62
+ Wire `default` to the next node. Wire `error` to a handler **only when the requirements specify what a failed call should do**. Without an `error` edge, the call faults the flow, which is the correct default. Do not set `inputs.errorHandlingEnabled: true` without an `error` edge: that swallows the failure into a run that reports success. See [file-format.md — Default: off](../../../shared/file-format.md#default-off--enable-only-for-a-failure-the-flow-actually-handles).
63
+
64
+ See [impl.md — Wire edges](impl.md#wire-edges) for edge JSON shapes and all four examples: upstream→node, default→downstream, error→handler, and branch→downstream.
65
+
66
+ ## Debug
67
+
68
+ See [impl.md — Debug](impl.md#debug). In manual mode, watch for `ImplicitConnection` errors; they indicate a missing `authentication: "manual"` flag or a non-URL `url` value.
@@ -0,0 +1,173 @@
1
+ # HTTP Request Node — Implementation
2
+
3
+ Implement managed HTTP requests with `core.action.http.v2`: choose a mode, add the node with the CLI, configure it with `node configure`, wire its ports, and validate it.
4
+
5
+ ## Node type and mode
6
+
7
+ Use `core.action.http.v2` for every HTTP request. `core.action.http` (v1) is deprecated.
8
+
9
+ | Mode | Use when | Walkthrough |
10
+ | --- | --- | --- |
11
+ | **Connector** | The target system has an IS connector and authentication uses an existing IS connection (OAuth/API key). | [impl-connector.md](impl-connector.md) |
12
+ | **Manual** | No connector exists, the API is public/no-auth, or quick prototyping is required. | [impl-manual.md](impl-manual.md) |
13
+
14
+ Prefer a curated connector activity. If none exists, try connector mode. If it cannot be configured because the connector lacks HTTP request support (`HasHttpRequest` false) or no usable IS connection exists, fall through to manual mode automatically. Confirm the switch with the user before finalizing because manual mode changes authentication. See [impl-connector.md — Step 2](impl-connector.md#step-2--identify-target-connection).
15
+
16
+ The `--detail` payload differs by mode only in `authentication` (`"connector"` or `"manual"`) and connector-only fields `targetConnector`, `connectionId`, and `folderKey`. Connector-mode `url` is relative to the connector base; manual-mode `url` is absolute. Node creation, dynamic values, branches, edges, and debugging are shared.
17
+
18
+ <a id="critical-use-node-configure"></a>
19
+ ## Configure through the CLI
20
+
21
+ Do not hand-write `inputs.detail`, `bindings_v2.json`, or connection resource files. Run `uip maestro flow node configure`; it builds the required configuration from `--detail`, including `essentialConfiguration`. `core.action.http.v2` is CLI-owned per [Author capability — Node ownership](../../CAPABILITY.md#node-ownership--who-authors-the-node), with the same envelope rules as connector activities.
22
+
23
+ ## Validate the registry
24
+
25
+ Run:
26
+
27
+ ```bash
28
+ uip maestro flow registry get core.action.http.v2 --output json
29
+ ```
30
+
31
+ Confirm `Data.Node.handleConfiguration` has target port `input` and source ports `branch-{item.id}` (dynamic, `repeat: inputs.branches`) and `default`; `Data.Node.supportsErrorHandling: true`; and model `serviceType` is `Intsvc.UnifiedHttpRequest`. HTTP v2 uses the implicit `error` port pattern shared by action nodes (see [Action Node Structure](../../../shared/action-nodes.md)).
32
+
33
+ <a id="add-the-node"></a>
34
+ ## Add and configure
35
+
36
+ Run:
37
+
38
+ ```bash
39
+ uip maestro flow node add <ProjectName>.flow core.action.http.v2 \
40
+ --label "<HTTP node label>" --output json
41
+ ```
42
+
43
+ Save the returned node ID. The CLI copies the manifest into `definitions[]`, adds the node to `nodes[]`, registers `variables.nodes`, inserts a `layout.nodes` placeholder byte-for-byte from the registry, and obtains `typeVersion` from the manifest's `version`; do not hardcode it.
44
+
45
+ The CLI initializes:
46
+
47
+ ```json
48
+ "inputs": {
49
+ "branches": [],
50
+ "timeout": "PT15M",
51
+ "retryCount": 0,
52
+ "swaggerDefinition": null,
53
+ "detail": {}
54
+ }
55
+ ```
56
+
57
+ Set `branches`, `timeout`, and `retryCount` during `node add` with `--input`; populate `inputs.detail` only with `node configure --detail`:
58
+
59
+ ```bash
60
+ uip maestro flow node add <ProjectName>.flow core.action.http.v2 \
61
+ --label "<HTTP node label>" \
62
+ --input '{
63
+ "timeout": "PT30M",
64
+ "retryCount": 3,
65
+ "branches": [
66
+ { "id": "hasItems", "name": "Has Items", "conditionExpression": "$self.output.body.items.length > 0" },
67
+ { "id": "empty", "name": "Empty", "conditionExpression": "$self.output.body.items.length == 0" }
68
+ ]
69
+ }' --output json
70
+ ```
71
+
72
+ `timeout` is an ISO 8601 duration such as `PT15M`, `PT1H`, or `P1D` and defaults to `PT15M`. `retryCount` is an integer and defaults to `0`. `branches` is optional and belongs at `inputs.branches`, not `inputs.detail.branches`. Do not edit `inputs.*` afterward or hand-author the definition; run `uip maestro flow node add` and `uip maestro flow node configure`.
73
+
74
+ <a id="dynamic-values-in-url--headers--body--query"></a>
75
+ ## Dynamic values
76
+
77
+ Do not use `{$vars.x}` brace templates in IS activity inputs. Runtime `{...}` interpolation applies to native flow fields, not `inputs.detail.bodyParameters` on HTTP v2 or `uipath.connector.*` activities; such templates can be sent literally and cause a 400 response.
78
+
79
+ Use `=js:` expressions for dynamic URL, header, body, and query values. `$vars` is available in the JavaScript context:
80
+
81
+ ```json
82
+ "bodyParameters": {
83
+ "url": "=js:`https://api.example.com/users/${$vars.userId}/orders`",
84
+ "headers": {
85
+ "Authorization": "=js:'Bearer ' + $vars.apiToken",
86
+ "X-Request-ID": "=js:$metadata.instanceId"
87
+ },
88
+ "query": {
89
+ "since": "=js:$vars.startDate"
90
+ }
91
+ }
92
+ ```
93
+
94
+ Pass the expression string verbatim to `node configure`:
95
+
96
+ ```bash
97
+ uip maestro flow node configure <Project>.flow <nodeId> \
98
+ --detail '{
99
+ "authentication": "manual",
100
+ "method": "GET",
101
+ "url": "=js:`https://api.example.com/users/${$vars.userId}`"
102
+ }' --output json
103
+ ```
104
+
105
+ ## Conditional branches
106
+
107
+ Use branches only to route based on response content, not to handle call failures; failures use the `error` port. Each `inputs.branches` entry creates `branch-{id}`; `$self` refers to the HTTP node output. Set branches with `node add --input`; `node configure --detail` does not accept them. Do not prefix `conditionExpression` with `=js:`; branch conditions are automatically evaluated as JS.
108
+
109
+ ## Wire edges
110
+
111
+ The target port is `input`. Source ports are `default` (primary success output or fallback when no configured branch matches), `error` (network, timeout, or non-2xx failure not caught by a branch), and `branch-{id}` (one per `inputs.branches` entry).
112
+
113
+ Use `Edit` to add edge objects to `edges[]`; do not use `uip maestro flow edge add` for structural wiring. Use exact port names and this shape:
114
+
115
+ ```json
116
+ {
117
+ "id": "e-<upstreamNodeId>-<nodeId>",
118
+ "sourceNodeId": "<upstreamNodeId>",
119
+ "sourcePort": "<port>",
120
+ "targetNodeId": "<nodeId>",
121
+ "targetPort": "input"
122
+ }
123
+ ```
124
+
125
+ For success and error handling:
126
+
127
+ ```json
128
+ {
129
+ "id": "e-<nodeId>-<downstreamNodeId>",
130
+ "sourceNodeId": "<nodeId>",
131
+ "sourcePort": "default",
132
+ "targetNodeId": "<downstreamNodeId>",
133
+ "targetPort": "input"
134
+ }
135
+ ```
136
+
137
+ ```json
138
+ {
139
+ "id": "e-<nodeId>-<errorHandlerId>",
140
+ "sourceNodeId": "<nodeId>",
141
+ "sourcePort": "error",
142
+ "targetNodeId": "<errorHandlerId>",
143
+ "targetPort": "input"
144
+ }
145
+ ```
146
+
147
+ Add an `error` edge only when requirements specify failure behavior. Without one, a failed call faults the flow. When an HTTP node has an outgoing `error` edge, set `inputs.errorHandlingEnabled: true`. `uip maestro flow edge add --source-port error` and `uip maestro flow format` set it automatically; direct JSON edits must set it explicitly. Never set it without an error edge: that suppresses the fault and can report a failed call as successful. See [file-format.md — Default: off](../../../shared/file-format.md#default-off--enable-only-for-a-failure-the-flow-actually-handles).
148
+
149
+ For a branch edge, use:
150
+
151
+ ```json
152
+ {
153
+ "id": "e-<nodeId>-<hasItemsDownstream>",
154
+ "sourceNodeId": "<nodeId>",
155
+ "sourcePort": "branch-hasItems",
156
+ "targetNodeId": "<hasItemsDownstream>",
157
+ "targetPort": "input"
158
+ }
159
+ ```
160
+
161
+ ## Debug
162
+
163
+ | Error | Cause | Fix |
164
+ | --- | --- | --- |
165
+ | `not_authed` or 401/403 | v1 node, missing bindings, or expired connection | Verify `core.action.http.v2`, check `bindings_v2.json`, and ping the connection. |
166
+ | `configuration` field missing | Node was not configured through the CLI | Run `uip maestro flow node configure`; do not hand-write `inputs.detail`. |
167
+ | `flow validate` reports missing `uiPathActivityTypeId` on `core.action.http.v2` | Definition was hand-authored | Remove the node, run `uip maestro flow node add <file> core.action.http.v2 ...`, then run `node configure`. |
168
+ | Connection not found | Wrong connection ID or connector key | Re-run `uip is connections list` for the target connector. |
169
+ | Wrong API response | Incorrect `url` or `query` | Check the target service API documentation. |
170
+ | `ImplicitConnection` errors | Manual mode is misconfigured | Verify `authentication: "manual"` and a full URL. |
171
+ | Flow faults on 4xx/5xx | No `error` edge | This is expected when no fallback is required. Otherwise add `sourcePort: "error"` to an error-handler node. See [Implicit error port on action nodes](../../../shared/file-format.md#implicit-error-port-on-action-nodes). |
172
+ | Flow reports `Completed` although the API call failed | `inputs.errorHandlingEnabled: true` without a handler, or an error edge enters the happy path/success End node | Remove the flag without an error edge; otherwise route the error to a distinct End node with an error/status output or `core.logic.terminate`. See [Do not swallow the failure](../../../shared/file-format.md#do-not-swallow-the-failure). |
173
+ | Edge `source-port output` rejected | Variable namespace used as a port | Use `default`, `error`, or `branch-{id}`. `output` is only the variable namespace `$vars.{nodeId}.output`. |
@@ -0,0 +1,107 @@
1
+ # HTTP Request Node — Planning
2
+
3
+ > **MUST READ FIRST — confirm Managed HTTP Request fits your use case before authoring:** [/uipath:uipath-platform — http-request.md](../../../../../uipath-platform/references/integration-service/http-request.md). This planning doc is the flow-specific layer on top of it.
4
+
5
+ ## Node Type
6
+
7
+ `core.action.http.v2` (Managed HTTP Request)
8
+
9
+ > **Always use `core.action.http.v2`** for all HTTP requests — both connector-authenticated and manual. The older `core.action.http` (v1) is deprecated and does not pass IS credentials at runtime.
10
+
11
+ ## When to Use a Managed HTTP Request Node
12
+
13
+ | Situation | Use Managed HTTP? |
14
+ | --- | --- |
15
+ | Connector exists but lacks the specific curated activity, and does **not** report `V4Compatible` | Yes — connector mode ([impl-connector.md](impl-connector.md)), **if the connector supports HTTP request activity** (verify `HasHttpRequest` — see [Prerequisites](#prerequisites)) |
16
+ | Connector exists but lacks the specific curated activity, and **does** report `V4Compatible` | No — generate a non-catalog activity instead ([connector/planning.md](../connector/planning.md#decision-order)) |
17
+ | No connector exists, but service has a REST API | Yes — manual mode ([impl-manual.md](impl-manual.md)) |
18
+ | Quick prototyping against any REST API | Yes — manual mode ([impl-manual.md](impl-manual.md)) |
19
+ | Connector exists and covers the use case | No — use [Connector Activity](../connector/planning.md) |
20
+ | Target system has no API (desktop app) | No — use [RPA Workflow](../rpa/planning.md) |
21
+
22
+ Both flags come from the same call: `uip is connectors metadata <key> --output json`
23
+ → `Data[0].Flags.V4Compatible` and `Data[0].HasHttpRequest`.
24
+
25
+ For the two-mode concept (connector vs. manual) and the `url` / auth rules per mode, see the platform doc linked at the top.
26
+
27
+ ## Ports
28
+
29
+ | Input Port | Output Port(s) |
30
+ | --- | --- |
31
+ | `input` | `default`, `error`, `branch-{id}` (dynamic, one per `inputs.branches` entry) |
32
+
33
+ - `default` — primary success output, or fallback when configured branches don't match.
34
+ - `error` — implicit error port; fires when the call fails (network error, timeout, non-2xx not caught by a branch). Shared with all action nodes — see [Implicit error port on action nodes](../../../shared/file-format.md#implicit-error-port-on-action-nodes).
35
+ - `branch-{id}` — HTTP-specific, configured via `inputs.branches` (response-content routing). See [Conditional Branches](#conditional-branches) below.
36
+
37
+ ## Output Variables
38
+
39
+ - `$vars.{nodeId}.output` — `{ body, code, method, rawStringBody, request }` on success
40
+ - `$vars.{nodeId}.error` — `{ code, message, detail, category, status }` when the error port fires
41
+
42
+ ## Conditional Branches
43
+
44
+ Use `inputs.branches` when you need to route downstream paths based on response content (e.g., empty vs non-empty results). For generic call-failure handling, prefer the shared `error` port instead — don't enumerate every bad status code as a branch.
45
+
46
+ Each branch's `conditionExpression` is a JS expression with `$self` bound to the current HTTP node's output:
47
+
48
+ ```json
49
+ {
50
+ "inputs": {
51
+ "branches": [
52
+ { "id": "hasItems", "name": "Has Items", "conditionExpression": "$self.output.body.items.length > 0" },
53
+ { "id": "empty", "name": "Empty", "conditionExpression": "$self.output.body.items.length == 0" }
54
+ ]
55
+ }
56
+ }
57
+ ```
58
+
59
+ Wire `branch-hasItems` / `branch-empty` as source ports on outgoing edges. `default` fires when no branch condition matches.
60
+
61
+ > **Do not use `=js:` on `conditionExpression`** — HTTP branch conditions are evaluated as JS automatically (same rule as decision/switch expressions). See [variables-and-expressions.md](../../../shared/variables-and-expressions.md#http-branch-condition-inputsbranchesconditionexpression).
62
+
63
+ ## Dynamic values
64
+
65
+ IS activity input fields (`url`, `headers`, `body`, `query` under `bodyParameters`) do **not** resolve `{$vars.x}` brace-templates — the template runner only applies to native flow fields. Use `=js:` expressions for any dynamic value; template literals with `${...}` interpolation or string concatenation both work. See [Dynamic values](impl.md#dynamic-values-in-url--headers--body--query) for the full rationale and examples.
66
+
67
+ ## Key Inputs (`--detail` for `node configure`)
68
+
69
+ Run `uip maestro flow node configure` with a `--detail` JSON. The CLI builds the full `inputs.detail` payload, `bindings_v2.json`, and connection resource files automatically. **Do not hand-write `inputs.detail`.**
70
+
71
+ **Connector mode** (IS connection auth):
72
+
73
+ | `--detail` Key | Required | Description |
74
+ | --- | --- | --- |
75
+ | `authentication` | Yes | `"connector"` |
76
+ | `method` | Yes | HTTP method: GET, POST, PUT, PATCH, DELETE |
77
+ | `targetConnector` | Yes | Target connector key (e.g., `"uipath-salesforce-slack"`) |
78
+ | `connectionId` | Yes | Target connector's IS connection ID (from `uip is connections list --all-folders`) |
79
+ | `folderKey` | Yes | Orchestrator folder key (from `uip is connections list --all-folders`) |
80
+ | `url` | No | API endpoint URL/path (e.g., `"/conversations.replies"`). Auto-fills both `bodyParameters.path` and `bodyParameters.url`. |
81
+ | `query` | No | Query parameters as key-value object |
82
+ | `headers` | No | Additional headers as key-value object |
83
+ | `body` | No | Request body (for POST/PUT/PATCH). Connector mode is **`application/json` only** (request and response) — no other content type. |
84
+
85
+ **Manual mode** (no connector auth):
86
+
87
+ | `--detail` Key | Required | Description |
88
+ | --- | --- | --- |
89
+ | `authentication` | Yes | `"manual"` |
90
+ | `method` | Yes | HTTP method: GET, POST, PUT, PATCH, DELETE |
91
+ | `url` | Yes | Full target URL |
92
+ | `query` | No | Query parameters as key-value object |
93
+ | `headers` | No | Additional headers as key-value object |
94
+ | `body` | No | Request body (for POST/PUT/PATCH) |
95
+
96
+ ## Prerequisites
97
+
98
+ - `uip login` required (for both modes — node type comes from registry)
99
+ - For connector mode: connector must support the HTTP request activity — verify the `HasHttpRequest` flag via `uip is connectors get "<connector-key>"`. If false, fall back to manual mode — confirm the switch with the user before finalizing. See [impl-connector.md Step 2](impl-connector.md#step-2--identify-target-connection).
100
+ - For connector mode: a healthy IS connection must exist for the **target connector**. If none exists, auto-fall-through to manual mode is the recommended fallback — but confirm the mode switch with the user before finalizing. See [impl-connector.md Step 2 — HTTP-specific recovery](impl-connector.md#step-2--identify-target-connection) for the user-confirmation flow (switch-to-manual / create-now / skip).
101
+ - `uip maestro flow registry pull` to cache the `core.action.http.v2` definition
102
+
103
+ ## Planning Annotation
104
+
105
+ In the architectural plan, annotate managed HTTP nodes as:
106
+ - Connector mode: `managed-http: <service> — <operation>` (e.g., "managed-http: Slack — GET /conversations.replies")
107
+ - Manual mode: `managed-http: manual — <method> <url>` (e.g., "managed-http: manual — GET https://api.example.com/data")