@uipath/skills 1.202.0 → 1.202.1-preview.864
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/.cursor-plugin/plugin.json +1 -1
- package/package.json +1 -1
- package/skills/uipath-maestro-flow/SKILL.md +3 -1
- package/skills/uipath-maestro-flow/references/author/CAPABILITY.md +6 -6
- package/skills/uipath-maestro-flow/references/author/greenfield.md +10 -0
- package/skills/uipath-maestro-flow/references/author/planning-arch.md +13 -7
- package/skills/uipath-maestro-flow/references/author/plugins/batch-transform/impl.md +2 -2
- package/skills/uipath-maestro-flow/references/author/plugins/batch-transform/planning.md +1 -1
- package/skills/uipath-maestro-flow/references/author/plugins/connector/impl.md +5 -1
- package/skills/uipath-maestro-flow/references/author/plugins/data-fabric/impl.md +13 -12
- package/skills/uipath-maestro-flow/references/author/plugins/data-fabric/planning.md +16 -13
- package/skills/uipath-maestro-flow/references/author/plugins/summarize/impl.md +2 -2
- package/skills/uipath-maestro-flow/references/author/plugins/summarize/planning.md +1 -1
- package/skills/uipath-maestro-flow/references/diagnose/failure-modes.md +2 -0
- package/skills/uipath-maestro-flow/references/shared/cli-commands.md +5 -1
- package/version-manifest.json +1 -1
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"name": "uipath",
|
|
10
10
|
"source": "./",
|
|
11
11
|
"description": "UiPath plugin for Claude Code — custom skills, agents, hooks, and MCP servers for UiPath workflows, UI automation, UI testing and UiPath troubleshoot",
|
|
12
|
-
"version": "1.202.
|
|
12
|
+
"version": "1.202.1",
|
|
13
13
|
"author": {
|
|
14
14
|
"name": "UiPath"
|
|
15
15
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "uipath",
|
|
3
|
-
"version": "1.202.
|
|
3
|
+
"version": "1.202.1",
|
|
4
4
|
"description": "UiPath plugin for Claude Code — custom skills, agents, hooks, and MCP servers for UiPath RPA workflows, UI automation, UI testing, Python coded agents and UiPath troubleshoot",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "UiPath"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "uipath",
|
|
3
3
|
"displayName": "UiPath",
|
|
4
|
-
"version": "1.202.
|
|
4
|
+
"version": "1.202.1",
|
|
5
5
|
"description": "UiPath plugin for Cursor — skills for building, running, testing, and deploying UiPath automations, agents, coded apps, and platform operations.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "UiPath",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uipath/skills",
|
|
3
|
-
"version": "1.202.
|
|
3
|
+
"version": "1.202.1-preview.864",
|
|
4
4
|
"description": "UiPath agent skills for Claude Code, Codex, Cursor, Copilot, Gemini and OpenCode — RPA, UI automation, UI testing, coded agents/apps/workflows, and troubleshooting. Distributed as the UiPath Claude Code plugin.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "UiPath"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: uipath-maestro-flow
|
|
3
|
-
description: "TRIGGER for `.flow` files, UiPath Flow / Maestro Flow build/edit requests, and adding or listing IXP model/document-extraction nodes for a Flow. Build, edit, run, debug, fix, evaluate a Maestro Flow (.flow): create/connect nodes (connector, approval, script, subflow, ixp, data fabric entity), triggers, schedules, validate; build conversational flows (chat, chatbot, voice, phone calls); upload, publish, manage runs/instances; diagnose errors, incidents, traces; design eval sets, evaluators, run Studio Web evals. `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."
|
|
3
|
+
description: "TRIGGER for `.flow` files, UiPath Flow / Maestro Flow / Maestro Automate build/edit requests, and adding or listing IXP model/document-extraction nodes for a Flow. Build, edit, run, debug, fix, evaluate a Maestro Flow (.flow): create/connect nodes (connector, approval, script, subflow, ixp, data fabric entity), triggers, schedules, validate; build conversational flows (chat, chatbot, voice, phone calls); upload, publish, manage runs/instances; diagnose errors, incidents, traces; design eval sets, evaluators, run Studio Web evals. `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
|
|
|
@@ -71,6 +71,8 @@ Guide for creating, editing, validating, debugging, publishing, diagnosing, and
|
|
|
71
71
|
6. **Discover the target solution before scaffolding.** A Flow project must use double nesting: `<Solution>/<Project>/<Project>.flow`. Before any new `uip solution init` or `uip maestro flow init`, run `find . -maxdepth 2 -type f -name '*.uipx' -print`. If a solution exists, stop and ask which to use: one option per solution, "Create a new solution", then "Something else". Do not silently adopt, initialize, delete, or repair an existing solution, even if a new one was requested. If creating one, ask for its name rather than defaulting to the Flow name.
|
|
72
72
|
|
|
73
73
|
If none exists, create one automatically, defaulting its name to the Flow name unless specified. Prefer solution-first: `uip solution init "<SolutionName>" --output json && cd "<SolutionName>" && uip maestro flow init "<FlowName>" --output json`, producing `<SolutionName>/<FlowName>/<FlowName>.flow` and registering it in the parent `.uipx` (`Data.SolutionRegistration.Status: "Registered"`). Names are independent. A current CLI may auto-scaffold outside a solution as `<FlowName>Solution/<FlowName>Solution.uipx` with `Data.AutoCreatedSolution`; use that only when the solution name does not matter. `--skip-solution-registration` creates a bare single-nested project that fails Studio Web upload and packaging. If the target directory is non-empty, init leaves it untouched. Never omit `cd`, or it auto-scaffolds a duplicate solution. Finish with one `project.uiproj`; remove strays. See [author/greenfield.md](references/author/greenfield.md) Step 2.
|
|
74
|
+
|
|
75
|
+
**Maestro Automate is `--automate` on the same command.** When the request names **Maestro Automate** as the product, pass `uip maestro flow init "<Name>" --automate --output json`; otherwise omit the flag. The bare verb is not the signal — "automate invoice intake" asks for a Flow. `--output json` stays either way — Step 2c reads `Data.SolutionRegistration` from it. Do not ask which — the words decide. Everything downstream is identical: same `.flow`, same authoring, same `pack` / `publish` / `debug` / `eval`. The flag only writes `runtimeOptions.profile` into the packaged `operate.json` and drops a `.maestro_automate` marker in the project root, which is how Orchestrator and Studio Web tell the two apart.
|
|
74
76
|
7. **Narrate progress only when requested or clearly opted into.** Otherwise work silently and surface decisions, failures, consent gates, and the final result. When engaged, use one short plain-English line per logical step across CLI calls, shell builtins, edits, and searches; do not narrate flags or JSON structure. See [shared/ux-narration-and-todos.md](references/shared/ux-narration-and-todos.md) §When to engage.
|
|
75
77
|
8. **Maintain a user-facing progress list only when tracking or verbosity is requested.** In silent mode there is no user-facing todo list (the agent MAY track privately). When engaged, journeys above trivial complexity get granular step-level todos; counts follow actual work, not a target. Hide registry lookups, parsing, and file reads inside their logical step. See [shared/ux-narration-and-todos.md](references/shared/ux-narration-and-todos.md) for triggers, granularity, thresholds, and pivots.
|
|
76
78
|
9. **Each node has exactly one author: Edit/Write or CLI, never both.** CLI-owned nodes are connector activities (`uipath.connector.<key>.<op>`), connector triggers (`uipath.connector.trigger.<key>.<trigger>`), wait-for-events (`uipath.connector.event.<key>.<event>`, configured like triggers), and managed HTTP (`core.action.http.v2`); add/configure them with `uip maestro flow node add` and `node configure`. All others—triggers, control flow, logic, HITL, patterns, agents, resource nodes, and queues—are user-owned and should be authored directly with `Edit` or `Write`. Never full-file `Write` a flow containing CLI-owned nodes because it can clobber CLI-set `bindings[]` and `inputs.detail`; use `Edit` or configure CLI-owned nodes last. Their `inputs.detail` is a `=jsonString:essentialConfiguration` envelope rejected when hand-authored. Inline-agent CLI is limited to `uip agent init / refresh / validate --inline-in-flow`; the `uipath.agent.autonomous` node is user-owned. Scripting (`python`, `node`, `jq`, `sed`, `awk`, or shell heredocs) is a last resort for user-owned edits and requires explicit approval after explaining state bypass, opaque diffs, and lack of interruption points. See [author/CAPABILITY.md — Node ownership](references/author/CAPABILITY.md#node-ownership--who-authors-the-node) and [author/editing-operations.md — Tool Selection Ladder](references/author/editing-operations.md#tool-selection-ladder).
|
|
@@ -8,7 +8,7 @@ Capability index for building new flows (greenfield) and editing existing flows
|
|
|
8
8
|
|
|
9
9
|
## When to use this capability
|
|
10
10
|
|
|
11
|
-
- Create a new Flow project with `uip maestro flow init`
|
|
11
|
+
- Create a new Flow project with `uip maestro flow init`, or a Maestro Automate one with `uip maestro flow init --automate`
|
|
12
12
|
- Edit a `.flow` file — adding nodes, edges, or logic
|
|
13
13
|
- Explore available node types via the registry
|
|
14
14
|
- Validate a Flow file locally
|
|
@@ -112,12 +112,12 @@ If you find yourself hand-writing `inputs.detail`, a `=jsonString:` blob, or `bi
|
|
|
112
112
|
| **List IxP models / runtime projects available in flow** | [plugins/ixp/impl.md — Listing Published Models](plugins/ixp/impl.md#listing-published-models) — read-only registry search, no `.flow` scaffold or edits |
|
|
113
113
|
| **Create a resource that doesn't exist yet** | Use `core.logic.mock` placeholder — see [Edit/Write: Replace a mock](editing-operations-json.md#replace-a-mock-with-a-real-resource-node), then the `impl.md` of the plugin for the node that *replaces* the mock (`core.logic.mock` has no plugin of its own) |
|
|
114
114
|
| **Add data transform nodes** | [plugins/transform/impl.md](plugins/transform/impl.md) |
|
|
115
|
-
| **Add an LLM batch transform over CSV rows** | [plugins/batch-transform/impl.md](plugins/batch-transform/impl.md) — `uipath.pattern.batch-transform
|
|
116
|
-
| **Summarize / synthesize one document with optional citations** | [plugins/summarize/impl.md](plugins/summarize/impl.md) — `uipath.pattern.deep-rag
|
|
115
|
+
| **Add an LLM batch transform over CSV rows** | [plugins/batch-transform/impl.md](plugins/batch-transform/impl.md) — `uipath.pattern.batch-transform` |
|
|
116
|
+
| **Summarize / synthesize one document with optional citations** | [plugins/summarize/impl.md](plugins/summarize/impl.md) — `uipath.pattern.deep-rag` |
|
|
117
117
|
| **Create a subflow** | [plugins/subflow/impl.md](plugins/subflow/impl.md) + [Edit/Write: Create a subflow](editing-operations-json.md#create-a-subflow) |
|
|
118
118
|
| **Add a delay or scheduled trigger** | [plugins/delay/](plugins/delay/) or [plugins/scheduled-trigger/](plugins/scheduled-trigger/) |
|
|
119
119
|
| **Use queue nodes** | [plugins/queue/impl.md](plugins/queue/impl.md) |
|
|
120
|
-
| **Read or write Data Fabric entity records** | [plugins/data-fabric/impl.md](plugins/data-fabric/impl.md) — `core.datafabric.read` / `create` / `update` / `delete`,
|
|
120
|
+
| **Read or write Data Fabric entity records** | [plugins/data-fabric/impl.md](plugins/data-fabric/impl.md) — `core.datafabric.read` / `create` / `update` / `delete`, the default for record CRUD. Any other Data Service operation, or an explicit request for the connector, goes to [plugins/connector/impl.md](plugins/connector/impl.md) |
|
|
121
121
|
|
|
122
122
|
## Anti-patterns
|
|
123
123
|
|
|
@@ -158,7 +158,7 @@ If you find yourself hand-writing `inputs.detail`, a `=jsonString:` blob, or `bi
|
|
|
158
158
|
- [planning-arch.md](planning-arch.md) — capability discovery, plugin index, topology design
|
|
159
159
|
- [planning-impl.md](planning-impl.md) — registry lookups, connection binding, wiring rules
|
|
160
160
|
- [plugins/](plugins/) — per-node-type planning + impl docs:
|
|
161
|
-
- [connector](plugins/connector/) — IS connector nodes
|
|
161
|
+
- [connector](plugins/connector/) — IS connector nodes, and the path for every Data Service operation that is not record CRUD, or when the user names the connector (the `uipath-uipath-dataservice` entity activities; see [data-fabric](plugins/data-fabric/))
|
|
162
162
|
- [connector-trigger](plugins/connector-trigger/)
|
|
163
163
|
- [script](plugins/script/) — Jint ES2020 JavaScript
|
|
164
164
|
- [http](plugins/http/) — `core.action.http.v2` (Managed HTTP Request)
|
|
@@ -185,7 +185,7 @@ If you find yourself hand-writing `inputs.detail`, a `=jsonString:` blob, or `bi
|
|
|
185
185
|
- [inline-voice-agent](plugins/inline-voice-agent/) — voice agent on a live phone call (inbound/outbound) + the trigger, create-call, and end-call nodes
|
|
186
186
|
- [ixp](plugins/ixp/) — published IxP document-extraction models (PDFs, scanned forms, receipts, invoices, contracts)
|
|
187
187
|
- [queue](plugins/queue/) — Orchestrator queue item creation
|
|
188
|
-
- [data-fabric](plugins/data-fabric/) — native Data Fabric entity record CRUD (`core.datafabric.*`);
|
|
188
|
+
- [data-fabric](plugins/data-fabric/) — native Data Fabric entity record CRUD (`core.datafabric.*`); the default path for those four operations
|
|
189
189
|
|
|
190
190
|
### Cross-capability (shared)
|
|
191
191
|
|
|
@@ -97,6 +97,14 @@ uip solution init "<SolutionName>" --output json \
|
|
|
97
97
|
|
|
98
98
|
> **One creation path — never drop the `cd`.** `uip solution init "<SolutionName>"` → `cd "<SolutionName>"` → `uip maestro flow init "<ProjectName>"`, one chain. Without the `cd`, `flow init` runs in the old directory and auto-scaffolds a duplicate `<ProjectName>Solution/` (1-node husk). Never let auto-scaffold create the solution. Finish with exactly one `project.uiproj` — delete strays.
|
|
99
99
|
|
|
100
|
+
> **Building a Maestro Automate?** Add `--automate` to the `flow init` segment and change nothing else:
|
|
101
|
+
>
|
|
102
|
+
> ```bash
|
|
103
|
+
> && uip maestro flow init "<ProjectName>" --automate --output json \
|
|
104
|
+
> ```
|
|
105
|
+
>
|
|
106
|
+
> Only when the request names **Maestro Automate** as the product. The bare verb does not count — "automate invoice intake with a Flow" asks for a Flow. Anything else, including no signal, leaves the flag off. Steps 3-6 are identical either way — the flag changes the packaged `runtimeOptions.profile`, not how you author the `.flow`. See [SKILL.md rule #6](../../SKILL.md#critical-rules-universal).
|
|
107
|
+
|
|
100
108
|
Tail-append one `node add` per CLI-owned node (`uipath.connector.*`, `uipath.connector.trigger.*`, `core.action.http.v2`). Each `node add` returns the new node `id` in `Data` — capture it from the chained output for T2/T3. Drop the trailing `node add` segment when the flow is OOTB-only.
|
|
101
109
|
|
|
102
110
|
In the SAME assistant message (parallel to this chain): emit one `Bash` per OOTB `registry get <NODE_TYPE>` you'll need in T2 (always `core.control.end` — see Step 4), and parallel `Read` calls for any plugin `impl.md`s you'll consult.
|
|
@@ -121,6 +129,8 @@ Creates `<cwd>/<SolutionName>/<SolutionName>.uipx`. **`cd` into the new solution
|
|
|
121
129
|
cd <directory>/<SolutionName> && uip maestro flow init <ProjectName> --output json
|
|
122
130
|
```
|
|
123
131
|
|
|
132
|
+
Append `--automate` for a Maestro Automate project (SKILL.md rule #6). The rest of this step, and Steps 3-6, are unchanged.
|
|
133
|
+
|
|
124
134
|
The `cd` puts the project inside the solution you just created. Skip it and `flow init` won't find that solution (discovery walks **up**, not down into `<SolutionName>/`) — it auto-scaffolds a **second, separate** `<ProjectName>Solution/` beside your empty `<SolutionName>/`, leaving two solutions. The project no longer single-nests, but `cd` first to land in the right one.
|
|
125
135
|
|
|
126
136
|
> **Bash session state persists across tool calls.** This `cd` is **not scoped to one Bash invocation** — your cwd remains inside `<SolutionName>/` for every subsequent `Bash` call until you `cd` somewhere else. Plan the rest of Step 2 (and Steps 3–6) accordingly: either keep using paths relative to the solution dir, or anchor with `$(pwd)` / the absolute `Data.Path` returned by `flow init`. Do NOT prefix later commands with the original `<directory>/<SolutionName>/...` — that would resolve as `<SolutionName>/<directory>/<SolutionName>/...` and look like a layout bug when it isn't.
|
|
@@ -105,15 +105,15 @@ Every flow has exactly one trigger, first in topology. IS connector triggers rep
|
|
|
105
105
|
| `core.action.http.v2` | [http](plugins/http/planning.md) | REST API; connector or manual mode; replaces deprecated `core.action.http` |
|
|
106
106
|
| `core.action.transform` | [transform](plugins/transform/planning.md) | Declarative map, filter, or group-by |
|
|
107
107
|
| Wait for events | [connector-trigger](plugins/connector-trigger/planning.md) | Mid-flow external event; type `uipath.connector.event.<key>.<event>` with `input` |
|
|
108
|
-
| `uipath.pattern.batch-transform` | [batch-transform](plugins/batch-transform/planning.md) | Append LLM-generated columns to CSV rows
|
|
109
|
-
| `uipath.pattern.deep-rag` (Summarize) | [summarize](plugins/summarize/planning.md) | Synthesis/Q&A over one document with optional citations
|
|
108
|
+
| `uipath.pattern.batch-transform` | [batch-transform](plugins/batch-transform/planning.md) | Append LLM-generated columns to CSV rows |
|
|
109
|
+
| `uipath.pattern.deep-rag` (Summarize) | [summarize](plugins/summarize/planning.md) | Synthesis/Q&A over one document with optional citations |
|
|
110
110
|
| `core.logic.delay` | [delay](plugins/delay/planning.md) | Duration or date wait |
|
|
111
111
|
| `core.action.queue.create` | [queue](plugins/queue/planning.md) | Fire-and-forget robot work |
|
|
112
112
|
| `core.action.queue.create-and-wait` | [queue](plugins/queue/planning.md) | Robot work with result wait |
|
|
113
|
-
| `core.datafabric.read` | [data-fabric](plugins/data-fabric/planning.md) | Read one record or a filtered list from a Data Fabric entity
|
|
114
|
-
| `core.datafabric.create` | [data-fabric](plugins/data-fabric/planning.md) | Insert a record and return the stored row
|
|
115
|
-
| `core.datafabric.update` | [data-fabric](plugins/data-fabric/planning.md) | Patch named columns on one record
|
|
116
|
-
| `core.datafabric.delete` | [data-fabric](plugins/data-fabric/planning.md) | Delete one record
|
|
113
|
+
| `core.datafabric.read` | [data-fabric](plugins/data-fabric/planning.md) | Read one record or a filtered list from a Data Fabric entity |
|
|
114
|
+
| `core.datafabric.create` | [data-fabric](plugins/data-fabric/planning.md) | Insert a record and return the stored row |
|
|
115
|
+
| `core.datafabric.update` | [data-fabric](plugins/data-fabric/planning.md) | Patch named columns on one record |
|
|
116
|
+
| `core.datafabric.delete` | [data-fabric](plugins/data-fabric/planning.md) | Delete one record |
|
|
117
117
|
| `uipath.human-in-the-loop.quick-form` | [hitl](plugins/hitl/planning.md) | Inline human review, approval, or data entry |
|
|
118
118
|
| `uipath.conversational.wait-for-message` | [conversational-agent](plugins/conversational-agent/planning.md) | Pause until the user sends a chat message (initiates an exchange); returns the conversation context |
|
|
119
119
|
| `uipath.conversational.send-message` | [conversational-agent](plugins/conversational-agent/planning.md) | Write a message the flow composes itself into the chat |
|
|
@@ -174,7 +174,13 @@ Prefer, in order:
|
|
|
174
174
|
2. `core.action.http.v2` connector mode when the connector lacks the activity, or manual mode for APIs without connectors ([http](plugins/http/planning.md)).
|
|
175
175
|
3. An RPA workflow only when there is no API, such as a desktop app or terminal ([rpa](plugins/rpa/planning.md)).
|
|
176
176
|
|
|
177
|
-
**Data Fabric
|
|
177
|
+
**Data Fabric entity records are the one exception, and the split is by operation.** Record CRUD has two paths — the native `core.datafabric.*` nodes and the `uipath-uipath-dataservice` connector activities:
|
|
178
|
+
|
|
179
|
+
- **Record CRUD (read / create / update / delete) — default to the native node** wherever Flow carries it natively. It needs no Integration Service connection.
|
|
180
|
+
- **Every other Data Service operation — use the connector activities.** Only the four CRUD operations exist natively; attachments, file fields, entity metadata and everything else have no native node, so the connector is not a fallback there, it is the only path.
|
|
181
|
+
- **An explicit request for connector activities wins over both.** If the user asks for the Data Service connector by name, build it with the connector as long as that activity exists — do not override them with the native node.
|
|
182
|
+
|
|
183
|
+
Confirm the native node with the probe and recovery in [data-fabric/impl.md — Registry validation](plugins/data-fabric/impl.md#registry-validation), the single procedure for this error; on its final "use the connector" outcome, build with the connector activities. Never hand-write a `definitions[]` entry for a node the registry will not return. Rationale and the federated-entity case in [data-fabric/planning.md — Native node vs Data Service connector](plugins/data-fabric/planning.md#native-node-vs-data-service-connector--the-operation-decides).
|
|
178
184
|
|
|
179
185
|
## Standard Port Reference
|
|
180
186
|
|
|
@@ -21,7 +21,7 @@ Confirm:
|
|
|
21
21
|
- `outputDefinition.output.source`: `"=response"` (the BPMN engine wraps the result under that key, as for every ServiceTask).
|
|
22
22
|
- `outputDefinition.error.schema.required`: `code`, `message`, `detail`, `category`, `status`.
|
|
23
23
|
|
|
24
|
-
If the command reports **"Node type not found: uipath.pattern.batch-transform"**, run `uip tools update` and `uip maestro flow registry pull --force`. If it still fails,
|
|
24
|
+
If the command reports **"Node type not found: uipath.pattern.batch-transform"**, run `uip tools update` and `uip maestro flow registry pull --force`. If it still fails, this CLI build does not carry the node — there is no tenant setting behind it and no admin to escalate to.
|
|
25
25
|
|
|
26
26
|
## Add or edit the node
|
|
27
27
|
|
|
@@ -153,7 +153,7 @@ The validator checks that `attachment`, `prompt`, and `outputColumns` are presen
|
|
|
153
153
|
|
|
154
154
|
| Error | Cause | Fix |
|
|
155
155
|
| --- | --- | --- |
|
|
156
|
-
| `Node type not found: uipath.pattern.batch-transform` | CLI predates Batch Transform support
|
|
156
|
+
| `Node type not found: uipath.pattern.batch-transform` | This CLI build predates Batch Transform support | Run `uip tools update`, then `uip maestro flow registry pull --force`; no tenant setting governs this, so there is no admin to escalate to |
|
|
157
157
|
| Validate rejects `outputColumns` | Wrong shape, such as a map `{ name: description }` or string array | Use `[{ "name": "...", "description": "..." }, ...]` |
|
|
158
158
|
| Runtime error `exceeded maxColumns` | More than 10 output columns | Reduce to ≤10 or split across two Batch Transform nodes chained on the output file |
|
|
159
159
|
| All rows produce blank values for a column | `description` is vague or references fields absent from the source CSV | Name the source column(s) in the description and test with a small sample |
|
|
@@ -6,7 +6,7 @@ The Batch Transform node runs an LLM over every row of an attached CSV (or simil
|
|
|
6
6
|
|
|
7
7
|
`uipath.pattern.batch-transform`
|
|
8
8
|
|
|
9
|
-
This is a fixed OOTB node type — no registry suffix, one version.
|
|
9
|
+
This is a fixed OOTB node type — no registry suffix, one version. Whether it appears in `uip maestro flow registry list` is a property of the CLI build, not of the tenant: the CLI asks for a fixed set of OOTB node manifests, and the server only adds dynamic nodes on top — it never withholds an OOTB one. If the node is missing, upgrade the CLI.
|
|
10
10
|
|
|
11
11
|
## When to Use
|
|
12
12
|
|
|
@@ -266,7 +266,11 @@ Illustrative supported activities (confirm against `registry get` for the specif
|
|
|
266
266
|
| `uipath-sap-s4hanacloud` | `Entity` | Create Entity | POST | method |
|
|
267
267
|
| `uipath-google-bigquery` | `projects::table` | List All Records | GET | method |
|
|
268
268
|
|
|
269
|
-
> **Data Fabric
|
|
269
|
+
> **Data Fabric record CRUD has native nodes — they are the default; everything else on this connector is not.** `core.datafabric.read` / `create` / `update` / `delete` ([data-fabric/planning.md](../data-fabric/planning.md)) need no Integration Service connection and are authored with `Edit`/`Write` instead of `node configure`, so for those four operations go native: confirm with `uip maestro flow registry get core.datafabric.read`, and on `NodeGetSuccess` leave this doc. Stay here when **any** of these hold — and they are common:
|
|
270
|
+
>
|
|
271
|
+
> - the operation is **not** one of those four (attachments, file-field downloads, entity metadata, bulk work) — no native node exists, so these activities are the only path, not a fallback; **these activities target the tenant scope only — folder-scoped entities are not supported, so require a tenant-scoped entity**;
|
|
272
|
+
> - the **user asked for the connector by name** — an explicit request outranks the native default, so build it here as long as the activity exists;
|
|
273
|
+
> - `registry get` ends at "Node not found" after [data-fabric/impl.md — Registry validation](../data-fabric/impl.md#registry-validation).
|
|
270
274
|
|
|
271
275
|
Run Step 3a and use the matched action's `name` and `apiConfiguration.{url,body}` tokens. Match `source: field` or `source: method` according to metadata; for operation-scoped lookup use the node definition's `model.context[].method`.
|
|
272
276
|
|
|
@@ -29,18 +29,18 @@ Confirm on `Data.Node`:
|
|
|
29
29
|
- `runtimeConstraints.exclude` — contains `api-function`.
|
|
30
30
|
- `version` — copy it verbatim into the instance's `typeVersion`. The four are versioned independently; do not assume one version across the family.
|
|
31
31
|
|
|
32
|
-
If `registry get` reports **"Node not found"**,
|
|
32
|
+
If `registry get` reports **"Node not found"**, this CLI build does not carry the node. **This is the single recovery procedure for that error** — the planning docs defer here, so do not improvise a different one:
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
34
|
+
1. Run `uip tools update`.
|
|
35
|
+
2. Run `uip maestro flow registry pull --force`.
|
|
36
|
+
3. Retry `registry get` **once**.
|
|
37
|
+
4. Still "Node not found" → build with the connector (see below). Do not loop.
|
|
38
|
+
|
|
39
|
+
No tenant setting governs **whether the registry serves this node**, so there is no administrator to escalate to for step 4: the CLI decides which node manifests it asks for, and older builds did not ask for these four. (That scoping matters — the *runtime* engine version is a separate axis, and it does have a platform-side failure mode. See the engine-fallback row in [Debug](#debug).)
|
|
40
40
|
|
|
41
|
-
`registry search` is not a substitute for `registry get` here. A
|
|
41
|
+
`registry search` is not a substitute for `registry get` here. A node can appear in search with `AvailableOnTenant: false` while `registry get` refuses it — and without `registry get` you cannot source the `definitions[]` entry, which must never be hand-written ([Author capability, rule 6](../../CAPABILITY.md#critical-rules)).
|
|
42
42
|
|
|
43
|
-
**
|
|
43
|
+
**If the retry still fails, switch to the connector and stop.** Build the flow with the `uipath-uipath-dataservice` activities ([connector/impl.md](../connector/impl.md)) and say in the final report that this CLI could not serve the native nodes. Above all, **do not hand-author a `definitions[]` entry from this doc's field list to stand in for the missing one** — a hand-written definition carries the wrong port schema, passes `flow validate`, and fails at runtime.
|
|
44
44
|
|
|
45
45
|
## Add or edit the node
|
|
46
46
|
|
|
@@ -400,9 +400,10 @@ Use `uip df entities get` and `uip df records list` to close that gap before shi
|
|
|
400
400
|
|
|
401
401
|
| Symptom | Cause | Fix |
|
|
402
402
|
| --- | --- | --- |
|
|
403
|
-
| `Node not found: core.datafabric.*` on `registry get` |
|
|
403
|
+
| `Node not found: core.datafabric.*` on `registry get` | This CLI build does not carry the node | `uip tools update`, then `uip maestro flow registry pull --force`; if it still fails, use the connector — no tenant setting governs this |
|
|
404
404
|
| Node validates clean, runs green, nothing written | Most often a **selector** problem, not a binding one: `readEntityNodeId` names a missing node or a multi-record read, the read's filters do not compile, or the `fromRead` read matched more than one record at runtime | Check the Read node's `id` matches exactly and its `resultMode` is `single`; confirm the filter identifies exactly one record with `uip df records list` |
|
|
405
405
|
| Write runs green, row unchanged | The body was rejected and the rejection swallowed — a federated entity, a system or attachment column, a choice-set label instead of its numeric id, an uncoercible value, or a null into a non-nullable column | Re-check the entity is native and each column against `uip df entities get` |
|
|
406
|
+
| Create runs green, no row inserted | Platform-side, not authoring: the BPMN engine predates the create postprocessor, so `GetDataFabricAction()` falls back to `"update"`. The registry served the node correctly — the *runtime* is the older half | Confirm against a newer engine, or build the insert with the connector's Create Entity Record ([connector/impl.md](../connector/impl.md)) |
|
|
406
407
|
| Downstream `$vars.<id>.output` is `undefined` | `variables.nodes[]` missing, or the read matched nothing | Run `uip maestro flow format`; if it persists, verify the filter matches a real record |
|
|
407
408
|
| A Loop over a multi-record read iterates nothing | Wired `output` instead of `output.results` | Use `=js:$vars.<readId>.output.results` |
|
|
408
409
|
| Multi-record read returns only some rows | The limit is always explicit and capped at 1000 | Page with `_skip`; raising `_recordLimit` past 1000 truncates silently |
|
|
@@ -412,14 +413,14 @@ Use `uip df entities get` and `uip df records list` to close that gap before shi
|
|
|
412
413
|
|
|
413
414
|
## What not to do
|
|
414
415
|
|
|
415
|
-
- **Do not hand-write `definitions[]`** — copy verbatim from `registry get`. A
|
|
416
|
+
- **Do not hand-write `definitions[]`** — copy verbatim from `registry get`. A node you cannot `registry get` is a node you cannot author.
|
|
416
417
|
- **Do not put a `model` block on the instance.** `bpmn:Task` and the debug runtime live in the definition.
|
|
417
418
|
- **Do not add an instance `outputs` block.** The canvas writes none for these nodes; the manifest `outputDefinition` plus `flow format`'s `variables.nodes[]` carry the contract.
|
|
418
419
|
- **Do not wire an `error` edge or set `errorHandlingEnabled`** — these four nodes have no error port. See [No error port](#no-error-port).
|
|
419
420
|
- **Do not write to a federated entity.** Create, Update and Delete require a native entity; the rejection is swallowed, so the run looks successful.
|
|
420
421
|
- **Do not write a system column** (`Id`, `CreateTime`, `CreatedBy`, `UpdateTime`, `UpdatedBy`) or an attachment column.
|
|
421
422
|
- **Do not put a choice-set label in a value or a filter** — use the numeric `numberId`.
|
|
422
|
-
- **Do not treat
|
|
423
|
+
- **Do not treat a search hit as proof you can author the node** — only `registry get` returning `NodeGetSuccess` is.
|
|
423
424
|
- **Do not use a Data Fabric node in an API workflow** — all four exclude the `api-function` runtime.
|
|
424
425
|
- **Do not reference `$self` in a filter value,** and do not leave a filter expression blank — either refuses the whole query and strands every downstream reference.
|
|
425
426
|
- **Do not add a placeholder value to satisfy Create's "at least one value" rule.** The rule exists because a blank-only insert writes nothing; a junk value writes junk.
|
|
@@ -13,16 +13,15 @@ Use them whenever the flow's own data lives in Data Fabric: a case record, a loo
|
|
|
13
13
|
| `core.datafabric.update` | Update entity record | Patch named columns on one record |
|
|
14
14
|
| `core.datafabric.delete` | Delete entity record | Delete one record (no output) |
|
|
15
15
|
|
|
16
|
-
These are fixed OOTB node types — no registry suffix, no connector key.
|
|
16
|
+
These are fixed OOTB node types — no registry suffix, no connector key.
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
| `core.datafabric.delete` | `canvas.nodes.delete-entity` |
|
|
18
|
+
Whether your CLI can serve them is a property of the CLI build, not of the tenant, and `registry get <type>` is the only way to find out. Probe it once before planning around a node:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
uip maestro flow registry get core.datafabric.read --output json
|
|
22
|
+
```
|
|
24
23
|
|
|
25
|
-
|
|
24
|
+
`Code: NodeGetSuccess` means you can author the node and source its `definitions[]` entry. **"Node not found"** means this CLI does not carry it. Do not ask an administrator to change a tenant setting — no tenant setting governs whether the registry serves this node. Follow [impl.md — Registry validation](impl.md#registry-validation) for the recovery steps and the point at which to give up and use the [connector](../connector/planning.md); it is the single procedure for this error, so do not improvise a different one here.
|
|
26
25
|
|
|
27
26
|
## Writes require a native entity
|
|
28
27
|
|
|
@@ -45,19 +44,23 @@ Use these nodes when the record lives in **Data Fabric** and the flow itself is
|
|
|
45
44
|
| Advance a status, stamp a result, write back an outcome | Yes — Update (native entity) |
|
|
46
45
|
| Append a new row (case, audit entry, request) | Yes — Create (native entity) |
|
|
47
46
|
| Remove a row the flow has finished with | Yes — Delete (native entity) |
|
|
48
|
-
| Write to a federated entity | No —
|
|
47
|
+
| Write to a federated entity | No — and the connector is not a way round it; writing a federated entity is blocked. Write to the source system instead, via its own connector or [http](../http/planning.md) |
|
|
49
48
|
| React to a record being created/updated **elsewhere** | No — that is a trigger; use [connector-trigger](../connector-trigger/planning.md) (`uipath.connector.trigger.uipath-uipath-dataservice.record-created` / `record-updated`) |
|
|
50
49
|
| Aggregate, group, or reshape rows already in memory | No — use [Transform](../transform/planning.md) |
|
|
51
50
|
| Bulk-load a CSV into an entity | No — that is a data-loading job, not a flow step; use `uip df records import` out of band |
|
|
52
51
|
| Read a record from a non-UiPath system | No — use [connector](../connector/planning.md) or [http](../http/planning.md) |
|
|
53
52
|
|
|
54
|
-
### Native node vs Data Service connector —
|
|
53
|
+
### Native node vs Data Service connector — the operation decides
|
|
54
|
+
|
|
55
|
+
The `uipath-uipath-dataservice` Integration Service connector also exposes entity operations (`query-entity-records`, `create-entity-record`, `update-entity-record`, `get-entity-record-by-id`, `delete-entity-record`, …), and `registry search` surfaces both families. Route by the operation, in this order:
|
|
55
56
|
|
|
56
|
-
The
|
|
57
|
+
1. **The user named the connector.** Build the connector activity, provided it exists for that operation. An explicit instruction outranks the default — do not silently substitute the native node.
|
|
58
|
+
2. **Record CRUD (read / create / update / delete) → default to the native node.** Confirm it with one `registry get core.datafabric.<op>`; on `NodeGetSuccess` build native. On "Node not found", follow [impl.md — Registry validation](impl.md#registry-validation) and take the connector at the end of it.
|
|
59
|
+
3. **Any other entity operation → the connector.** Only those four operations have a native node. Attachments, file-field downloads, entity metadata and bulk operations do not, so the connector is the only path rather than a fallback.
|
|
57
60
|
|
|
58
|
-
**
|
|
61
|
+
A **federated** entity is not a routing question: writing one is blocked, so the connector is not an alternative path for it. See [Writes require a native entity](#writes-require-a-native-entity).
|
|
59
62
|
|
|
60
|
-
Where the
|
|
63
|
+
Where the native node applies and the probe succeeds, it is the better build, because it:
|
|
61
64
|
|
|
62
65
|
- needs **no Integration Service connection** — nothing to create, bind, or keep healthy, and no `bindings[]` connection row;
|
|
63
66
|
- is **user-owned** — author it with `Edit`/`Write` instead of the CLI's `node add` + `node configure` envelope (see [Author capability — Node ownership](../../CAPABILITY.md#node-ownership--who-authors-the-node));
|
|
@@ -19,7 +19,7 @@ Confirm:
|
|
|
19
19
|
- `outputDefinition.output.schema`: top-level `id` (string) and `content` (object|null), with `content.Text` (string) and `content.Citations` (array|null) containing `{ Ordinal: integer, PageNumber: integer, Source: string, Reference: string }`.
|
|
20
20
|
- `outputDefinition.error.schema.required`: `code`, `message`, `detail`, `category`, `status`.
|
|
21
21
|
|
|
22
|
-
If the command returns **"Node type not found: uipath.pattern.deep-rag"**, run `uip tools update` and `uip maestro flow registry pull --force`. If it still fails,
|
|
22
|
+
If the command returns **"Node type not found: uipath.pattern.deep-rag"**, run `uip tools update` and `uip maestro flow registry pull --force`. If it still fails, this CLI build does not carry the node — there is no tenant setting behind it and no admin to escalate to.
|
|
23
23
|
|
|
24
24
|
## Authoring and attachment wiring
|
|
25
25
|
|
|
@@ -170,7 +170,7 @@ The validator checks that required inputs (`attachment`, `prompt`) are present a
|
|
|
170
170
|
|
|
171
171
|
| Error | Cause | Fix |
|
|
172
172
|
| --- | --- | --- |
|
|
173
|
-
| `Node type not found: uipath.pattern.deep-rag` | CLI predates Summarize support
|
|
173
|
+
| `Node type not found: uipath.pattern.deep-rag` | This CLI build predates Summarize support | Run `uip tools update` and `uip maestro flow registry pull --force`; no tenant setting governs this, so there is no admin to escalate to |
|
|
174
174
|
| Runtime: synthesis returns empty `content.Text` | Prompt is vague, or attachment is unreadable, such as an image-only PDF with no OCR or a corrupted file | Tighten the prompt; confirm the attachment type is supported and has selectable text |
|
|
175
175
|
| `content.Citations` missing despite `returnCitations: true` | A downstream consumer read `inputDefaults` before runtime output existed | Reference `$vars.{nodeId}.output.content.Citations` only in nodes downstream of Summarize; do not precompute |
|
|
176
176
|
| Downstream `result.content.text` / `result.content.citations` is `undefined` | Lowercase field names were used | Use `result.content.Text` / `result.content.Citations` |
|
|
@@ -6,7 +6,7 @@ The Summarize node comprehensively synthesizes one attached document (PDF, Word,
|
|
|
6
6
|
|
|
7
7
|
`uipath.pattern.deep-rag`
|
|
8
8
|
|
|
9
|
-
The wire type remains `deep-rag` although the canvas name is "Summarize"; this is contractual with the runtime serializer. This fixed OOTB type has no registry suffix and one version.
|
|
9
|
+
The wire type remains `deep-rag` although the canvas name is "Summarize"; this is contractual with the runtime serializer. This fixed OOTB type has no registry suffix and one version. Whether it appears in `uip maestro flow registry list` is a property of the CLI build, not of the tenant: the CLI asks for a fixed set of OOTB node manifests, and the server only adds dynamic nodes on top — it never withholds an OOTB one. If the node is missing, upgrade the CLI.
|
|
10
10
|
|
|
11
11
|
## When to Use
|
|
12
12
|
|
|
@@ -268,6 +268,8 @@ uip maestro flow init <ProjectName> --output json
|
|
|
268
268
|
# uip solution projects add <SolutionName>/<ProjectName> <SolutionName>/<SolutionName>.uipx
|
|
269
269
|
```
|
|
270
270
|
|
|
271
|
+
> **Was the broken project a Maestro Automate one?** This recipe rebuilds it, so carry `--automate` on the `flow init` above. Check before deleting: a `.maestro_automate` file in the project root means it was. Rebuilding without the flag returns a plain Flow, and nothing downstream reports the change.
|
|
272
|
+
|
|
271
273
|
After running, verify the file exists at the double-nested path. The `cd <SolutionName>` above persists across Bash calls, so anchor the check with `$(pwd)` instead of repeating `<SolutionName>/`:
|
|
272
274
|
|
|
273
275
|
```bash
|
|
@@ -13,6 +13,8 @@ uip solution init "<SolutionName>" --output json
|
|
|
13
13
|
cd <directory>/<SolutionName> && uip maestro flow init <ProjectName> --output json
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
+
Add `--automate` to create a Maestro Automate project instead of a Flow. Nothing else changes — same scaffold, same authoring, same `pack` / `publish` / `debug` / `eval`; the flag writes `runtimeOptions.profile` into the packaged `operate.json` and a `.maestro_automate` marker into the project root.
|
|
17
|
+
|
|
16
18
|
Confirm `Data.SolutionRegistration.Status`: `Registered`, `AlreadyRegistered`, `OptedOut`, `Skipped`, `Failed`, or `NotInSolution`. Inside a solution, `flow init` auto-registers the project with the parent `.uipx`. Outside one, it creates `<ProjectName>Solution/<ProjectName>Solution.uipx`, nests the project, and adds `Data.AutoCreatedSolution`. `--skip-solution-registration` opts out with status `OptedOut`; do not manually wire an intentionally opted-out project. Manually wire `Skipped`, `Failed`, or the rare `NotInSolution`:
|
|
17
19
|
|
|
18
20
|
```bash
|
|
@@ -250,7 +252,9 @@ The cache expires after 30 minutes. `registry search` returns a flat `Data` arra
|
|
|
250
252
|
{ "Data": [{ "NodeType": "uipath.connector.uipath-salesforce-sfdc.list-records", "Category": "connector.196536", "DisplayName": "List Records", "Description": "(Salesforce) List records in Salesforce", "Version": "1.0.0", "Tags": "connector, activity", "AvailableOnTenant": true }] }
|
|
251
253
|
```
|
|
252
254
|
|
|
253
|
-
Treat `AvailableOnTenant` as a usability gate: `true` permits `registry get <NodeType>` or `node add <NodeType>`; `false` means the
|
|
255
|
+
Treat `AvailableOnTenant` as a usability gate: `true` permits `registry get <NodeType>` or `node add <NodeType>`; `false` means the type is missing from the manifest this CLI pulled. Despite the name it is not a tenant entitlement — the CLI asks for a fixed set of node manifests decided by its own build, so `false` usually means this CLI does not carry the node rather than that an administrator withheld it.
|
|
256
|
+
|
|
257
|
+
Do not use unsupported flags such as `--include-unavailable`, and do not loop on the upgrade: try `uip tools update` **once**, and if the type is still absent treat it as absent by design for this build — choose an available alternative, use `--local` for in-solution resources, or report it as unavailable. Around ten of the node families the manifest knows about are deliberately outside the set this CLI requests (`agent-memory`, `queue-operations`, `form-trigger`, `http-standalone`, `agent-tool-http-request`, `classify-document`, `do-while`, `hitl-document`, …), so no upgrade will ever surface them and each extra `tools update` + `registry pull` is wasted work.
|
|
254
258
|
|
|
255
259
|
`registry get` returns `Data.Node` verbatim for the `.flow` `definitions` array. Preserve its manifest casing, predominantly camelCase (`nodeType`, `inputDefinition`, `supportsErrorHandling`, `form`); filter with `--output-filter "Node.inputDefinition"`, not `Node.InputDefinition`.
|
|
256
260
|
|
package/version-manifest.json
CHANGED