@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,120 @@
1
+ # Connector Activity Nodes — Non-catalog (inline) activities
2
+
3
+ Use this walkthrough for a node whose type is `uipath.connector.custom.<connector-key>.<slug>`: an activity Integration Service does **not** carry, generated from the vendor's API docs by [/uipath:uipath-platform — activity-generation.md](../../../../../uipath-platform/references/integration-service/activity-generation.md). The node carries the whole activity — its metadata and its scripts — and the CLI builds the `definitions[]` entry from that metadata instead of fetching it from the registry.
4
+
5
+ Everything **not** listed here is identical to [impl.md](impl.md): follow its Configuration workflow and substitute only the steps below. The ownership rules do not change — `definitions[]` and `inputs.detail` are still CLI-written; you never hand-author either.
6
+
7
+ ## When this applies
8
+
9
+ - Tier 2 of the [decision order](planning.md#decision-order): the connector exists, lacks the curated activity, and reports `V4Compatible: true`.
10
+ - The activity is **already generated** — you have `<Name>.json` (the compiled activity metadata) and one `<scriptRef>.js` per action and lookup. If you do not, invoke the `uipath-platform` skill's activity generation ([activity-generation.md](../../../../../uipath-platform/references/integration-service/activity-generation.md)) to produce them, then resume here with the artifacts. This is a sanctioned exception to [SKILL.md rule #4](../../../../SKILL.md#critical-rules-universal): no user prompt is needed once the connector gap is confirmed and `V4Compatible` is `true`. Follow the sibling's guide end to end (vendor-docs grounding, `metadata generate`, `script update`, script validation) — do not reproduce its commands from memory. Only if that skill is unavailable in the session do you fall back to Managed HTTP connector mode ([http/impl-connector.md](../http/impl-connector.md)) and report the downgrade.
11
+
12
+ ## Inputs
13
+
14
+ | Artifact | Produced by | Used for |
15
+ |---|---|---|
16
+ | `$WORK/<Name>.json` | `uip is activities metadata generate` | `--metadata`; becomes the definition and `inputs.inlineActivityConfiguration.metadata` |
17
+ | `$WORK/<Name>.js`, `$WORK/<Lookup>.js` | `uip is activities script update` | `--scripts $WORK`; one `<scriptRef>.js` for the main action and for **every** `reference.scriptRef` in the metadata |
18
+
19
+ Keep `$WORK` until the node is added. The flow carries copies of the scripts; the files are what you re-add from if the metadata changes.
20
+
21
+ ## Node type
22
+
23
+ `uipath.connector.custom.<connector-key>.<slug>`
24
+
25
+ - `<connector-key>` must equal the metadata's `elementKey` (`uipath-salesforce-slack`); `node add` refuses a mismatch.
26
+ - `<slug>` is the activity's display name in kebab case: `Add Users to Usergroup` → `add-users-to-usergroup`.
27
+ - A flow holds **one definition per type**. Two nodes with the same type share it, so the same slug must mean the same metadata; a different activity needs a different slug. `node add` refuses a second node whose metadata differs from the embedded definition.
28
+
29
+ The `custom` segment is what marks a non-catalog activity. Do not confuse it with a `custom-*` **connector key** (a Connector Builder connector, see [connectors.md — Connector Disambiguation](../../../../../uipath-platform/references/integration-service/connectors.md#connector-disambiguation)); the key here is the catalog connector's.
30
+
31
+ ## Step 1 — Fetch and bind a connection
32
+
33
+ Unchanged: [impl.md — Step 1](impl.md#step-1--fetch-and-bind-a-connection).
34
+
35
+ ## Step 2 — Read the metadata (replaces `registry get` and `describe`)
36
+
37
+ There is nothing to fetch. `$WORK/<Name>.json` **is** the metadata, and it has one verb slot:
38
+
39
+ | You need | Read |
40
+ |---|---|
41
+ | `method`, `endpoint` | `metadata.method.<VERB>.method`, `metadata.method.<VERB>.path` (the vendor path, e.g. `/usergroups.users.update`) |
42
+ | operation, main script | `metadata.method.<VERB>.operation`, `metadata.method.<VERB>.scriptRef` |
43
+ | `queryParameters`, `pathParameters` | `metadata.method.<VERB>.parameters[]` by `type` (`query` / `path`); `required` on each |
44
+ | `bodyParameters` | `fields.<name>` whose `method.<VERB>.request` is `true`; `required` on that entry |
45
+ | reference fields | `reference.scriptRef` on a parameter or a field (the lookup script's base name) |
46
+
47
+ The activity's `objectName` is the metadata's top-level `name` (`AddUsersToUsergroup`). You never pass it — the CLI reads it from the definition it built. As with any connector node: **write only parameter names the metadata lists, in the bucket it lists them under.**
48
+
49
+ ## Step 3 — Add the node
50
+
51
+ ```bash
52
+ uip maestro flow node add <file>.flow \
53
+ uipath.connector.custom.<connector-key>.<slug> \
54
+ --label "<Label>" \
55
+ --metadata $WORK/<Name>.json --scripts $WORK --output json
56
+ ```
57
+
58
+ Expect `Code: NodeAddSuccess`, `Data.DefinitionAdded: true` (`false` when a node of this type already exists and the metadata matches), and `Data.InlineActivity: { ScriptRef, Scripts[] }` listing every embedded script.
59
+
60
+ What it writes, and what you leave alone:
61
+
62
+ - `definitions[]` — the node manifest, built from the metadata at `version: "4.0.0"`. Its `connectorDetail.uiPathActivityTypeId` is a **placeholder random UUID**: Studio's TypeCache assigns the real one for catalog activities, and nothing assigns one for a non-catalog activity yet.
63
+ - `inputs.inlineActivityConfiguration` — `{ metadata, scriptRef, scripts }`: the metadata verbatim, the main action's `scriptRef`, and every script's source by ref.
64
+
65
+ Failures are all `Result: Failure`, exit `1`, and name the fix: a script missing from `--scripts` (the message lists every missing `<scriptRef>.js`), `--metadata` without `--scripts` or the reverse, a `custom` type added without them, a type whose connector key is not the metadata's `elementKey`, or a same-type node with different metadata.
66
+
67
+ ## Step 4 — Resolve reference fields with the local lookup script
68
+
69
+ The lookup scripts are not published, so `--script-ref` cannot find them. Run the local file instead — a plain path ending in `.js`, no `@` prefix:
70
+
71
+ ```bash
72
+ uip is resources run script --connection-id "<id>" \
73
+ --inline-script $WORK/<lookupRef>.js --body '{}' --output json
74
+ ```
75
+
76
+ Read the rows in `Data.Body` (an array), match `lookupNames`, take `lookupValue`. Every other rule of [impl.md — Step 4](impl.md#step-4--resolve-reference-fields) applies unchanged: connection-scoped IDs, resolve freshly before configure, zero-match and failed-call handling.
77
+
78
+ ## Step 5 / 5b — Required fields and upstream wiring
79
+
80
+ Unchanged: [impl.md — Step 5](impl.md#step-5--validate-required-fields), [Step 5b](impl.md#step-5b--wire-upstream-outputs). Required fields come from the metadata entries in Step 2.
81
+
82
+ ## Step 6 — Configure the node
83
+
84
+ Same `--detail` keys as any connector node. `method` and `endpoint` come from the verb slot. Do **not** pass `objectName`, `activityContext`, `scripts` or anything from the metadata — the CLI derives those.
85
+
86
+ ```bash
87
+ uip maestro flow node configure <file>.flow <nodeId> --detail "$(cat /tmp/detail.json)" --output json
88
+ ```
89
+
90
+ with, for example:
91
+
92
+ ```json
93
+ { "connectionId": "<id>", "folderKey": "<key>",
94
+ "method": "POST", "endpoint": "/usergroups.users.update",
95
+ "bodyParameters": { "usergroup": "<resolved id>", "users": "=js:$vars.pickUsers.output.ids" } }
96
+ ```
97
+
98
+ What `node configure` does differently for an inline node:
99
+
100
+ - reads the metadata from `inputs.inlineActivityConfiguration` — no Integration Service request;
101
+ - writes `inputs.detail.activityContext` as `{ "version": "4.0.0", "source": "inline", "scriptRef": "<main scriptRef>" }` — `source: "inline"` is how the runtime knows to run the embedded activity, and `scriptRef` is the main action, not the `objectName`;
102
+ - builds `configuration` (`essentialConfiguration`) with `objectName` = the metadata's `name`, `path` = the vendor path, `operation` = the verb slot's operation lowercased, and `instanceParameters.activitySource: "inline"` — the design-time marker that the activity package reads metadata and scripts from the node, not the catalog;
103
+ - copies `uiPathActivityTypeId` from the definition, so re-running configure never changes it;
104
+ - keeps `inputs.inlineActivityConfiguration` across re-runs. Re-configure with the complete intended `--detail`, exactly as for any connector node.
105
+
106
+ ## Validate
107
+
108
+ `uip maestro flow validate` runs the usual connector checks plus, for this node, offline:
109
+
110
+ - a `uipath.connector.custom.*` node must carry `inputs.inlineActivityConfiguration`, and a node carrying it must have that type;
111
+ - the main `scriptRef` and every lookup `reference.scriptRef` in the metadata must have a source under `scripts`;
112
+ - once configured, `activityContext.source` must be `"inline"` and `activityContext.scriptRef` must equal the embedded `scriptRef`.
113
+
114
+ Fix a script gap by `uip maestro flow node remove` and re-adding with a complete `--scripts` directory; fix an `activityContext` mismatch by re-running `node configure`. A missing `uiPathActivityTypeId` is a defect in the definition — re-add the node, never paste one.
115
+
116
+ ## Limits
117
+
118
+ - The `uiPathActivityTypeId` is a placeholder until TypeCache, or a published formula, supplies real ids for non-catalog activities.
119
+ - Running the flow needs a runtime that understands `activityContext.source: "inline"`. `flow validate` cannot tell you whether the tenant has it.
120
+ - `node add` echoes the node, embedded scripts included. Use `--output-filter "Data.InlineActivity"` when the scripts are large.
@@ -0,0 +1,463 @@
1
+ # Connector Activity Nodes — Implementation
2
+
3
+ Configure connector activity nodes after the generic node-add operation in [editing-operations.md](../../editing-operations.md). Configuration covers connection binding, metadata, object and operation discovery, references, custom fields, filters, input wiring, and debugging.
4
+
5
+ `uip maestro flow node configure` authors top-level `bindings[]` and `inputs.detail`. `bindings_v2.json` is regenerated from `bindings[]` at debug/pack time; never hand-edit it.
6
+
7
+ | Node type | Walkthrough |
8
+ | --- | --- |
9
+ | `uipath.connector.<connector-key>.<activity>` — a catalog activity the registry carries | this file |
10
+ | `uipath.connector.custom.<connector-key>.<slug>` — a non-catalog activity generated from vendor docs (Tier 2 of [planning.md](planning.md#decision-order)) | [impl-inline.md](impl-inline.md); it lists only what differs from this file |
11
+
12
+ ## Requirements and data model
13
+
14
+ Every connector node requires an Integration Service connection in top-level `bindings[]`. Run `registry get` with `--connection-id`; otherwise custom fields, dynamic enums, and reference metadata are absent. `registry get` accepts only `--connection-id` and `--local` — no `--activity-version` (it reads the node's own `configuration.version` and self-routes `4.0.0` activities; anything else fails `error: unknown option`). For `4.0.0` nodes `--connection-id` adds nothing (metadata not connection-scoped — see [§ 4.0.0 Activities](#400-activities)).
15
+
16
+ Connector configuration is stored in `inputs.detail`:
17
+
18
+ - `connectionId`: bound IS connection UUID.
19
+ - `connectionFolderKey`: Orchestrator folder key in the authored `.flow`; `--detail folderKey` serializes as `connectionFolderKey`.
20
+ - `method`: IS method label from metadata.
21
+ - `endpoint`: API path from `connectorMethodInfo.path` or `availableOperations[].path`.
22
+ - `objectName`: required for generic activities.
23
+ - `bodyParameters`: values keyed by `inputDefinition.fields[].name` or `requestFields[].name`.
24
+ - `queryParameters`: parameters whose `type` is `query`.
25
+ - `pathParameters`: parameters whose `type` is `path`.
26
+ - `filter`: structured FilterBuilder tree.
27
+ - `customFieldsRequestDetails`: design-time cache for supported api-type ObjectActions; keys are camelCase and `parameterValues` is an array of `[key, value]` tuples.
28
+ - `multipartParameters`: derived from IS parameters where `type === "multipart"`; entries are `{name, dataType, value?}`.
29
+ - `inputMetadata`: derived multipart or list metadata.
30
+
31
+ For multipart parameters, pass file values through `--detail.bodyParameters.<name>`; `node configure` moves file-typed values into matching `multipartParameters[i].value`. Keep string entries, including the body aggregator named by `inputMetadata.multipart.bodyFieldName`, in `bodyParameters`. When multipart parameters exist, `inputMetadata` is `{type: "multipart", multipart: {bodyFieldName}}`; for list operations it is `{operation: "list", pagination: {maxPageSize}}`.
32
+
33
+ Concrete activities encode object and operation in the node type; their `inputDefinition.fields[]`, method, and endpoint are normally populated. Generic activities encode only the operation; `inputDefinition` is `{}` and require `objectName`, method, and endpoint from resource metadata.
34
+
35
+ Classify the activity from `Node.form.sections[0].fields[0].componentProps.connectorDetail.configuration` returned by `registry get`, parsing it as JSON and checking `activityType`. For `"Generic"`, run Step 2a and capture its `operation` for Step 3's `--operation`; otherwise skip Step 2a.
36
+
37
+ Definitions in `definitions[]` are CLI-owned. `uip maestro flow node add` copies them from the registry; never hand-write or hand-edit them. If configuration reports `No instanceParameters found in definition`, run `uip maestro flow registry pull --force`, delete the stale `definitions[]` entry, and run `uip maestro flow node add <file> <node-type>` again. Do not paste `form` by hand.
38
+
39
+ ## 4.0.0 Activities
40
+
41
+ An activity is `4.0.0` when its `configuration` JSON reports `"version":"4.0.0"`. Author it through the Configuration workflow below like any other connector activity; `describe`/version mechanics are in [/uipath:uipath-platform — resources.md § `--activity-version`](../../../../../uipath-platform/references/integration-service/resources.md#--activity-version). Four deltas:
42
+
43
+ 1. **`objectName` source** — read the definition's `configuration` `objectName` (the `model.context[]` `objectName` entry is declared with no value). It is the `describe` positional, but do NOT pass it in `--detail` — `node configure` reads it from the definition itself. If configuration carries no `objectName`, the registry copy is stale: run `uip maestro flow registry pull --force`, delete the `definitions[]` entry, and re-add the node.
44
+ 2. **`method` / `endpoint`** — from `connectorMethodInfo` (`registry get`) or `availableOperations[]` (`is resources describe <connector-key> <object-name> --activity-version 4.0.0`).
45
+ 3. **Operation label ≠ HTTP verb** — a semantic operation (e.g. `Update`) pairs with any verb (e.g. `POST /usergroups.users.update`). `flow validate` accepts it; do not "fix" the method to match the label.
46
+ 4. **Not connection-scoped** — `--connection-id` on `registry get` adds no custom fields.
47
+ 5. **Reference fields are script-backed** — `reference` carries `scriptRef` (e.g. `list_usergroups`) and no `objectName`. Resolve with `uip is resources run script --connection-id <id> --connector-key <connector-key> --script-ref <scriptRef> --output json`, never `run list`. `registry get` strips `scriptRef` — read it from the Step 3 `describe` (`--activity-version 4.0.0 --operation <method>`). Response parsing and matching rules: [/uipath:uipath-platform — reference-resolution.md § 4.0.0 Activities — Script References](../../../../../uipath-platform/references/integration-service/reference-resolution.md#400-activities--script-references-scriptref).
48
+
49
+ ## No-Live-Tenant / Planned Configuration
50
+
51
+ If `node configure` cannot run:
52
+
53
+ 1. Run `uip maestro flow registry search <keyword>` and `registry get <node-type>` to confirm the operation; see [cli-commands.md — registry](../../../shared/cli-commands.md#uip-maestro-flow-registry).
54
+ 2. Run `uip maestro flow node add <file> <node-type> --output json`; inside a loop body, add `--parent <LOOP_NODE_ID>` as described in [loop/impl.md](../loop/impl.md).
55
+ 3. Write the planned `--detail` payload, including placeholder connection and folder UUIDs, to a separate file such as `<nodeId>.detail.json`. Do not put partial `inputs.detail` on the node.
56
+ 4. Author any filter as a tree under that payload's `filter` key, shaped per [Step 6a](#step-6a--filterbuilder-parameters) step 3. The step-1 `registry get` names the FilterBuilder parameter; if the activity has none, pass no `filter` and filter downstream. Never write compiled query text under the parameter name, such as `"queryParameters": { "where": "displayName='active'" }`; offline, the tree is the filter's only reviewable form.
57
+ 5. Report under **Missing connections** or **Open questions** that the node will not pass `flow validate` until real `node configure` runs.
58
+
59
+ Do not replace a registered connector node with `core.logic.mock`. Use mocks only for genuinely unknown, unpublished, or not-yet-built non-connector resources. Preserve the registered connector key.
60
+
61
+ When parsing `--output json`, do not merge stderr into stdout. Use `2>/dev/null` for parse-only probes or capture stderr separately.
62
+
63
+ ## Configuration workflow
64
+
65
+ ### Step 1 — Fetch and bind a connection
66
+
67
+ Extract `<connector-key>` from `uipath.connector.<connector-key>.<activity-name>`. Before any `uip is connections ...` call, read [/uipath:uipath-platform — connections.md](../../../../../uipath-platform/references/integration-service/connections.md), which is authoritative for auto-selection, personal workspace, BYOA filtering, empty-result recovery, and ping verification.
68
+
69
+ Run:
70
+
71
+ ```bash
72
+ uip is connections list "<connector-key>" --all-folders --output json
73
+ ```
74
+
75
+ `Data` is a flat array. Read `Data[i].Id` and `Data[i].FolderKey`; do not parse `Data.Connections` or `Data.Items`. Use `Data[i].Id` for `--connection-id` and `Data[i].FolderKey` for `folderKey`. End with a healthy connection ID and folder key for Steps 2 and 6.
76
+
77
+ ### Step 2 — Fetch enriched metadata
78
+
79
+ Run:
80
+
81
+ ```bash
82
+ uip maestro flow registry get <node-type> --connection-id <connection-id> --output json
83
+ ```
84
+
85
+ Read enriched `inputDefinition.fields` and `outputDefinition.fields`, including type, required, description, enum, and `reference`. For concrete activities, save `connectorMethodInfo.method` and `connectorMethodInfo.path`. For generic activities, `connectorMethodInfo` is empty; use Step 3.
86
+
87
+ ### Step 2a — Discover the object for generic activities
88
+
89
+ Run this only for `activityType: "Generic"`:
90
+
91
+ ```bash
92
+ uip is resources list "<connector-key>" --connection-id "<connection-id>" --output json \
93
+ --output-filter "[?contains(DisplayName,'<search>')].{Name:Name,Path:Path,Custom:Custom}"
94
+ ```
95
+
96
+ Use case-sensitive `Name` as `objectName`, never `DisplayName`. `Path` is the endpoint suffix and `Custom` indicates tenant-defined objects.
97
+
98
+ ### Step 3 — Describe the resource and read the cache
99
+
100
+ Read `<objectName>` from the node definition copied into `definitions[]`, never from the node-type suffix or by case conversion. Read `model.context[]` `{name:"objectName", value:"…"}` or `objectName` inside the `configuration` `=jsonString:` blob. Example: node type `…google-gmail.send-email` has objectName `SendEmail` (not `send_email`); `…teams.send-bot-direct-message` has objectName `bot_direct_messages` (not `send-bot-direct-message`). kebab→snake and kebab→Pascal are both guesses that 404.
101
+
102
+ Sequence dependent calls; do not parallelize `node add`, `registry get`, and `describe`. If describe returns 404, reread `objectName` and retry; do not skip describe.
103
+
104
+ Run:
105
+
106
+ ```bash
107
+ uip is resources describe "<connector-key>" "<objectName>" \
108
+ --connection-id "<id>" --operation Create --output json
109
+ ```
110
+
111
+ Then run `cat <metadataFile path from response>` and read the full cached metadata. Pass `--operation` as the node definition's `model.context[].method` verbatim. E.g. Jira `curated_get_issue` → `GETBYID`; Data Service `QueryEntityRecordsCurated` → `POST`. Do not use `connectorMethodInfo.operation` or `connectorMethodInfo.method` as the describe lookup key.
112
+
113
+ > **`4.0.0` activities** — positional is the `objectName`, `--activity-version 4.0.0` is mandatory, `--operation` takes the verb from `model.context[].method` (never a guessed semantic label), and `--connection-id` is ignored: `uip is resources describe "<connector-key>" "<objectName>" --activity-version 4.0.0 --operation <method> --output json`. See [§ 4.0.0 Activities](#400-activities).
114
+
115
+ Read `availableOperations[].method` and `availableOperations[].path` for method and endpoint; `parameters[]` for query/path parameters and `reference` objects; `requestFields[]` for body names, types, required status, descriptions, and `reference` objects; and `responseFields[]` for the response schema.
116
+
117
+ > **Write only parameter names that `describe` listed, in the bucket it listed them under.** Never guess a key. Slack `send_message_to_channel_v2`: `send_as` is a required query parameter, not a body field; `username` is the bot display name, not a send-as switch.
118
+
119
+ ### Step 3a — Resolve parent-field-driven custom fields
120
+
121
+ Run this whenever metadata contains an api-type ObjectAction in top-level `objectActions[]` or `connectorMethodInfo.design.actions[]`. This applies to every operation whose schema depends on parent fields, including Create/Edit/Update inputs and Get/Retrieve/Query response fields.
122
+
123
+ Run the matching action with `-f, --field` before Step 5 and reuse the same values in Step 6c. Follow [/uipath:uipath-platform — resources.md > Parent-Field-Driven Custom Fields (api-type ObjectActions)](../../../../../uipath-platform/references/integration-service/resources.md#parent-field-driven-custom-fields-api-type-objectactions) for procedure, flags, merge semantics, and recovery.
124
+
125
+ Do not skip this for Get/Retrieve: runtime may succeed while Studio Web lacks the design-time schema and downstream `$vars.<thisNode>.output.<custom-field>` resolves to undefined. `flow validate` does not catch this.
126
+
127
+ ### Step 4 — Resolve reference fields
128
+
129
+ Check **BOTH `requestFields` AND `parameters`** from the metadata for entries with a `reference` object — these require ID lookup from the connector's live data. Use `uip is resources run list` to resolve them:
130
+
131
+ > **`4.0.0` activities use `run script`, not `run list`.** Their `reference` blocks carry `scriptRef` instead of `objectName`. Run `uip is resources run script --connection-id "<id>" --connector-key "<connector-key>" --script-ref "<reference.scriptRef>" --output json`, read the rows in `Data.Body` (an array), and match `lookupNames` → take `lookupValue`. The zero-match, multiple-match, failed-call, and connection-scoping rules below apply unchanged. See [§ 4.0.0 Activities](#400-activities) and [reference-resolution.md — 4.0.0 Activities — Script References](../../../../../uipath-platform/references/integration-service/reference-resolution.md#400-activities--script-references-scriptref).
132
+
133
+ > **References are NOT body-field-only.** Query and path parameters carry `reference` objects too, and on some connectors the activity's PRIMARY input is a required **path parameter** whose `reference` is the design-time lookup behind a Studio Web dropdown. Scanning only `requestFields` misses it — the node then configures and passes `flow validate` with an unverified value and 404s at runtime. The same `reference` blocks appear on `connectorMethodInfo.parameters[]` in `registry get` output (with or without `--connection-id`) — when projecting parameter metadata for inspection, always include the `reference` key, not just `name`/`required`/`design.component`.
134
+
135
+ > **A field with a `reference` takes a value a live lookup returned, never a value you typed.** Resolve it per [reference-resolution.md — Reference Fields](../../../../../uipath-platform/references/integration-service/reference-resolution.md#reference-fields-critical). A plain word is right only when the lookup returns it (Slack `send_as` → `user` or `bot`). Jira `fields.reporter.id` wants the looked-up `accountId`, not `jane.doe@acmecorp.com`.
136
+
137
+ > **Resolve every reference field freshly, against the current `--connection-id`, immediately before `node configure` (Step 6)** — even if you think you already know the ID from a previous flow. Reference IDs are connection-scoped and reused values fault silently at runtime. See [Reference IDs Are Connection-Scoped (CRITICAL)](../../../../../uipath-platform/references/integration-service/reference-resolution.md#reference-ids-are-connection-scoped-critical) for the full mechanism and failure mode, and the top-level Anti-Patterns in [SKILL.md](../../../../SKILL.md).
138
+
139
+ ```bash
140
+ # Example: resolve Slack channel "#test-slack" to its ID
141
+ uip is resources run list "uipath-salesforce-slack" "curated_channels?types=public_channel,private_channel" \
142
+ --connection-id "<id>" --output json
143
+ # -> { "id": "C1234567890", "name": "test-slack" }
144
+ ```
145
+
146
+ The `<id>` in `--connection-id "<id>"` MUST be the connection bound to **this** flow (the one picked in Step 1), not any other connection you've used in another flow. Use the resolved IDs (not display names) — from this very `run list` call — in the flow's node `inputs`. When multiple matches exist, ask the user, with one option per match plus **"Something else"** as the last option (see the dropdown question rule in [SKILL.md](../../../../SKILL.md)).
147
+
148
+ > **Zero matches on a user-supplied value** — if the completed lookup (`Data.Pagination.HasMore` is `"false"`) finds no entry matching a value the user provided, do NOT configure the node with it silently. **Re-run the lookup against every other `State: Enabled` connection for this key first**, applying the two rules above per connection — `filterPattern` where the reference declares one, otherwise paginate, short-circuiting on the first match. The value is absent only once every Enabled connection has been searched to `HasMore: "false"`. If one resolves it, use that connection for this node and record the switch. If none do, ask the user, presenting the closest candidates as options plus **"Something else"** as the last option (see the dropdown question rule in [SKILL.md](../../../../SKILL.md)). Their answer is another search term, not a value to write: re-run the lookup with it. If nothing resolves the field, stop and report it — writing an unresolved display name or a placeholder passes `flow validate` and faults at runtime.
149
+
150
+ > **The lookup call itself failed** — a 403/401 on an expired or revoked grant, or a 5xx, means you have no ID and no candidate list to offer. Do NOT configure the node with the display name, a vendor well-known alias, or an ID from memory; each passes `flow validate` and faults at runtime. Stop and report the failed resolve, naming the connection and the vendor error. See [reference-resolution.md — When the Lookup Call Fails](../../../../../uipath-platform/references/integration-service/reference-resolution.md#when-the-lookup-call-fails-critical).
151
+
152
+ > **Filter server-side before paginating.** If the field's `reference` carries a `filterPattern` (e.g. Teams `userId`: `"$filter=startswith(userPrincipalName,'{filter}')"`), substitute the search term for `{filter}` and pass the result as `--query` — one targeted call instead of walking a large directory. `filterPattern` appears only in `is resources describe` output; the flow `registry get` reference object strips it (keeps only `objectName`/`lookupValue`/`lookupNames`/`path`/`childPath`), so read it from the Step 3 describe metadata. Guessed params (`searchTerm=`/`where=`/`filter=`) are silently ignored. See [reference-resolution.md — Search References (filterPattern)](../../../../../uipath-platform/references/integration-service/reference-resolution.md#search-references-filterpattern).
153
+
154
+ > **Narrow before you page, and walk the narrowing ladder rather than reaching for the loop.** A by-key resource beside the collection (Slack `users_lookupByEmail`) beats a `filterPattern`, which beats the referenced resource's own `--query` keys, which beats paging. Read those keys from a `uip is resources describe "<key>" "<referenced-resource>" --operation List` — the collection the `reference` names, NOT the Step 3 describe of the activity you are configuring, whose `parameters` never carry the collection's filters. Chain the pages into one call rather than a turn per page. A filtered page returning `Data: []` means "not on this page", not "absent". Full ladder, the stalled-token case, and what each ending obliges you to do: [resources.md — Narrow before you page](../../../../../uipath-platform/references/integration-service/resources.md#narrow-before-you-page). See [resources.md — Narrow before you page](../../../../../uipath-platform/references/integration-service/resources.md#narrow-before-you-page) and [resources.md#pagination](../../../../../uipath-platform/references/integration-service/resources.md#pagination).
155
+
156
+ **Read [/uipath:uipath-platform — Integration Service — resources.md](../../../../../uipath-platform/references/integration-service/resources.md) for the full reference-resolution workflow** (pagination, describe failures, fallbacks).
157
+
158
+ ### Step 5 — Validate required fields
159
+
160
+ Check every `required: true` field in both `requestFields` and `parameters`. Use `defaultValue` for required query/path parameters when the user supplied no value:
161
+
162
+ 1. Collect required fields from both metadata sections.
163
+ 2. Match each against user-provided values.
164
+ 3. Ask before building for every missing field without a default, showing `displayName` and expected value type. Use free-form input for open-ended values and dropdown options for finite choices, following [SKILL.md](../../../../SKILL.md).
165
+ 4. Do not guess or skip a required field.
166
+
167
+ Run Step 3a first for api-type ObjectActions because base describe may omit custom required fields.
168
+
169
+ ### Step 5b — Wire upstream outputs
170
+
171
+ Use this form inside `bodyParameters`, `queryParameters`, and `pathParameters`:
172
+
173
+ ```text
174
+ "=js:$vars.<sourceNodeId>.output.<field>"
175
+ ```
176
+
177
+ The `=js:` prefix is mandatory for every `$vars`, `$metadata`, and `$self` reference. There is no `nodes.X.output.Y` syntax. See [node-output-wiring.md](../../../shared/node-output-wiring.md).
178
+
179
+ ### Step 6 — Configure the node
180
+
181
+ Run `is resources describe` first. `node configure` rebuilds `inputs.detail` and the essential-configuration blob from supplied `--detail`; it does not merge prior values. On every reconfiguration, pass the complete intended shape: connection plumbing, all parameter buckets, filter, and `customFieldsRequestDetails`.
182
+
183
+ Omitting `bodyParameters`, `queryParameters`, or `pathParameters` removes prior values. Omitting `filter` removes `savedFilterTrees` and filter derivation. Omitting `customFieldsRequestDetails` resets it to `null`.
184
+
185
+ #### Step 6a — FilterBuilder parameters
186
+
187
+ A filter is authored as a tree under the `filter` key of `--detail`. The CLI compiles the tree; you never write the query text. Five steps:
188
+
189
+ 1. **Find the filter parameter and the path slots** — read them from the registry, never guess:
190
+
191
+ ```bash
192
+ uip maestro flow registry get <node-type> --output json \
193
+ --output-filter "Node.{filterParams:connectorMethodInfo.parameters[?design.component=='FilterBuilder'].name,path:connectorMethodInfo.path,pathParams:connectorMethodInfo.parameters[?type=='path'].name}"
194
+ ```
195
+
196
+ Data Service `query-entity-records` returns `filterParams: ["queryExpression"]`, `path: "/v2/{entityName}/qer"`, `pathParams: ["entityName"]`. FilterBuilder parameters are not limited to list operations. If `filterParams` is empty, pass no `filter` and filter downstream.
197
+
198
+ 2. **Read exact field names** — `uip df entities list --output json`, then `uip df entities get <ENTITY_ID> --output json`. Names are case-sensitive; a leaf whose `id` matches no field is dropped without an error.
199
+
200
+ 3. **Write the `--detail` JSON to a file** with a quoted heredoc. The value of `filter` IS the tree — `groupOperator`, `filters[]`, `groups[]` at its top level. Do not nest it under the parameter name; the CLI applies the tree to the FilterBuilder parameter it found in step 1 (the first one, if there are several). A runtime value is a leaf operand with `"isLiteral": false`:
201
+
202
+ ```json
203
+ {
204
+ "connectionId": "<CONNECTION_ID>", "folderKey": "<FOLDER_KEY>",
205
+ "pathParameters": { "entityName": "<ENTITY_NAME>" },
206
+ "filter": {
207
+ "groupOperator": 0,
208
+ "filters": [
209
+ { "id": "accountNumber", "operator": "Equals",
210
+ "value": { "value": "=js:$vars.<node>.output.<field>", "isLiteral": false } }
211
+ ],
212
+ "groups": []
213
+ }
214
+ }
215
+ ```
216
+
217
+ Tree shape and operator tokens: [uipath-platform — Filter Trees (CEQL)](../../../../../uipath-platform/references/integration-service/activities.md#filter-trees-ceql).
218
+
219
+ 4. **Configure** — `uip maestro flow node configure <ProjectName>.flow <NODE_ID> --detail "$(cat /tmp/detail.json)" --output json` (Step 6b).
220
+
221
+ 5. **Verify the compile** — read the node back. `queryParameters.<name>` must hold the compiled query with a placeholder, `accountNumber = '{var_<hash>}'`, and `filterVariables` must have that `var_<hash>` key. The CLI also writes `configuration.essentialConfiguration.savedFilterTrees.<name>`. An **empty** `queryParameters.<name>` means the tree was mis-shaped (step 3): the CLI found no `filters` at the top level and compiled an empty query with no error, so the flow would fetch the whole entity.
222
+
223
+ Never:
224
+
225
+ - pass a CEQL string under `queryParameters.<name>` — the CLI rejects it or leaves Studio Web's tree undefined;
226
+ - write the query as a whole-value `=js:` string — `flow validate` cannot read it (it reads only a plain concatenation) and the CLI warns on it; replace any you find with a tree;
227
+ - hand-type `endpoint` or `pathParameters` names — take them from step 1.
228
+
229
+ #### Step 6b — Run configure
230
+
231
+ Run:
232
+
233
+ ```bash
234
+ uip maestro flow node configure <file> <nodeId> \
235
+ --detail '<complete-detail-json>' \
236
+ --output json
237
+ ```
238
+
239
+ For generic nodes include `objectName`; concrete nodes ignore it if supplied. Use `method` and `endpoint` from `registry get` for concrete activities, or `availableOperations[].method` and `availableOperations[].path` from describe for both kinds. For generic activities, describe is the only source. Copy IS labels such as `GETBYID` verbatim; the CLI normalizes them. Validate that method agrees with the node operation.
240
+
241
+ Supply endpoint placeholders through `pathParameters` and resolve their IDs with `uip is resources run list` using the current connection. Body names come from `inputDefinition.fields[].name` or `requestFields[].name`.
242
+
243
+ For array fields, strip trailing `[*]` from the authored key and use a `=js:` expression returning the array; literal JSON arrays do not bind. Names containing `[*].` are not authorable. This applies to body, query, and path buckets; `customFieldsRequestDetails.parameterValues` uses `_array` encoding. The expression may return the whole array or wrap one element — wrap a literal array in parentheses, `"fields.labels": "=js:(['shield', 'p0'])"`; pass a whole array from a variable as `"=js:$vars.allTags"`; wrap a single element as `"=js:([$vars.priorityTag])"`.
244
+
245
+ Derive connector output shape from `connectorMethodInfo.operation`, not vendor intuition or `outputDefinition.output.type`: `list` returns a bare array; other operations return one object. Use `=js:$vars.<node>.output` for list collections and `=js:$vars.<node>.output.<field>` otherwise. Activities tagged `API.File.Download` are the exception: configure rewrites their output type to `file`, and `=js:$vars.<node>.output` is the whole attachment — feed that to an IxP node's `fileRef`, see [ixp/impl.md — Wiring `fileRef` — connector download node](../ixp/impl.md#wiring-fileref--connector-download-node).
246
+
247
+ `node configure` populates `inputs.detail` and top-level `bindings[]`. The serialized folder field is `connectionFolderKey`; never hand-edit it. Do not use `filterExpression`, which belongs to trigger/JMESPath filtering; see [connector-trigger/impl.md](../connector-trigger/impl.md#filter-trees).
248
+
249
+ For complex JSON, write a temporary file and run:
250
+
251
+ ```bash
252
+ uip maestro flow node configure <file> <nodeId> --detail "$(cat /tmp/detail.json)" --output json
253
+ ```
254
+
255
+ #### Step 6c — Populate api-type custom fields
256
+
257
+ Inspect both `objectActions[]` and `connectorMethodInfo.design.actions[]`. Supported actions use top-level `ActionType: "Api"` or nested `actionType: "api"`. If no applicable api action exists, omit `customFieldsRequestDetails`; the CLI emits `null`.
258
+
259
+ Illustrative supported activities (confirm against `registry get` for the specific connector/object/activity — the set evolves):
260
+
261
+ | Connector key | Object | Activity / Action | HTTP | Source |
262
+ |---|---|---|---|---|
263
+ | `uipath-microsoft-azureapplicationinsights` | `executeQuery` | `generateSchema` | — | field |
264
+ | `uipath-salesforce-sfdc` | `curated_soqlQuery` | `generateSchema` | — | field |
265
+ | `uipath-workday-workdayrest` | `wql` | `generateSchema` | — | field |
266
+ | `uipath-oracle-netsuite` | `executeSuiteQL` | `generateSchema` | — | field |
267
+ | `uipath-snowflake-snowflake` | `executeQuery` | `generateSchema` | — | field |
268
+ | `uipath-atlassian-jira` | `curated_create_issue` | Create Issue | POST | method |
269
+ | `uipath-atlassian-jira` | `curated_edit_issue` | Update Issue | PUT | method |
270
+ | `uipath-atlassian-jira` | `curated_get_issue` | Get Issue | GETBYID | method |
271
+ | `uipath-uipath-dataservice` | `CreateEntityRecordCurated` | Create Entity Record | POST | method |
272
+ | `uipath-uipath-dataservice` | `QueryEntityRecordsCurated` | Query Entity Records | POST | method |
273
+ | `uipath-mailchimp-mailchimp` | `list_members_curated_dynamic::members` | Add Subscriber | POST | method |
274
+ | `uipath-microsoft-onedrive` | `AddListItem` | Add List Item | POST | method |
275
+ | `uipath-sap-s4hanacloud` | `Entity` | Create Entity | POST | method |
276
+ | `uipath-google-bigquery` | `projects::table` | List All Records | GET | method |
277
+
278
+ > **Data Fabric record CRUD has native nodes — they are the default; everything else on this connector is not.** `core.datafabric.read` / `create` / `update` / `delete` ([data-fabric/planning.md](../data-fabric/planning.md)) need no Integration Service connection and are authored with `Edit`/`Write` instead of `node configure`, so for those four operations go native: confirm with `uip maestro flow registry get core.datafabric.read`, and on `NodeGetSuccess` leave this doc. Stay here when **any** of these hold — and they are common:
279
+ >
280
+ > - the operation is **not** one of those four (attachments, file-field downloads, entity metadata, bulk work) — no native node exists, so these activities are the only path, not a fallback; **these activities target the tenant scope only — folder-scoped entities are not supported, so require a tenant-scoped entity**;
281
+ > - the **user asked for the connector by name** — an explicit request outranks the native default, so build it here as long as the activity exists;
282
+ > - `registry get` ends at "Node not found" after [data-fabric/impl.md — Registry validation](../data-fabric/impl.md#registry-validation).
283
+
284
+ Run Step 3a and use the matched action's `name` and `apiConfiguration.{url,body}` tokens. Match `source: field` or `source: method` according to metadata; for operation-scoped lookup use the node definition's `model.context[].method`.
285
+
286
+ Encode tokens longest-first: `:::` → `_sub_`; `[*]` → `_array`; `::` → `_sub_`; `.` → `_sub_`. Examples: `fields.project.key` → `fields_sub_project_sub_key`; `items[*]` → `items_array`; `tenantEntityName` → `tenantEntityName` (unchanged). Use camelCase keys and include every token from `apiConfiguration.url` and `body`:
287
+
288
+ ```json
289
+ "customFieldsRequestDetails": {
290
+ "objectActionName": "<ObjectActionName>",
291
+ "parameterValues": [
292
+ ["<encoded-token>", "<value>"],
293
+ ["<unset-token>", null]
294
+ ]
295
+ }
296
+ ```
297
+
298
+ `customFieldsRequestDetails` complements runtime parameters: put raw parent values in `bodyParameters`, `queryParameters`, or `pathParameters`, and encoded values in the design-time cache. Values are strings or `null`; `parameterValues` is never an object map. The cache is embedded in `essentialConfiguration.customFieldsRequestDetails`, not set as a top-level `inputs.detail` field. Pass runtime values and the cache in the same configure call — omitting the runtime bucket is the most common mistake; the design-time cache alone does not feed the connector at runtime. Concrete (Jira Create Issue): `bodyParameters.fields.project.key = "<PROJECT_KEY>"` AND `parameterValues = [["fields_sub_project_sub_key", "<PROJECT_KEY>"]]`. Dropping the runtime-input copy manifests as `DAP-DT-_2003 refField with name <X> not found` at activity load. The CLI does not validate action existence or token coverage, so Step 3a is mandatory.
299
+
300
+ **Worked `--detail` payloads** — each passes BOTH the runtime bucket and the design-time cache in one call.
301
+
302
+ Jira Create Issue — `source: method` (raw `fields.project.key` in body + encoded `fields_sub_project_sub_key` in cache):
303
+
304
+ ```bash
305
+ uip maestro flow node configure <file> <nodeId> --detail "$(cat <<'JSON'
306
+ {
307
+ "connectionId": "<id>",
308
+ "folderKey": "<key>",
309
+ "method": "POST",
310
+ "endpoint": "/curated_create_issue",
311
+ "bodyParameters": {
312
+ "fields.project.key": "<PROJECT_KEY>",
313
+ "fields.issuetype.id": "3",
314
+ "fields.summary": "Created from Maestro"
315
+ },
316
+ "customFieldsRequestDetails": {
317
+ "objectActionName": "GenerateSchema",
318
+ "parameterValues": [
319
+ ["fields_sub_project_sub_key", "<PROJECT_KEY>"],
320
+ ["fields_sub_issuetype_sub_id", "3"]
321
+ ]
322
+ }
323
+ }
324
+ JSON
325
+ )" --output json
326
+ ```
327
+
328
+ Snowflake Execute Query — `source: field` (SQL string is the parent field; `query` unchanged, no dots):
329
+
330
+ ```bash
331
+ uip maestro flow node configure <file> <nodeId> --detail "$(cat <<'JSON'
332
+ {
333
+ "connectionId": "<id>",
334
+ "folderKey": "<key>",
335
+ "method": "POST",
336
+ "endpoint": "/executeQuery",
337
+ "bodyParameters": {
338
+ "query": "SELECT id, name FROM customers WHERE active = TRUE"
339
+ },
340
+ "customFieldsRequestDetails": {
341
+ "objectActionName": "generateSchema",
342
+ "parameterValues": [
343
+ ["query", "SELECT id, name FROM customers WHERE active = TRUE"]
344
+ ]
345
+ }
346
+ }
347
+ JSON
348
+ )" --output json
349
+ ```
350
+
351
+ Dataservice V3 Query Entity Records — `source: method` (`tenantEntityName` unchanged, no dots):
352
+
353
+ ```bash
354
+ uip maestro flow node configure <file> <nodeId> --detail "$(cat <<'JSON'
355
+ {
356
+ "connectionId": "<id>",
357
+ "folderKey": "<key>",
358
+ "method": "POST",
359
+ "endpoint": "/v3/QueryEntityRecords/query",
360
+ "queryParameters": {
361
+ "entityScope": "tenant",
362
+ "tenantEntityName": "\"my-entity\""
363
+ },
364
+ "customFieldsRequestDetails": {
365
+ "objectActionName": "FetchObjectMetadataTenant",
366
+ "parameterValues": [
367
+ ["tenantEntityName", "\"my-entity\""]
368
+ ]
369
+ }
370
+ }
371
+ JSON
372
+ )" --output json
373
+ ```
374
+
375
+ ## IS CLI commands
376
+
377
+ ```bash
378
+ uip is connections list "<connector-key>" --all-folders --output json
379
+ uip is connections ping "<connection-id>" --output json
380
+ uip is connections create "<connector-key>"
381
+ uip maestro flow registry get <node-type> --connection-id <connection-id> --output json
382
+ uip is resources describe "<connector-key>" "<objectName>" \
383
+ --connection-id "<id>" --operation Create --output json
384
+ uip is resources run list "<connector-key>" "<resource>" \
385
+ --connection-id "<id>" --output json
386
+ uip is connectors list --output json
387
+ ```
388
+
389
+ Run `uip is connections --help` or `uip is resources --help` for all options.
390
+
391
+ ## Bindings
392
+
393
+ Bindings belong in flow top-level `bindings[]`, alongside `nodes`, `edges`, and `definitions`. At debug/pack time the CLI regenerates `content/bindings_v2.json`; never edit that generated file.
394
+
395
+ Leave the registry definition's `model.context[]` unchanged. Connector definitions typically contain `<bindings.<connector-key> connection>` and `<bindings.FolderKey>` placeholders. Do not author `model.context[]` on the node instance. Connector binding matching is name-only within `resource: "Connection"` because `model.bindings.resourceKey` is typically unset. Resource nodes instead match `(name, resourceKey)`.
396
+
397
+ `node configure` claims the empty connection stub created by `node add` and adds the folder row. For each unique connection it emits two entries:
398
+
399
+ ```json
400
+ {
401
+ "id": "<unique-id>",
402
+ "name": "<connector-key> connection",
403
+ "type": "string",
404
+ "resource": "Connection",
405
+ "resourceKey": "<connection-uuid>",
406
+ "default": "<connection-uuid>",
407
+ "propertyAttribute": "ConnectionId"
408
+ }
409
+ ```
410
+
411
+ and:
412
+
413
+ ```json
414
+ {
415
+ "id": "<unique-id>",
416
+ "name": "FolderKey",
417
+ "type": "string",
418
+ "resource": "Connection",
419
+ "resourceKey": "<connection-uuid>",
420
+ "default": "<folder-key>",
421
+ "propertyAttribute": "FolderKey"
422
+ }
423
+ ```
424
+
425
+ The connection binding `name` is fetched from IS by `node configure` and must match the definition placeholder. Both entries use the same UUID. `resource` is capitalized `"Connection"`; `propertyAttribute` is exactly `"ConnectionId"` or `"FolderKey"`. Reuse the same pair for nodes sharing a connection; do not add duplicates.
426
+
427
+ An empty `resourceKey` on a configured `ConnectionId` row is a defect and causes `Value cannot be null. (Parameter 'Connection')`. Do not remove or repair bindings by hand. The only legitimate empty stub is a deliberately planned, unconfigured node. An empty stub after successful configure or node removal is a CLI bug to report.
428
+
429
+ Never hardcode connection IDs; fetch them from IS at authoring time. Connector-trigger flows may additionally emit `EventTrigger` and `Property` resources; see [connector-trigger/impl.md](../connector-trigger/impl.md). Queue and time-trigger resources follow their relevant plugins.
430
+
431
+ ## Debug and common errors
432
+
433
+ - **No connection found:** top-level `bindings[]` is missing or mismatched. Run Step 1 and verify `ConnectionId` and `FolderKey` entries.
434
+ - **Connection ping failed:** re-authenticate the connection in IS.
435
+ - **Missing `inputs.detail`:** run `node configure`.
436
+ - **Display name instead of reference ID:** resolve with `uip is resources run list`.
437
+ - **Resource not found after clean validate/debug:** resolve the reference again with the current connection; IDs are connection-scoped. Reconfigure and re-debug.
438
+ - **Required field missing:** inspect every `required: true` entry in cached `requestFields` and `parameters`.
439
+ - **`No api-type ObjectAction matched for fields [...]`:** pass the node definition's `model.context[].method` verbatim as `--operation`; do not use `connectorMethodInfo.operation` or `connectorMethodInfo.method`.
440
+ - **IxP extraction fails `[430002] … missing the required 'ID' field` downstream of a download activity:** read the download node's `definitions[]` entry before assigning a cause. `outputDefinition.output.type` still `"object"` means configure never ran and the output is plain JSON, not an attachment — configure it, required file parameter included, and re-debug. Already `"file"` means configure ran, so inspect the download's own inputs and result instead. See [ixp/impl.md — Wiring `fileRef` — connector download node](../ixp/impl.md#wiring-fileref--connector-download-node).
441
+ - **Unresolvable `$vars`:** verify graph edges and upstream output paths.
442
+ - **Missing method/path:** rerun `registry get` with `--connection-id` or use describe for generic activities.
443
+ - **Malformed or stale `bindings_v2.json`:** never edit it; rerun `node configure` and debug/pack.
444
+ - **Connector key not found:** run `uip is connectors list --output json`; keys are often prefixed with `uipath-`.
445
+ - **FilterBuilder UI is `undefined`:** configure a structured tree under the `filter` key of `--detail`, not a raw `queryParameters` string.
446
+ - **FilterBuilder configure rejection:** move the value into the `filter` key of `--detail` as a structured tree.
447
+ - **Data Service filter returns every record or malformed CEQL ending in `AND`:** compare tree field IDs case-sensitively with `uip df entities get <entity-id> --output json`; unmatched leaves are dropped.
448
+ - **CEQL `[102003]` field-name error, or `[102001]`:** the query was hand-written as a string. Delete it and configure a filter tree under the `filter` key of `--detail` (Step 6a); put runtime values in a leaf operand with `"isLiteral": false`.
449
+ - **`parameterValues` object-map error:** use `[key, value]` tuples.
450
+ - **`[400300] Error evaluating expression … Invalid or unexpected token`, or the command itself dies with a shell parse error (`zsh: parse error`, `bash: syntax error near unexpected token`):** the `=js:` expression was hand-escaped through nested shell quotes inside `--detail '<json>'`. Write the detail JSON to a file with a quoted heredoc and pass `--detail "$(cat /tmp/detail.json)"`. See [editing-operations-cli.md — Configure a connector node](../../editing-operations-cli.md#configure-a-connector-node).
451
+ - **Custom-field token unresolved:** reread `apiConfiguration.url` and `body` and add every encoded token.
452
+ - **Unknown `ObjectActionName` or `ParameterValues`:** use camelCase `objectActionName` and `parameterValues`.
453
+ - **Array field rejected as unknown:** strip trailing `[*]`, use a `=js:` array expression, and reconfigure. Names containing `[*].` are not authorable.
454
+ - **Array field round-trips empty:** replace the literal JSON array with a `=js:` expression returning the array.
455
+
456
+ ## Final checks
457
+
458
+ 1. Inspect top-level `bindings[]`; do not treat `bindings_v2.json` as ground truth.
459
+ 2. Compare every input with the cached metadata file.
460
+ 3. Remember that `flow validate` checks JSON schema and graph structure, not missing connector inputs, wrong reference IDs, or expired connections; run `flow debug`.
461
+ 4. Check both `requestFields` and `parameters`.
462
+ 5. Confirm `node configure` was run with the complete intended detail on every reconfiguration.
463
+ 6. If planning-only, record the planned sidecar `<nodeId>.detail.json`, do not author `bindings[]` directly, and report that validation requires real configuration.