@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
@@ -1,624 +0,0 @@
1
- # Integration Service Connectors
2
-
3
- *Exact signatures, fields, and defaults: `connector()`.*
4
-
5
- Call a curated or generic Integration Service operation.
6
-
7
- **Some Data Fabric entity operations are Integration Service connector actions.**
8
- "Data Fabric" and "Data Service" name one product — the tenant displays connector
9
- key `uipath-uipath-dataservice` as *UiPath Data Fabric*. CRUD is NATIVE:
10
- `core.datafabric.*` has all four verbs (`dataFabricRead()`,
11
- `dataFabricCreate()`, `dataFabricUpdate()`, `dataFabricDelete()`), and the read
12
- verb covers filters, paging, sort, and get-by-id (filter on `Id`). What still
13
- routes here is the file record fields and the Record Created / Updated events;
14
- see [`data-fabric.md`](data-fabric.md) for the routing table.
15
-
16
- Signatures:
17
-
18
- - `connector(descriptor, inputs, opts?)`
19
- - `connector(key, action, inputs?, { connection, folder, object?, version? })` (`connection` and `folder` are required: `check` reports `BINDING_MISSING` without them)
20
-
21
- ```ts
22
- .step('issue', connector('uipath-atlassian-jira', 'get-issue',
23
- { issueId: input('issueId'), project: 'IN', issuetype: 'Task' },
24
- { connection: 'jira', folder: 'shared' }))
25
- ```
26
-
27
- ## Author first — `check` names every prepare you owe
28
-
29
- Authoring never waits on `prepare`, and no discovery command precedes the
30
- source. The loop is:
31
-
32
- 1. **Search** the library and read the operation's page.
33
- 2. **Author** the step from the task's own words — the fields you intend,
34
- `lookup()` tokens for ids, `{ object: '<name-as-the-task-said-it>' }` for a
35
- generic operation.
36
- 3. **Check**: `uip maestro flow check .flow-sdk/<Name>.flow.ts --source`. It names each
37
- gap with the exact command — `LOOKUP_UNRESOLVED`, `OBJECT_UNPREPARED`,
38
- `CUSTOM_FIELDS_UNPREPARED`, `CONNECTOR_INPUT`.
39
- 4. **Prepare once** — `--object`, `--resolve` and `-f` compose in a single
40
- invocation, and it finds the connection itself and writes `bindings.json`.
41
- `prepare` repoints the import itself; it only asks when two flows
42
- import the same connector, or you passed `--no-source-rewrite`.
43
- 5. **Check again, then compile.**
44
-
45
- Every prepare command below is the one `check` prints at step 3 — shown here
46
- so its flags are documented, not as a step to run before the source exists.
47
-
48
- ## Three contracts to settle before authoring
49
-
50
- Check these before the first connector call; they are the common places where a
51
- plausible Flow compiles but loses the intended runtime or Studio Web contract:
52
-
53
- 1. **Runtime strings use `tmpl`, not `js`.** For example,
54
- ``where: tmpl`invoiceNumber = '${input('invoiceNumber')}'` `` builds a string.
55
- ``js`invoiceNumber = '${input('invoiceNumber')}'` `` is JavaScript assignment
56
- syntax and evaluates to only the assigned value. See
57
- [Structured filters](#structured-filters-ceql).
58
- 2. **Schema-dynamic fields require a prepared descriptor.** Resolving parent
59
- values is not enough: run `registry prepare` with those values and import the
60
- generated descriptor so the Flow retains its schema-replay metadata. See
61
- [the parent-field loop](#schema-dynamic-operations-the-parent-field-loop).
62
- 3. **Paged reference lookups use exactly `nextPage`.** When
63
- `Pagination.HasMore` is true, pass `Pagination.NextPageToken` as
64
- `--query "nextPage=<token>"`; do not guess `page`, `pageToken`, or
65
- `nextPageToken`. See
66
- [Resolving connection-scoped reference values](#resolving-connection-scoped-reference-values).
67
-
68
- ## Discovering operations and fields
69
-
70
- `$FLOW_SDK_LIBRARY_MD` (markdown, for reading) and `$FLOW_SDK_LIBRARY_JSON`
71
- (machine-readable, for compiling) point at a connector library staged by the
72
- environment. It is not baked into the npm package, so when those variables are
73
- unset, fetch one into the project:
74
-
75
- ```bash
76
- uip maestro registry pull
77
- ```
78
-
79
- The library and its Markdown go to a shared cache
80
- (`~/.uipath/cache/flow-sdk/library/current/`), and `compile`, `check` and
81
- `registry search` resolve them from there with no flag. The project gets only
82
- `.flow-sdk/connectors/`, holding a descriptor per connector it references.
83
-
84
- To read the Markdown directly, ask where it is:
85
-
86
- ```bash
87
- FLOW_SDK_LIBRARY_MD="$(uip maestro registry path --library-md --output plain)" \
88
- || echo "no connector library yet: run uip maestro registry pull" >&2
89
- ```
90
-
91
- The four library verbs are `pull`, `search`, `path` and `prepare`.
92
- Like the authoring verbs they need a prerelease `@uipath/cli`, and they hold no logic of their own — each one runs the `@uipath/maestro-builder-sdk` installed in this workspace.
93
- `uip` is the entry point and is what delivers these skills, so it is present wherever this guidance is being read.
94
- (The package also exposes a `flow-sdk` bin for invoking the same commands directly, which is what the printed remedies fall back to when nothing sets `FLOW_SDK_INVOKED_AS`.)
95
-
96
- **`uip maestro registry` is not `uip maestro flow registry`.** The names are one
97
- word apart and the jobs are unrelated: this one is the connector library the
98
- compilers resolve operations against, while `uip maestro flow registry
99
- pull|search|get` syncs the tenant's **node manifests** — the node types other
100
- references reach for (`uipath.core.function`, `uipath.core.agent.<name>`). A
101
- connector operation is never in the node registry and a node type is never in
102
- the library, so a miss in one is not evidence about the other.
103
-
104
- Search that library for static contracts:
105
-
106
- ```bash
107
- jq '.entries[] | select(.label | test("send email"; "i")) | {label,nodeType,path}' \
108
- "$FLOW_SDK_LIBRARY_MD/index.json"
109
- sed -n '1,220p' "$FLOW_SDK_LIBRARY_MD/<path-from-index>"
110
- ```
111
-
112
- When `check` refuses a connection-specific field as unknown — or warns the
113
- schema is unprepared — materialize the live schema rather than guessing or
114
- hand-editing the emitted Flow; its diagnostic names this command. It reads the
115
- schema through the tenant, so it needs a live Integration Service connection
116
- and a logged-in `uip`; without one, fall back to the curated operation in the
117
- markdown library.
118
-
119
- ```bash
120
- uip maestro registry prepare <connector-key> <action>
121
- # Generic operation: materialize the one connected object the task uses.
122
- uip maestro registry prepare <connector-key> <action> --object <api-object-name>
123
- # Use --all-objects only when the task truly needs the full connected catalog.
124
- ```
125
-
126
- The result lands in `.flow-sdk/connectors-local/`, which the compilers union over the
127
- library. Calls accumulate, so preparing a second operation keeps the first.
128
-
129
- `prepare` picks the connection itself (see below). Pass `--connection-id <id>`
130
- only to pin a specific one, and expect it to be checked: a connection whose
131
- `State` is not `Enabled` is refused, naming the enabled alternatives. A `Failed`
132
- connection answers field discovery with an empty schema, so preparing through
133
- it would write an overlay with no fields and the next compile would still
134
- reject every input as unknown — the refusal is the only signal that says
135
- "connection", not "field".
136
-
137
- Descriptors from either tree are imported with their real `.ts` extension — a
138
- `.js` specifier does not resolve, because these are sources rather than compiled
139
- output. The paths are relative to the source, which sits in `.flow-sdk/` beside
140
- both trees:
141
-
142
- ```ts
143
- import { CreateInvoiceShare } from './connectors-local/uipath-salesforce-sfdc.ts';
144
- import { SendMessageToChannel } from './connectors/uipath-salesforce-slack.ts';
145
- ```
146
-
147
- Older environments provide the same tool as a bare `prepare-connector` on
148
- `PATH`. The arguments are identical apart from one name: a connector version is
149
- `--connector-version` here, because `--version` is Commander's own flag and
150
- would print the CLI version instead of reaching the generator.
151
-
152
- For many connectors that first command is **not enough on its own** — see the
153
- parent-field loop below before concluding a field does not exist.
154
-
155
- ### A Generic operation is authored from the LIBRARY, not through registry prepare
156
-
157
- Author it directly, with the **library's** action id and the object as an option:
158
-
159
- ```ts
160
- .step('users', connector('uipath-servicenow-servicenow', 'list-all-records',
161
- {}, { connection: 'sn', folder: 'shared', object: 'acr_user' }))
162
- ```
163
-
164
- That is the generic form, and it needs no live resolution: it compiles off the
165
- baked library, validates, and runs. `registry prepare` is for a **curated,
166
- schema-dynamic** op whose real fields the connection decides (Jira create-issue
167
- and friends) — a generic list usually has no connection-specific input fields at
168
- all, so preparing one resolves nothing and costs a round trip.
169
-
170
- Reach for it here only when a field you need is genuinely missing, and know what
171
- it changes. The two namespaces differ: the library calls this `list-all-records`
172
- and materializes it per object, while the registry serves `list-records`, so
173
- `registry get` finds nothing under the library id and `registry prepare` reports
174
- the connector's real action list with the closest matches first. Re-running with
175
- the registry id succeeds — and yields a CURATED descriptor pinned to one object
176
- (`ListAccountRecoveryEnrolledUser`), whose node type is `…list-records`. That is
177
- a different node from the generic one you were asked for. Author the generic call
178
- above unless you specifically want that.
179
-
180
- ### Finding the object id for a Generic operation
181
-
182
- Do not hunt for it, and do not resolve it before authoring: write the step
183
- with `{ object: '<name-as-the-task-said-it>' }` and let `check` name this
184
- command (`OBJECT_UNPREPARED`). `--object` matches, it does not equality-test —
185
- any casing, resolved against the connected catalog (exact, then
186
- case-insensitive on API name and display name, narrowed to objects that
187
- support the action's verb):
188
-
189
- ```bash
190
- uip maestro registry prepare <connector-key> <action> --object Company__C
191
- # object: matched "Company__C" -> Company__c
192
- ```
193
-
194
- When the name matches **several** objects, the command refuses and prints the
195
- candidates (API name, display name, custom, operations). `Custom: yes` marks a
196
- tenant-only object, so a task that says "custom" means one of those rows. Pick
197
- by the task's wording, or present the candidates and let the user choose —
198
- never pick for them — then re-run with the chosen `Name`. When **nothing**
199
- matches, the command has already retried a refreshed catalog: the object is
200
- not on this connection, so surface that rather than inventing a name. Do not
201
- hand-filter the catalog with `uip is resources list` + `--output-filter` — the
202
- matching, the verb narrowing and the staleness retry are prepare's job now,
203
- and the match is recorded in `.flow-sdk/connectors-local/resolutions.json` (the
204
- `objects` section) beside the lookup resolutions.
205
-
206
- ## Structured filters (CEQL)
207
-
208
- An Integration Service list operation takes a server-side filter through a
209
- FilterBuilder parameter — usually `where`, sometimes `q`. **Write the CEQL
210
- string; the SDK derives the tree.**
211
-
212
- ```ts
213
- connector('uipath-microsoft-azureactivedirectory', 'list-groups',
214
- { where: "displayName = 'active' AND createdDateTime >= '2026-01-01T00:00:00Z'" },
215
- { connection: 'entra', folder: 'shared' })
216
- ```
217
-
218
- That emits BOTH halves the artifact must carry: the runtime query at
219
- `inputs.detail.queryParameters.where`, and the design-time tree at
220
- `essentialConfiguration.savedFilterTrees.where` inside the node's
221
- `configuration`. Studio Web renders the FilterBuilder from the tree; product
222
- validation rejects a filter that has only one of the two, so a string alone
223
- fails `validate` even though the run would have worked.
224
-
225
- If the task also asks for the filter tree as a separate review artifact,
226
- compile first and copy the emitted
227
- `configuration.essentialConfiguration.savedFilterTrees.<parameter>` value
228
- verbatim into that file (directly or under a named top-level property). Do not
229
- replace it with an ad hoc `{ field, operator, value }` object or only the CEQL
230
- string. The serialized tree must retain its numeric `groupOperator` and
231
- `filters` array.
232
-
233
- Supported: `=` `!=` `<` `<=` `>` `>=`, `Contains`, `Starts With`, `Ends With`,
234
- `Like`, their `Not` forms, and `Is Null` / `Is Not Null`. Combine with `AND` or
235
- `OR`, and parenthesise to nest — `(a = 1 OR b = 2) AND c = 'x'`. Mixing `AND`
236
- and `OR` at one level is refused rather than guessed, because a tree carries one
237
- operator per level.
238
-
239
- Three spellings are compile errors here rather than a tenant-side
240
- `[102003] Integration Services bad request`:
241
-
242
- | Wrong | Why | Right |
243
- |---|---|---|
244
- | `'accountNumber' = 'ACC123'` | a quoted token is a VALUE to CEQL | `accountNumber = 'ACC123'` |
245
- | `accountNumber = "ACC123"` | double quotes mark a COLUMN reference | `accountNumber = 'ACC123'` |
246
- | `status eq 'Open'` | `eq`/`ne`/`gt`/`ge`/`lt`/`le` are OData | `status = 'Open'` |
247
-
248
- **A filter built from a runtime value keeps the runtime half only.** The tree
249
- holds literals, so a `js` template in `where` emits the query and no tree — which
250
- `validate` rejects. Where the filter must vary per run, filter server-side on
251
- what is constant and narrow the rest downstream, or accept the design-time gap
252
- deliberately.
253
-
254
- ## Schema-dynamic operations: the parent-field loop
255
-
256
- A connection alone does not resolve these operations. Their real field set is a
257
- function of the **values** of a few *parent* fields, so the same operation on the
258
- same connection has many different shapes. Measured on one live Jira tenant,
259
- `create-issue`:
260
-
261
- | parent values | fields |
262
- | --- | --- |
263
- | none | **2** — just the parents themselves |
264
- | project `IN` + issue type `Task` | **19** |
265
- | project `IN` + issue type `Epic` | **22**, a different set |
266
- | project `AP` + issue type `Task` | **15** |
267
-
268
- Both dimensions matter independently, and `fields.summary` — *required* — appears
269
- in none of the snapshot's static inputs.
270
-
271
- **The parents are themselves lookups, and the id `--resolve` records is the
272
- very value `-f` wants.** Do not run one prepare to resolve them and retype the
273
- ids into a second command: pass both flags together —
274
-
275
- ```bash
276
- uip maestro registry prepare uipath-atlassian-jira create-issue \
277
- --resolve fields.project.key:key=UIP --resolve fields.issuetype.id:name=Bug \
278
- -f fields.project.key=UIP -f fields.issuetype.id=10732
279
- ```
280
-
281
- — or run the resolve-only prepare and paste the re-run it prints: when every
282
- parent has a recorded resolution, its closing note carries the exact
283
- `-f NAME=VALUE` command with the resolved ids filled in.
284
-
285
- **Two ways to get this wrong, and only one of them is loud.**
286
-
287
- *Naming too few parents is refused*, clearly:
288
-
289
- ```
290
- Result: Failure
291
- Message: No api-type ObjectAction matched for fields [fields.project.key]
292
- on operation 'Create'
293
- ```
294
-
295
- *Naming them all but passing a value the connection does not have is not.* The
296
- shape is accepted, the describe succeeds, and it resolves to exactly the parent
297
- fields again — the same 2-field answer as passing no `-f` at all, with no error.
298
- Treat "I passed `-f` and still got only the parents" as a wrong value, never as
299
- "this operation has no other inputs." `registry prepare` fails on both cases
300
- rather than writing the overlay.
301
-
302
- **1. Find the parents.** Describe with no values and read the reference block of
303
- each input. A parent is any input whose `Reference.Path` contains a
304
- `{placeholder}` naming another field:
305
-
306
- ```bash
307
- uip is resources describe <connector-key> <object> \
308
- --connection-id <connection-id> --operation <Operation> --output json
309
- ```
310
-
311
- ```jsonc
312
- { "Name": "fields.issuetype.id",
313
- "Reference": { "ObjectName": "project",
314
- "Path": "/project/{fields.project.key}/issuetypes" } }
315
- ```
316
-
317
- That placeholder is also the **ordering**: resolve `fields.project.key` before
318
- you can resolve `fields.issuetype.id`.
319
-
320
- **A second declaration shape has no placeholder.** Data Service
321
- (`uipath-uipath-dataservice`) operations such as `create-entity-record`,
322
- `update-entity-record` and the file-record-field operations declare their parent
323
- through the registry's schema action (`GenerateSchema` over `entityName`), not
324
- through a reference path. Their describe with no values returns only the static
325
- inputs (`entityName`, `expansionLevel`) — not one field of the entity — so
326
- `compile` refuses `title`, `description`, … as unknown. `prepare` names the
327
- parent when you omit it; the fix is always the entity name:
328
-
329
- ```bash
330
- uip maestro registry prepare uipath-uipath-dataservice create-entity-record \
331
- -f entityName=FlowCodeEvalEntity
332
- # → 8 input field(s): entityName, expansionLevel + the entity's own fields
333
- ```
334
-
335
- Do not work around the refusal — not with `rawNode`, not by editing the emitted
336
- `.flow`, not by hand-writing a `connectors-local/` overlay. Each produces a node
337
- the platform cannot run.
338
-
339
- Parent-field names are operation-specific. Copy each `Name` exactly from this
340
- operation's describe response; do not reuse the dotted names from the
341
- `create-issue` example for another action (for example, Jira `get-issue` uses
342
- `project` and `issuetype`).
343
-
344
- **2. Resolve a value for each, outermost first.** Match the collection on
345
- `Reference.Path`, *not* on `Reference.ObjectName` — `ObjectName` is often the
346
- root resource shared by several fields (both Jira parents above report
347
- `project`), and the sub-collection the path names may not be a listable object at
348
- all. When it is not, find the object whose own path covers it:
349
-
350
- ```bash
351
- uip is resources list <connector-key> --connection-id <connection-id> --output json # find the object
352
- uip is resources describe <connector-key> <object> --connection-id <connection-id> # confirm its Path
353
- uip is resources run list <connector-key> <object> --connection-id <connection-id> \
354
- --query "<path-param>=<value-from-the-previous-parent>" --output json
355
- ```
356
-
357
- For Jira, `/project/{key}/issuetypes` has no object of its own; `project_statuses`
358
- (`/project/{projectIdOrKey}/statuses`) covers it and returns the ids.
359
-
360
- **3. Prepare with every parent.** Pass them all as `-f NAME=VALUE`:
361
-
362
- ```bash
363
- uip maestro registry prepare <connector-key> <action> \
364
- -f fields.project.key=IN -f fields.issuetype.id=10620
365
- ```
366
-
367
- `prepare` quotes the service's rejection, and separately fails when the
368
- values were accepted but resolved to nothing beyond the parents — so both
369
- mistakes surface here rather than as a puzzling compile error later.
370
-
371
- **Values are parent-scoped and non-portable.** A Jira issue-type id is valid only
372
- inside its project (`Task` is `10620` in `IN` and `10005` in `AP`), so ids cannot
373
- be copied between projects, connections, or tasks — resolve them against the
374
- connection the flow actually binds. The materialized field set is likewise
375
- tenant-specific: custom fields captured from one connection
376
- (`fields.storyPointEstimate_Customfield10016`) may not exist on another at deploy.
377
- Standard fields (`summary`, `description`) are portable.
378
-
379
- The command prints the generated descriptor import and `connector(...)` call.
380
- Use that descriptor directly: it carries the connection-resolved operation and
381
- object identity even when the live action id differs from the baked catalog.
382
- The `connectors-local/` overlay is authoring input; emitted Flow is self-contained.
383
- Prefer curated operations for their stable contract. Use the connector's raw
384
- `*-http-request` operation only for raw/generic needs the curated surface lacks.
385
-
386
- File uploads are multipart Flow inputs. If the static catalog omits an upload
387
- field, prepare the operation against its connection, then pass the upstream file
388
- like any other connector input:
389
-
390
- ```ts
391
- .step('upload', connector(SendFileToChannel, {
392
- file: out('download', 'Response'),
393
- channels: channelId,
394
- send_as: 'user',
395
- }, { connection: 'slack', folder: 'shared' }))
396
- ```
397
-
398
- The compiler emits the product's `multipartParameters` envelope. This is a Flow
399
- artifact transport; the separate `uip is resources run` command does not expose
400
- a multipart flag and is not the execution surface for this wiring.
401
-
402
- Only a **file** part is an input. A string-typed part (Teams `body`, Gmail
403
- `body`, GenAI `RagRequest`) is the container the runtime composes from the
404
- operation's body fields — write those (`'body.content'`, `Body`, `prompt`), never
405
- the part itself; the compiler lists the part without a value, as the designer does.
406
-
407
- ```ts
408
- .step('notify', connector(SendChannelMessage, {
409
- team_id: lookup(SendChannelMessage, 'team_id').byDisplayName('Sales'),
410
- channel_id: lookup(SendChannelMessage, 'channel_id').byDisplayName('alerts'),
411
- body: { content: 'A request was routed to Sales.' }, // or 'body.content': …
412
- }, { connection: 'teams', folder: 'shared' }))
413
- ```
414
-
415
- Preparation requires a working live connection. When a task explicitly uses
416
- offline/validate-only evidence and does not require connection-specific fields,
417
- use the baked descriptor with its published static inputs; do not run discovery
418
- with a placeholder connection or invent fields that were not measured. If the
419
- published input list is empty, pass `{}`; offline evidence then proves operation
420
- identity and control-flow routing, not the provider payload or dispatch.
421
-
422
- [`bindings.json`](bindings.md) names symbolic connection/folder bindings used by
423
- the source. Its reference defines the schema, compile-time resolution rules,
424
- and boundary with emitted-artifact bindings. Populate its resource keys from
425
- the live connection and folder listings. A plausible GUID is not proof that a
426
- resource exists or belongs to the intended tenant; resource refresh and product
427
- debug are the evidence.
428
-
429
- ## Resolving connection-scoped reference values
430
-
431
- Fields such as Slack channels and mailbox folders store ids, not display names.
432
-
433
- **If a field is marked LOOKUP, do not guess it and do not resolve it by hand.**
434
- Author the field's helper call and keep going:
435
-
436
- ```ts
437
- channel: lookup(SendMessageToUser, 'channel').byEmail('dustin@example.com')
438
- ```
439
-
440
- `.byEmail` is an **alias**, and aliases are generated onto the descriptor.
441
- `lookup()` takes two forms, and only one of them carries them:
442
-
443
- | form | when | helpers |
444
- | --- | --- | --- |
445
- | `lookup(SendMessageToUser, 'channel')` | you imported the descriptor `prepare` generated | `.byEmail(v)`, `.byRealName(v)`, … plus `.by(name, v)` |
446
- | `lookup('uipath-salesforce-slack', 'send-message-to-user', 'channel')` | Generic CRUD, or no descriptor in hand | `.by(name, v)` only |
447
-
448
- Do not carry an alias from the first row into the second.
449
- There is no table to generate it from, so `lookup('k', 'a', 'f').byEmail(…)` throws.
450
- Write `.by('profile.email', …)` there instead — the names a field is searchable by are in the descriptor's `LOOKUP:` header and in every `check` diagnostic about the field.
451
-
452
- When the flow is written, `check` reports each token still unresolved
453
- (`LOOKUP_UNRESOLVED`) with exactly this command — one prepare records them all,
454
- and it is the only tenant call the whole loop needs:
455
-
456
- ```bash
457
- uip maestro registry prepare uipath-salesforce-slack send-message-to-user \
458
- --resolve channel:profile.email=dustin@example.com
459
- ```
460
-
461
- **You do not need to find the connection first.** `prepare` discovers it from
462
- `uip is connections list` — your own folder first, the tenant second — and writes
463
- both the connection id AND its folder key into `bindings.json`. So one command
464
- covers the lookup, the connection binding and the folder binding. Pass
465
- `--connection <name>` only when several connections match the same connector;
466
- it reports the candidates rather than guessing, because connections for one
467
- connector are not interchangeable.
468
-
469
- **And you do not need to find the RIGHT connection first either.** A value can
470
- exist on one connection and not another — a project in a team's Jira but not in
471
- your personal workspace — so when a `--resolve` reads a collection to the end
472
- without a match, `prepare` tries the other enabled connections for that
473
- connector before failing, and re-runs itself against the one that resolves
474
- everything:
475
-
476
- ```
477
- fields.project.key: not on this connection; trying 1 other uipath-atlassian-jira connection(s)
478
- connection: is-sandboxes-test@…-sandbox-380 (uipath-maestro-flow) resolves fields.project.key;
479
- re-running against it (--connection-id f5273a4d-…)
480
- ```
481
-
482
- `bindings.json` ends up naming the connection that was actually used. Three
483
- things it will not do: it does not retry a connection you PINNED with
484
- `--connection-id` / `--connection` (your choice stands, and the message names
485
- the alternatives so you can re-run), it does not retry a transport or permission
486
- failure (that says nothing about whether the value exists), and it does not pick
487
- between two connections that both resolve — the ids they return differ per
488
- connection, so that is reported for you to choose.
489
-
490
- **So do not go crawling Integration Service when a lookup fails.** The failure
491
- message names the connection it read and, once every candidate has been tried,
492
- the one command that shows what the collection holds. Tenant discovery is still
493
- not a phase of this loop. When the candidates share a name, pick one
494
- by the `--connection-id <id>` each candidate line prints; `bindings.json` is
495
- written on that route too. The entries are named after the `connection:` and
496
- `folder:` labels your source already uses for this connector (for example
497
- `is-sandboxes`); a source that uses none gets `<connector's last segment>`
498
- (`slack`) and `shared`; `--bind-connection` / `--bind-folder` override both.
499
- A label `prepare` cannot read without running the source (a computed value, or
500
- a step whose connector it cannot trace) is never guessed: `prepare` prints a
501
- `bindings:` line naming that step, and binds the one label it did read for the
502
- connector, or the default when it read none.
503
- `prepare` refuses, before it writes anything, a source that gives one connector
504
- several labels, or gives two connectors the same connection label (one label
505
- binds one connection). The `next:` line prints the names it bound. `compile`
506
- refuses a label that a `bindings.json` with entries does not declare
507
- (`BINDING_UNDECLARED`), and warns `CONNECTION_STUB` when a declared one does not
508
- resolve to a tenant id.
509
-
510
- `check` names the exact command when a lookup is unresolved, and warns when a
511
- lookup field is given a literal id. It also speaks up when a lookup field is
512
- bound to a runtime expression (`LOOKUP_RUNTIME_VALUE`): a warning that states
513
- the id the field sends (`reporter.accountId`, not a name), and an error when
514
- the expression reads an e-mail field into a lookup that neither sends nor
515
- searches by e-mail — there an address is never that id, and the provider
516
- refuses it only once the flow runs. (A field that sends an e-mail, such as
517
- SendGrid's `from`, takes one silently.) A required lookup field you have no
518
- value for is resolved with its helper, not filled from a look-alike input. Run
519
- `check` before compiling: it finds everything else that is wrong first, so the
520
- one expensive call is spent last.
521
-
522
- **When the task names nobody for a person-shaped required field** (`reporter`,
523
- `requester`, `owner`), the value is the connection's own user: take the account
524
- from `uip login status` and resolve by **display name**. Search only by the
525
- names the field's "matches on" list declares — do not improvise queries against
526
- raw collections. Jira in particular hides e-mail addresses from user search, so
527
- an `emailAddress=` query returns nothing for a user that plainly exists, while
528
- `displayName=` finds them; the field's spec (`matches on displayName |
529
- accountId`) already told you e-mail was not searchable.
530
-
531
- Each operation's markdown page lists its lookup fields, the helper for each, and
532
- what it can be searched by. The generated descriptor carries the same facts as a
533
- comment above the `export const`, so `grep -B6 'export const SendMessageToUser'`
534
- answers it too.
535
-
536
- Two cases have **no** helper on purpose, and for them a plain string is correct:
537
- a field whose `reference` merely enumerates legal values (what you send back is
538
- what you searched for), and a collection that is the same in every tenant
539
- (country lists, timezones). Their pages say so and print the command that shows
540
- the accepted values.
541
-
542
- The rest of this section is the manual route — needed only when a field carries
543
- no lookup, or when you are inspecting a collection rather than resolving a value.
544
- Resolve against the same connection the flow binds, never by copying an id from
545
- another connection or session:
546
-
547
- **Choose the collection from the prepared action definition before the first
548
- `resources run list` call.** Run `registry prepare` first and find the target
549
- input's `reference` block in its generated `.flow-sdk/connectors-local/*.v1def.json`.
550
- `reference.path` is the contract — it names the exact collection, and any
551
- `{placeholder}` in it names a field whose value must be resolved first.
552
- `reference.objectName` is only a starting point: it is frequently the shared root
553
- resource (several Jira inputs report `project` while their paths differ), so it
554
- cannot by itself identify the collection.
555
-
556
- Use `objectName` as `<object-name>` below **only when** `uip is resources
557
- describe <connector-key> <objectName>` reports a `Path` matching
558
- `reference.path`. When it does not — a sub-collection often has no listable
559
- object of its own — find the object whose declared `Path` covers
560
- `reference.path` and use that, passing the placeholder as a `--query` parameter.
561
- Do not substitute a similar generic collection on name resemblance alone: two
562
- collections can return the same records while only the one on `reference.path`
563
- is the action's contract.
564
-
565
- ```bash
566
- uip is resources run list <connector-key> <object-name> \
567
- --connection-id <connection-id> \
568
- --output-filter '{items:items[].{Id:Id,Name:Name},page:Pagination.{HasMore:HasMore,NextPageToken:NextPageToken}}' \
569
- --output json
570
- ```
571
-
572
- `--output-filter` selects from `Data`; list responses place both `items` and
573
- `Pagination` there. Replace `Id` and `Name` with the exact id/display fields in
574
- the prepared reference contract. Keep the page fields in the same projection
575
- so a match read does not need a second `cat`/`jq` pass.
576
-
577
- When `Data.Pagination.HasMore` is `"true"`, keep the operation and connection
578
- unchanged and pass `Data.Pagination.NextPageToken` as `nextPage` on the next
579
- call:
580
-
581
- ```bash
582
- uip is resources run list <connector-key> <object-name> \
583
- --connection-id <connection-id> \
584
- --query "nextPage=<value-from-NextPageToken>" \
585
- --output-filter '{items:items[].{Id:Id,Name:Name},page:Pagination.{HasMore:HasMore,NextPageToken:NextPageToken}}' \
586
- --output json
587
- ```
588
-
589
- Stop early when the target record appears. Otherwise continue until
590
- `Data.Pagination.HasMore` is `"false"`; a first-page miss is not evidence that
591
- the record does not exist. The parameter name is `nextPage`, not
592
- `nextPageToken`.
593
-
594
- ## Response judgments
595
-
596
- A get-by-id not-found is a service error. Add `.onError(...)` when the scenario
597
- wants a not-found answer; otherwise failing loud can be intentional.
598
-
599
- For a response with no declared fields, read the whole output into a script
600
- local before inspecting service-specific properties:
601
-
602
- ```ts
603
- .step('report', script({ code: `
604
- const issue = $vars.issue.output;
605
- return { key: issue.key, status: issue.fields.status.name };
606
- ` }))
607
- ```
608
-
609
- Every measured list operation has returned the bare array, so prefer that shape
610
- for an unmeasured list too, while allowing live evidence to disprove it. Add a
611
- new measurement to the list-envelope ledger when product debug shows a genuine
612
- wrapper. One call is one page; use the operation's filtering/paging inputs when
613
- the business operation needs a narrower or later page.
614
-
615
- ## Scenario and evidence boundary
616
-
617
- Include every input named by the scenario even when the provider schema marks
618
- it optional. Replay proves values are threaded. Integration Service live mode
619
- proves the connector dispatch and service response. Only product Flow debug
620
- proves the deployed runtime can resolve the emitted bindings and execute the
621
- whole graph.
622
-
623
- Generated descriptors provide a typed alternative: `connector(CreateIssue, inputs, opts)`.
624
- Use `opts.object` to disambiguate a generic operation covering several objects.