@uipath/skills 1.198.0 → 1.198.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/package.json +1 -1
- package/skills/uipath-coded-apps/references/sdk/data-fabric.md +3 -1
- package/skills/uipath-platform/references/data-fabric/data-fabric.md +7 -1
- package/skills/uipath-platform/references/data-fabric/entity-schema.md +21 -2
- package/skills/uipath-platform/references/data-fabric/filter-platform-contract.md +2 -0
- package/skills/uipath-platform/references/data-fabric/records-query.md +12 -0
- 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.198.
|
|
12
|
+
"version": "1.198.1",
|
|
13
13
|
"author": {
|
|
14
14
|
"name": "UiPath"
|
|
15
15
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "uipath",
|
|
3
|
-
"version": "1.198.
|
|
3
|
+
"version": "1.198.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"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uipath/skills",
|
|
3
|
-
"version": "1.198.
|
|
3
|
+
"version": "1.198.1",
|
|
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"
|
|
@@ -19,6 +19,8 @@ Data Fabric does NOT behave like a typical RDBMS. These differences trip up agen
|
|
|
19
19
|
7. **Aggregates require server-side `aggregates` + `groupBy`.** Don't fetch raw rows and `.length` / `.reduce` client-side — every list call returns one page (see [pagination.md](pagination.md)) and you'll silently truncate. Use `{ aggregates: [{ function: EntityAggregateFunction.Count, field: 'Id' }] }` (string literal `'COUNT'` works equivalently).
|
|
20
20
|
8. **`field.fieldDataType` is an OBJECT, not a string.** It's `{ name: 'DECIMAL', lengthLimit?: ..., maxValue?: ..., ... }`. Code like `String(field.fieldDataType).toUpperCase()` produces `"[object Object]"` and silently rejects every field. Always read `field.fieldDataType?.name`. Same applies to `field.fieldDisplayType` — but that one IS a plain string enum (`'ChoiceSetSingle'`, `'File'`, etc.).
|
|
21
21
|
9. **File-type fields (`fieldDisplayType === 'File'`) aren't strings.** The record carries only metadata (`{ id, name, size, contentType }`); stringifying gives `"[object Object]"`. To display, call `entities.downloadAttachment(entityId, recordId, fieldName)` → `Blob` → `URL.createObjectURL` for an `<img src>`. **Neither `contentType` nor filename extension is reliable for detecting kind** — DF often returns `application/octet-stream`, and the stored `name` is frequently a bare UUID with no extension. To decide whether to render inline or fall back to a download link, either (a) sniff the blob's magic bytes after download (PNG starts `89 50 4E 47`, JPEG `FF D8 FF`, GIF `47 49 46 38`, PDF `25 50 44 46`, etc.), or (b) optimistically attempt `<img src={objectUrl}>` and swap to a download link in `onError`. Writes: `uploadAttachment(entityId, recordId, fieldName, file)`, not `insertRecordById` / `updateRecordById`.
|
|
22
|
+
10. **`MULTILINE_MAX` fields return a size marker on list/query reads.** `getAllRecords` / `queryRecordsById` return a string starting `HasValue=true Length=N` (live form: `"HasValue=true Length=20000 — call Get Entity Record By Id activity to retrieve content"`), never the content — only `getRecordById` returns the full value (SDK 1.5.2+, v2 read endpoint). Never render or persist the marker as data, and never echo it back through `updateRecordById` / `updateRecordsById` — the server accepts it as a normal value and silently destroys the real content; omit the key instead. The type accepts no filters or `sortOptions` (server 400: *"Field '<name>' is of type MULTILINE_MAX and cannot be used in filters."*). `lengthLimit` is a UTF-16 **byte** budget (max 131072 ≈ 65,536 chars).
|
|
23
|
+
|
|
22
24
|
## Scopes
|
|
23
25
|
|
|
24
26
|
- Schema reads: `DataFabric.Schema.Read`
|
|
@@ -67,7 +69,7 @@ import type {
|
|
|
67
69
|
|
|
68
70
|
```typescript
|
|
69
71
|
import {
|
|
70
|
-
EntityFieldDataType, // UUID, STRING, INTEGER, DATETIME, DATETIME_WITH_TZ, DECIMAL, FLOAT, DOUBLE, DATE, BOOLEAN, BIG_INTEGER, MULTILINE_TEXT
|
|
72
|
+
EntityFieldDataType, // UUID, STRING, INTEGER, DATETIME, DATETIME_WITH_TZ, DECIMAL, FLOAT, DOUBLE, DATE, BOOLEAN, BIG_INTEGER, MULTILINE_TEXT, MULTILINE_MAX (SDK 1.5.2+)
|
|
71
73
|
EntityType, // Entity, ChoiceSet, InternalEntity, SystemEntity
|
|
72
74
|
FieldDisplayType, // Basic, Relationship, File, ChoiceSetSingle, ChoiceSetMultiple, AutoNumber
|
|
73
75
|
LogicalOperator, // And, Or
|
|
@@ -161,6 +161,8 @@ Respond that the operation is not supported. Do not try to work around it.
|
|
|
161
161
|
|
|
162
162
|
20. **`records import` does not support complex field types — surface this to the user before invoking.** `records import` accepts Basic types only — `CHOICE_SET_SINGLE`, `CHOICE_SET_MULTIPLE`, `RELATIONSHIP`, `FILE`, and `AUTO_NUMBER` are **not supported**. The CSV header is accepted but the column values are ignored (no error, no `ErrorFileLink` entry — `null` in every row, or row failure if the field is `isRequired` without a `defaultValue`). Sequence: (1) run `entities get <entity-id>` and list every field whose type is in the unsupported set above; (2) tell the user verbatim which columns are not supported by import and why; (3) offer the alternative — `records insert --file <json>` with a JSON-array body handles all types except `FILE` (use `files upload` for those — Rule 6). See [`records-query.md` → Writing choice-set and relationship values](records-query.md#writing-choice-set-and-relationship-values) for the value form; (4) only invoke `records import` after the user confirms they accept the unsupported columns being skipped OR want to switch to `records insert`. This is platform behavior, not a bug — do not attempt to work around it.
|
|
163
163
|
|
|
164
|
+
21. **`MULTILINE_MAX` fields — marker reads, no filter/sort.** `records list` / `records query` return a size marker starting `HasValue=true Length=N` (live form: `"HasValue=true Length=20000 — call Get Entity Record By Id activity to retrieve content"`) for `MULTILINE_MAX` fields, never the content — full value only via `records get <entity-id> <record-id>`. Never display or persist the marker as data; never echo it back through `records update` — the server accepts it as a normal value and silently destroys the real content; omit the key instead. The type takes no filter or sort — 400: *"Field '<name>' is of type MULTILINE_MAX and cannot be used in filters."* / *"Sort field '<name>' … cannot be used for sorting."*; surface verbatim (Rule 18). Capacity: `lengthLimit` is a UTF-16 **byte** budget (max 131072 ≈ 65,536 chars). A 400 on `entities create` / `addFields` naming this type: surface it verbatim, don't retry or silently substitute `MULTILINE_TEXT` (Rule 18). Full contract: [`entity-schema.md` → MULTILINE_MAX fields](entity-schema.md#multiline_max-fields) + [`records-query.md`](records-query.md#multiline_max-fields--marker-vs-full-content).
|
|
165
|
+
|
|
164
166
|
---
|
|
165
167
|
|
|
166
168
|
## Tool Version Requirements
|
|
@@ -169,7 +171,8 @@ Respond that the operation is not supported. Do not try to work around it.
|
|
|
169
171
|
|---------|--------------------------------------|
|
|
170
172
|
| `entities` / `records` CRUD, `query` with filters/sort, `records import`, `files` | `0.9.0+` |
|
|
171
173
|
| Server-side `aggregates` and `groupBy` on `records query` | `1.0.1+` |
|
|
172
|
-
| `--folder-key` threaded through every entity/record/file/choice-set command + `--include-folders` on `entities list` / `choice-sets list` | `1.197.0+` (
|
|
174
|
+
| `--folder-key` threaded through every entity/record/file/choice-set command + `--include-folders` on `entities list` / `choice-sets list` | `1.197.0+` (now on `latest`) |
|
|
175
|
+
| `MULTILINE_MAX` field type (schema create + full-content `records get`) | `1.198.0+` (first version bundling SDK `1.5.2`). Not yet on `latest` (still `1.197.0`, whose bundle predates the type) — until promoted, install the preview: `uip tools install @uipath/data-fabric-tool@1.198.0-preview.80` |
|
|
173
176
|
|
|
174
177
|
Upgrade with `uip tools install @uipath/data-fabric-tool@latest` when a feature appears to silently no-op (e.g. aggregate body keys returning raw record lists).
|
|
175
178
|
|
|
@@ -339,6 +342,9 @@ Pass the query body via `--body` or `--file`; pagination uses `--limit` / `--cur
|
|
|
339
342
|
| `unknown option '--folder-key'` or `unknown option '--include-folders'` | Installed `@uipath/data-fabric-tool` predates `1.197.0` (folder-key fan-out) | Upgrade: `uip tools install @uipath/data-fabric-tool@alpha` until `1.197.0+` is promoted to `latest`. See *Tool Version Requirements* |
|
|
340
343
|
| `--folder-key and --include-folders are mutually exclusive` | Both flags passed on `entities list` / `choice-sets list` | Pick one: `--folder-key <key>` for a single folder, OR `--include-folders` for tenant + every folder you can see |
|
|
341
344
|
| Entity / choice set just created via `--folder-key <X>` doesn't appear in `entities list` / `choice-sets list` | Lists default to tenant-only | Re-run with `--folder-key <X>` (same key) or `--include-folders` |
|
|
345
|
+
| `MULTILINE_MAX` field shows `HasValue=true Length=N — call Get Entity Record By Id …` in `records list` / `query` | Expected — list/query return a size marker, not content (Rule 21) | Full value via `records get <entity-id> <record-id>`. Never persist or write back the marker |
|
|
346
|
+
| *"Field '<name>' is of type MULTILINE_MAX and cannot be used in filters."* / *"Sort field '<name>' … cannot be used for sorting."* (400) | Type supports no filter/sort operators (Rule 21) | Surface verbatim; offer `records get` + client-side evaluation only with user approval |
|
|
347
|
+
| Insert rejected: *"value … is N bytes, exceeds the 131072-byte limit configured for this MULTILINE_MAX field"* | `lengthLimit` is a UTF-16 **byte** budget — 2 bytes per char, so 131072 ⇒ ~65,536 chars max | Surface the limit; ask the user whether to truncate or store elsewhere — never silently clamp (Rule 18) |
|
|
342
348
|
|
|
343
349
|
---
|
|
344
350
|
|
|
@@ -32,6 +32,7 @@ Pass the exact `EntityFieldDataType` UPPERCASE string — CLI is case-sensitive.
|
|
|
32
32
|
|---|---|---|
|
|
33
33
|
| `STRING` | NVARCHAR | Short text (≤4000 chars via `lengthLimit`) |
|
|
34
34
|
| `MULTILINE_TEXT` | NVARCHAR(MAX) | Long text (≤10000 chars via `lengthLimit`) |
|
|
35
|
+
| `MULTILINE_MAX` | NVARCHAR(MAX) | Very large text (`lengthLimit` = UTF-16 byte budget, 1–131072; default 128 KB ≈ 65,536 chars max). No filter/sort; list/query reads return a size marker — see [MULTILINE_MAX fields](#multiline_max-fields) |
|
|
35
36
|
| `DECIMAL` | DECIMAL | All numbers — `decimalPrecision: 0` for whole; `2` for money |
|
|
36
37
|
| `BOOLEAN` | BIT | true/false |
|
|
37
38
|
| `DATE` | DATE | Date only |
|
|
@@ -62,7 +63,7 @@ CLI needs UPPERCASE enum. Users write mixed-case + synonyms. Two paths:
|
|
|
62
63
|
|
|
63
64
|
| User phrasing | Ask |
|
|
64
65
|
|---|---|
|
|
65
|
-
| `text` / `long text` / `paragraph` | `STRING` vs `MULTILINE_TEXT` — expected length? |
|
|
66
|
+
| `text` / `long text` / `paragraph` / `document body` | `STRING` (≤4000) vs `MULTILINE_TEXT` (≤10000) vs `MULTILINE_MAX` (up to ≈65,536 chars, but no filter/sort — see [MULTILINE_MAX fields](#multiline_max-fields)) — expected length? |
|
|
66
67
|
| `number` / `int` / `integer` / `float` / `double` | `DECIMAL` — how many decimal places? (`0` for whole, `2` for money) |
|
|
67
68
|
| `money` / `price` / `amount` | Default `DECIMAL` with `decimalPrecision: 2`; confirm |
|
|
68
69
|
| `timestamp` / `datetime` | Default `DATETIME_WITH_TZ`; confirm |
|
|
@@ -74,6 +75,24 @@ CLI needs UPPERCASE enum. Users write mixed-case + synonyms. Two paths:
|
|
|
74
75
|
|
|
75
76
|
If the CLI rejects a `--body` with *"Cannot read properties of undefined (reading 'sqlTypeName')"*, the `type` value didn't match a known enum — almost always a casing issue. Re-emit with the exact UPPERCASE value from the table above.
|
|
76
77
|
|
|
78
|
+
### MULTILINE_MAX fields
|
|
79
|
+
|
|
80
|
+
Very large text. Contract differs from `MULTILINE_TEXT`:
|
|
81
|
+
|
|
82
|
+
1. **Not filterable, not sortable.** Any `queryFilters` or `sortOptions` entry naming a `MULTILINE_MAX` field → 400: *"Field '<name>' is of type MULTILINE_MAX and cannot be used in filters."* / *"Sort field '<name>' is of type MULTILINE_MAX and cannot be used for sorting."* Never offer the field in filter/sort predicates. See [filter contract](filter-platform-contract.md#operator-support-by-field-type).
|
|
83
|
+
2. **List/query reads return a size marker, not content.** `records list` / `records query` return a string starting `HasValue=true Length=N` (live form: `"HasValue=true Length=20000 — call Get Entity Record By Id activity to retrieve content"`); only `records get <entity-id> <record-id>` returns the full value. Read + write-back rules in [records-query.md → MULTILINE_MAX fields](records-query.md#multiline_max-fields--marker-vs-full-content).
|
|
84
|
+
3. **On a 400 from `entities create` / `addFields` naming the type**, surface the error verbatim — do NOT retry or silently substitute `MULTILINE_TEXT` (Rule 18).
|
|
85
|
+
|
|
86
|
+
Needs `@uipath/data-fabric-tool` `1.198.0+` (see data-fabric.md → Tool Version Requirements).
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
uip df entities create "Documents" \
|
|
90
|
+
--body '{"fields":[{"fieldName":"Title","type":"STRING","isRequired":true},{"fieldName":"Body","type":"MULTILINE_MAX"}]}' \
|
|
91
|
+
--output json
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
`lengthLimit` optional: UTF-16 **byte** budget, 1–131072; omitted → 131072 (platform max ≈ 65,536 chars — verified: 65,536-char insert succeeds, 65,537 rejected with *"value … is 131074 bytes, exceeds the 131072-byte limit"*).
|
|
95
|
+
|
|
77
96
|
## Field Definition Object
|
|
78
97
|
|
|
79
98
|
### Name Validation
|
|
@@ -122,7 +141,7 @@ Accepted on `entities create` and on `addFields` / `updateFields` in `entities u
|
|
|
122
141
|
|
|
123
142
|
| Constraint | Allowed type | Range |
|
|
124
143
|
|------------|--------------|-------|
|
|
125
|
-
| `lengthLimit` | `STRING` (1–4000), `MULTILINE_TEXT` (1–10000) | — |
|
|
144
|
+
| `lengthLimit` | `STRING` (1–4000), `MULTILINE_TEXT` (1–10000), `MULTILINE_MAX` (1–131072 — UTF-16 **bytes**, ≈ 2 per char: 131072 ⇒ 65,536 chars max) | — |
|
|
126
145
|
| `maxValue` / `minValue` | `DECIMAL` | ±9,007,199,254,740,991 |
|
|
127
146
|
| `decimalPrecision` | `DECIMAL` — `0` whole, `2` money | 0–10 |
|
|
128
147
|
|
|
@@ -50,6 +50,8 @@ Build only within this matrix (✅ supported). The API *runs* some ❌ cells any
|
|
|
50
50
|
|
|
51
51
|
Complex-field values: **Choice Set** — the integer `NumberId` (multi: `=` takes a sorted JSON-array string `"[1,3]"`, `contains` takes a bare id `"3"`). **Relationship** — the target record's UUID `Id`.
|
|
52
52
|
|
|
53
|
+
**`MULTILINE_MAX` is outside the matrix entirely** — the Text / Multiline column does NOT cover it. No operator is supported (including is-empty), and no `sortOptions`: server rejects with 400 — *"Field '<name>' is of type MULTILINE_MAX and cannot be used in filters."* / *"Sort field '<name>' is of type MULTILINE_MAX and cannot be used for sorting."* Don't offer the field in filter/sort; if the user asks, surface the limitation and (only with their approval) fetch full values via `records get` and evaluate client-side.
|
|
54
|
+
|
|
53
55
|
## Unsupported operator, or missing value
|
|
54
56
|
|
|
55
57
|
If a request needs an out-of-matrix operator/type combo (or an operator outside the list above — `BETWEEN`, regex, `like`), or an operator other than is-empty/not-empty has no value, **don't silently run it**. Ask the user to either **(a)** run the query without that filter, or **(b)** supply a supported one — then apply only their choice, never a default. Compositions often help: `BETWEEN x AND y` → `>=` + `<=` in one `queryFilters` (`logicalOperator: 0`); regex → `contains` / `startswith` / `endswith`.
|
|
@@ -16,6 +16,18 @@ Response wrapper: `{ Result, Code: "RecordList" | "RecordQuery", Data: { Items,
|
|
|
16
16
|
- **`Data.NextCursor` is an object `{ "Value": "<base64-string>" }`, not a flat string.** Pass `Data.NextCursor.Value` to `--cursor` on the next call (unwrap one level). Passing the whole `NextCursor` object errors out.
|
|
17
17
|
- Use `Data.HasNextPage` to check if more records exist. Stop when it's `false`.
|
|
18
18
|
|
|
19
|
+
## MULTILINE_MAX Fields — Marker vs Full Content
|
|
20
|
+
|
|
21
|
+
`records list` and `records query` do NOT return `MULTILINE_MAX` content. Each such field comes back as a size marker string starting `HasValue=true Length=N` — live form: `"HasValue=true Length=20000 — call Get Entity Record By Id activity to retrieve content"`. Only single-record read returns the full content:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
uip df records get <entity-id> <record-id> --output json
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
1. **Never treat the marker as the value.** Don't display, compare, or persist `"HasValue=true Length=N"` as field content — fetch via `records get` first.
|
|
28
|
+
2. **Never write the marker back.** A `records update` body built by echoing a record from `list` / `query` overwrites the real content with the literal marker string — verified: the server accepts it as a normal value, `Result: Success`, content silently destroyed. Omit `MULTILINE_MAX` keys from update bodies unless intentionally replacing the content.
|
|
29
|
+
3. **No filter, no sort.** `queryFilters` / `sortOptions` naming a `MULTILINE_MAX` field → 400: *"Field '<name>' is of type MULTILINE_MAX and cannot be used in filters."* / *"Sort field '<name>' is of type MULTILINE_MAX and cannot be used for sorting."* Surface verbatim (data-fabric.md Rule 18); don't retry with other operators. Full type contract: [entity-schema.md → MULTILINE_MAX fields](entity-schema.md#multiline_max-fields).
|
|
30
|
+
|
|
19
31
|
## Pagination
|
|
20
32
|
|
|
21
33
|
Offset-based under the hood. Available on both `records list` and `records query`:
|
package/version-manifest.json
CHANGED