@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,517 @@
1
+ # Connector Trigger Nodes — Implementation
2
+
3
+ How to configure connector trigger nodes: connection binding, enriched metadata, event parameter resolution, and trigger-specific `node configure` fields. This replaces the IS activity workflow (Steps 1-6 in [connector/impl.md](../connector/impl.md)) — trigger nodes have different metadata and configuration.
4
+
5
+ > **This plugin covers two node families that share the same configuration mechanism:**
6
+ >
7
+ > - **Connector triggers** (`uipath.connector.trigger.<key>.<trigger>`) — start node; the event starts the flow. The default subject of every step below.
8
+ > - **Wait for events** (`uipath.connector.event.<key>.<event>`) — a mid-flow event node; the flow pauses and waits for the event before continuing. Same connection binding, enriched metadata, event parameter resolution, filter trees, and `node configure` fields. Only the placement and node lifecycle differ. See [Wait for events](#wait-for-events-uipathconnectoreventkeyevent) for the deltas, then apply Steps 1-6 below unchanged.
9
+
10
+ ## Configuration Workflow
11
+
12
+ Follow these steps for every IS trigger node.
13
+
14
+ ### Step 1 — Fetch a preliminary connection and query trigger objects
15
+
16
+ Extract the connector key from the node type (`uipath.connector.trigger.<connector-key>.<trigger-name>`) and the operation name from the `registry get` response (`model.context[].operation`).
17
+
18
+ **1a. Get any enabled connection** — needed as `--connection-id` for `triggers objects` below.
19
+
20
+ Discovery call is **always**:
21
+
22
+ ```bash
23
+ uip is connections list "<connector-key>" --all-folders --output json
24
+ ```
25
+
26
+ `--all-folders` is mandatory. Without it the CLI returns the active folder only and hides connections in other folders the user can see. Plain `uip is connections list "<connector-key>"` is forbidden for discovery.
27
+
28
+ > **MUST READ before any `uip is connections ...` call:** [/uipath:uipath-platform — connections.md](../../../../../uipath-platform/references/integration-service/connections.md). Single source of truth for selection rules, BYOA filtering, empty-result recovery, ping verification.
29
+
30
+ Pick any enabled connection (prefer `IsDefault: Yes`) and capture its `Id` for Step 1b.
31
+
32
+ **1b. Query trigger objects** — **mandatory** for every trigger node. Do NOT skip:
33
+
34
+ ```bash
35
+ uip is triggers objects "<connector-key>" "<OPERATION>" \
36
+ --connection-id "<id>" --output json
37
+ ```
38
+
39
+ Save the response. It carries three pieces per event object that drive later steps:
40
+
41
+ | Field | Drives | Meaning |
42
+ |------|--------|---------|
43
+ | `byoaConnection` | Step 1c | If `true`, only BYOA connections are valid for this event |
44
+ | `isWebhookUrlVisible` | Step 6b | If `true`, retrieve and present the webhook URL |
45
+ | **`parameters[]`** | Steps 3 & 4 | Object-, query-, and path-scoped input parameters (e.g. shared mailbox, repo, owner). **NOT the complete event-parameter set** — merge with `EventParameters` from `triggers describe` (Step 1b-2). The full input set is the **union** of both; a field is required if either source marks it `required`. |
46
+
47
+ It may also include `design.textBlocks` with connector-specific user-facing instructions (e.g., "Add this URL to your Slack app's Event Subscriptions"). Surface that text verbatim when applicable — do not invent service-specific guidance.
48
+
49
+ > `byoaConnection` and `isWebhookUrlVisible` are per event object, not per connector — some connectors require BYOA for some events but not others. `parameters[]` is per event object too: each operation has its own input fields.
50
+
51
+ #### Reading `parameters[]`
52
+
53
+ Each entry is one input field the user supplies when configuring the trigger (e.g., GitHub `repo`, Outlook `parentFolderId`, Slack `channelId`). For each:
54
+
55
+ | Key | Use |
56
+ |---|---|
57
+ | `name` | Key inside the `--detail` bucket selected by `type` — see below |
58
+ | `displayName` | Label when prompting the user for a missing value |
59
+ | `dataType` | Value type (`string`, `number`, `boolean`, …) |
60
+ | `required` | Drives Step 4's required-field check |
61
+ | `reference` | Present → resolve to an ID in Step 3 (`uip is resources run list`) before configure |
62
+ | `description` | Field hint — surface verbatim when prompting |
63
+ | `design.position` | `"primary"` indicates a top-level input field; other positions are layout hints — safe to ignore for configure |
64
+ | `type` | Bucket selector in Step 6's `--detail`: `"query"` → `queryParameters`, `"path"` → `pathParameters`, else → `eventParameters` |
65
+
66
+ > **Source of truth — the UNION of two calls, never one alone.** The complete event-input set = `triggers objects → parameters[]` (object/query/path scope) **∪** `triggers describe → EventParameters` (event-config scope). Configure every field that **either** marks `required: true`. `triggers describe → FilterFields` feeds the `filter` tree; `OutputFields` / `outputResponseDefinition` feed downstream `$vars`. `flow registry get`'s `eventParameters.fields` mirrors `describe` and is the offline fallback. A required field can appear in `describe → EventParameters` while absent from `parameters[]`, so **both calls are mandatory and you must merge them**. Full field semantics: [/uipath:uipath-platform — triggers.md — `parameters[]`](../../../../../uipath-platform/references/integration-service/triggers.md#parameters--event-parameter-input-fields).
67
+
68
+ **1b-2. Resolve the object name and fetch field metadata** — **mandatory** for every trigger node.
69
+
70
+ > **MUST READ before this step:** [/uipath:uipath-platform — triggers.md](../../../../../uipath-platform/references/integration-service/triggers.md). Single source of truth for fetching trigger parameters and fields — object name resolution, describe call, source-of-truth contract.
71
+
72
+ 1. Resolve `<objectName>` from the Step 1b `triggers objects` response per [/uipath:uipath-platform — triggers.md — Object Name Resolution](../../../../../uipath-platform/references/integration-service/triggers.md#object-name-resolution). If the object name is not recognizable from the user's prompt, **ask the user** — present candidates by `displayName`. Do NOT guess.
73
+ 2. Fetch field metadata:
74
+
75
+ ```bash
76
+ uip is triggers describe "<connector-key>" "<OPERATION>" "<objectName>" \
77
+ --connection-id "<id>" --output json
78
+ ```
79
+
80
+ > **Source of truth for node configuration — merge both responses.** Event-parameter inputs = the **union** of `triggers objects → parameters[]` (Step 1b) and `triggers describe → EventParameters` (this step). `triggers describe` also returns `FilterFields` (→ `filter` tree) and `OutputFields` (→ downstream `$vars`). Never treat `triggers describe` as "only field metadata" — its `EventParameters` are first-class event parameters and frequently carry required fields that `parameters[]` omits. Do NOT skip this call, and do NOT invent parameters or fields.
81
+
82
+ ### Step 1c — Select the final connection
83
+
84
+ **If `byoaConnection: true`** — the Step 1a connection is not usable. Follow the BYOA selection workflow in [/uipath:uipath-platform — connections.md — For BYOA Connections](../../../../../uipath-platform/references/integration-service/connections.md#for-byoa-connections-webhook-triggers) (filter with `--byoa`, `--refresh` retry, stop-and-ask if none exist).
85
+
86
+ **If `byoaConnection: false`** — use the Step 1a connection. Verify health:
87
+
88
+ ```bash
89
+ uip is connections ping "<connection-id>" --output json
90
+ ```
91
+
92
+ ### Step 2 — Get enriched trigger metadata
93
+
94
+ `--connection-id` is **required** for trigger nodes. Without it, the command fails.
95
+
96
+ ```bash
97
+ uip maestro flow registry get <trigger-node-type> --connection-id <connection-id> --output json
98
+ ```
99
+
100
+ The response contains three trigger-specific sections:
101
+
102
+ **`eventParameters.fields`** — non-authoritative. Often empty (see Step 1b). Iterate [`parameters[]`](#reading-parameters) from Step 1b in Steps 3 and 4 — do not iterate this block.
103
+
104
+ Shape only — do not iterate:
105
+
106
+ ```json
107
+ {
108
+ "eventParameters": {
109
+ "fields": [
110
+ {
111
+ "name": "parentFolderId",
112
+ "displayName": "Email folder",
113
+ "type": "string",
114
+ "required": true,
115
+ "reference": {
116
+ "objectName": "MailFolder",
117
+ "lookupValue": "id",
118
+ "lookupNames": ["displayName"],
119
+ "path": "/MailFolders"
120
+ }
121
+ }
122
+ ]
123
+ }
124
+ }
125
+ ```
126
+
127
+ **`filterFields`** — fields used to narrow *which* events fire the trigger (e.g., only emails from a specific sender). These are optional filter criteria and are passed as a structured tree under the `filter` key of `--detail` (see [Filter Trees](#filter-trees)).
128
+
129
+ ```json
130
+ {
131
+ "filterFields": {
132
+ "fields": [
133
+ {
134
+ "name": "fromAddress",
135
+ "displayName": "From address",
136
+ "type": "string",
137
+ "required": false
138
+ }
139
+ ]
140
+ }
141
+ }
142
+ ```
143
+
144
+ **`outputResponseDefinition`** — the event payload schema (all fields the trigger outputs when it fires). **Save this** — you need it in Step 4b to know the exact field paths for downstream `$vars` expressions (e.g., `$vars.{nodeId}.output.text`, `$vars.{nodeId}.output.channel`). Do not guess output field names.
145
+
146
+ **`eventMode`** — `"webhooks"` or `"polling"`.
147
+
148
+ The response (which becomes the `definitions[]` entry verbatim) includes `model.context` with:
149
+ - `connectorKey` — the connector identifier
150
+ - `operation` — the event operation name (e.g., `"EMAIL_RECEIVED"`, `"ISSUE_CREATED"`)
151
+ - `objectName` — the IS object (e.g., `"Message"`, `"Issue"`)
152
+
153
+ These live in the **definition**, not on the node instance. The instance carries only `inputs` (event filter fields) and `outputs`.
154
+
155
+ ### Step 3 — Resolve reference fields in event parameters
156
+
157
+ Iterate the **union** of `parameters[]` (Step 1b) and `EventParameters` (Step 1b-2). For each entry with a `reference` key, run an ID lookup — same mechanism as IS activity nodes. A referenced field can live in `describe → EventParameters` while absent from `parameters[]` — resolving only `parameters[]` misses it.
158
+
159
+ > **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).
160
+
161
+ ```bash
162
+ # Example: resolve Outlook mail folder "Inbox" to its ID
163
+ uip is resources run list "<connector-key>" "<reference.objectName>" \
164
+ --connection-id "<id>" --output json
165
+ ```
166
+
167
+ The `<id>` in `--connection-id "<id>"` MUST be the connection bound to **this** flow (the final connection from Step 1c), not any other connection you've used in another flow. Use the resolved IDs — from this very `run list` call — in the trigger's event parameter configuration.
168
+
169
+ > **If the `run list` call fails, you have no ID.** Do not fall back to the display name, a vendor well-known alias, or an ID from memory — each validates clean and faults at runtime. Stop and report the failed resolve. See [reference-resolution.md — When the Lookup Call Fails](../../../../../uipath-platform/references/integration-service/reference-resolution.md#when-the-lookup-call-fails-critical).
170
+
171
+ > **Paginate when looking up by name.** Use `Data.Pagination.HasMore` / `NextPageToken` with `--query "nextPage=<token>"`. Short-circuit on match. Do NOT conclude "not found" until `HasMore` is `"false"`. See [resources.md#pagination](../../../../../uipath-platform/references/integration-service/resources.md#pagination).
172
+
173
+ **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).
174
+
175
+ ### Step 4 — Validate required event parameters
176
+
177
+ Check every entry in the **union** of `parameters[]` (Step 1b) and `EventParameters` (Step 1b-2). Treat a field as required if **either** source marks `required: true`. All required event parameters must have values before building the flow.
178
+
179
+ 1. Collect all required entries from `parameters[]` **and** `describe → EventParameters` (dedupe by `name`); required = required in either
180
+ 2. For each, check if the user's prompt provides a value
181
+ 3. If any required field is missing, **ask the user** — list the missing fields with their `displayName` (and `description` if useful). Free-form input is appropriate when the value space is open-ended; when a finite set of sensible values exists, present them as options per the dropdown question rule in [SKILL.md](../../../../SKILL.md).
182
+ 4. Only proceed after all required event parameters are resolved
183
+
184
+ > Step 6 buckets each resolved value into `eventParameters`, `queryParameters`, or `pathParameters` based on the entry's `type` — see Step 6's `--detail` table.
185
+
186
+ ### Step 4b — Map trigger output fields for downstream nodes
187
+
188
+ Before wiring downstream nodes, check `outputResponseDefinition` from Step 2 to know the exact field names available in `$vars.{triggerId}.output`. Do NOT guess field names — different triggers output different schemas.
189
+
190
+ Each trigger type has a different output schema — field names like `.text`, `.subject`, or `.body.content` vary by connector. Use the actual field names from `outputResponseDefinition` when writing expressions in downstream nodes.
191
+
192
+ ### Step 5 — Replace the manual trigger with the connector trigger node
193
+
194
+ Follow the [CLI: Replace manual trigger with connector trigger](../../editing-operations-cli.md#replace-manual-trigger-with-connector-trigger) procedure. The CLI handles edge cleanup, orphaned definition removal, and `variables.nodes` regeneration automatically. Note the generated node ID from the `node add` response — you need it for Step 6.
195
+
196
+ ### Step 6 — Configure the trigger node
197
+
198
+ > **MUST READ before `node configure`:** [/uipath:uipath-platform — triggers.md](../../../../../uipath-platform/references/integration-service/triggers.md). The parameters fetched there (`triggers objects` → `parameters[]`, Step 1b) and fields (`triggers describe`, Step 1b-2) are the source of truth for everything in `--detail`. If you have not run both calls, go back to Step 1b.
199
+
200
+ **Read the `--detail` field table below before calling `node configure`.** The fields and types are strict — unknown keys or wrong types cause validation errors. Do not guess field names from other node types (e.g., activity nodes use `method`/`endpoint`/`bodyParameters`; triggers use `eventMode`/`eventParameters`/`filter`, plus `objectName` for generic triggers).
201
+
202
+ Use `node configure` with trigger-specific `--detail` fields:
203
+
204
+ ```bash
205
+ uip maestro flow node configure <PROJECT>.flow <triggerId> --output json --detail '{
206
+ "connectionId": "<CONNECTION_ID>",
207
+ "folderKey": "<FOLDER_KEY>",
208
+ "eventMode": "<EVENT_MODE>",
209
+ "objectName": "<OBJECT_NAME>",
210
+ "eventParameters": { "<paramName>": "<RESOLVED_VALUE>" },
211
+ "filter": {
212
+ "groupOperator": 0,
213
+ "index": 0,
214
+ "filters": [
215
+ {
216
+ "id": "subject",
217
+ "operator": "Contains",
218
+ "value": { "value": "urgent", "rawString": "\"urgent\"", "isLiteral": true }
219
+ }
220
+ ]
221
+ }
222
+ }'
223
+ ```
224
+
225
+ **`--detail` fields for triggers:**
226
+
227
+ | Field | Required | Description |
228
+ |---|---|---|
229
+ | `connectionId` | Yes | Connection UUID from Step 1c (the final connection — BYOA if required) |
230
+ | `folderKey` | Yes | Orchestrator folder key for the connection |
231
+ | `eventMode` | Yes | `"webhooks"` or `"polling"` — from `registry get` response |
232
+ | `objectName` | Generic triggers only | The IS object the event subscribes to (e.g. the Salesforce SObject name) — the object name resolved in Step 1b-2. **Required for generic triggers** (`activityType: "GenericTrigger"` in the definition's `connectorDetail.configuration` — one manifest templated across every object, so its `objectName` context entry ships empty). **Omit for curated triggers** (`activityType: "CuratedTrigger"`) — the manifest's baked-in objectName always wins. |
233
+ | `eventParameters`, `queryParameters`, `pathParameters` | No | JSON objects of resolved values from Steps 3-4. Bucket each `parameters[]` entry by its `type`: `"query"` → `queryParameters` (e.g. GitHub `{"repo":"cli"}`, Outlook `{"sharedMailboxAddress":"..."}`), `"path"` → `pathParameters` (e.g. GitHub `{"owner":"uipath"}`), otherwise → `eventParameters`. Within each bucket, the key is `parameters[].name`. Each must be a JSON object. |
234
+ | `filter` | No | Structured filter tree — see [Filter Trees](#filter-trees) below. Omit to trigger on all events |
235
+
236
+ The CLI computes the runtime JMESPath `filterExpression` from `filter` automatically and persists both into the workflow so Studio Web can re-open the trigger without losing the filter configuration. **Do not pass `filterExpression` directly — the validator rejects it.**
237
+ The command populates `inputs.detail` (including the internal `configuration` blob with the `filter` tree and combined `filterExpression`) and creates workflow-level connection bindings.
238
+
239
+ > **Shell quoting tip:** For complex `--detail` JSON, write it to a temp file: `uip maestro flow node configure <file> <nodeId> --detail "$(cat /tmp/detail.json)" --output json`
240
+
241
+ ### Step 6b — Retrieve and display webhook URL (webhooks only)
242
+
243
+ Applies when `eventMode` is `"webhooks"`, regardless of `byoaConnection`.
244
+
245
+ > **Guard:** If the trigger object's `isWebhookUrlVisible` is `false` (from Step 1b), skip this step — the connector manages webhook registration automatically and does not expose a URL. If you do not have `triggers objects` output, you skipped Step 1b — go back.
246
+
247
+ Follow [/uipath:uipath-platform — triggers.md — Webhook URL Retrieval](../../../../../uipath-platform/references/integration-service/triggers.md#webhook-url-retrieval) for the exact commands (`uip is connections list` → `ElementInstanceId` → `uip is webhooks config`).
248
+
249
+ **Presenting the URL:** If the Step 1b `triggers objects` response included `design.textBlocks`, use that text verbatim (substituting `{webhookUrl}`) — it carries connector-specific registration instructions. Otherwise, use a generic message instructing the user to register the URL in their external service's app settings (e.g., Slack Event Subscriptions, Salesforce Outbound Messages). The trigger will not fire until the URL is registered and verified.
250
+
251
+ **On failure:** if `ElementInstanceId` is empty, the connection is the wrong type — verify the `byoaConnection` flag from Step 1b and switch to a BYOA connection if required. If `webhooks config` itself fails, ping the connection (`uip is connections ping`) and re-authenticate via `uip is connections edit` if unhealthy.
252
+
253
+ ---
254
+
255
+ ## Wait for events (`uipath.connector.event.<key>.<event>`)
256
+
257
+ A **Wait for events** node waits for an external event **mid-flow** instead of starting the flow ("wait for the approval reply", "wait until the Jira issue is Done"). Same connector event as a trigger — identical `eventParameters`, `filterFields`, `outputResponseDefinition`, `eventMode`, connection binding, reference resolution, filter trees. Apply Steps 1-6 above unchanged; only the deltas below differ.
258
+
259
+ | Aspect | Connector **trigger** | **Wait for events** (mid-flow) |
260
+ |---|---|---|
261
+ | Node type | `uipath.connector.trigger.<key>.<trigger>` | `uipath.connector.event.<key>.<event>` |
262
+ | Position | Start node — replaces the manual trigger | Mid-flow — has an `input` port |
263
+ | Add | Step 5: [replace the manual trigger](../../editing-operations-cli.md#replace-manual-trigger-with-connector-trigger) | `node add` like an action node; do **NOT** remove the start node |
264
+ | Ports | in: — · out: `output` | in: `input` · out: `output`, `error` |
265
+ | Start trigger | Is the flow's trigger | Not a trigger — flow still needs its own start trigger |
266
+ | Discovery search | `... search "<svc>" trigger` | `... search "<svc>" event` |
267
+ | Config (Steps 1-4, 6) | Identical | Identical |
268
+
269
+ Add and wire:
270
+
271
+ ```bash
272
+ uip maestro flow node add <PROJECT>.flow uipath.connector.event.<key>.<event> \
273
+ --label "<LABEL>" --position 400,144 --output json
274
+ ```
275
+
276
+ Wire an incoming edge into `input` and an outgoing edge from `output` per [editing-operations-json.md — Insert a node between two existing nodes](../../editing-operations-json.md#insert-a-node-between-two-existing-nodes). Downstream reads `$vars.{eventNodeId}.output` (payload) and `$vars.{eventNodeId}.error`. Wire `error` only when the requirements say what an event-wait failure should do — otherwise leave it unwired and let the failure fault the flow ([file-format.md — Default: off](../../../shared/file-format.md#default-off--enable-only-for-a-failure-the-flow-actually-handles)).
277
+
278
+ > **The flow still needs a separate start trigger.** A mid-flow event node does **not** start the flow. Do not remove `core.trigger.manual`/`scheduled` or the connector trigger that begins the flow.
279
+
280
+ ---
281
+
282
+ ## Filter Trees
283
+
284
+ Filters are authored as a **structured tree**, not a string expression. The CLI compiles the tree into a JMESPath `filterExpression` using the same logic Studio Web does, and writes both forms into the flow so the trigger round-trips cleanly when re-opened in SW.
285
+
286
+ ### Tree shape
287
+
288
+ ```jsonc
289
+ {
290
+ "groupOperator": 0, // 0 = And, 1 = Or — combines sibling filters/groups
291
+ "index": 0, // ordering index within parent (root is 0)
292
+ "filters": [ // leaf conditions at this level
293
+ {
294
+ "id": "<fieldName>", // from filterFields.fields[].name
295
+ "operator": "<Operator>", // see operator table below
296
+ "value": {
297
+ "value": <typed value>, // string / number / boolean / ISO-8601 date-time
298
+ "rawString": "\"...\"", // verbatim user-entered text (with quotes for strings)
299
+ "isLiteral": true // false for a dynamic operand; eventParameters stay literal
300
+ }
301
+ }
302
+ ],
303
+ "groups": [] // optional: nested subgroups (same shape as root)
304
+ }
305
+ ```
306
+
307
+ A no-op filter — used when the user wants all events to fire the trigger — is `null` or `{"groupOperator": null, "index": 0, "filters": []}`. Prefer **omitting** the `filter` field entirely.
308
+
309
+ ### Supported operators
310
+
311
+ | Operator | Meaning | Typical field types |
312
+ |---|---|---|
313
+ | `Equals` / `NotEquals` | Exact (in)equality | string, number, boolean |
314
+ | `LessThan` / `LessThanOrEqual` / `GreaterThan` / `GreaterThanOrEqual` | Numeric comparison | number, integer |
315
+ | `Contains` / `NotContains` | Substring match | string |
316
+ | `StartsWith` / `NotStartsWith` / `EndsWith` / `NotEndsWith` | Prefix / suffix match | string |
317
+ | `IsEmpty` / `IsNotEmpty` | Value is / is not empty string | string (no `value` needed) |
318
+ | `IsNull` / `IsNotNull` | Value is / is not null | any type (no `value` needed) |
319
+ | `Is` / `IsNot` | Boolean is true / false | boolean (no `value` needed) |
320
+ | `In` / `NotIn` / `IsOneOf` / `IsNotOneOf` | Membership — pass comma-separated values in `value.value` | string, number |
321
+ | `Before` / `BeforeOrEqual` / `After` / `AfterOrEqual` / `DateTimeEquals` / `DateTimeNotEqual` | Date-time comparison (ISO-8601 strings) | date-time |
322
+
323
+ ### Examples
324
+
325
+ **Emails containing "urgent" in the subject:**
326
+
327
+ ```json
328
+ {
329
+ "groupOperator": 0,
330
+ "index": 0,
331
+ "filters": [
332
+ { "id": "subject", "operator": "Contains",
333
+ "value": { "value": "urgent", "rawString": "\"urgent\"", "isLiteral": true } }
334
+ ]
335
+ }
336
+ ```
337
+
338
+ **Emails from a specific sender AND subject contains "good day":**
339
+
340
+ ```json
341
+ {
342
+ "groupOperator": 0,
343
+ "index": 0,
344
+ "filters": [
345
+ { "id": "from", "operator": "Equals",
346
+ "value": { "value": "boss@example.com", "rawString": "\"boss@example.com\"", "isLiteral": true } },
347
+ { "id": "subject", "operator": "Contains",
348
+ "value": { "value": "good day", "rawString": "\"good day\"", "isLiteral": true } }
349
+ ]
350
+ }
351
+ ```
352
+
353
+ **Multiple senders (OR) nested inside an outer AND with a subject match:**
354
+
355
+ ```json
356
+ {
357
+ "groupOperator": 0,
358
+ "index": 0,
359
+ "filters": [
360
+ { "id": "subject", "operator": "Contains",
361
+ "value": { "value": "urgent", "rawString": "\"urgent\"", "isLiteral": true } }
362
+ ],
363
+ "groups": [
364
+ {
365
+ "groupOperator": 1,
366
+ "index": 1,
367
+ "filters": [
368
+ { "id": "from", "operator": "Equals",
369
+ "value": { "value": "a@ex.com", "rawString": "\"a@ex.com\"", "isLiteral": true } },
370
+ { "id": "from", "operator": "Equals",
371
+ "value": { "value": "b@ex.com", "rawString": "\"b@ex.com\"", "isLiteral": true } }
372
+ ]
373
+ }
374
+ ]
375
+ }
376
+ ```
377
+
378
+ ### How to build a filter tree from `filterFields`
379
+
380
+ 1. Run `flow registry get` with `--connection-id` (Step 2) and read the `filterFields.fields` array. Each entry has a `name` (use as the leaf `id`), a `type` (drives operator selection), and an optional `description`.
381
+
382
+ Then follow [/uipath:uipath-platform — triggers.md > Building Filter Trees from filterFields](../../../../../uipath-platform/references/integration-service/triggers.md#building-filter-trees-from-filterfields) for the rest of the procedure (operator selection, leaf composition, value wrapping), the mandatory-filter contract (connector-mandated values like Gmail folder go on `eventParameters`, never the freeform `filter` tree), and array-shaped field handling.
383
+
384
+ ### What NOT to generate
385
+
386
+ | Invalid input | Why it fails | Valid replacement |
387
+ |---|---|---|
388
+ | `"filterExpression": "(contains(subject, 'x'))"` | Legacy format — the CLI now rejects `filterExpression` as an input field. It is *only* an output in the generated `.flow`. | Build a `filter` tree with a `Contains` leaf. |
389
+ | `"filter": "(subject == 'x')"` | `filter` must be an object, not a string. | Structured tree with `filters: [...]`. |
390
+ | `{ "id": "fields.subject", ... }` | `fields.` prefix — use the bare field name from `filterFields.fields[].name`. | `{ "id": "subject", ... }` |
391
+ | `{ "id": "subject", "operator": "contains", ... }` | Operator is case-sensitive — use PascalCase. | `"operator": "Contains"` |
392
+ | `{ "value": "urgent" }` on a leaf | Bare string — must be wrapped in the `WorkflowValue` object. | `{ "value": { "value": "urgent", "rawString": "\"urgent\"", "isLiteral": true } }` |
393
+ | `{ "isLiteral": false, "value": "${var}" }` on an `eventParameters` value | Filter-tree leaf operands may be dynamic (`isLiteral: false`, compiled to a `{var_…}` placeholder plus `filterVariables`), but `eventParameters` must be literals — a trigger is evaluated before any flow run exists. | Resolve the value first and pass it as a literal; use a dynamic operand only inside the `filter` tree. |
394
+ | Adding a freeform leaf for a connector-mandated field (e.g. Gmail folder, Slack channelId) | Mandatory filters derived from connector event metadata are emitted automatically by the CLI from `eventParameters` — duplicating them in the freeform tree double-applies the clause. | Set the value through `eventParameters` only; the CLI AND-joins the mandatory JMES clause into the top-level `inputs.detail.filterExpression` (matching SW's `combinedFilterExpression`). It is *not* persisted on `essentialConfiguration` — SW classifies it optional and rebuilds it from input field values on restore. |
395
+
396
+ ---
397
+
398
+ ## Bindings
399
+
400
+ Trigger nodes require more binding resources than activity nodes: `Connection` + `EventTrigger` + `Property` resources. **`node configure` and the packaging pipeline handle all of these automatically:**
401
+
402
+ - **Connection bindings** — created in the `.flow` file by `node configure` (Step 6)
403
+ - **EventTrigger + Property bindings** — generated into `bindings_v2.json` during `flow debug` or packaging from the trigger node's `inputs.detail`
404
+
405
+ You do **not** need to manually create or edit `bindings_v2.json` for trigger nodes.
406
+
407
+ ---
408
+
409
+ ## CLI Commands
410
+
411
+ ```bash
412
+ # Discovery
413
+ uip maestro flow registry search trigger --output json # find trigger node types
414
+ uip maestro flow registry pull --force # refresh registry (requires login)
415
+
416
+ # Enriched trigger metadata (--connection-id REQUIRED)
417
+ uip maestro flow registry get <trigger-node-type> --connection-id <connection-id> --output json
418
+
419
+ # Node lifecycle
420
+ uip maestro flow node remove <PROJECT>.flow start --output json # remove manual trigger
421
+ uip maestro flow node add <PROJECT>.flow <trigger-node-type> --label "<LABEL>" --position 200,144 --output json
422
+ uip maestro flow node configure <PROJECT>.flow <nodeId> --detail '<TRIGGER_DETAIL_JSON>' --output json
423
+
424
+ # Trigger object metadata (MANDATORY — Steps 1b and 1b-2)
425
+ uip is triggers objects "<connector-key>" "<operation>" --connection-id "<id>" --output json # Step 1b: objects + parameters[]
426
+ uip is triggers describe "<connector-key>" "<operation>" "<objectName>" --connection-id "<id>" --output json # Step 1b-2: fields
427
+
428
+ # Connections — see /uipath:uipath-platform — connections.md for selection rules (Native, BYOA, --refresh)
429
+ uip is connections list "<connector-key>" --all-folders --output json # discover connections (--all-folders is mandatory)
430
+ uip is connections list "<connector-key>" --byoa --all-folders --output json # BYOA only (Step 1c)
431
+ uip is connections ping "<connection-id>" --output json # verify health
432
+
433
+ # Reference resolution (same as IS activity)
434
+ uip is resources run list "<connector-key>" "<resource>" \
435
+ --connection-id "<id>" --output json
436
+
437
+ # Webhook URL retrieval — see /uipath:uipath-platform — triggers.md (Step 6b, webhooks only)
438
+ uip is webhooks config "<connector-key>" \
439
+ --connection-id "<connection-guid>" \
440
+ --element-instance-id <number> --output json
441
+ ```
442
+
443
+ ---
444
+
445
+ ## Testing Trigger Flows
446
+
447
+ `uip maestro flow debug` works with trigger-based flows. Debug does **not** wait for a live event — it **pulls the most recent matching event** from the connector's lookback window and executes immediately.
448
+
449
+ ### How debug works for triggers
450
+
451
+ 1. Debug calls the connector's `/events/debug` endpoint with `maxResults=5` and a `startDate` (default: 1 hour ago)
452
+ 2. The connector returns up to 5 matching events from that window, sorted most-recent-first
453
+ 3. The runtime uses `FilterMatches[0]` (the most recent match) as the trigger input
454
+ 4. The flow executes immediately with that event data
455
+ 5. If **no matching events** exist in the lookback window, debug fails with error code `3005` (TriggerNoMatches)
456
+
457
+ ```bash
458
+ uip maestro flow debug . --output json
459
+ # → Fetches most recent matching event from the past ~1 hour
460
+ # → Flow executes immediately with that event data
461
+ ```
462
+
463
+ ### Polling vs webhook triggers in debug
464
+
465
+ | Trigger mode | Debug support | Behavior |
466
+ |---|---|---|
467
+ | `polling` | Supported | Pulls recent events via debug API, executes immediately |
468
+ | `webhooks` | **Not supported** | Webhook triggers cannot be tested in Studio debug mode — debug requires Orchestrator |
469
+
470
+ > **If the trigger uses `webhooks` event mode**, tell the user that debug is not available for webhook triggers. They must deploy to Orchestrator and test with a real webhook event.
471
+
472
+ ### Key differences from manual-trigger debug
473
+
474
+ | Aspect | Manual trigger | Connector trigger (polling) |
475
+ |---|---|---|
476
+ | Execution start | Immediate with user-provided inputs | Immediate with most recent matching event |
477
+ | User action needed | Provide input values | Ensure a matching event exists in the past ~1 hour |
478
+ | Failure mode | Missing required inputs | No matching events in lookback window (error 3005) |
479
+
480
+ ### Pre-debug checklist
481
+
482
+ 1. **Verify the connection is healthy** — `uip is connections ping "<id>"`
483
+ 2. **Confirm a matching event exists** — the user should have produced the event (e.g., sent an email, created a Jira issue) within the past hour
484
+ 3. **Check event mode** — if `webhooks`, debug is not supported; inform the user
485
+
486
+ ---
487
+
488
+ ## Debug
489
+
490
+ ### Common Errors
491
+
492
+ | Error | Cause | Fix |
493
+ |---|---|---|
494
+ | `Trigger nodes require --connection-id` | Ran `registry get` without `--connection-id` | Re-run with `--connection-id <id>` — required for all trigger nodes |
495
+ | `Invalid --detail` saying `objectName is required for the trigger` — or, on older CLIs, an opaque `Error configuring node` / `Response returned an error code` on every `--detail` shape | The trigger is **generic** (`activityType: "GenericTrigger"`, e.g. `uipath.connector.trigger.uipath-salesforce-sfdc.record-created`): its manifest ships the `objectName` context entry without a value, and configure needs the object to fetch trigger metadata. Older CLIs rejected `objectName` as a `--detail` key and called the metadata API with an empty object name — hence the opaque server error. | Pass the object in `--detail.objectName` (resolve it per Step 1b-2). On an older CLI that rejects the key, `Edit` the trigger **definition's** `model.context` `objectName` entry to add `"value": "<object>"`, then re-run `node configure`. Curated triggers never need this — their manifest carries the objectName. |
496
+ | No trigger nodes in registry | Not authenticated or registry not pulled | Run `uip login` then `uip maestro flow registry pull --force` |
497
+ | Connection not found in bindings | `node configure` not run or connection expired | Re-run `node configure` with valid `connectionId` and `folderKey` |
498
+ | Event parameter missing at runtime | Required event parameter not configured (commonly one returned by `triggers describe` but absent from `triggers objects → parameters[]`) | Re-run **both** `uip is triggers objects` (Step 1b) **and** `uip is triggers describe` (Step 1b-2). Configure every field marked `required` in **either** `parameters[]` or `EventParameters` (resolving references) under the correct `--detail` bucket. |
499
+ | `filterExpression is derived from the filter tree and cannot be provided directly` | Passed `filterExpression` string instead of a `filter` tree | Build a structured `filter` tree — see [Filter Trees](#filter-trees) |
500
+ | Trigger fires on events the filter should exclude; `node configure` reported Success | A leaf `id` does not match any `filterFields.fields[].name` (matching is case-sensitive). The CLI drops the unmatched leaf from the compiled `filterExpression` instead of failing | Re-run `registry get --connection-id <id>`, compare every leaf `id` against `filterFields.fields[].name`, then re-run `node configure` with the exact names |
501
+ | Trigger not firing | Event parameters point to wrong resource (e.g., wrong folder ID) | Re-resolve reference fields with `uip is resources run list` |
502
+ | Trigger faults immediately with no visible error after a clean build | Event parameter uses a reference ID scoped to a **different** connection (common when copying from a prior flow in the same session — e.g., a `parentFolderId` for mailbox A pasted into a trigger bound to mailbox B's connection) | Re-run `uip is resources run list "<connector-key>" "<objectName>" --connection-id <CURRENT_CONNECTION_ID>`, extract the fresh ID, update `eventParameters` in `--detail`, re-run `node configure`, re-debug. See Step 3 and the top-level Anti-Pattern on reference-ID reuse in [SKILL.md](../../../../SKILL.md). |
503
+ | Definition's `model.context` missing operation | Definition not copied correctly, or node added before registry pull | Re-run `uip maestro flow registry pull --force`, then verify the `definitions[]` entry contains `model.context` with `connectorKey`/`operation`/`objectName` as returned by `registry get` |
504
+ | Trigger faults at runtime with webhook-related error | Standard (non-BYOA) connection used for a trigger that requires `byoaConnection: true` | Run `uip is triggers objects` (Step 1b) to check `byoaConnection` flag, then switch to a BYOA connection with `uip is connections list "<connector-key>" --byoa --output json`. If no BYOA connections exist, user must create one. |
505
+ | `connections list` returns empty but connections exist in the IS portal | CLI is using cached connection data that is stale | Retry with `--refresh` flag: `uip is connections list "<connector-key>" --refresh --output json` |
506
+ | `ElementInstanceId` is empty on the selected connection | Connection is not a BYOA connection, or connector does not support webhooks on this connection type | Verify the trigger requires BYOA (Step 1b `byoaConnection` flag). If `true`, switch to a BYOA connection. |
507
+
508
+ ### Debug Tips
509
+
510
+ 1. **Always verify the connection is healthy** before debugging trigger issues — run `uip is connections ping "<id>"`
511
+ 2. **`flow validate` does NOT catch trigger-specific issues** — missing event parameters, wrong reference IDs, and expired connections are caught only at runtime
512
+ 3. **Event parameters with `reference` objects** need resolved IDs, not display names — same as IS activity fields
513
+ 4. **Filters are optional** — omit `filter` from `--detail` if the user wants all events to trigger the flow. Do not invent an "empty" expression.
514
+ 5. **Bindings are auto-managed** — `node configure` creates flow-level bindings; `flow debug`/packaging generates `bindings_v2.json` from them
515
+ 6. **Use `uip maestro flow node remove` to remove the manual trigger** — do NOT use `Edit` to delete the start node. The CLI automatically removes associated edges, orphaned definitions, and regenerates `variables.nodes`. Hand-editing skips these cleanup steps and can leave orphaned references.
516
+ 7. **Check `outputResponseDefinition` before writing downstream expressions** — trigger output field names vary by connector. Do not assume field names like `.text` or `.subject` — verify from the enriched `registry get` response (Step 2)
517
+ 8. **Validate filter field names against `filterFields` yourself** — only field names returned in `filterFields.fields[].name` are valid leaf `id`s in the filter tree, and matching is case-sensitive. The CLI no longer rejects an unknown field at configure time: it drops that leaf from the compiled `filterExpression` and reports Success. A guessed name therefore surfaces as a trigger that fires on events the filter should exclude, not as an error.
@@ -0,0 +1,115 @@
1
+ # Connector Trigger Nodes — Planning
2
+
3
+ Connector trigger nodes start a flow when an external event fires (e.g., "email received in Outlook", "issue created in Jira"). They use UiPath Integration Service connectors — the same ecosystem as IS activity nodes — but replace the manual/scheduled start node with an event-driven one.
4
+
5
+ > **Two node families, same mechanism:**
6
+ >
7
+ > - **Connector trigger** (`uipath.connector.trigger.<key>.<trigger>`) — **starts** the flow.
8
+ > - **Wait for events** (`uipath.connector.event.<key>.<event>`) — **pauses a running flow** until the event arrives, then continues. Has an `input` port; NOT the start node. See [Wait for events](impl.md#wait-for-events-uipathconnectoreventkeyevent).
9
+
10
+ ## When to Use
11
+
12
+ **Trigger** — flow should start when an external event fires.
13
+
14
+ **Event** (mid-flow) — running flow must wait for an external event before proceeding (sent an approval, waits for the reply). Flow keeps its own start trigger.
15
+
16
+ ### Decision Order
17
+
18
+ | Tier | Trigger Type | When to Use |
19
+ |---|---|---|
20
+ | 1 | **IS connector trigger** (this node type) | A connector exists and supports the event you need (e.g., "new email", "issue created") |
21
+ | 2 | **Scheduled trigger** (`core.trigger.scheduled`) | No event trigger exists, but you can poll on a schedule + filter for changes |
22
+ | 3 | **Manual trigger** (`core.trigger.manual`) | Flow is started on demand by a user or API call |
23
+
24
+ ### Prerequisites
25
+
26
+ - `uip login` required — trigger nodes only appear in the registry after authentication
27
+ - A healthy IS connection must exist for the connector. Before concluding none exists: derive the connector key from a `registry search` node type (never inferred from the service's brand name — the registry key is frequently prefixed or qualified differently), list with `uip is connections list "<connector-key>" --all-folders --output json`, and retry once with `--refresh`. An empty result from an unverified key or without `--all-folders` is a false negative, not "no connection." Only when absence is confirmed must the user create one before proceeding.
28
+ - `uip maestro flow registry pull` must be run to cache trigger node types locally
29
+
30
+ ### When NOT to Use
31
+
32
+ - **No connector exists for the service** — use a scheduled trigger with `core.action.http.v2` polling instead
33
+ - **The event is time-based, not data-driven** — use `core.trigger.scheduled`
34
+ - **The flow should be started manually** — use `core.trigger.manual`
35
+ - **You need to react to UiPath Orchestrator queue items** — use a queue trigger (separate mechanism)
36
+
37
+ ## Node Type Pattern
38
+
39
+ `uipath.connector.trigger.<connector-key>.<trigger-name>`
40
+
41
+ Examples:
42
+ - `uipath.connector.trigger.uipath-microsoft-outlook365.email-received`
43
+ - `uipath.connector.trigger.uipath-atlassian-jira.issue-created`
44
+ - `uipath.connector.trigger.uipath-salesforce-slack.new-message`
45
+
46
+ ## Key Differences from IS Activity Nodes
47
+
48
+ | Aspect | IS Activity | IS Trigger |
49
+ |---|---|---|
50
+ | Type pattern | `uipath.connector.<key>.<activity>` | `uipath.connector.trigger.<key>.<trigger>` |
51
+ | Position in flow | Anywhere (action node) | Start node only (replaces manual trigger) |
52
+ | `--connection-id` on `registry get` | Optional (enriches metadata) | **Required** (fails without it) |
53
+ | Metadata returned | `inputDefinition`, `outputResponseDefinition`, `connectorMethodInfo` | `eventParameters`, `filterFields`, `outputResponseDefinition`, `eventMode` |
54
+ | Configuration | `node configure --detail` (method, endpoint, bodyParameters) | `node configure --detail` (eventMode, eventParameters, filter tree; objectName for generic triggers) |
55
+ | Bindings | `Connection` resource | `Connection` + `EventTrigger` + `Property` resources (auto-generated) |
56
+
57
+ ## Discovery
58
+
59
+ ```bash
60
+ # Search for trigger nodes in the registry
61
+ uip maestro flow registry search trigger --output json
62
+
63
+ # Or search by service name
64
+ uip maestro flow registry search outlook trigger --output json
65
+ ```
66
+
67
+ Confirm `tags` includes both `"connector"` and `"trigger"` in the results.
68
+
69
+ If the trigger doesn't appear, re-pull the registry (triggers require authentication):
70
+
71
+ ```bash
72
+ uip login status --output json
73
+ uip maestro flow registry pull --force
74
+ ```
75
+
76
+ Still absent after that one re-pull, with `uip login status` reporting `Logged in`, means the connector has **no Flow trigger node**, whatever events `uip is triggers objects` / `triggers describe` report for it — Integration Service webhooks the Flow registry does not expose cannot start a flow. Data Fabric (`uipath-uipath-dataservice`) is the standing example: it has a `CREATED` / `UPDATED` IS webhook and zero trigger nodes. Drop to Tier 2 or Tier 3; do not try other spellings of the node type.
77
+
78
+ ## Ports
79
+
80
+ | Input Port | Output Port(s) |
81
+ |---|---|
82
+ | — (start node) | `output` |
83
+
84
+ ## Output Variables
85
+
86
+ - `$vars.{nodeId}.output` — the event payload (structure depends on the trigger — see `outputResponseDefinition` from enrichment)
87
+ - `$vars.{nodeId}.error` — error details if the trigger encounters an issue
88
+
89
+ ## Event Mode
90
+
91
+ Triggers operate in one of two modes (returned in `eventMode` from `registry get`):
92
+
93
+ | Mode | Behavior |
94
+ |---|---|
95
+ | `webhooks` | The connector registers a webhook — events fire in near-real-time |
96
+ | `polling` | The runtime polls the service on an interval — slight delay between event and trigger |
97
+
98
+ The agent does not need to configure the mode — it is determined by the connector. Note it in the plan for the user's awareness.
99
+
100
+ > **Debug impact:** Only `polling` triggers can be debugged in Studio Web. `webhooks` triggers cannot be tested via `uip maestro flow debug` — they require deployment to Orchestrator. Flag this in the plan if the trigger uses webhook mode.
101
+
102
+ ### Webhook Triggers — Extra Steps
103
+
104
+ When `eventMode` is `"webhooks"`, two additional considerations apply:
105
+
106
+ 1. **BYOA (Bring Your Own Account) connections.** Some webhook events require BYOA — the customer must register their own OAuth app with the external service. The `byoaConnection` flag on the `triggers objects` response indicates this **per event object**, not per connector. Selection workflow (filter, `--refresh`, stop-and-ask) lives in [/uipath:uipath-platform — connections.md — For BYOA Connections](../../../../../uipath-platform/references/integration-service/connections.md#for-byoa-connections-webhook-triggers). Flag in the plan if BYOA is required so the user can prepare.
107
+
108
+ 2. **Webhook URL registration.** After the trigger is configured (Step 6 in implementation), the webhook URL must be retrieved and registered on the customer's external service. Without registration, the trigger never fires. See [implementation Step 6b](impl.md#step-6b--retrieve-and-display-webhook-url-webhooks-only) and [/uipath:uipath-platform — triggers.md — Webhook URL Retrieval](../../../../../uipath-platform/references/integration-service/triggers.md#webhook-url-retrieval).
109
+
110
+ ## Planning Annotation
111
+
112
+ In the architectural plan, annotate connector trigger nodes as:
113
+ - `trigger: <service-name>` with the intended event (e.g., "trigger: Outlook — email received")
114
+ - Record the event mode (`webhooks` or `polling`) if known from discovery
115
+ - If discovery found no trigger for the event, fall back to `core.trigger.scheduled` + polling or flag the gap in Open Questions