@uipath/skills 1.197.2 → 1.198.0-preview.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CODEOWNERS +18 -11
- package/README.md +1 -0
- package/assets/skill-status.json +8 -0
- package/hooks/hooks.json +44 -8
- package/hooks/send-telemetry.ps1 +392 -0
- package/hooks/send-telemetry.sh +118 -86
- package/hooks/set-session-env.ps1 +72 -0
- package/hooks/set-session-env.sh +64 -0
- package/hooks/suggest-permissions.ps1 +45 -0
- package/hooks/suggest-permissions.sh +4 -0
- package/package.json +1 -1
- package/skills/uipath-admin/references/audit-commands.md +2 -2
- package/skills/uipath-admin/references/audit-workflow-guide.md +4 -4
- package/skills/uipath-agents/references/coded/capabilities/batch-transform/planning.md +1 -1
- package/skills/uipath-agents/references/coded/capabilities/deeprag/planning.md +1 -1
- package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails-recommend.md +5 -2
- package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails.md +8 -4
- package/skills/uipath-agents/references/coded/embedding-in-flows.md +1 -1
- package/skills/uipath-agents/references/coded/flow-integration.md +2 -2
- package/skills/uipath-agents/references/coded/lifecycle/build.md +0 -1
- package/skills/uipath-agents/references/coded/lifecycle/setup.md +0 -1
- package/skills/uipath-agents/references/coded/quickstart.md +1 -1
- package/skills/uipath-agents/references/lowcode/agent-definition.md +24 -5
- package/skills/uipath-agents/references/lowcode/capabilities/built-in-tools/batch-transform/planning.md +1 -1
- package/skills/uipath-agents/references/lowcode/capabilities/built-in-tools/deeprag/planning.md +1 -1
- package/skills/uipath-agents/references/lowcode/capabilities/context/attachments.md +1 -0
- package/skills/uipath-agents/references/lowcode/capabilities/guardrails/guardrails-recommend.md +1 -0
- package/skills/uipath-api-workflow/references/cli-reference.md +1 -1
- package/skills/uipath-api-workflow/references/connector-activity-discovery.md +1 -1
- package/skills/uipath-api-workflow/references/troubleshooting.md +1 -1
- package/skills/uipath-automation-discovery/SKILL.md +26 -1
- package/skills/uipath-automation-discovery/assets/templates/estimation-worksheet-template.md +80 -0
- package/skills/uipath-automation-discovery/references/estimation-guide.md +104 -0
- package/skills/uipath-connector-builder/SKILL.md +6 -4
- package/skills/uipath-connector-builder/references/auth.md +137 -13
- package/skills/uipath-connector-builder/references/configuration.md +29 -7
- package/skills/uipath-connector-builder/references/debugging.md +1 -1
- package/skills/uipath-connector-builder/references/standard-resources.md +162 -13
- package/skills/uipath-governance/references/cli-cheatsheet.md +3 -3
- package/skills/uipath-governance/references/diagnose/references/failure-modes.md +5 -5
- package/skills/uipath-insights/SKILL.md +277 -0
- package/skills/uipath-insights/references/investigation-playbook-guide.md +145 -0
- package/skills/uipath-insights/references/jobs-commands-guide.md +144 -0
- package/skills/uipath-ixp/SKILL.md +4 -1
- package/skills/uipath-ixp/references/cli-reference.md +18 -3
- package/skills/uipath-maestro-bpmn/references/cli-conventions.md +2 -0
- package/skills/uipath-maestro-bpmn/validator/README.md +12 -2
- package/skills/uipath-maestro-case/SKILL.md +27 -13
- package/skills/uipath-maestro-case/assets/templates/sdd-template-examples.md +37 -4
- package/skills/uipath-maestro-case/assets/templates/sdd-template.md +20 -9
- package/skills/uipath-maestro-case/assets/templates/sdd-viewer.html +8 -7
- package/skills/uipath-maestro-case/references/bindings-v2-sync.md +5 -1
- package/skills/uipath-maestro-case/references/brownfield.md +86 -0
- package/skills/uipath-maestro-case/references/case-commands.md +8 -0
- package/skills/uipath-maestro-case/references/case-editing-operations.md +230 -21
- package/skills/uipath-maestro-case/references/case-schema.md +29 -11
- package/skills/uipath-maestro-case/references/connector-integration.md +1 -1
- package/skills/uipath-maestro-case/references/connector-trigger-common.md +1 -1
- package/skills/uipath-maestro-case/references/entry-points-sync.md +204 -0
- package/skills/uipath-maestro-case/references/implementation.md +19 -9
- package/skills/uipath-maestro-case/references/phase-0-interview.md +10 -8
- package/skills/uipath-maestro-case/references/phased-execution.md +11 -4
- package/skills/uipath-maestro-case/references/placeholder-tasks.md +24 -2
- package/skills/uipath-maestro-case/references/planning.md +9 -3
- package/skills/uipath-maestro-case/references/plugins/case/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/sla/impl-json.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/sla/planning.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/stages/impl-json.md +11 -10
- package/skills/uipath-maestro-case/references/plugins/stages/planning.md +13 -14
- package/skills/uipath-maestro-case/references/plugins/tasks/agent/impl-json.md +3 -1
- package/skills/uipath-maestro-case/references/plugins/tasks/agent/planning.md +91 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/impl-json.md +3 -1
- package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/planning.md +87 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-activity/planning.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/triggers/event/impl-json.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/triggers/manual/impl-json.md +3 -1
- package/skills/uipath-maestro-case/references/plugins/triggers/timer/impl-json.md +2 -1
- package/skills/uipath-maestro-case/references/plugins/variables/bindings/impl-json.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/variables/global-vars/impl-json.md +20 -10
- package/skills/uipath-maestro-case/references/plugins/variables/global-vars/planning.md +9 -8
- package/skills/uipath-maestro-case/references/plugins/variables/io-binding/impl-json.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/variables/io-binding/planning.md +1 -1
- package/skills/uipath-maestro-case/references/registry-discovery.md +87 -10
- package/skills/uipath-maestro-case/references/sdd-generation-rules.md +34 -26
- package/skills/uipath-maestro-flow/SKILL.md +4 -1
- package/skills/uipath-maestro-flow/references/author/CAPABILITY.md +1 -2
- package/skills/uipath-maestro-flow/references/author/references/editing-operations-json.md +3 -3
- package/skills/uipath-maestro-flow/references/author/references/greenfield.md +4 -2
- package/skills/uipath-maestro-flow/references/author/references/planning-arch.md +0 -1
- package/skills/uipath-maestro-flow/references/author/references/planning-impl.md +0 -1
- package/skills/uipath-maestro-flow/references/author/references/plugins/connector/impl.md +1 -0
- package/skills/uipath-maestro-flow/references/author/references/plugins/connector-trigger/impl.md +7 -7
- package/skills/uipath-maestro-flow/references/author/references/plugins/ixp/impl.md +14 -14
- package/skills/uipath-maestro-flow/references/author/references/plugins/script/impl.md +10 -6
- package/skills/uipath-maestro-flow/references/shared/cli-conventions.md +7 -0
- package/skills/uipath-maestro-flow/references/shared/file-format.md +1 -1
- package/skills/uipath-mcp-servers/references/is-activity-workflow.md +3 -3
- package/skills/uipath-planner/SKILL.md +1 -1
- package/skills/uipath-platform/SKILL.md +4 -14
- package/skills/uipath-platform/references/data-fabric/data-fabric.md +1 -1
- package/skills/uipath-platform/references/integration-service/agent-workflow.md +4 -4
- package/skills/uipath-platform/references/integration-service/reference-resolution.md +1 -1
- package/skills/uipath-platform/references/integration-service/resources.md +5 -5
- package/skills/uipath-platform/references/integration-service/triggers.md +10 -9
- package/skills/uipath-platform/references/orchestrator/setup-environment.md +2 -0
- package/skills/uipath-review/SKILL.md +8 -4
- package/skills/uipath-review/references/agents/agent-review-checklist.md +1 -22
- package/skills/uipath-review/references/agents/agents-coded-rules.md +24 -7
- package/skills/uipath-review/references/agents/agents-lowcode-rules.md +0 -1
- package/skills/uipath-review/references/agents/guardrails/coded-guardrails-review.md +231 -0
- package/skills/uipath-review/references/rule-catalog-workflow.md +4 -2
- package/skills/uipath-rpa/SKILL.md +2 -2
- package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/guides/data-service-filter-builder-guide.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Web.Activities/2.5/coded/coded-api.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Web.Activities/2.5/coded/curl-import.md +3 -3
- package/skills/uipath-rpa/references/activity-docs/UiPath.Web.Activities/2.5/coded/http-request-upgrade.md +3 -3
- package/skills/uipath-rpa/references/activity-docs/UiPath.Web.Activities/2.5/coded/service-discovery.md +2 -2
- package/skills/uipath-rpa/references/coded/coding-guidelines.md +1 -1
- package/skills/uipath-rpa/references/ui-automation-guide.md +7 -7
- package/skills/uipath-rpa/references/uia-configure-target-workflows.md +5 -5
- package/skills/uipath-rpa/references/uia-elements-interaction-guide.md +19 -10
- package/skills/uipath-rpa/references/uia-prerequisites.md +7 -7
- package/skills/uipath-rpa/references/validation-guide.md +2 -2
- package/skills/uipath-rpa/references/xaml/common-pitfalls.md +4 -0
- package/skills/uipath-rpa/references/xaml/csharp-activity-binding-guide.md +3 -1
- package/skills/uipath-rpa/references/xaml/csharp-expression-pitfalls.md +9 -4
- package/skills/uipath-rpa/references/xaml/workflow-guide.md +2 -2
- package/skills/uipath-rpa/references/xaml/xaml-basics-and-rules.md +1 -1
- package/skills/uipath-solution/SKILL.md +4 -4
- package/skills/uipath-solution/references/activate-and-manage.md +6 -1
- package/skills/uipath-solution/references/develop-solution.md +24 -5
- package/skills/uipath-solution/references/pack-and-deploy.md +5 -2
- package/skills/uipath-solution/references/scenarios/manual-edits.md +2 -2
- package/skills/uipath-solution/references/solution-overview.md +2 -2
- package/skills/uipath-troubleshoot/SKILL.md +3 -3
- package/skills/uipath-troubleshoot/references/products/agents/playbooks/context-grounding-index-not-found.md +0 -2
- package/skills/uipath-troubleshoot/references/products/maestro/playbooks/personal-automation-quota.md +1 -1
- package/version-manifest.json +3 -3
- package/hooks/ensure-uip.sh +0 -220
- package/skills/uipath-maestro-flow/references/author/references/plugins/connector/data-fabric/impl.md +0 -683
- package/skills/uipath-maestro-flow/references/author/references/plugins/connector/data-fabric/planning.md +0 -45
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: uipath-maestro-flow
|
|
3
|
-
description: "TRIGGER for `.flow` files, UiPath Flow / Maestro Flow build or edit requests, adding
|
|
3
|
+
description: "TRIGGER for `.flow` files, UiPath Flow / Maestro Flow build or edit requests, adding or listing IXP model/document-extraction nodes for a Flow. UiPath Maestro Flow (.flow) — build, edit, run, debug, fix, evaluate. Create, connect nodes; connector, approval, script, subflow, ixp; triggers, schedules; validate. Upload, publish, manage runs, instances. Diagnose errors, incidents, traces. Design eval sets, evaluators, run Studio Web evals via `uip maestro flow eval`. `uip maestro flow` CLI. DO NOT TRIGGER for raw IXP project labelling/prediction review/prompt tuning outside Flow→uipath-ixp; C#/XAML→uipath-rpa; standalone agents→uipath-agents."
|
|
4
4
|
allowed-tools: Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -78,6 +78,8 @@ These rules apply across all three capabilities. Each capability index adds capa
|
|
|
78
78
|
|
|
79
79
|
**It also applies to ANY external service named in the prompt — not just in-tenant resources.** Before picking a node type for a named service (Slack, open-meteo, Stripe, any REST API), run `uip maestro flow registry search "<service>" --output json` and follow the [Selecting External Service Nodes](references/author/references/planning-arch.md#selecting-external-service-nodes) ladder (connector → managed HTTP → RPA). Manual `core.action.http.v2` is the bottom of that ladder, chosen only after a search finds no connector — never a first guess from the brand name. This holds even when full planning is skipped (see [greenfield.md — Select the node type for each external service](references/author/references/greenfield.md#select-the-node-type-for-each-external-service-runs-even-when-full-planning-is-skipped)).
|
|
80
80
|
|
|
81
|
+
**Two tells that you skipped the search and took the brand-name shortcut — both are build defects, not valid manual-mode HTTP:** (a) you authored a manual-mode `core.action.http.v2` node whose `url` targets a well-known SaaS API domain that has a connector (`slack.com/api/*`, `api.github.com`, `*.salesforce.com`, `graph.microsoft.com`, …); (b) you declared an `in` variable to hold that service's API token or secret (e.g. a `slackToken` holding an `xoxb-…` bot token, an `apiKey`, a bearer token). A connector-backed flow never carries the raw credential — the IS connection does. If you find yourself writing either, **stop**: run `uip maestro flow registry search "<service>"` and `uip is connections list "<connector-key>" --all-folders`, then use the connector activity (or connector-mode HTTP: `authentication:"connector"` + `targetConnector` + a bound `connectionId`/`folderKey`). Manual mode is legitimate only for a service the search proves has no connector.
|
|
82
|
+
|
|
81
83
|
4. **Never invoke other skills automatically** — when a flow needs an RPA process, agent, or app, identify the gap and provide handoff instructions. Let the user decide when to switch skills.
|
|
82
84
|
5. **Always present user questions as a dropdown with a "Something else" escape hatch** — Whenever this skill needs a decision from the user (which solution to use, publish vs debug vs deploy, which connector to pick, which trigger type, which resource to bind, etc.), ask the user a question with the enumerated choices as options AND include **"Something else"** as the last option so the user can supply free-form string input. Never ask open-ended questions in chat when a finite set of sensible defaults exists. If the user picks "Something else", parse their string answer and continue. No structured-question facility on the harness → ask in chat as a numbered list with "Something else" last. Running non-interactively (CI/headless — no user available to answer) → take the pre-selected/recommended option, proceed, and record the decision prominently in the final report; if no option is marked recommended, stop and report the open decision instead of guessing. Exception: consent gates (`flow debug`, destructive operations) are never auto-answered — in non-interactive mode, stop and report the blocked step instead. These fallbacks define "ask the user" / "confirm with the user" wherever this skill's references require it.
|
|
83
85
|
6. **A Flow project MUST live inside a solution** — always scaffold the solution first (`uip solution init <Name>`), then `cd <Name>` and run `uip maestro flow init <Name>`. The correct layout is **always** `<Solution>/<Project>/<Project>.flow` (double-nested). Running `uip maestro flow init` in a bare directory produces a single-nested `<Project>/<Project>.flow` layout that fails Studio Web upload, packaging, and downstream tooling. See [author/greenfield.md](references/author/references/greenfield.md) Step 2.
|
|
@@ -94,6 +96,7 @@ These rules apply across all three capabilities. Each capability index adds capa
|
|
|
94
96
|
- **Never silently pick the first match from `uip maestro flow registry search`.** When a search returns multiple connectors for the same intent, apply the canonical Connector Disambiguation ladder via [connector/planning.md — Disambiguation](references/author/references/plugins/connector/planning.md#disambiguation--when-search-returns-multiple-connectors-for-the-same-intent), which defers to the Integration Service rules.
|
|
95
97
|
- **Never conclude "no connection exists" from a bare `uip is connections list`** — discovery requires `--all-folders` and a connector key derived from `registry search`, not a brand name (rule #3). Without both, "No connections found" is a false negative; do not surface it as an Open Question or ask the user to create one.
|
|
96
98
|
- **Never write `customFieldsRequestDetails.parameterValues` as a JSON object map** — Studio Web's TS port emits `Map<string,string|null>` via `Array.from(entries())`, so the on-wire shape is `[[key, value], ...]` tuples. Object-form `{key: value}` is rejected by the CLI at validate time. Inner keys are camelCase (`objectActionName`, `parameterValues`), not PascalCase. See [connector/impl.md Step 6c](references/author/references/plugins/connector/impl.md).
|
|
99
|
+
- **Never treat a `flow validate` exit code of 0 as "done" when it printed warnings.** Warnings are build defects the validator chose not to hard-fail — read every one and resolve it before declaring the flow complete. The connector-keyword warning (`node "…" mentions the "<connector>" connector keyword but uses the generic Managed HTTP type core.action.http.v2 with no connection binding`) means you took the brand-name shortcut (rule #3) — fix it by binding the connector, do not ship past it. A green exit with an unresolved connector warning still fails downstream connector checks and runs against an undefined endpoint at debug time.
|
|
97
100
|
- **Never issue setup or finalization CLI calls one-per-turn.** Each separate Bash call adds a model round-trip — the dominant wall-clock cost. Chain them per rule #10 and the [Three-turn execution map](references/author/references/greenfield.md#three-turn-execution-map).
|
|
98
101
|
|
|
99
102
|
> **Trouble?** If something didn't work as expected, use `/uipath-feedback` to send a report.
|
|
@@ -145,8 +145,7 @@ If you find yourself hand-writing `inputs.detail`, a `=jsonString:` blob, or `bi
|
|
|
145
145
|
- [planning-arch.md](references/planning-arch.md) — capability discovery, plugin index, topology design
|
|
146
146
|
- [planning-impl.md](references/planning-impl.md) — registry lookups, connection binding, wiring rules
|
|
147
147
|
- [plugins/](references/plugins/) — per-node-type planning + impl docs:
|
|
148
|
-
- [connector](references/plugins/connector/) — IS connector nodes
|
|
149
|
-
- [connector/data-fabric](references/plugins/connector/data-fabric/) — Data Fabric entity activities (Query / Create / Update / Delete / Get by ID)
|
|
148
|
+
- [connector](references/plugins/connector/) — IS connector nodes (incl. Data Fabric activities)
|
|
150
149
|
- [connector-trigger](references/plugins/connector-trigger/)
|
|
151
150
|
- [script](references/plugins/script/) — Jint ES2020 JavaScript
|
|
152
151
|
- [http](references/plugins/http/) — `core.action.http.v2` (Managed HTTP Request)
|
|
@@ -125,7 +125,7 @@ Reach for `jq` / `python3` only when JMESPath cannot express the operation (mult
|
|
|
125
125
|
}
|
|
126
126
|
```
|
|
127
127
|
|
|
128
|
-
> **`display` is required on every node** — including control-flow nodes (`core.control.end`, `core.logic.terminate`) where it may feel optional. Omitting it produces a vague `[(root)] Schema validation failed: Invalid input: expected object, received undefined` from `uip maestro flow validate`, which does NOT pinpoint the missing field. Always include `"display": { "label": "<label>" }` on every node, even bare end nodes. See [file-format.md — Node instance](../../shared/file-format.md#node-instance).
|
|
128
|
+
> **`display` is required on every node** — including control-flow nodes (`core.control.end`, `core.logic.terminate`) where it may feel optional. Omitting it produces a vague `[(root)] Schema validation failed: Invalid input: expected object, received undefined` from `uip maestro flow validate`, which does NOT pinpoint the missing field. Always include `"display": { "label": "<label>" }` on every node, even bare end nodes. See [file-format.md — Node instance](../../shared/file-format.md#node-instance) and [MST-9368](https://uipath.atlassian.net/browse/MST-9368) for the validator-error-clarity follow-up.
|
|
129
129
|
|
|
130
130
|
> **What actually makes `$vars.<sourceNodeId>.output` resolve is `variables.nodes[]` (step 4 below), not the instance `outputs` block.** The BPMN emitter ignores the action-node instance `outputs` block at serialization — it reads the manifest's `outputDefinition` for the activity-side mapping and reads `variables.nodes[]` for the process-level `<uipath:inputOutput>` declarations downstream nodes depend on. Authoring an `outputs` block matching the manifest is fine (the canonical examples include it for documentation), but you can skip it on action and trigger nodes. End / terminate nodes are different — see [end/impl.md](plugins/end/impl.md). The standard patterns are in [file-format.md — Node outputs](../../shared/file-format.md#node-outputs). **Always run `uip maestro flow format` after structural edits — it regenerates `variables.nodes[]` from the current node graph (MST-9972).**
|
|
131
131
|
|
|
@@ -204,7 +204,7 @@ Use `Edit` to add an edge object to the `edges` array:
|
|
|
204
204
|
|
|
205
205
|
```json
|
|
206
206
|
{
|
|
207
|
-
"id": "<
|
|
207
|
+
"id": "edge_<SOURCE_NODE_ID>_<SOURCE_PORT>_<TARGET_NODE_ID>_<TARGET_PORT>",
|
|
208
208
|
"sourceNodeId": "<SOURCE_NODE_ID>",
|
|
209
209
|
"sourcePort": "<SOURCE_PORT>",
|
|
210
210
|
"targetNodeId": "<TARGET_NODE_ID>",
|
|
@@ -218,7 +218,7 @@ Use `Edit` to add an edge object to the `edges` array:
|
|
|
218
218
|
|
|
219
219
|
**Critical:** for `sourcePort: "error"`, also set `inputs.errorHandlingEnabled: true` on the source node. Without the flag, Studio Web hides the source handle and `uip maestro flow validate` fails.
|
|
220
220
|
|
|
221
|
-
**Edge ID:**
|
|
221
|
+
**Edge ID:** `edge_<SOURCE_NODE_ID>_<SOURCE_PORT>_<TARGET_NODE_ID>_<TARGET_PORT>`.
|
|
222
222
|
|
|
223
223
|
See each plugin's `planning.md` or [file-format.md — Standard ports](../../shared/file-format.md) for port names by node type.
|
|
224
224
|
|
|
@@ -35,7 +35,7 @@ Steps 0–6 are **logical phases**, not separate turns. A typical greenfield bui
|
|
|
35
35
|
|
|
36
36
|
| Turn | Steps | What you emit in ONE assistant message |
|
|
37
37
|
|---|---|---|
|
|
38
|
-
| **T1 — Setup + discovery** | 0, 1, 2, 3 | One chained `Bash` (scaffold + register + pull + `node add` for each CLI-owned node) **+** parallel `Bash` (one `registry get` per OOTB type you'll inline) **+** parallel `Read` (plugin `impl.md`s) **+** optional `uip login status` |
|
|
38
|
+
| **T1 — Setup + discovery** | 0, 1, 2, 3 | One chained `Bash` (scaffold + register + pull + `node add` for each CLI-owned node) **+** parallel `Bash` (one `registry get` per OOTB type you'll inline) **+** parallel `Read` (plugin `impl.md`s) **+** optional `uip login status`. **If existing `.uipx` solutions are present, the Step 2 gate fires first in its own turn** — resolve it before this chain. |
|
|
39
39
|
| **T2 — Read + author** | 4 | One `Read` of the `.flow` **+** a batch of `Edit` calls (or one `Write` if ≥70% of nodes change). Claude Code serializes Edits on the same file, so they don't race |
|
|
40
40
|
| **T3 — Finalize** | 5, 6 | One chained `Bash` (`node configure && validate && format`). On validate failure: one Edit turn, then re-chain `validate && format` |
|
|
41
41
|
|
|
@@ -75,7 +75,7 @@ When you do need it, emit `uip login status --output json` as a parallel `Bash`
|
|
|
75
75
|
|
|
76
76
|
> **A Flow project cannot exist outside a solution** (universal rule in [SKILL.md](../../../SKILL.md)). Scaffold or select a solution (Step 2a) BEFORE running `uip maestro flow init` (Step 2b). Skipping the solution step produces a single-nested `<Project>/<Project>.flow` layout that fails Studio Web upload and packaging. The correct layout is **always** `<Solution>/<Project>/<Project>.flow` (double-nested — see the tree after Step 2c).
|
|
77
77
|
|
|
78
|
-
Check
|
|
78
|
+
Check for existing solutions with `ls *.uipx */*.uipx 2>/dev/null` (each solution is its own folder — `<Solution>/<Solution>.uipx` — so a bare `*.uipx` misses them). If any are found, **STOP before the T1 chain — do not run `uip solution init` yet** — and ask via `AskUserQuestion`, presenting a dropdown with one option per discovered `.uipx`, a **"Create a new solution"** option, and **"Something else"** as the last option. The user wanting a new solution does not let you skip this; you only learn that by asking. If none are found, create a new one automatically. See the dropdown question rule in [SKILL.md](../../../SKILL.md).
|
|
79
79
|
|
|
80
80
|
- If the user specifies an existing `.uipx` file path or solution name, use that (skip to Step 2b)
|
|
81
81
|
- Otherwise, create a new solution (Step 2a)
|
|
@@ -300,6 +300,8 @@ uip maestro flow node configure "<ProjectName>.flow" "<httpNodeId>" --detail '<D
|
|
|
300
300
|
|
|
301
301
|
**On validate failure:** one `Edit` turn to fix, then re-chain `validate && format` in one Bash. Do not validate after every individual Edit during T2 — intermediate states are expected to be invalid.
|
|
302
302
|
|
|
303
|
+
> **A passing exit code with warnings is NOT done.** `flow validate` returns 0 even when `Data.Warnings` is non-empty — read the warnings, don't just check the exit code. The connector-keyword warning (`node "…" mentions the "<connector>" connector keyword but uses the generic Managed HTTP type core.action.http.v2 with no connection binding`) means the flow took the brand-name shortcut and will run against an undefined endpoint at debug time — resolve it by switching to the connector before reporting the flow complete (see [SKILL.md rule #3](../../../SKILL.md#critical-rules-universal) and the anti-pattern list). Treat this class of warning as a build failure for your own definition of "done."
|
|
304
|
+
|
|
303
305
|
### Common error categories
|
|
304
306
|
|
|
305
307
|
- **Missing targetPort** — every edge needs a `targetPort` string
|
|
@@ -163,7 +163,6 @@ Connector nodes call external services via Integration Service. They are **not**
|
|
|
163
163
|
| When to Select | Plugin |
|
|
164
164
|
| --- | --- |
|
|
165
165
|
| A pre-built connector exists for the target service (Jira, Slack, Salesforce, etc.) | [connector](plugins/connector/planning.md) |
|
|
166
|
-
| The flow needs to read/write UiPath Data Fabric entities (Query / Create / Update / Delete / Get by ID) | [connector/data-fabric](plugins/connector/data-fabric/planning.md) |
|
|
167
166
|
|
|
168
167
|
**In this phase:** Use [Capability Discovery](#capability-discovery) to confirm the connector exists and note it as `connector: <service-name>` with the intended operation. Phase 2 resolves the exact type, connection, and fields via [connector/impl.md](plugins/connector/impl.md).
|
|
169
168
|
|
|
@@ -56,7 +56,6 @@ uip maestro flow registry get <node-type> --output json
|
|
|
56
56
|
| `uipath.core.flow.*` | [flow/impl.md](plugins/flow/impl.md) |
|
|
57
57
|
| `uipath.core.api-workflow.*` | [api-workflow/impl.md](plugins/api-workflow/impl.md) |
|
|
58
58
|
| `uipath.core.hitl.*` | [hitl/impl.md](plugins/hitl/impl.md) |
|
|
59
|
-
| `uipath.connector.uipath-uipath-dataservice.*` | [connector/data-fabric/impl.md](plugins/connector/data-fabric/impl.md) |
|
|
60
59
|
| `uipath.ixp.*` | [ixp/impl.md](plugins/ixp/impl.md) |
|
|
61
60
|
| `uipath.connector.*` | [connector/impl.md](plugins/connector/impl.md) |
|
|
62
61
|
| `uipath.connector.trigger.*` | [connector-trigger/impl.md](plugins/connector-trigger/impl.md) |
|
|
@@ -33,6 +33,7 @@ Connector nodes come in two flavors:
|
|
|
33
33
|
|
|
34
34
|
To classify a node, read `Node.form.sections[0].fields[0].componentProps.connectorDetail.configuration` from the `registry get` response, parse it as JSON, and check `activityType`. `"Generic"` → run Step 2a to discover `objectName` (and capture `operation` from the same marker for the `--operation` flag in Step 3). Anything else → skip Step 2a.
|
|
35
35
|
|
|
36
|
+
|
|
36
37
|
## Critical: Connector Definition Must Include `form`
|
|
37
38
|
|
|
38
39
|
> Connector definitions in `definitions[]` are CLI-owned (see [Author capability — Node ownership](../../../CAPABILITY.md#node-ownership--who-authors-the-node)) — `uip maestro flow node add` copies them verbatim from the registry, and you should never hand-write or hand-edit them. If `node configure` fails with `No instanceParameters found in definition`, the definition in `definitions[]` is missing the `form` field — typically because the local registry cache is stale (the definition was copied in before the CLI started emitting `form`). Recovery: `uip maestro flow registry pull --force`, delete the stale `definitions[]` entry, re-run `uip maestro flow node add <file> <node-type>` so the CLI re-copies the definition with `form`. Do not paste `form` in by hand — re-running `node add` is the supported path.
|
package/skills/uipath-maestro-flow/references/author/references/plugins/connector-trigger/impl.md
CHANGED
|
@@ -42,7 +42,7 @@ Save the response. It carries three pieces per event object that drive later ste
|
|
|
42
42
|
|------|--------|---------|
|
|
43
43
|
| `byoaConnection` | Step 1c | If `true`, only BYOA connections are valid for this event |
|
|
44
44
|
| `isWebhookUrlVisible` | Step 6b | If `true`, retrieve and present the webhook URL |
|
|
45
|
-
| **`parameters[]`** | Steps 3 & 4 |
|
|
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
46
|
|
|
47
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
48
|
|
|
@@ -63,7 +63,7 @@ Each entry is one input field the user supplies when configuring the trigger (e.
|
|
|
63
63
|
| `design.position` | `"primary"` indicates a top-level input field; other positions are layout hints — safe to ignore for configure |
|
|
64
64
|
| `type` | Bucket selector in Step 6's `--detail`: `"query"` → `queryParameters`, `"path"` → `pathParameters`, else → `eventParameters` |
|
|
65
65
|
|
|
66
|
-
> **Source of truth
|
|
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
67
|
|
|
68
68
|
**1b-2. Resolve the object name and fetch field metadata** — **mandatory** for every trigger node.
|
|
69
69
|
|
|
@@ -77,7 +77,7 @@ uip is triggers describe "<connector-key>" "<OPERATION>" "<objectName>" \
|
|
|
77
77
|
--connection-id "<id>" --output json
|
|
78
78
|
```
|
|
79
79
|
|
|
80
|
-
> **Source of truth for node configuration
|
|
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
81
|
|
|
82
82
|
### Step 1c — Select the final connection
|
|
83
83
|
|
|
@@ -154,7 +154,7 @@ These live in the **definition**, not on the node instance. The instance carries
|
|
|
154
154
|
|
|
155
155
|
### Step 3 — Resolve reference fields in event parameters
|
|
156
156
|
|
|
157
|
-
Iterate `parameters[]` (Step 1b). For each entry with a `reference` key, run an ID lookup — same mechanism as IS activity nodes.
|
|
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
158
|
|
|
159
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
160
|
|
|
@@ -172,9 +172,9 @@ The `<id>` in `--connection-id "<id>"` MUST be the connection bound to **this**
|
|
|
172
172
|
|
|
173
173
|
### Step 4 — Validate required event parameters
|
|
174
174
|
|
|
175
|
-
Check every entry in `parameters[]` (Step 1b)
|
|
175
|
+
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.
|
|
176
176
|
|
|
177
|
-
1. Collect all required entries from `parameters[]`
|
|
177
|
+
1. Collect all required entries from `parameters[]` **and** `describe → EventParameters` (dedupe by `name`); required = required in either
|
|
178
178
|
2. For each, check if the user's prompt provides a value
|
|
179
179
|
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).
|
|
180
180
|
4. Only proceed after all required event parameters are resolved
|
|
@@ -489,7 +489,7 @@ uip maestro flow debug . --output json
|
|
|
489
489
|
| `Trigger nodes require --connection-id` | Ran `registry get` without `--connection-id` | Re-run with `--connection-id <id>` — required for all trigger nodes |
|
|
490
490
|
| No trigger nodes in registry | Not authenticated or registry not pulled | Run `uip login` then `uip maestro flow registry pull --force` |
|
|
491
491
|
| Connection not found in bindings | `node configure` not run or connection expired | Re-run `node configure` with valid `connectionId` and `folderKey` |
|
|
492
|
-
| Event parameter missing at runtime | Required event parameter not configured | Re-run `uip is triggers objects` (Step 1b).
|
|
492
|
+
| 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. |
|
|
493
493
|
| `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) |
|
|
494
494
|
| `Filter references field '<name>' which is not present in trigger metadata` | Leaf `id` does not match any `filterFields.fields[].name` | Re-run `registry get` and use a valid field name |
|
|
495
495
|
| Trigger not firing | Event parameters point to wrong resource (e.g., wrong folder ID) | Re-resolve reference fields with `uip is resources run list` |
|
|
@@ -101,7 +101,7 @@ Confirm:
|
|
|
101
101
|
- `model.type` — `bpmn:ServiceTask`. `model.serviceType` — `IXP.Extraction`. The manifest's `model` is two fields only (`type`, `serviceType`) — no `context`, no `version`. Both are injected by the BPMN serializer at compile time.
|
|
102
102
|
- `form.id` — `ixp-standalone-form`. Three sections: `ixp-model` (Configuration), `ixp-file-upload` (File input), `schema-definition` (Schema definition — a single custom field `inputs.model` rendered by the `ixp-model-taxonomy` component).
|
|
103
103
|
- `inputDefinition.properties` — `model` (object), `modelName`, `projectName`, `projectId`, `versionTag`, `folderKey`, `folderName`, `fileRef`, `pageRange`, `attachmentConfig`, `guardrails`, `attachment`. `inputDefinition.required` — `["fileRef"]`.
|
|
104
|
-
- `inputDefaults` — carries the full `model` metadata blob plus flat `modelName` / `projectName` / `folderKey` / `folderName` mirrors. The blob shape is `{
|
|
104
|
+
- `inputDefaults` — carries the full `model` metadata blob plus flat `modelName` / `projectName` / `folderKey` / `folderName` mirrors. The deployment-node blob shape is `{ id, modelName, modelDisplayName, folderKey, folderName, folderPath, description }`. Note: `model.modelName` is frequently `null` for published/OOB deployments — the human name is in `model.modelDisplayName` (and mirrored in the flat `inputDefaults.modelName`). See Authoring rule #1.
|
|
105
105
|
- `outputDefinition` — populated. `output` carries the full extraction-result JSON schema; `error` carries the standard error envelope.
|
|
106
106
|
|
|
107
107
|
## Adding / Editing
|
|
@@ -126,8 +126,9 @@ Then assemble the instance by copying these paths verbatim:
|
|
|
126
126
|
|
|
127
127
|
| Instance field | Source path in `registry get` response | Required |
|
|
128
128
|
| --- | --- | --- |
|
|
129
|
-
| `inputs.model` (full object) | `Data.Node.inputDefaults.model` | **YES** — undefined → canvas crash |
|
|
130
|
-
| `inputs.modelName` | `Data.Node.inputDefaults.modelName` | YES |
|
|
129
|
+
| `inputs.model` (full object) | `Data.Node.inputDefaults.model` — copy verbatim, then apply the `modelName` rule on the next line | **YES** — undefined → canvas crash |
|
|
130
|
+
| `inputs.model.modelName` | `Data.Node.inputDefaults.model.modelName`, **but when that is `null`/empty, use `Data.Node.inputDefaults.model.modelDisplayName`** | **YES** — `null`/empty → `flow validate` fails (`ixp-node`: must be a non-empty string) |
|
|
131
|
+
| `inputs.modelName` (flat) | `Data.Node.inputDefaults.modelName` | YES |
|
|
131
132
|
| `inputs.projectName` | `Data.Node.inputDefaults.projectName` | YES |
|
|
132
133
|
| `inputs.folderKey` | `Data.Node.inputDefaults.folderKey` | YES |
|
|
133
134
|
| `inputs.folderName` | `Data.Node.inputDefaults.folderName` | YES |
|
|
@@ -157,16 +158,13 @@ If you find yourself typing any of those five field names while authoring an IxP
|
|
|
157
158
|
"display": { "label": "Extract Invoice Fields" },
|
|
158
159
|
"inputs": {
|
|
159
160
|
"model": {
|
|
161
|
+
"id": "<model GUID — from inputDefaults.model.id>",
|
|
160
162
|
"modelName": "Invoice Model",
|
|
161
|
-
"
|
|
162
|
-
"kind": "Extractor",
|
|
163
|
-
"type": "IXP",
|
|
164
|
-
"fullyQualifiedName": "Shared/invoice-model",
|
|
165
|
-
"detailsUrl": "https://<tenant>.uipath.com/.../models/invoice-model?api-version=2.0",
|
|
166
|
-
"asyncDigitizationUrl": "https://<tenant>.uipath.com/.../models/invoice-model/digitization/start?api-version=2.0",
|
|
167
|
-
"asyncExtractionUrl": "https://<tenant>.uipath.com/.../models/invoice-model/extraction/start?api-version=2.0",
|
|
163
|
+
"modelDisplayName": "Invoice Model",
|
|
168
164
|
"folderKey": "<FOLDER_GUID>",
|
|
169
|
-
"folderName": "Shared"
|
|
165
|
+
"folderName": "Shared",
|
|
166
|
+
"folderPath": "<FOLDER_GUID>",
|
|
167
|
+
"description": ""
|
|
170
168
|
},
|
|
171
169
|
"modelName": "Invoice Model",
|
|
172
170
|
"description": "",
|
|
@@ -186,7 +184,8 @@ If you find yourself typing any of those five field names while authoring an IxP
|
|
|
186
184
|
|
|
187
185
|
### Authoring rules
|
|
188
186
|
|
|
189
|
-
1. **`inputs.model` MUST be present and MUST be
|
|
187
|
+
1. **`inputs.model` MUST be present and MUST be copied from `Data.Node.inputDefaults.model`.** Copy the blob verbatim — do not abbreviate, do not omit fields, do not invent fields that aren't there. The current deployment-node blob is `{ id, modelName, modelDisplayName, folderKey, folderName, folderPath, description }`; source every field from the actual `registry get` response, not from memory (older docs showed `fullyQualifiedName` / `kind` / `type` / `detailsUrl` / `async*` fields — these are NOT present on deployment nodes; do not add them). The `schema-definition` form section binds `inputs.model` to the `ixp-model-taxonomy` custom component, which destructures `modelName` and `folderKey` out of it. If `inputs.model` is undefined, clicking the node in Studio Web crashes the property panel with `Cannot destructure property 'modelName' of 't' as it is undefined` — and `flow validate` does not catch it.
|
|
188
|
+
- **`inputs.model.modelName` MUST be a non-empty string.** For many published/OOB deployments `inputDefaults.model.modelName` comes back `null`, with the name carried in `inputDefaults.model.modelDisplayName` instead. When `modelName` is `null`/empty, set `inputs.model.modelName` to `modelDisplayName`. This is NOT synthesis — `modelDisplayName` is the model's own name from the same blob (and matches the flat `inputDefaults.modelName`). The `ixp-node` validator rejects a `null`/empty `inputs.model.modelName` (`flow validate` fails), and Studio Web crashes on it.
|
|
190
189
|
2. **Flat mirrors stay alongside `inputs.model`.** `modelName`, `projectName`, `folderKey`, `folderName` are surfaced as disabled text fields in the `ixp-model` form section and are read directly from `inputs.*`, not from `inputs.model.*`.
|
|
191
190
|
3. **`fileRef` is the only schema-required input** (`inputDefinition.required: ["fileRef"]`). Use `=js:$vars.<upstream>.output.<field>` per Critical Rule #13.
|
|
192
191
|
4. **`outputs.output` AND `outputs.error` MUST both be present**, copied verbatim from `Data.Node.outputDefinition.output` and `Data.Node.outputDefinition.error`. Omitting either breaks downstream `$vars.<nodeId>.output` / `.error` resolution and hides the field in Studio Web's variable picker. `flow validate` does not catch the omission.
|
|
@@ -195,7 +194,7 @@ If you find yourself typing any of those five field names while authoring an IxP
|
|
|
195
194
|
|
|
196
195
|
The `definitions[]` entry is copied verbatim from `registry get` (`Data.Node`). Critical Rule #7 applies unchanged.
|
|
197
196
|
|
|
198
|
-
> **`uip maestro flow validate` enforces the Authoring rules above** via the `ixp-node` validator. Failures surface as `severity: "error"` issues with `path` like `nodes[<nodeId>].inputs.model` and a self-contained `message` describing the violation — fix the `.flow` file, not the validator. The registry's `inputDefinition.properties` is the schema of the property catalog, not a license to override the rules: `digitizationMode`, `documentTaxonomy`, `attachmentId`, `fileName`, and `mimeType` are NOT returned by `registry get` and must not be set on the instance.
|
|
197
|
+
> **`uip maestro flow validate` enforces the Authoring rules above** via the `ixp-node` validator. Failures surface as `severity: "error"` issues with `path` like `nodes[<nodeId>].inputs.model` and a self-contained `message` describing the violation — fix the `.flow` file, not the validator. A common failure is `inputs.model must be an object with non-empty string modelName and folderKey` — this fires when `inputDefaults.model.modelName` was `null` and copied through verbatim; fix it by setting `inputs.model.modelName` from `inputDefaults.model.modelDisplayName` (Authoring rule #1), not by relaxing the validator. The registry's `inputDefinition.properties` is the schema of the property catalog, not a license to override the rules: `digitizationMode`, `documentTaxonomy`, `attachmentId`, `fileName`, and `mimeType` are NOT returned by `registry get` and must not be set on the instance.
|
|
199
198
|
|
|
200
199
|
### `inputs.fileRef` vs the emitted `model.inputs[]` body
|
|
201
200
|
|
|
@@ -323,4 +322,5 @@ IxP also exposes classifier models (type `Classifier`) that label documents rath
|
|
|
323
322
|
| `fileRef` not resolving | Expression references an upstream variable that isn't wired, or the upstream node didn't produce a file output | Verify the upstream node exports a file reference and that the `=js:$vars.{upstreamId}.output.<field>` expression matches |
|
|
324
323
|
| Extraction failed | Underlying IxP model errored (unsupported MIME type, corrupted file, service-side failure) | Check `$vars.{nodeId}.error.detail` for the IxP service response |
|
|
325
324
|
| `uip maestro flow node configure` rejects with "not a connector type node" | Expected — IxP is not a connector. | Edit `inputs.*` in the `.flow` JSON directly. |
|
|
326
|
-
| Studio Web: "Cannot destructure property 'modelName' of 't' as it is undefined" when clicking the node | `inputs.model` blob is missing or undefined. The `schema-definition` form section binds `inputs.model` to the `ixp-model-taxonomy` component, which destructures `modelName` and `folderKey` out of it. When `inputs.model` is missing, the destructure throws. | Copy `definition.inputDefaults.model` verbatim into the node instance's `inputs.model`. The blob carries `
|
|
325
|
+
| Studio Web: "Cannot destructure property 'modelName' of 't' as it is undefined" when clicking the node | `inputs.model` blob is missing or undefined. The `schema-definition` form section binds `inputs.model` to the `ixp-model-taxonomy` component, which destructures `modelName` and `folderKey` out of it. When `inputs.model` is missing, the destructure throws. | Copy `definition.inputDefaults.model` verbatim into the node instance's `inputs.model`. The blob carries `id`, `modelName`, `modelDisplayName`, `folderKey`, `folderName`, `folderPath`, `description`. See [JSON Structure](#json-structure). |
|
|
326
|
+
| `flow validate` error `inputs.model must be an object with non-empty string modelName and folderKey` | `inputDefaults.model.modelName` was `null` (common for published/OOB deployments) and copied verbatim into `inputs.model`. | Set `inputs.model.modelName` from `inputDefaults.model.modelDisplayName` (Authoring rule #1). `folderKey` is normally populated in the blob; if it too is empty, take it from the flat `inputDefaults.folderKey`. |
|
|
@@ -30,12 +30,15 @@ See [Action Node Structure — Adding and editing procedures](../../../../shared
|
|
|
30
30
|
|
|
31
31
|
## Script rules
|
|
32
32
|
|
|
33
|
-
1. **
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
1. **Top-level body — no `function main()` wrapper.** Node runs the `script` text directly (as a function body); a wrapper is never called → `output` null. Read workflow variables via `$vars.<variableId>` and upstream node outputs via `$vars.<nodeId>.output`; end with top-level `return {…}`. Not a coded Function: no `main`, no injected args.
|
|
34
|
+
- Correct: `const n = $vars.ixp1.output.field; return { n };`
|
|
35
|
+
- Wrong: `function main({ ixp1 }) { … }`
|
|
36
|
+
2. **Must `return` an object** — `return { key: value }`, not a bare scalar. The return value becomes `$vars.<nodeId>.output`.
|
|
37
|
+
3. **`$vars` is a global** — use it directly: `return { upper: $vars.customerName.toUpperCase() }`
|
|
38
|
+
4. **JavaScript ES2020 (Jint engine)** — see [variables-and-expressions.md](../../../../shared/variables-and-expressions.md) for supported features and Jint constraints.
|
|
39
|
+
5. **No `console.log`** — `console` is not available. Use `return { debug: value }` to inspect values.
|
|
40
|
+
6. **No external calls** — use the HTTP node or a connector node for API calls.
|
|
41
|
+
7. **30-second timeout** — long-running computations will be killed.
|
|
39
42
|
|
|
40
43
|
## Common patterns
|
|
41
44
|
|
|
@@ -83,6 +86,7 @@ Property access is **case-sensitive** — these casings resolve: `.FullName`, `.
|
|
|
83
86
|
| Error | Cause | Fix |
|
|
84
87
|
| --- | --- | --- |
|
|
85
88
|
| Script did not return a value | Missing `return` statement | Add `return { ... }` |
|
|
89
|
+
| `output` is `null` but script has a `return` | `return` is inside an uncalled `function main(){}` wrapper | Remove wrapper; code + `return` at top level (rule 1) |
|
|
86
90
|
| Return value is not an object | Returned a scalar (`return 42`) | Wrap in object: `return { value: 42 }` |
|
|
87
91
|
| `$vars.nodeId` is undefined | Upstream node not connected or wrong ID | Check edges and node IDs |
|
|
88
92
|
| Timeout after 30s | Script too expensive | Simplify logic or split into multiple scripts |
|
|
@@ -74,6 +74,13 @@ uip maestro flow registry search slack --output json \
|
|
|
74
74
|
|
|
75
75
|
`registry search` returns `Data` as a **flat array of PascalCase objects** — `NodeType`, `Category`, `DisplayName`, `Description`, `Version`, `Tags`, `AvailableOnTenant`. Not `Data.Nodes`, not lowercase `type`/`category`; those shapes do not exist. Knowing the shape lets you write the right expression on call #1 — which is the actual protection. Do **not** rely on `--output-filter` to *catch* a wrong-shape guess: a syntactically valid expression that simply doesn't match (e.g. `--output-filter "Nodes"` or `"Nodes[*].NodeType"` against the flat array) returns `Data: []` with **exit 0** — the same silent trap as `python3`/`jq` (see the silent-`[]` note below). Only an *invalid* expression fails loudly with exit 3: a syntax error, or a type error such as `keys(@)` on an array.
|
|
76
76
|
|
|
77
|
+
> **Never `head`/`tail`/`grep -m`/pager a discovery query** (`registry search`, `is connectors list`, any `list`/`search`). A row past the cutoff reads exactly like a row that doesn't exist — the same false-absence trap as the silent `[]`, self-inflicted. To check existence, push the predicate into `--output-filter` so the result is *all* matches and already small; cap rows only on data already known complete or already filtered.
|
|
78
|
+
>
|
|
79
|
+
> ```bash
|
|
80
|
+
> uip … registry search slack --output json --output-filter "[?contains(NodeType,'get-channel-info')].NodeType" # right: every match
|
|
81
|
+
> uip … registry search slack --output json --output-filter "[*].{…}" | head -100 # wrong: hides matches past line 100
|
|
82
|
+
> ```
|
|
83
|
+
|
|
77
84
|
### When to fall back to `python3` / `jq`
|
|
78
85
|
|
|
79
86
|
`--output-filter` is the preferred extraction mechanism, but it is not a general-purpose transformation tool. Fall back to `python3 -c` or `jq` when JMESPath cannot express the operation:
|
|
@@ -98,7 +98,7 @@ Optional top-level `runtime`: a CLI-managed object that appears on some flows (e
|
|
|
98
98
|
> [error] [(root)] Schema validation failed: Invalid input: expected object, received undefined
|
|
99
99
|
> ```
|
|
100
100
|
>
|
|
101
|
-
> The error path is `(root)` and does NOT pinpoint which node or which field is missing. If you see this error after editing a `.flow` file, audit every node for a `display` block before doing anything else.
|
|
101
|
+
> The error path is `(root)` and does NOT pinpoint which node or which field is missing. If you see this error after editing a `.flow` file, audit every node for a `display` block before doing anything else. (Improving the validator's path specificity is tracked in [MST-9368](https://uipath.atlassian.net/browse/MST-9368).)
|
|
102
102
|
|
|
103
103
|
> **No instance `model` block.** BPMN type, serviceType, event definition, and binding/context templates all live in the node's **definition** (the manifest copied from the registry into `definitions[]`). The runtime hydrates them from the definition at serialization time — instances carry only per-instance data (`inputs`, `outputs`, `display`). This applies to every inline-agent-related node too: `uipath.agent.autonomous` plus every attached `uipath.agent.resource.*` node (tool, escalation, context) carries source identity at `inputs.source`. Their definitions declare `model.source: true`; flow-core hoists that identity onto each instance's `inputs.source`. Do not write a `"model": { "source": ... }` block on the instance.
|
|
104
104
|
>
|
|
@@ -11,7 +11,7 @@ In `../../uipath-platform/references/integration-service/`. Each is small. Do NO
|
|
|
11
11
|
| Before this action | First read |
|
|
12
12
|
|---|---|
|
|
13
13
|
| `uip is connections list <key>` for the first time | `connections.md` §`Folder Scoping` (pass `--folder <name-or-key>`) |
|
|
14
|
-
| `is resources describe ... -f <parent>=<value>` (any cascade re-run) | `resources.md` §`Parent-Field-Driven Custom Fields` (`-f` shape, `--operation` requirement, `--action` rule, merge semantics) |
|
|
14
|
+
| `is resources describe ... -f <parent>=<value>` (any cascade re-run) — **mandatory, incl. curated activities you "know" (Jira `curated_create_issue`)** | `resources.md` §`Parent-Field-Driven Custom Fields` (`-f` shape, `--operation` requirement, `--action` rule, merge semantics) |
|
|
15
15
|
| A `staticValues.<bucket>.<field>` whose describe field has a `.reference` block | `reference-resolution.md` §`Static Reference-Value Labeling` (`designTimeLookups` format + cascade-scope edge cases) |
|
|
16
16
|
| An `inputSchema.properties.<field>` whose `.reference.path` contains `{otherField}` | `reference-resolution.md` §`Field Dependency Chains` (resolve parent first) |
|
|
17
17
|
| An `inputSchema.properties.<field>` whose `.reference.filterPattern` contains `{filter}` | `reference-resolution.md` §`Search References` |
|
|
@@ -23,7 +23,7 @@ In `../../uipath-platform/references/integration-service/`. Each is small. Do NO
|
|
|
23
23
|
|
|
24
24
|
1. **Discover before authoring.** `candidates --category is-activity` resolves connector + activity; `is resources describe` pulls field metadata. Compose `metadata` / `inputSchema` / `outputSchema` from the describe response, never from memory — every connector + operation has its own shape.
|
|
25
25
|
2. **Connection is folder-scoped.** `uip is connections list <connector> --folder <name-or-key> --output json` (the unfiltered form silently filters to the current context and may return empty). Pass `--target-identifier <connection-guid>`; the CLI derives `targetFolderKey` — there is **no** `--target-folder-key` for IS-activity tools. `Reason: CrossFolderConnection` → pick from `Data.candidates`. (`connections.md` §`Folder Scoping` / §`Selecting a Connection`)
|
|
26
|
-
3. **Cascade api-type ObjectActions.** `describe <key> <objectName> --connection-id <id> --operation <op>`; if `requestFields` is short for the operation, re-run with `-f <parent>=<value>` (repeatable). Omit `--action` for Jira `curated_create_issue` Create (passing it → `No api-type ObjectAction matched`); pass `--action` only when describe reports multiple matches. Cascade examples: Jira `curated_create_issue`, Salesforce `query_records`, Dataservice V3.
|
|
26
|
+
3. **Cascade api-type ObjectActions.** Before the first `-f` cascade re-run you **MUST read `resources.md` §`Parent-Field-Driven Custom Fields`** — the pointers in this rule are a map, not a substitute. Knowing a connector's cascade fields from memory (e.g. Jira `curated_create_issue` = `project.key` + `issuetype.id`) does NOT exempt you: the `-f` shape, `--operation` requirement, `--action` rule, and merge semantics vary per connector and change over time; a shape that "looks right" passes `--dry-run` and fails at runtime. Then: `describe <key> <objectName> --connection-id <id> --operation <op>`; if `requestFields` is short for the operation, re-run with `-f <parent>=<value>` (repeatable). Omit `--action` for Jira `curated_create_issue` Create (passing it → `No api-type ObjectAction matched`); pass `--action` only when describe reports multiple matches. Cascade examples: Jira `curated_create_issue`, Salesforce `query_records`, Dataservice V3.
|
|
27
27
|
4. **Baked static reference values need `designTimeLookups`.** Every `staticValues.<bucket>.<field>` (any bucket — `field` / `query` / `header` / `path`) whose describe field has a `.reference` block MUST emit `designTimeMetadata.designTimeLookups[<dotted-field>] = "<displayName> - <value>"`. Applies to `requestFields[]` and `parameters[]`; NOT to runtime / enum fields — labeling renders only for baked values. (`reference-resolution.md` §`Static Reference-Value Labeling`)
|
|
28
28
|
5. **Stringify `metadata` / `inputSchema` / `outputSchema` as scalars** — SDK types them `string | null`. Build each in a file and pass `--metadata "$(jq -c . metadata.json)"`; do not assemble multi-KB JSON inline, and do not mix `--file` with scalar options (`ConflictingInput`). `--output-schema "{}"` when the activity has no `responseFields` (empty string → `Unexpected end of JSON input`).
|
|
29
29
|
6. **Ask — don't guess — when a value drives discovery.** Cascade `-f` parents, a search-reference `{filter}`, a dependency-chain parent, or a required reference with no user hint: STOP and ask, even in autonomous mode. **No autonomous fallback exists.** If the user defers ("Other" / "you decide" / silence), re-ask in plain text — do NOT fall back to free runtime, a guessed default, or silently skipping the tool. Bounded set (2–4 candidates) → `AskUserQuestion` (do not add "Other"; it is auto-appended; <2 options errors). Unbounded set (dozens+) → plain text showing the top 5–10 candidates by a real attribute plus the exact format you need (`"<project key> + <issue type>"`). Never filter an unbounded `run list` with a guessed `JMESPath` name — a miss returns `[]` with no signal.
|
|
@@ -108,7 +108,7 @@ uip agenthub mcp-tools candidates --category is-activity --connector <key> --out
|
|
|
108
108
|
uip is resources describe <key> <objectName> --connection-id <id> --output json # Data.availableOperations[]
|
|
109
109
|
uip is resources describe <key> <objectName> --connection-id <id> --operation <op> --output json
|
|
110
110
|
# requestFields[] (body), parameters[] (path/query/header), responseFields[] (output).
|
|
111
|
-
# Short requestFields → curated: cascade with -f
|
|
111
|
+
# Short requestFields → curated: cascade with -f. [READ FIRST, mandatory even if you know the fields: resources.md §Parent-Field-Driven Custom Fields]
|
|
112
112
|
|
|
113
113
|
# 4 — connection in the server's folder [READ: connections.md §Selecting a Connection + §Folder Scoping]
|
|
114
114
|
uip is connections list <connector-key> --folder <server-folder-name-or-key> --output json
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: uipath-planner
|
|
3
|
-
description: "UiPath solution planner & designer. Always invoke for `pdd.md
|
|
3
|
+
description: "UiPath solution planner & designer. Always invoke for PDD / SDD files (`pdd.md`, `*-sdd.md`). Authors a Solution Design Document (SDD) from a Process Design Document (PDD), or derives the multi-skill, multi-project task list from an existing SDD, emitting live TaskCreate calls. Detects project type (.cs, .xaml, .flow, .bpmn, .py). For `uip solution` init/pack/publish/deploy/activate & `.uipx`→uipath-solution. For non-solution Orchestrator/IS/auth/traces→uipath-platform. For .xaml/.cs→uipath-rpa. For .flow→uipath-maestro-flow. For .bpmn→uipath-maestro-bpmn. For agent.json/.py→uipath-agents. For caseplan.json→uipath-maestro-case."
|
|
4
4
|
when_to_use: "User provides a PDD/SDD, says 'generate SDD'/'analyze this PDD'/design/architect/'turn this PDD into' a UiPath solution (selects product scope), OR makes a non-trivial request spanning SEPARATE buildable projects (a Flow orchestrating standalone RPA processes or agents that must themselves be built, 'build a solution from scratch'). A PDD or SDD ALWAYS routes here (Phase D) — author its SDD even when it describes ONE RPA process; never hand a raw PDD to a specialist. Load BEFORE authoring an SDD or deriving tasks. Skip ONLY when there is no PDD/SDD and the request targets one project — even a Flow/Agent/RPA project with inline HITL/script/connector nodes — invoke that specialist directly. Flow calling only existing/deployed processes→uipath-maestro-flow."
|
|
5
5
|
allowed-tools: Bash, Read, Write, Glob, Grep, AskUserQuestion, EnterPlanMode, ExitPlanMode, TaskCreate, TaskUpdate, TaskList
|
|
6
6
|
---
|
|
@@ -1,23 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: uipath-platform
|
|
3
3
|
description: "UiPath platform ops via the uip CLI — use for ANY task hitting UiPath Cloud / Orchestrator / Studio Web / Integration Service / Data Fabric / LLM Gateway. Load BEFORE writing code that calls a UiPath API. Covers auth, folders, assets, queues, storage buckets, libraries, webhooks, triggers, processes, jobs, machines, users, roles, sessions, calendars, IS connectors/connections/activities, Data Fabric entities/records/files/choice-sets (`uip df`), BYO LLM product configurations, context grounding, traces (execution traces and spans + trace feedback / annotation), licensing. For 'why did X fail' / root-cause→uipath-troubleshoot. For `uip solution` lifecycle→uipath-solution. For PDD/SDD design→uipath-planner. For workflow code (.xaml/.cs)→uipath-rpa, .flow (incl. Data Fabric connector nodes)→uipath-maestro-flow, .bpmn→uipath-maestro-bpmn, agents (.py/agent.json)→uipath-agents, Test Manager→uipath-test."
|
|
4
|
-
when_to_use: "User mentions UiPath / Orchestrator / Studio Web / Integration Service / Data Fabric / LLM Gateway / 'uip' CLI / asset / queue / bucket / library / webhook / trigger / connector / connection / tenant / folder / robot / package / entity / record / choice set / trace / span / trace feedback / BYO LLM. Also 'upload to UiPath', 'create asset', 'start job', 'list queues', 'deploy a single package to Orchestrator', 'OAuth2 token', 'list trace spans / add trace feedback', 'create entity', 'add field', 'delete field', 'list entities', 'insert record', 'update record', 'delete record', 'query Data Fabric', 'search records', 'show every <thing> tagged/where', 'filter records by tag/choice/field', 'count by group', 'unique tag combinations', 'group by field', 'aggregate COUNT/SUM/AVG', 'create choice-set', 'create choiceset', 'add choice set values', 'delete choice set', 'upload file attachment', 'import CSV', 'load CSV into entity/list', 'load spreadsheet into entity', 'bulk load records from CSV', 'bulk import from CSV', 'register my own LLM key', 'configure a model substitution', 'my BYO LLM key stopped working / returns errors', 're-probe / audit a BYO configuration', 'uipath.com REST'. For `uip solution` ops or `.uipx` deploys→uipath-solution. For Data Fabric connector nodes inside a `.flow`→uipath-maestro-flow."
|
|
5
|
-
allowed-tools: Bash, Read, Write, Glob, Grep
|
|
4
|
+
when_to_use: "User mentions UiPath / Orchestrator / Studio Web / Integration Service / Data Fabric / LLM Gateway / 'uip' CLI / asset / queue / bucket / library / webhook / trigger / connector / connection / tenant / folder / robot / package / entity / record / choice set / trace / span / trace feedback / BYO LLM. Also 'upload to UiPath', 'create asset', 'start job', 'list queues', 'deploy a single package to Orchestrator', 'OAuth2 token', 'list trace spans / add trace feedback', 'create entity', 'add field', 'delete field', 'list entities', 'insert record', 'update record', 'delete record', 'query Data Fabric', 'search records', 'show every <thing> tagged/where', 'filter records by tag/choice/field', 'count by group', 'unique tag combinations', 'group by field', 'aggregate COUNT/SUM/AVG', 'create choice-set', 'create choiceset', 'add choice set values', 'delete choice set', 'attach file to record', 'upload/download/delete file on entity record', 'swap record attachment', 'import CSV', 'load CSV into entity/list', 'load spreadsheet into entity', 'bulk load records from CSV', 'bulk import from CSV', 'register my own LLM key', 'configure a model substitution', 'my BYO LLM key stopped working / returns errors', 're-probe / audit a BYO configuration', 'uipath.com REST'. For `uip solution` ops or `.uipx` deploys→uipath-solution. For Data Fabric connector nodes inside a `.flow`→uipath-maestro-flow."
|
|
5
|
+
allowed-tools: Bash, Read, Write, Glob, Grep
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# UiPath Platform — uip CLI Assistant
|
|
9
9
|
|
|
10
10
|
Comprehensive guide for UiPath Cloud / Orchestrator / Studio Web / Integration Service, end-to-end via the `uip` CLI. For `uip solution` lifecycle load [`uipath-solution`](/uipath:uipath-solution); for PDD/SDD design & task planning load [`uipath-planner`](/uipath:uipath-planner).
|
|
11
11
|
|
|
12
|
-
## Route Diagnostic Intent Before Platform Work
|
|
13
|
-
|
|
14
|
-
Classify the requested **outcome** before running any command:
|
|
15
|
-
|
|
16
|
-
1. **Causal outcome → hand off immediately.** User wants an explanation, diagnosis, or root cause for undesirable existing behavior → invoke the `Skill` tool with uipath-troubleshoot (name exactly as it appears in your available-skills list) before running anything. No preliminary job/log/trace fetching — troubleshoot owns evidence collection. Prose telling the user to use troubleshoot is not a substitute for the `Skill` call.
|
|
17
|
-
2. **Operational outcome → stay here.** Inspect current state without a causal question, perform CRUD or lifecycle actions, validate an input before applying it, or execute an already-diagnosed platform fix.
|
|
18
|
-
3. **Mixed request → troubleshoot first.** Hand off the diagnosis; return here only for the platform mutation that applies the confirmed fix.
|
|
19
|
-
4. **Sibling unavailable → degrade gracefully.** State the handoff could not run; give the entity, scope, and time window needed to retry the investigation. Do not improvise a platform-only root cause.
|
|
20
|
-
|
|
21
12
|
## Use the CLI. Don't roll your own REST.
|
|
22
13
|
|
|
23
14
|
**Always reach for `uip` CLI commands first.** The CLI covers auth, Orchestrator (folders, processes, jobs, machines, users, roles, sessions, calendars, settings, audit logs, credential stores, feeds, attachments), resources (assets, queues, queue items, storage buckets, bucket files, libraries, webhooks, triggers), Integration Service (connectors, connections, activities, IS triggers), traces, and licensing end-to-end.
|
|
@@ -40,16 +31,15 @@ Load this skill BEFORE writing any code that talks to UiPath. Specific triggers:
|
|
|
40
31
|
- **Orchestrator core**: folders (`list/get/create/edit/move/delete/runtimes`), processes/releases, jobs (`start/stop/logs/traces/healing-data`), packages (`upload/download/versions`), machines, users / roles / sessions (incl. DirectoryUser/DirectoryGroup/DirectoryRobot/DirectoryExternalApplication), licenses, calendars, settings, audit logs, credential stores, feeds, attachments
|
|
41
32
|
- **Resources (Orchestrator-scoped)**: assets (text/integer/bool/credential), queues + queue items, storage buckets + bucket files (`upload/download/get-download-url/get-upload-url`), libraries (`.nupkg`), webhooks (HMAC signing), triggers (time/queue/api)
|
|
42
33
|
- **Integration Service**: connectors, connections (OAuth flow), activities, IS triggers, agent-workflow reference resolution
|
|
43
|
-
- **Data Fabric
|
|
34
|
+
- **Data Fabric **: UiPath's structured, typed data store. **⛔ STOP — before ANY `uip df` command, Read [`references/data-fabric/data-fabric.md`](references/data-fabric/data-fabric.md).The reference carries Critical Rules (folder-scope prompt flow, irreversible-op gates, complex-field config), request-body schema, per-type operator matrix, and routes to topic files: [`entity-schema.md`](references/data-fabric/entity-schema.md), [`records-query.md`](references/data-fabric/records-query.md), [`filter-platform-contract.md`](references/data-fabric/filter-platform-contract.md), [`choice-sets.md`](references/data-fabric/choice-sets.md), [`file-attachments.md`](references/data-fabric/file-attachments.md), [`bulk-import.md`](references/data-fabric/bulk-import.md). Surfaces:
|
|
44
35
|
- **Entities** — schemas with typed columns, per-type constraints (`lengthLimit`, `minValue` / `maxValue`, `decimalPrecision`), choice-set / relationship / file fields, `addFields` / `updateFields` / `removeFields` evolution.
|
|
45
36
|
- **Records** — insert / update / delete / list / get / `query` with server-side filters, sorting, pagination, group-by, and aggregates (`COUNT`, `SUM`, `AVG`, `MIN`, `MAX`).
|
|
37
|
+
- DF filter body uses `filterGroup.queryFilters[]` — full shape in [`records-query.md`](references/data-fabric/records-query.md).
|
|
46
38
|
- **Files** — binary attachments stored on `FILE`-typed fields via `files upload / download / delete` (record-level writes silently strip FILE values; the dedicated verbs are mandatory).
|
|
47
39
|
- **Choice sets** — shared enumerations consumed by `CHOICE_SET_SINGLE` / `CHOICE_SET_MULTIPLE` fields; values use immutable integer `NumberId`s, not labels.
|
|
48
40
|
- **Folder scoping** — tenant-level OR folder-scoped via `--folder-key <GUID>` on every write, `--include-folders` on `entities list` / `choice-sets list`.
|
|
49
41
|
- **CSV bulk import** — `uip df records import <entity-id> --file <path.csv> --output json`. Basic field types only; complex fields (CHOICE_SET, RELATIONSHIP, FILE, AUTO_NUMBER) require `records insert --file <json>`.
|
|
50
42
|
|
|
51
|
-
**Before issuing any `uip df` command, load [`references/data-fabric/data-fabric.md`](references/data-fabric/data-fabric.md).** That file carries the Critical Rules (folder-scope prompt flow, irreversible-op gates, complex-field config), the exact request-body schema, the per-type operator support matrix, and routes to topic files: [`entity-schema.md`](references/data-fabric/entity-schema.md), [`records-query.md`](references/data-fabric/records-query.md), [`filter-platform-contract.md`](references/data-fabric/filter-platform-contract.md), [`choice-sets.md`](references/data-fabric/choice-sets.md), [`file-attachments.md`](references/data-fabric/file-attachments.md), [`bulk-import.md`](references/data-fabric/bulk-import.md).
|
|
52
|
-
|
|
53
43
|
For Query / Create / Update / Delete / GetById connector nodes **inside a `.flow`**, hand off to `uipath-maestro-flow` — that skill owns the in-flow node JSON, `bindings_v2.json`, and connection-resource layout.
|
|
54
44
|
- **LLM Gateway — BYO product configurations**: `uip llm-configuration byo-connections` (`list / get / create / update / delete / list-product-configs`). Register tenant-owned OpenAI / Azure OpenAI / AWS Bedrock / Google Vertex / Anthropic / OpenAI-compatible keys against UiPath product features (agents, agenthub, jarvis, IXP, agent builder, ECS). Two input shapes: single-mapping (for `AnyModelWithOwnAdditions` features) and repeated `--mapping` (required for `AllModels` / `AnyModel`). Server-side validation is mandatory.
|
|
55
45
|
- **LLM Gateway — diagnose a failing BYO config**: re-probe the underlying IS connection with `byo-connections get <id> --force-refresh`, force a fresh server-side probe with an idempotent `update`, audit the tenant with `list --include-connection-details` filtered on `connectionState != Enabled`, check catalog drift with `list-product-configs`, and cross-reference trace evidence with `uip traces spans get <trace-id>`. The gateway does **not** expose per-request invocation logs via CLI — diagnosis is current-state + trace evidence only. See [`references/llmgateway/byo-connections.md` § Diagnostics](references/llmgateway/byo-connections.md#diagnostics). For tenant-wide AI Trust Layer policy that may be overriding routing, see [uipath-governance](/uipath:uipath-governance).
|
|
@@ -134,7 +134,7 @@ Respond that the operation is not supported. Do not try to work around it.
|
|
|
134
134
|
|
|
135
135
|
16. **Answer with `records query`, not from memory.** Counts, sums, filters, lookups — issue a fresh `records query` (or `records list`) and use the server's response. Do not reuse cached insert responses, IDs you generated earlier, or values from previous tool results. Exception: the `Id` returned by the same `records insert` you just made.
|
|
136
136
|
|
|
137
|
-
17. **`records query` filters.** Body shape,
|
|
137
|
+
17. **`records query` filters.** Body shape, per-type support, and unsupported-operator handling: [filter contract](filter-platform-contract.md). Only these `operator` tokens: `=` `!=` `>` `<` `>=` `<=` `contains` `not contains` `startswith` `endswith` `in` `not in`; 400 thrown for -> `equals`/`==`/`like`. `value` is always a JSON string. On unsupported operator/type or missing value, don't run — ask (Rule 18). **Return all fields by default** — omit `selectedFields` unless a subset is requested. **Aggregate aliases are PascalCased in the response** — `alias: "total"` comes back as key `"Total"` on each row of `Data.Items`; parse by the PascalCase key, not the alias you sent.
|
|
138
138
|
|
|
139
139
|
18. **When a request isn't supported OR the upstream system returns an error, stop and confirm with the user — never silently substitute.** Triggers (not exhaustive): a filter operator unsupported for the field type / not in the symbol list / missing a value (see [filter contract → Unsupported operator](filter-platform-contract.md#unsupported-operator-or-missing-value)); an unknown `fieldName`; a nonexistent or federated entity; a missing CLI verb or unsupported operation (see *Not Supported*); cross-entity joins or value forms the API can't serve; ANY 4xx/5xx, validation error, `RESERVED_LANGUAGE_KEYWORDS`, constraint-violation, or quota response from the API.
|
|
140
140
|
Sequence: (1) surface the full upstream message verbatim — never swallow it; (2) state precisely what isn't supported or what failed (cite the rule / schema / error code); (3) propose a concrete next step keyed to the error — e.g. unknown `fieldName` → list the entity's real same-type fields from `entities get` and ask which; `RESERVED_LANGUAGE_KEYWORDS` → suggest a domain-specific rename; constraint violation → show the allowed range; missing dependency → list candidates via `entities list` / `choice-sets list` and offer pick-or-create (Rule 13); (4) apply **only** what the user approves, never your own fallback. If nothing works, error out and recommend the right sibling skill (`uipath-maestro-flow` / `uipath-rpa` / `uipath-agents` / `uipath-test`) — don't fabricate or return a degraded result.
|
|
@@ -166,7 +166,7 @@ See [reference-resolution.md — Validate Required Fields Before Executing](refe
|
|
|
166
166
|
## Step 6: Execute
|
|
167
167
|
|
|
168
168
|
```bash
|
|
169
|
-
uip is resources
|
|
169
|
+
uip is resources run <verb> "<connector-key>" "<object>" \
|
|
170
170
|
--connection-id "<id>" --body '{"field": "value"}' --output json
|
|
171
171
|
```
|
|
172
172
|
|
|
@@ -174,7 +174,7 @@ See [resources.md — Execute Operations](resources.md#execute-operations) for t
|
|
|
174
174
|
|
|
175
175
|
### Pagination (list operations)
|
|
176
176
|
|
|
177
|
-
`
|
|
177
|
+
`run list` may not return all results. Check `Data.Pagination.HasMore` / `NextPageToken`, paginate with `--query "nextPage=<token>"`, stop early on match. See [resources.md#pagination](resources.md#pagination) for the full protocol, anti-patterns, and offset/limit fallback.
|
|
178
178
|
|
|
179
179
|
---
|
|
180
180
|
|
|
@@ -193,7 +193,7 @@ Step 6a: Read the failure response
|
|
|
193
193
|
↓
|
|
194
194
|
Step 6b: Diagnose using discovery
|
|
195
195
|
- Field not found → run `is resources describe --operation <op>` to get valid field names
|
|
196
|
-
- Invalid value → run `is resources
|
|
196
|
+
- Invalid value → run `is resources run list` on the referenced object to get valid values
|
|
197
197
|
- Vendor 400 "X is required" but `describe` marked X `required=False` → IS schema and vendor validators disagree; treat vendor as authoritative, list the parent resource and add the missing field (e.g., Jira project-level required `components_arrayRemap_name` is `required=False` in `describe`)
|
|
198
198
|
- Auth error → run `is connections edit <id>` to re-authenticate, then ping again
|
|
199
199
|
- Scope error → inform user, connection needs broader permissions
|
|
@@ -248,7 +248,7 @@ uip is resources describe "uipath-salesforce-sfdc" "Contact" \
|
|
|
248
248
|
# 5a. All required fields (LastName) have values → proceed
|
|
249
249
|
|
|
250
250
|
# 6. Execute
|
|
251
|
-
uip is resources
|
|
251
|
+
uip is resources run create "uipath-salesforce-sfdc" "Contact" \
|
|
252
252
|
--connection-id "abc-123" --body '{"LastName": "Doe", "FirstName": "Jane"}' --output json
|
|
253
253
|
```
|
|
254
254
|
|
|
@@ -54,7 +54,7 @@ Some fields in the describe `requestFields` have a `reference` section — their
|
|
|
54
54
|
|
|
55
55
|
| Property | Meaning |
|
|
56
56
|
|---|---|
|
|
57
|
-
| **`reference.objectName`** | The resource to list (use as `<object>` in `
|
|
57
|
+
| **`reference.objectName`** | The resource to list (use as `<object>` in `run list`). May include query params. |
|
|
58
58
|
| **`reference.lookupNames`** | Fields to match the user's input against (e.g., match "general" against `name`) |
|
|
59
59
|
| **`reference.lookupValue`** | The field to extract as the resolved value (e.g., `id`) |
|
|
60
60
|
| **`reference.path`** | The API path — use `reference.objectName` for the list call |
|
|
@@ -132,7 +132,7 @@ Use the global `--output-filter` flag with a JMESPath expression to extract spec
|
|
|
132
132
|
|
|
133
133
|
```bash
|
|
134
134
|
# Extract only id, name, and email from a user list
|
|
135
|
-
uip is resources
|
|
135
|
+
uip is resources run list "<CONNECTOR_KEY>" "<OBJECT_NAME>" \
|
|
136
136
|
--connection-id "<CONNECTION_ID>" \
|
|
137
137
|
--output json \
|
|
138
138
|
--output-filter "Data[].{id: id, name: name, email: profile.email}"
|
|
@@ -152,7 +152,7 @@ Common JMESPath patterns:
|
|
|
152
152
|
|
|
153
153
|
## Pagination
|
|
154
154
|
|
|
155
|
-
`uip is resources
|
|
155
|
+
`uip is resources run list` may not return all results in a single call. **Always check for pagination** when searching for a specific item or listing all items.
|
|
156
156
|
|
|
157
157
|
### Pagination rules
|
|
158
158
|
|
|
@@ -172,12 +172,12 @@ Most IS connectors use the `elements-*` pagination protocol. The CLI returns pag
|
|
|
172
172
|
|
|
173
173
|
```bash
|
|
174
174
|
# First page (do not pass pageSize unless the user explicitly requests a specific page size)
|
|
175
|
-
uip is resources
|
|
175
|
+
uip is resources run list "<connector-key>" "<resource>" \
|
|
176
176
|
--connection-id "<id>" --output json
|
|
177
177
|
# → Check Data.Pagination.HasMore and Data.Pagination.NextPageToken in the JSON response
|
|
178
178
|
|
|
179
179
|
# Subsequent pages — use nextPage as the query param name (NOT nextPageToken)
|
|
180
|
-
uip is resources
|
|
180
|
+
uip is resources run list "<connector-key>" "<resource>" \
|
|
181
181
|
--connection-id "<id>" --query "nextPage=<value-from-NextPageToken>" --output json
|
|
182
182
|
# → Continue until Data.Pagination.HasMore is "false" or target item is found
|
|
183
183
|
```
|
|
@@ -208,7 +208,7 @@ Example response:
|
|
|
208
208
|
Some resources support `offset`/`limit` via `--query`:
|
|
209
209
|
|
|
210
210
|
```bash
|
|
211
|
-
uip is resources
|
|
211
|
+
uip is resources run list "<connector-key>" "<object>" \
|
|
212
212
|
--connection-id "<id>" --query "limit=50&offset=0" --output json
|
|
213
213
|
# → next page: --query "limit=50&offset=50"
|
|
214
214
|
```
|