@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
|
@@ -10,7 +10,7 @@ Triggers are event-based activities that fire when something happens in an exter
|
|
|
10
10
|
- [Trigger Discovery Flow](#trigger-discovery-flow)
|
|
11
11
|
- [List Trigger Activities](#list-trigger-activities)
|
|
12
12
|
- [Trigger Objects](#trigger-objects)
|
|
13
|
-
- [`parameters[]` —
|
|
13
|
+
- [`parameters[]` — event-parameter input fields](#parameters--event-parameter-input-fields)
|
|
14
14
|
- [Object Name Resolution](#object-name-resolution)
|
|
15
15
|
- [Trigger Metadata (Describe)](#trigger-metadata-describe)
|
|
16
16
|
- [CRUD vs Non-CRUD Triggers](#crud-vs-non-crud-triggers)
|
|
@@ -31,7 +31,7 @@ Triggers are event-based activities that fire when something happens in an exter
|
|
|
31
31
|
|
|
32
32
|
**Decision point at step 2**: CREATED, UPDATED, and DELETED operations require an intermediate "objects" step. For other trigger operations, skip to step 3 using the activity's **ObjectName**.
|
|
33
33
|
|
|
34
|
-
> **Source of truth
|
|
34
|
+
> **Source of truth — UNION of both calls.** Event-parameter inputs = `triggers objects → parameters[]` **∪** `triggers describe → EventParameters`. A required field can appear in `describe → EventParameters` while absent from `parameters[]`, so configure every field either source marks `required` — never read inputs from one call alone. `triggers describe` also supplies `FilterFields` (filter tree) and `OutputFields` (downstream `$vars`). Run **both** calls; do not invent parameters or fields, and do not substitute metadata from other commands.
|
|
35
35
|
|
|
36
36
|
---
|
|
37
37
|
|
|
@@ -124,11 +124,11 @@ Array of objects — each has a **name** to use in the describe command. Also in
|
|
|
124
124
|
| `byoaConnection` | `true` if this event requires a BYOA connection |
|
|
125
125
|
| `isWebhookUrlVisible` | `true` if the webhook URL should be shown to the user |
|
|
126
126
|
| `eventMode` | `"webhooks"` or `"polling"` — how the trigger receives events |
|
|
127
|
-
| **`parameters[]`** |
|
|
127
|
+
| **`parameters[]`** | Object/query/path-scoped input fields for this trigger — see below. **Merge with `triggers describe → EventParameters`** for the complete set. |
|
|
128
128
|
|
|
129
|
-
#### `parameters[]` —
|
|
129
|
+
#### `parameters[]` — event-parameter input fields
|
|
130
130
|
|
|
131
|
-
One entry per configure-time input field (repo,
|
|
131
|
+
One entry per configure-time input field (repo, channel, shared mailbox). **Not complete on its own** — `triggers objects → parameters[]` carries object/query/path-scoped inputs, while event-config inputs come from `triggers describe → EventParameters`. The full input set is the **union**; a field is required if either source marks it `required`. Never read inputs from `parameters[]` alone.
|
|
132
132
|
|
|
133
133
|
| Field | Description |
|
|
134
134
|
|---|---|
|
|
@@ -143,17 +143,18 @@ One entry per configure-time input field (repo, mailbox folder, channel). Canoni
|
|
|
143
143
|
|
|
144
144
|
### Trigger Metadata (from `triggers describe`)
|
|
145
145
|
|
|
146
|
-
Object with field definitions. Structure varies by connector but typically
|
|
147
|
-
|
|
148
|
-
Additional fields:
|
|
146
|
+
Object with field definitions. Structure varies by connector but typically returns three arrays plus mode flags:
|
|
149
147
|
|
|
150
148
|
| Field | Description |
|
|
151
149
|
|---|---|
|
|
150
|
+
| `EventParameters` | Event-config input fields. **First-class event parameters** — merge with `triggers objects → parameters[]`; configure every entry marked `required`. Resolve `reference` fields via `uip is resources run list` before configure. |
|
|
151
|
+
| `FilterFields` | Fields usable in the optional `filter` tree |
|
|
152
|
+
| `OutputFields` | Event payload schema — field names for downstream `$vars.{triggerId}.output.*` |
|
|
152
153
|
| `eventMode` | `"webhooks"` or `"polling"` |
|
|
153
154
|
| `byoaConnection` | `true` if this trigger requires a BYOA connection |
|
|
154
155
|
| `isWebhookUrlVisible` | `true` if the webhook URL should be shown |
|
|
155
156
|
|
|
156
|
-
> **`
|
|
157
|
+
> **`triggers describe → EventParameters` is NOT "output-only" metadata.** It carries required *input* parameters that `triggers objects → parameters[]` frequently omits. Always merge both responses and configure the union — see the Source-of-truth note above. `flow registry get`'s `eventParameters.fields` mirrors `describe` and is the offline fallback.
|
|
157
158
|
|
|
158
159
|
---
|
|
159
160
|
|
|
@@ -100,6 +100,8 @@ The `--all` flag enables filtering options (`--type`, `--name`, `--path`, `--top
|
|
|
100
100
|
|
|
101
101
|
Roles group permissions and are scoped to either the tenant or a folder. Create the role first (it starts with zero permissions), then add permissions to it.
|
|
102
102
|
|
|
103
|
+
> **⚠️ `uip or roles` is the Orchestrator RBAC catalog — a different store from Identity/organization authorization roles (`uip admin authorization roles`, see [uipath-admin](/uipath:uipath-admin)). The two are disjoint: a role created with `admin authorization roles` does NOT appear in `uip or roles list`, and vice versa.** Both have Tenant-scoped roles, so "a tenant-level role" alone doesn't tell you which one. For any Orchestrator role/permission lifecycle — create, add/remove permissions, assign to users/folders — use `uip or roles`. Reach for `admin authorization roles` only for org-level Identity roles that span services.
|
|
104
|
+
|
|
103
105
|
```bash
|
|
104
106
|
# Create a folder-scoped role
|
|
105
107
|
uip or roles create --name "FinanceOperator" --type Folder --output json
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: uipath-review
|
|
3
3
|
description: "UiPath read-only reviewer — audit structure, quality, best practices for RPA (.xaml/.cs), agents (.py/agent.json), flows (.flow), BPMN (.bpmn), coded apps, solutions (.uipx). Does NOT edit files. For building/editing→domain skills."
|
|
4
|
-
allowed-tools: Bash, Read, Glob, Grep, AskUserQuestion
|
|
4
|
+
allowed-tools: Bash, Read, Glob, Grep, WebFetch, AskUserQuestion
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -28,7 +28,7 @@ Review UiPath solutions and individual artifacts for structural validity, qualit
|
|
|
28
28
|
6. **Use `--output json`** on all CLI validation commands for programmatic parsing.
|
|
29
29
|
7. **Do not duplicate what validation commands catch.** Reference the validation output by rule ID and message — do not manually re-describe the same issue. But DO include every validation result (Error, Warning, Info) in the report.
|
|
30
30
|
8. **Cap the review at 30 minutes of analysis.** For very large solutions (10+ projects), provide a summary review with deep dives on the 3 highest-risk projects. Offer to review remaining projects if the user wants.
|
|
31
|
-
9. **Run the review CLI first, then apply the judgment catalog, for every agent encountered.** First run `uip agent review` (low-code) or `uip codedagent review` (coded) with `--output json` — it returns the deterministic findings (Step 2.5a). Then load the judgment catalog: `references/agents/agents-common-rules.md` plus the format-specific file (`agents-lowcode-rules.md` or `agents-coded-rules.md`); for the agent-builder coded layout (both `agent.json` and `main.py`), load all three and run both CLI commands. Future phases add catalogs for RPA, flows, coded apps.
|
|
31
|
+
9. **Run the review CLI first, then apply the judgment catalog, for every agent encountered.** First run `uip agent review` (low-code) or `uip codedagent review` (coded) with `--output json` — it returns the deterministic findings (Step 2.5a). Then load the judgment catalog: `references/agents/agents-common-rules.md` plus the format-specific file (`agents-lowcode-rules.md` or `agents-coded-rules.md`); for the agent-builder coded layout (both `agent.json` and `main.py`), load all three and run both CLI commands. Future phases add catalogs for RPA, flows, coded apps. This holds even when the skill loads mid-task: if review work already started before this skill loaded (e.g., a generic code-review pass produced findings), Step 2.5a and the guardrail Step 0 catalog fetch are still mandatory — run them, then merge the earlier findings into this skill's report format. Prior review output is never a substitute for the review CLI or the live catalog.
|
|
32
32
|
10. **Rule findings are authoritative as emitted.** Carry review-CLI findings (`Data.Issues[]`) into the report verbatim — `RuleId`, `Severity`, `Description`, `File`, `SuggestedFix` unchanged. For the judgment catalog, use its `rule_id`, `severity`, `trigger`, and `suggested_fix` verbatim. Map severity to the report's bands: `error` → Critical, `warning` → Warning, `info` → Info. `judgment` severity rows default to Warning; the agent may escalate or de-escalate with reasoning logged in the finding's `description`. Do not re-rank otherwise.
|
|
33
33
|
11. **Report rules that could not be applied** (missing tooling, missing file, review CLI unavailable, `status: deferred`) in a dedicated "Rules Skipped" subsection of the report — never silently skip.
|
|
34
34
|
12. **Never invent `rule_id` values.** Every `rule_id` cited in the report MUST appear verbatim in EITHER a loaded judgment-catalog file (`references/agents/agents-*-rules.md`) OR the `uip agent review` / `uip codedagent review` JSON output. `rule_id` is a stable contract identifier — consumers grep for it, dashboards aggregate by it, audits trace it. An invented identifier looks authoritative but cannot be looked up, doesn't aggregate, and produces a different name for the same observation on the next run. If you observe a real issue covered by neither source, the finding is still valid — report it as a normal Critical / Warning / Info finding **without** a `rule_id` (no `` `RULE_ID` `` backtick token in the line). **Before emitting the report, scan every cited `rule_id` and confirm it appears verbatim in a loaded catalog file or the review-CLI output; demote any that don't to `rule_id`-less findings.**
|
|
@@ -243,6 +243,8 @@ For the review report, create a validation summary:
|
|
|
243
243
|
|
|
244
244
|
After Step 2 validation and before manual checklist review, produce rule-ID-level findings in two passes: **first** the `uip agent review` / `uip codedagent review` CLI for the deterministic static checks, **then** the skill's judgment-only catalog for what code cannot decide reliably.
|
|
245
245
|
|
|
246
|
+
> **Late invocation:** if a review was already performed or started before this skill loaded, do NOT skip 2.5a/2.5b as "already covered" — no other review flow runs the review CLI or fetches the live guardrail catalog. Run both passes, then fold prior findings into Step 5's report.
|
|
247
|
+
|
|
246
248
|
#### 2.5a — Run the review CLI first (deterministic findings)
|
|
247
249
|
|
|
248
250
|
Run the review command for the agent type, once, capturing JSON:
|
|
@@ -272,7 +274,10 @@ The CLI runs every deterministic static check — structural/schema, placeholder
|
|
|
272
274
|
| `.uipath/` or `app.config.json` | Coded App | *(phase 2)* |
|
|
273
275
|
|
|
274
276
|
2. **Read each catalog file in full.** Every rule is judgment-form.
|
|
275
|
-
3. **Guardrails
|
|
277
|
+
3. **Guardrails — apply the structured guardrail workflow** (project-type specific; Step 0 fetches the authored `uip agent guardrails catalog` — 30-min cache — plus the never-cached tenant-availability `uip agent guardrails list` → **Audit Mode** for existing guardrails + **Recommend Mode** for missing ones):
|
|
278
|
+
- **Low-code** (`agent.json`): when `guardrails[]` is non-empty or the agent matches a guardrail use case, apply [`references/agents/guardrails/guardrails-review.md`](references/agents/guardrails/guardrails-review.md). Emits `LC_GUARDRAIL_ACTION_INEFFECTIVE` / `LC_GUARDRAIL_MISAPPLIED` (defects, `judgment` band) and `LC_GUARDRAIL_RECOMMENDED` (Info, one per missing guardrail).
|
|
279
|
+
- **Coded** (SDK middleware / `@guardrail` decorators wired in the entry `.py`): when the entry source wires guardrails or the agent matches a use case, apply [`references/agents/guardrails/coded-guardrails-review.md`](references/agents/guardrails/coded-guardrails-review.md) (its Step 0 also fetches the public Python SDK docs that map a `validator_id` to its Python class/scope/enums). Emits `CODED_GUARDRAIL_ACTION_INEFFECTIVE` / `CODED_GUARDRAIL_MISAPPLIED` (defects, `judgment` band) and `CODED_GUARDRAIL_RECOMMENDED` (Info). The CLI's deterministic `CODED_GUARDRAIL_WRONG_IMPORT` / `CODED_GUARDRAIL_TOOL_SCOPE_NO_TOOLS` / `CODED_GUARDRAIL_INVALID_CONTRACT` (Step 2.5a) are carried verbatim and **not** re-flagged here.
|
|
280
|
+
- Either way, if the guardrail catalog is unavailable, record the Audit-Mode rules under "Rules Skipped" and keep Recommend Mode's source-only detection.
|
|
276
281
|
4. **Apply each rule's `detection_method`:** read the named source material (system prompt, tool descriptions, eval datapoints, schemas) and reason about it. Emit a finding when the criteria hold; log the reasoning in the finding's `description`.
|
|
277
282
|
5. **Track skipped rules** with their reason (`status: deferred`, missing optional file, review CLI unavailable). Never silently skip.
|
|
278
283
|
6. **Verify rule_id provenance.** Before merging, confirm each cited `rule_id` appears **verbatim** in EITHER a loaded catalog file OR the `uip agent review` / `uip codedagent review` JSON output. Any finding whose `rule_id` matches neither is **demoted** to a `rule_id`-less Critical / Warning / Info finding (the observation stays; the false citation goes). This enforces Critical Rule 12.
|
|
@@ -550,7 +555,6 @@ Output a structured report in chat (do NOT create a file):
|
|
|
550
555
|
|
|
551
556
|
**Rules Skipped (and why):**
|
|
552
557
|
- `uip codedagent review` — CLI not available in environment (deterministic checks not run)
|
|
553
|
-
- `LC_GUARDRAIL_EVALS_CONSISTENCY` — no eval set present to assess against
|
|
554
558
|
|
|
555
559
|
> The Rule Findings section is required for every agent project (low-code or coded). It is omitted for project types whose catalog has not yet been authored (RPA, flows, coded apps as of phase 1).
|
|
556
560
|
|
|
@@ -99,31 +99,10 @@ Before reviewing implementation details, verify the right agent type was chosen:
|
|
|
99
99
|
|---|---|---|
|
|
100
100
|
| Recommended guardrails present for the agent's use cases — e.g. PII detection when it handles personal data, injection protection for free-text input, content-safety for generated content, a tool audit-log for sensitive tools | Info | Compare agent context vs catalog use cases; the finding names the recommended scope and action (a blocking/escalating action for protection, a log action for audit) *(rule: `LC_GUARDRAIL_RECOMMENDED`)* |
|
|
101
101
|
| No guardrail misapplied to an agent that shouldn't have it (e.g. PII on a generate-only agent) | Warning | Compare guardrail vs agent purpose / catalog `when_not_to_use` *(rule: `LC_GUARDRAIL_MISAPPLIED`)* |
|
|
102
|
-
| Each guardrail has `name` and `description` | Warning | Walk guardrails *(rule: `GUARDRAIL_NO_NAME`, `GUARDRAIL_NO_DESCRIPTION`)* |
|
|
103
|
-
| Tool resources have `guardrail.policies` array (Studio Web rejects without it) | Critical | Walk tool resources *(rule: `LOWCODE_TOOL_GUARDRAIL_FIELD_MISSING`)* |
|
|
104
|
-
| Tool-scoped guardrails reference existing tools | Critical | Walk Tool-scope guardrails *(rule: `LOWCODE_GUARDRAIL_TOOL_REF_NONEXISTENT`, `GUARDRAIL_TOOL_SCOPE_NO_MATCHNAMES`)* |
|
|
105
102
|
| Custom tool guardrails for destructive operations | Info | Check tool guardrail rules |
|
|
106
103
|
| Guardrail action fits its scope — a blocking/escalating action at scopes meant to prevent a violation (Agent, Llm), a log action only for an audit trail (e.g. on a tool that legitimately needs the data). A log action at a prevention scope (Agent or Llm) is ineffective: it records the violation but does not stop it. | Warning | Review action vs scope vs catalog `when_not_to_use` *(rule: `LC_GUARDRAIL_ACTION_INEFFECTIVE`)* |
|
|
107
104
|
|
|
108
|
-
**Guardrail format
|
|
109
|
-
|
|
110
|
-
| Check | Severity | How to Verify |
|
|
111
|
-
|---|---|---|
|
|
112
|
-
| `validatorType` is a real validator in the catalog | Critical | *(rule: `GUARDRAIL_UNKNOWN_VALIDATOR`)* |
|
|
113
|
-
| Scope is one the validator allows | Critical | *(rule: `GUARDRAIL_SCOPE_NOT_ALLOWED`)* |
|
|
114
|
-
| Required `validatorParameters` are present | Critical | *(rule: `GUARDRAIL_MISSING_REQUIRED_PARAM`)* |
|
|
115
|
-
| No unknown parameters (incl. params on a validator that takes none) | Warning | *(rule: `GUARDRAIL_UNKNOWN_PARAM`)* |
|
|
116
|
-
| Parameter `$parameterType` matches the validator's type | Critical | *(rule: `GUARDRAIL_PARAM_TYPE_MISMATCH`)* |
|
|
117
|
-
| Parameter values are legal (enum options / map keys / number range) | Critical | *(rule: `GUARDRAIL_PARAM_VALUE_INVALID`)* |
|
|
118
|
-
|
|
119
|
-
**Guardrail format (custom guardrails).** Pure static — validated against the fixed custom-rule schema, no catalog needed.
|
|
120
|
-
|
|
121
|
-
| Check | Severity | How to Verify |
|
|
122
|
-
|---|---|---|
|
|
123
|
-
| Discriminators present (`$ruleType`, `$selectorType`, `$actionType`) | Critical | *(rule: `GUARDRAIL_CUSTOM_BAD_DISCRIMINATOR`)* |
|
|
124
|
-
| Operator valid for the rule type | Critical | *(rule: `GUARDRAIL_CUSTOM_BAD_OPERATOR`)* |
|
|
125
|
-
| Value type matches the rule type | Critical | *(rule: `GUARDRAIL_CUSTOM_BAD_VALUE`)* |
|
|
126
|
-
| `Tool` scope only, with exactly one tool in `matchNames` | Critical | *(rule: `GUARDRAIL_CUSTOM_SCOPE_INVALID`)* |
|
|
105
|
+
> **Guardrail format — CLI-owned (Step 2.5a), never eyeballed.** All format / schema / set-membership checks run in `uip agent review` and are carried verbatim from its output: `GUARDRAIL_*` (validator existence, allowed scope, parameter presence / type / value, name/description), `GUARDRAIL_CUSTOM_*` (discriminators, operator, value, Tool-scope + single `matchNames`), `LOWCODE_*GUARDRAIL*` (`guardrail.policies` field, tool-ref existence). Do not re-verify by eye (SKILL.md Step 2.5a). Built-in-validator checks are skipped (not failed) when the CLI can't fetch the authored validator catalog (offline / not authed) — record in "Rules Skipped"; custom-rule checks are pure static, no catalog needed.
|
|
127
106
|
|
|
128
107
|
### Memory Management
|
|
129
108
|
|
|
@@ -92,16 +92,33 @@ LLM-judge-only is acceptable when the agent has no tools, no classification outp
|
|
|
92
92
|
|
|
93
93
|
## GuardrailsChecker
|
|
94
94
|
|
|
95
|
-
> **Agent-builder coded layout** (`agent.json` + `main.py`):
|
|
96
|
-
> (`
|
|
97
|
-
>
|
|
98
|
-
>
|
|
99
|
-
|
|
100
|
-
>
|
|
95
|
+
> **Agent-builder coded layout** (`agent.json` + `main.py`): `agent.json`'s `guardrails[]` are reviewed by the
|
|
96
|
+
> low-code semantic rules (`LC_GUARDRAIL_*`) via the low-code catalog + [`guardrails/guardrails-review.md`](guardrails/guardrails-review.md)
|
|
97
|
+
> (this layout loads all three catalogs — see the detection table). The rules below cover **pure-coded** guardrails —
|
|
98
|
+
> SDK middleware / `@guardrail` decorators wired in the entry `.py` (LangChain/LangGraph today), no `agent.json`.
|
|
99
|
+
|
|
100
|
+
> **Validator-name authority.** Same caution as low-code: do NOT name a platform-documented validator
|
|
101
|
+
> (`harmful_content` / `intellectual_property` / `user_prompt_attacks`) unless it is already present in the agent's
|
|
102
|
+
> code — phrase generically (e.g. "an appropriate content-safety guardrail"). `pii_detection` / `prompt_injection`
|
|
103
|
+
> are SDK-confirmed and may be named.
|
|
104
|
+
|
|
105
|
+
> **Apply these via the structured workflow.** The guardrail rules below are applied through
|
|
106
|
+
> [`guardrails/coded-guardrails-review.md`](guardrails/coded-guardrails-review.md) — Step 0 (fetch the live
|
|
107
|
+
> `uip agent guardrails catalog` + `list`, 30-min cache, **plus** the public Python SDK docs that map a `validator_id`
|
|
108
|
+
> to its Python class / scope / entity enums) → **Audit Mode** (effectiveness / relevance / wiring of existing
|
|
109
|
+
> guardrails) + **Recommend Mode** (missing-guardrail recommendations), modeled on the `uipath-agents` coded
|
|
110
|
+
> guardrail recommend/validate capability and driven by the same live catalog. **Boundary:** `uip codedagent review`
|
|
111
|
+
> (Step 2.5a) owns every deterministic coded guardrail check and emits `CODED_GUARDRAIL_WRONG_IMPORT` /
|
|
112
|
+
> `CODED_GUARDRAIL_TOOL_SCOPE_NO_TOOLS` / `CODED_GUARDRAIL_INVALID_CONTRACT`; the rules below fire **only** on
|
|
113
|
+
> guardrails the CLI did not flag and **never** re-emit a CLI finding. If the catalog is unavailable, defer the
|
|
114
|
+
> Audit-Mode rows (Rules Skipped) — see the workflow's Step 0.
|
|
101
115
|
|
|
102
116
|
| rule_id | severity | category | trigger | detection_method | suggested_fix |
|
|
103
117
|
|---|---|---|---|---|---|
|
|
104
|
-
| `
|
|
118
|
+
| `CODED_GUARDRAIL_RECOMMENDED` | info | guardrails | A guardrail is recommended for a use case the coded agent matches but doesn't wire (one finding per missing guardrail; specifics in the message) | Apply `guardrails/coded-guardrails-review.md` **Recommend Mode**: fetch the live catalog + SDK docs (Step 0); read the entry `.py` (system prompt, Pydantic input/output schemas, `@tool` docstrings); for each catalog entry whose `when_to_use` / `use_cases` / `security_risk_addressed` match the agent and which is not already wired (no matching middleware / `@guardrail`), emit one finding. The message names the guardrail / `security_category`, the matched use case, the recommended scope, and the recommended **action** — **block/escalate** when protection is needed (PII that must not enter, injection, harmful content) or **log** for audit only. De-dup by `security_category`. Do NOT name a platform-documented validator unless already present. file = entry `.py`. | Wire the named guardrail at the catalog-recommended scope/action (middleware or `@guardrail`; cite `examples[].config`) — see the `uipath-agents` coded guardrails-recommend capability. |
|
|
119
|
+
| `CODED_GUARDRAIL_ACTION_INEFFECTIVE` | judgment | guardrails | A guardrail's action is ineffective or counterproductive for its scope | Apply `guardrails/coded-guardrails-review.md` **Audit Mode → Actionability**: for each guardrail the CLI did not flag, compare its validator + scope (`GuardrailScope.*` or decorator target) + action class (`BlockAction` / `LogAction` / `EscalateAction` / custom) against the catalog entry's `when_not_to_use` / `examples[].config` action for that scope. Emit when counterproductive — a security-critical guardrail using `LogAction` where the example blocks; PII `Block`/filter at Tool scope on a tool that legitimately needs the data; PII `Log` at Agent/Llm. Name the recommended action. file = entry `.py`, element = guardrail name. | Use the action the catalog recommends for that scope, or move the guardrail to a scope where the action is effective. |
|
|
120
|
+
| `CODED_GUARDRAIL_MISAPPLIED` | judgment | guardrails | A guardrail is present but doesn't belong on this agent, or is wired where it won't guard as intended | Apply `guardrails/coded-guardrails-review.md` **Audit Mode → Relevance + Wiring**: (a) Relevance — establish the agent's context (system prompt, schemas, tool docstrings), read the catalog entry's `when_not_to_use` / `NOT_recommended_for`, emit when the agent matches a disqualifying condition (e.g. a generate-only agent carrying a PII guardrail). (b) Wiring — a `@guardrail` LLM/Agent-scope decorator on a function that does **not** return `UiPathChat(...)` / `create_agent(...)` (or on a non-factory) silently no-ops; emit when the decorated target won't be wrapped as intended. Wrong import module / Tool-scope-without-`tools=` / contract violations are the CLI's deterministic rules — do not re-flag. Cite the matched clause or the mis-wiring. file = entry `.py`, element = guardrail name. | Remove the misapplied guardrail, or move the decorator onto the correct factory / `@tool` so it actually wraps the target. |
|
|
121
|
+
| `CODED_GUARDRAILS_ISSUE` | warning | guardrails | Guardrails / safety / PII observation that no specific rule fits | Use ONLY when no specific rule fits. Coded agents have most safety concerns covered under `## SecurityChecker` (`CODED_PROMPT_USER_INPUT_UNSANITIZED`, `CODED_PII_IN_TRACES`), the three rules above, and the deterministic CLI guardrail/secret checks. Reach here only for guardrail / policy observations none of those cover. | (Defined per finding.) |
|
|
105
122
|
|
|
106
123
|
---
|
|
107
124
|
|
|
@@ -97,7 +97,6 @@ One H2 section per checker class (`EvalsChecker`, `SchemaChecker`, `ToolsChecker
|
|
|
97
97
|
| `LC_GUARDRAIL_RECOMMENDED` | info | guardrails | A guardrail is recommended for a use case the agent matches but doesn't cover (one finding per missing guardrail; specifics in the message) | Apply `guardrails/guardrails-review.md` **Recommend Mode**: fetch the live catalog (Step 0); for each catalog entry whose `when_to_use` / `use_cases` / `security_risk_addressed` match the agent (system prompt, schemas, tools) and which is absent from `.guardrails[]`, emit one finding. The message names the guardrail / `security_category`, the matched use case, the recommended scope, and the recommended **action** — **block/escalate** when protection is really needed (PII that must not enter, injection, harmful content) or **log** for audit only (a tool legitimately handles sensitive data). De-dup by `security_category`. Do NOT name a platform-documented validator unless already present (see note above). file = `agent.json` (or normalized JSON). | Add the named guardrail at the catalog-recommended scope/action (cite `examples[].config`): block/escalate for protection, log for audit. |
|
|
98
98
|
| `LC_GUARDRAIL_ACTION_INEFFECTIVE` | judgment | guardrails | A format-valid guardrail's action is ineffective or counterproductive for its scope | Apply `guardrails/guardrails-review.md` **Audit Mode → Actionability**: for each format-valid guardrail (skip ones the review CLI flagged), compare `validator` + `selector.scopes` + action `$actionType` against the catalog entry's `when_not_to_use` / `examples[].config` action for that scope. Emit when counterproductive — a security-critical guardrail at `log` where the example uses `block`; `pii_detection` `Block`/`Filter` at Tool on a tool that needs the PII; `pii_detection` `Log` at Agent/Llm. Name the recommended action. file = `agent.json`, element = guardrail name. | Set the action the catalog recommends for that scope, or move the guardrail to a scope where the action is effective. |
|
|
99
99
|
| `LC_GUARDRAIL_MISAPPLIED` | judgment | guardrails | A guardrail is present but the agent matches the validator's `when_not_to_use` | Apply `guardrails/guardrails-review.md` **Audit Mode → Relevance**: establish the agent's context (system prompt, schemas, tools); for each format-valid guardrail read the catalog entry's `when_not_to_use` / `NOT_recommended_for`. Emit when the agent matches a disqualifying condition (e.g. a generate-only agent with no user input carrying a PII guardrail). Cite the matched clause. file = `agent.json`, element = guardrail name. | Remove the misapplied guardrail, or document why the agent's context differs from the `when_not_to_use` condition. |
|
|
100
|
-
| `LC_GUARDRAIL_EVALS_CONSISTENCY` | judgment | guardrails | `enabledForEvals: true` may interfere with the eval set's intent | Read guardrails. For each with `enabledForEvals: true`, read the eval set. Assess: is the eval set testing guardrail behavior (intentional) or testing agent behavior (where guardrails may interfere)? Emit when intent unclear; reason in the description. file = guardrail source, element = guardrail name. | Set `enabledForEvals: false` for agent-behavior tests, or document that the eval set is specifically testing guardrail behavior. |
|
|
101
100
|
|
|
102
101
|
---
|
|
103
102
|
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
# Coded Guardrail Review — LLM-as-judge (audit + recommend)
|
|
2
|
+
|
|
3
|
+
The read-only **review** counterpart of the `uipath-agents` coded guardrail recommend/validate capability. It
|
|
4
|
+
powers the coded guardrail judgment rules in [`../agents-coded-rules.md`](../agents-coded-rules.md)
|
|
5
|
+
§GuardrailsChecker. Run it during a **coded** agent review (SKILL.md Step 2.5b) **after** `uip codedagent review`
|
|
6
|
+
(Step 2.5a). Two modes:
|
|
7
|
+
|
|
8
|
+
- **Audit Mode** — the agent already wires guardrails → are they *effective, appropriate, and actually wired*?
|
|
9
|
+
(emits **defects**)
|
|
10
|
+
- **Recommend Mode** — the agent is missing guardrails for use cases it matches → which should it add? (emits
|
|
11
|
+
**Info recommendations**)
|
|
12
|
+
|
|
13
|
+
This is **review only** — never write, fix, or run `uip codedagent` mutating commands. The reviewer emits
|
|
14
|
+
findings; the user (or the `uipath-agents` skill) applies them.
|
|
15
|
+
|
|
16
|
+
> **Boundary with `uip codedagent review` — do not double-flag.** The review CLI owns every **deterministic**
|
|
17
|
+
> coded guardrail check and emits them as rule IDs: `CODED_GUARDRAIL_WRONG_IMPORT` (LangChain agent imports
|
|
18
|
+
> guardrails from `uipath.platform.guardrails` and never from `uipath_langchain.guardrails`, so the adapter never
|
|
19
|
+
> registers and the guardrail silently no-ops), `CODED_GUARDRAIL_TOOL_SCOPE_NO_TOOLS` (a Tool-scope middleware with
|
|
20
|
+
> no `tools=`), and `CODED_GUARDRAIL_INVALID_CONTRACT` (a local custom `action=`/`validator=` that doesn't subclass
|
|
21
|
+
> the SDK base). The rules here fire **only on guardrails the CLI did not flag**, and judge only what code cannot
|
|
22
|
+
> decide: whether a valid action actually protects at its scope, whether a valid guardrail belongs on this agent at
|
|
23
|
+
> all, whether a decorator is wired where it will actually wrap the target, and whether a guardrail the agent should
|
|
24
|
+
> have is missing. Never re-describe a CLI deterministic finding here.
|
|
25
|
+
|
|
26
|
+
Like the recommend capability, this is **live-catalog driven** — the catalog's authored fields (`when_to_use`,
|
|
27
|
+
`use_cases`, `security_risk_addressed`, `when_not_to_use`, `security_category`, `examples[].config`) drive every
|
|
28
|
+
decision. The coded vocabulary (Python class names, scopes, entity enums) comes from the SDK docs. Do not hardcode
|
|
29
|
+
which guardrail fits which agent, or which Python class implements which validator.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Step 0 — Fetch Catalog, Available Validators, and SDK Docs
|
|
34
|
+
|
|
35
|
+
Run this once when the coded agent's entry source wires guardrails (any `*UiPath…Middleware(...)` inside
|
|
36
|
+
`create_agent(middleware=[...])` or any `@guardrail(...)` decorator) **or** the agent matches a catalog use case
|
|
37
|
+
(so Recommend Mode can run). This is the read-only review counterpart of the guardrail recommend capability — it
|
|
38
|
+
runs the same Step 0 fetches (specified in full below) but emits findings instead of writing code.
|
|
39
|
+
|
|
40
|
+
### Catalog (cacheable — 30-minute TTL)
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
python3 -c "
|
|
44
|
+
import os, time
|
|
45
|
+
cache = '.guardrails-catalog-cache.json'
|
|
46
|
+
if os.path.exists(cache) and (time.time() - os.path.getmtime(cache)) < 1800:
|
|
47
|
+
print('CACHE_HIT')
|
|
48
|
+
else:
|
|
49
|
+
print('CACHE_MISS')
|
|
50
|
+
"
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
- **CACHE_HIT**: read `.guardrails-catalog-cache.json` directly.
|
|
54
|
+
- **CACHE_MISS**: fetch and save: `uip agent guardrails catalog --output json > .guardrails-catalog-cache.json`
|
|
55
|
+
(the CLI writes both success and error JSON to stdout — do not add `2>&1`).
|
|
56
|
+
|
|
57
|
+
### Guardrails List (NEVER cached — tenant-specific)
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
uip agent guardrails list --output json
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Build a `{ validatorId: status }` lookup from the `Data` array (use only `Status == "Available"`).
|
|
64
|
+
|
|
65
|
+
### SDK Docs (NEVER skipped — Python class names)
|
|
66
|
+
|
|
67
|
+
Coded agents reference guardrails by **Python class name** (`UiPathPIIDetectionMiddleware`, `PIIValidator`), not by
|
|
68
|
+
`validator_id`. Fetch the SDK doc pages via `WebFetch` to map the two:
|
|
69
|
+
|
|
70
|
+
- `https://uipath.github.io/uipath-python/core/guardrails/` — always (validators, entity enums, `GuardrailScope` /
|
|
71
|
+
`GuardrailExecutionStage`, action classes).
|
|
72
|
+
- `https://uipath.github.io/uipath-python/langchain/guardrails/` — when the agent is LangChain/LangGraph
|
|
73
|
+
(`uipath-langchain` in `pyproject.toml` or `from langchain…` / `from langgraph…` imports): middleware classes,
|
|
74
|
+
their supported scopes/stages, and the `uipath_langchain.guardrails` import paths.
|
|
75
|
+
|
|
76
|
+
Build a `{ validator_id → { middleware_class, validator_class, entity_enum, allowed_scopes, allowed_stages,
|
|
77
|
+
import_path } }` lookup by joining catalog entries with the SDK class names. Use the fetched content as the sole
|
|
78
|
+
source of truth for class/enum/import names — never memory.
|
|
79
|
+
|
|
80
|
+
**If `WebFetch` is unavailable or denied**, fall back in order; stop at the first source that yields the
|
|
81
|
+
class/scope/enum names:
|
|
82
|
+
|
|
83
|
+
1. `curl -fsSL <URL>` via Bash (same two URLs).
|
|
84
|
+
2. Read the installed SDK sources. Locate the packages
|
|
85
|
+
(`python3 -c "import uipath; print(uipath.__file__)"`, same for `uipath_langchain`) and read the guardrail
|
|
86
|
+
modules (`uipath/platform/guardrails/`, `uipath_langchain/guardrails/`) for middleware/validator/action classes,
|
|
87
|
+
scopes, stages, and entity enums.
|
|
88
|
+
3. Neither reachable → SDK-docs skip path in the next section.
|
|
89
|
+
|
|
90
|
+
### If the catalog (or SDK docs) is unavailable
|
|
91
|
+
|
|
92
|
+
Do **not** guess:
|
|
93
|
+
- **Audit Mode** (`CODED_GUARDRAIL_ACTION_INEFFECTIVE`, `CODED_GUARDRAIL_MISAPPLIED` relevance check) depends on the
|
|
94
|
+
catalog → record these under the report's "Rules Skipped" subsection with reason
|
|
95
|
+
`"guardrails catalog unavailable"`. (The **wiring** half of `CODED_GUARDRAIL_MISAPPLIED` — a decorator that won't
|
|
96
|
+
wrap its target — is code-only and still applies.)
|
|
97
|
+
- **Recommend Mode** (`CODED_GUARDRAIL_RECOMMENDED`) can still detect a missing guardrail from the entry source
|
|
98
|
+
alone (prompt / schema / tool inference); phrase the recommended scope/action generically and note
|
|
99
|
+
"catalog-limited" in the message.
|
|
100
|
+
- **SDK docs unreachable by every fallback** (WebFetch, curl, installed sources) → the
|
|
101
|
+
`validator_id ↔ Python class` mapping is unverified. Checks that need only the catalog still run; record
|
|
102
|
+
mapping-dependent checks (scope/stage validity, import paths, class names) under "Rules Skipped" with reason
|
|
103
|
+
`"SDK docs unavailable"`.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Read the agent first
|
|
108
|
+
|
|
109
|
+
Resolve the entry `.py` (the `langgraph.json` `graphs` value's file, else `main.py`) and read:
|
|
110
|
+
- **System prompt** — what the agent does, its domain and behaviors.
|
|
111
|
+
- **Input / output schemas** (Pydantic `BaseModel` / function signatures) — the data it receives and produces.
|
|
112
|
+
- **`@tool` functions** — name, docstring, signature (the targets of Tool-scope guardrails).
|
|
113
|
+
- **Wired guardrails** — `*UiPath…Middleware(...)` inside `create_agent(middleware=[...])` and `@guardrail(...)`
|
|
114
|
+
decorators, plus what each decorates (a `@tool`, an LLM factory `def create_llm(): return UiPathChat(...)`, an
|
|
115
|
+
agent factory, or something else).
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Audit Mode — existing guardrails (findings are defects)
|
|
120
|
+
|
|
121
|
+
For each wired guardrail the review CLI did **not** flag, run the checks below.
|
|
122
|
+
|
|
123
|
+
### Actionability Check → `CODED_GUARDRAIL_ACTION_INEFFECTIVE`
|
|
124
|
+
|
|
125
|
+
Compare the guardrail's action class against the catalog entry's `when_not_to_use` and its representative
|
|
126
|
+
`examples[].config` action for the chosen scope. Emit when the action is ineffective/counterproductive. Canonical
|
|
127
|
+
cases:
|
|
128
|
+
|
|
129
|
+
- A **security-critical** guardrail (`security_category` `adversarial_input` / `content_safety`) using
|
|
130
|
+
`LogAction` where the catalog example uses block — it looks protected but isn't.
|
|
131
|
+
- `pii_detection` with `BlockAction` / a filtering action at **Tool** scope on a tool that legitimately needs the
|
|
132
|
+
PII (e.g. a SendEmail tool needs the recipient address) — blocking breaks the tool.
|
|
133
|
+
- `pii_detection` with `LogAction` at **Agent** / **Llm** scope — log there does not prevent PII from entering or
|
|
134
|
+
reaching the LLM.
|
|
135
|
+
|
|
136
|
+
Name the catalog-recommended action for that scope in the description. Severity `judgment` — a guardrail that breaks
|
|
137
|
+
the agent or leaves a security gap can be Critical; a milder ineffectiveness is Warning/Info.
|
|
138
|
+
|
|
139
|
+
### Relevance + Wiring Check → `CODED_GUARDRAIL_MISAPPLIED`
|
|
140
|
+
|
|
141
|
+
Two ways a format-valid guardrail can be misapplied:
|
|
142
|
+
|
|
143
|
+
- **Relevance** — establish the agent's real context (system prompt, schemas, tool docstrings); read the catalog
|
|
144
|
+
entry's `when_not_to_use` / `NOT_recommended_for`; emit when the agent matches a disqualifying condition (e.g. a
|
|
145
|
+
generate-only agent with no user input carrying a PII guardrail — the PII output is the intended product). Cite
|
|
146
|
+
the matched clause.
|
|
147
|
+
- **Wiring** — a `@guardrail` decorator at LLM or Agent scope only wraps its target if the decorated function
|
|
148
|
+
returns `UiPathChat(...)` (LLM factory) or `create_agent(...)` (agent factory). A decorator on a plain helper, a
|
|
149
|
+
non-factory, or a module-level value silently no-ops at runtime. Emit when the decorated target won't be wrapped
|
|
150
|
+
as intended. (This is the non-deterministic placement case; the CLI's `CODED_GUARDRAIL_WRONG_IMPORT` /
|
|
151
|
+
`CODED_GUARDRAIL_TOOL_SCOPE_NO_TOOLS` / `CODED_GUARDRAIL_INVALID_CONTRACT` are separate — do not re-flag them.)
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Recommend Mode — missing guardrails (findings are Info recommendations)
|
|
156
|
+
|
|
157
|
+
Reuse the `uipath-agents` recommend capability's catalog-driven reasoning, but emit findings instead of writing
|
|
158
|
+
code. **All missing-guardrail recommendations use one rule_id — `CODED_GUARDRAIL_RECOMMENDED` (Info)** — one per
|
|
159
|
+
missing guardrail, specifics in the message.
|
|
160
|
+
|
|
161
|
+
1. **Read agent context** (done above): system prompt, schemas, `@tool` docstrings, and the already-wired
|
|
162
|
+
guardrails (to avoid recommending what's there).
|
|
163
|
+
2. **Catalog-driven analysis** — for each catalog entry read `when_to_use`, `use_cases`, `description`,
|
|
164
|
+
`security_risk_addressed`; does the agent's purpose / data / threat model match? Read `when_not_to_use` and skip
|
|
165
|
+
if the agent matches a disqualifying condition. Cross-reference the Step 0 status lookup — only recommend
|
|
166
|
+
`Available` validators (mention `Unauthorised` ones; skip ones absent from the list).
|
|
167
|
+
3. **De-duplicate by `security_category`** — group matched candidates by `security_category` + scope + stage; drop
|
|
168
|
+
catalog-deprecated entries; keep the best fit; mention the alternative.
|
|
169
|
+
4. **Recommended scope (block as early as possible)** — the outermost PRE scope the validator's `allowed_scopes`
|
|
170
|
+
permits for input protection (**Agent** > Llm > Tool), Agent · POST for output protection, Tool scope only for a
|
|
171
|
+
genuinely tool-specific concern. In coded terms: Agent scope → `GuardrailScope.AGENT` middleware or `@guardrail`
|
|
172
|
+
on the agent factory; Llm → `GuardrailScope.LLM` or `@guardrail` on the LLM factory; Tool →
|
|
173
|
+
`GuardrailScope.TOOL` with `tools=[…]` or `@guardrail` on the `@tool`.
|
|
174
|
+
5. **Recommended action (the protection-vs-audit signal)** — default to the catalog example's `action_type`; state
|
|
175
|
+
which it is: **block / escalate** (protection really needed) vs **log** (audit only). Never silently downgrade
|
|
176
|
+
block → log.
|
|
177
|
+
|
|
178
|
+
### Emit the finding
|
|
179
|
+
|
|
180
|
+
One `CODED_GUARDRAIL_RECOMMENDED` (Info) per missing guardrail. The message carries: which guardrail /
|
|
181
|
+
`security_category`, why (the matched `when_to_use` / `use_cases` item or data flow), the recommended scope, and the
|
|
182
|
+
recommended action with the protection-vs-audit signal. Examples:
|
|
183
|
+
|
|
184
|
+
- *"Recommend a PII-detection guardrail at Agent scope with a **block** action — the input schema carries
|
|
185
|
+
`customer_email` / `ssn`; blocking at `GuardrailScope.AGENT` · PRE stops unexpected PII before the LLM. Protection
|
|
186
|
+
needed: block."*
|
|
187
|
+
- *"Recommend a Tool-scope **log** guardrail on `send_customer_email` for an audit trail — the tool legitimately
|
|
188
|
+
handles the recipient email; use log (not block) so the tool keeps working. Audit only."*
|
|
189
|
+
|
|
190
|
+
**Validator-name caution:** do NOT name a platform-documented validator (`harmful_content`,
|
|
191
|
+
`intellectual_property`, `user_prompt_attacks`) unless already present in the code — phrase generically.
|
|
192
|
+
`pii_detection` / `prompt_injection` are SDK-confirmed and may be named.
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Report
|
|
197
|
+
|
|
198
|
+
Merge findings into the Step 5 "Rule Findings" subsection (SKILL.md Step 2.5b), canonical line format:
|
|
199
|
+
|
|
200
|
+
```
|
|
201
|
+
[<prefix><n>] `<rule_id>` — <file> — <message>. Fix: <suggested_fix>.
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
- Recommendations (`CODED_GUARDRAIL_RECOMMENDED`) → **`I-D-` (Info)** — improvements, not failures. The action
|
|
205
|
+
signal lives in the message, not the severity.
|
|
206
|
+
- Defects (`CODED_GUARDRAIL_ACTION_INEFFECTIVE`, `CODED_GUARDRAIL_MISAPPLIED`) → the `judgment` band; pick
|
|
207
|
+
Critical/Warning/Info by impact and show the reasoning.
|
|
208
|
+
- `file` = the entry `.py`; `element` = the guardrail name.
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## Critical Rules
|
|
213
|
+
|
|
214
|
+
1. **Run after `uip codedagent review` (Step 2.5a)** and only on guardrails the CLI did not flag — never
|
|
215
|
+
double-flag a `CODED_GUARDRAIL_WRONG_IMPORT` / `CODED_GUARDRAIL_TOOL_SCOPE_NO_TOOLS` /
|
|
216
|
+
`CODED_GUARDRAIL_INVALID_CONTRACT` deterministic finding.
|
|
217
|
+
2. **Catalog-driven, not hardcoded** — every audit verdict and recommendation cites a catalog field
|
|
218
|
+
(`when_not_to_use`, `when_to_use` / `use_cases`, `examples[].config.action_type`). Class/enum/import names come
|
|
219
|
+
from the SDK docs, never memory.
|
|
220
|
+
3. **Catalog unavailable → defer Audit Mode** (Rules Skipped), keep Recommend Mode's source-only detection with
|
|
221
|
+
generic wording and the code-only wiring half of `CODED_GUARDRAIL_MISAPPLIED`. Never guess
|
|
222
|
+
effectiveness/relevance without the catalog.
|
|
223
|
+
4. **Recommendations are one Info rule** (`CODED_GUARDRAIL_RECOMMENDED`), one finding per missing guardrail, details
|
|
224
|
+
in the message; signal **block/escalate** (protection) vs **log** (audit).
|
|
225
|
+
5. **Never silently downgrade block → log** — a security-critical guardrail at `log` is a defect
|
|
226
|
+
(`CODED_GUARDRAIL_ACTION_INEFFECTIVE`), not an acceptable choice, unless the catalog/agent shows a stated reason.
|
|
227
|
+
6. **Do not name platform-documented validators** (`harmful_content` / `intellectual_property` /
|
|
228
|
+
`user_prompt_attacks`) unless already present — phrase generically. `pii_detection` / `prompt_injection` may be
|
|
229
|
+
named.
|
|
230
|
+
7. **Review only** — emit findings; never write guardrails, edit the entry `.py`, or run mutating `uip codedagent`
|
|
231
|
+
commands.
|
|
@@ -9,6 +9,8 @@ Step 2.5 of the review workflow. Runs **after** Step 2 (`uip agent validate` and
|
|
|
9
9
|
|
|
10
10
|
### 2.5a — Run the review CLI first
|
|
11
11
|
|
|
12
|
+
Mandatory even when the skill loads after another review pass already produced findings (SKILL.md Critical Rule 9).
|
|
13
|
+
|
|
12
14
|
Run the review command for the agent type, once, capturing JSON:
|
|
13
15
|
|
|
14
16
|
| Agent type | Command |
|
|
@@ -54,9 +56,9 @@ Maps project signals to the judgment catalog files that must be loaded. Extend t
|
|
|
54
56
|
| Signals present | Project type | Catalog files |
|
|
55
57
|
|---|---|---|
|
|
56
58
|
| `agent.json` AND no `main.py` AND no `pyproject.toml` | Agent (low-code) | `agents/agents-common-rules.md` + `agents/agents-lowcode-rules.md` (+ `agents/guardrails/guardrails-review.md` when `guardrails[]` is present or a guardrail use case matches — see Step 2.5b item 3) |
|
|
57
|
-
| `pyproject.toml` + `main.py` + any framework config (`langgraph.json` / `llama_index.json` / `openai_agents.json` / `google_adk.json` / `pydantic_ai.json` / `agent_framework.json`) | Agent (coded) | `agents/agents-common-rules.md` + `agents/agents-coded-rules.md` |
|
|
59
|
+
| `pyproject.toml` + `main.py` + any framework config (`langgraph.json` / `llama_index.json` / `openai_agents.json` / `google_adk.json` / `pydantic_ai.json` / `agent_framework.json`) | Agent (coded) | `agents/agents-common-rules.md` + `agents/agents-coded-rules.md` (+ `agents/guardrails/coded-guardrails-review.md` when the entry source wires SDK guardrails or a guardrail use case matches — see Step 2.5b item 3) |
|
|
58
60
|
| `pyproject.toml` + `main.py` + `uipath.json[functions]` only (no framework config) | Agent (coded — Simple Function) | same as Agent (coded) |
|
|
59
|
-
| `agent.json` + `pyproject.toml` + `main.py` (agent-builder coded layout) | Agent (low-code + coded) | all three: common + lowcode + coded; tag each finding with its source file; also `agents/guardrails/guardrails-review.md` for the `agent.json` guardrails |
|
|
61
|
+
| `agent.json` + `pyproject.toml` + `main.py` (agent-builder coded layout) | Agent (low-code + coded) | all three: common + lowcode + coded; tag each finding with its source file; also `agents/guardrails/guardrails-review.md` for the `agent.json` guardrails and `agents/guardrails/coded-guardrails-review.md` for SDK guardrails wired in the entry `.py` |
|
|
60
62
|
| `project.json` + `.xaml` / `.cs` | RPA | *(phase 2 — catalog not yet authored)* |
|
|
61
63
|
| `*.flow` + `project.uiproj` with `ProjectType: "Flow"` | Flow | *(phase 2)* |
|
|
62
64
|
| `.uipath/` or `app.config.json` | Coded App | *(phase 2)* |
|
|
@@ -164,7 +164,7 @@ uip rpa activities find --query log --output json > /dev/null 2>&1 &
|
|
|
164
164
|
- **Removing a dependency** — grep the project for usages before deleting an entry. A package may be the sole supplier of an activity used elsewhere (`MergePDFs` lives in the IntelligentOCR.StudioWeb family).
|
|
165
165
|
- **Writing a new activity tag** — confirm via `uip rpa activities find --query "<verb>" --output json` and use the returned `ClassName`. Do not derive tag names from Studio display names. See [common-pitfalls.md § Common Activity Name Confusions](references/xaml/common-pitfalls.md).
|
|
166
166
|
7. **[UIA] Before writing ANY UIA activity (XAML `<uix:N*>` or coded `uiAutomation.*` / `Descriptors.*`), MUST read [references/ui-automation-guide.md](references/ui-automation-guide.md) IN FULL** — including the mode-specific section (For Coded Workflows or For XAML Workflows) and Running UI Automation Workflows. No exceptions for "simple" UIs. Skipping this rule is the most common cause of hallucinated selectors, wrong target XML, and missing OR descriptors. NEVER hand-write selectors — use `uia-configure-target` exclusively (the guide explains how). This guide is the single entry point for UIA work: it routes you to [uia-configure-target-workflows.md](references/uia-configure-target-workflows.md), [uia-prerequisites.md](references/uia-prerequisites.md), and the package docs in order — the other UIA sections in this file point back here rather than restating the read mandate.
|
|
167
|
-
7a. **[UIA] Verify UIA prerequisites before invoking `uia-configure-target`.** The minimum version and the prerequisite check live in [uia-prerequisites.md](references/uia-prerequisites.md) — read it and run that check first (do not hardcode the version from memory; that file is the only source of truth). If `UiPath.UIAutomation.Activities` is below the minimum or `{PROJECT_DIR}/.local/docs/packages/UiPath.UIAutomation.Activities/skills/uia-configure-target/SKILL.md` is absent, the `uip rpa uia` CLI is unavailable — and **both** target capture and indication depend on it, so indication is *not* a fallback when the package itself is missing. Ask the user to install/upgrade per uia-prerequisites.md. If they decline or the package cannot be installed, fall back to the **Placeholder-Selector Stub Pattern** (§ above) — real activities with `TODO Indicate` markers need no CLI. Never silently route to a non-existent skill path. Use indication capture only when a compatible UIA package *is* installed but `uia-configure-target` cannot see the element; record `UI capture: indication-only` in the plan header to skip `uia-configure-target` in that case.
|
|
167
|
+
7a. **[UIA] Verify UIA prerequisites before invoking `uia-configure-target`.** The minimum version and the prerequisite check live in [uia-prerequisites.md](references/uia-prerequisites.md) — read it and run that check first (do not hardcode the version from memory; that file is the only source of truth). If `UiPath.UIAutomation.Activities` is below the minimum or `{PROJECT_DIR}/.local/docs/packages/UiPath.UIAutomation.Activities/skills/uia-configure-target/SKILL.md` is absent, the `uip rpa uia` CLI is unavailable — and **both** target capture and indication depend on it, so indication is *not* a fallback when the package itself is missing. Ask the user to install/upgrade per uia-prerequisites.md. If they decline or the package cannot be installed, fall back to the **Placeholder-Selector Stub Pattern** (§ above) — real activities with `TODO Indicate` markers need no CLI. Never silently route to a non-existent skill path. Use indication capture only when a compatible UIA package *is* installed but `uia-configure-target` cannot see the element; record `UI capture: indication-only` in the plan header to skip `uia-configure-target` in that case. **Runtime failure counts too:** when the package is present but the UIA snapshot CLI's live scans fail persistently (driver/COM errors on every scan), first rule out a locked or non-interactive Windows session (`LogonUI` running = lock screen) — that needs an unlock, not a fallback. Only if scans still fail on an unlocked interactive session, treat capture as unavailable and use the Placeholder-Selector Stub Pattern.
|
|
168
168
|
8. **Use `--output json`** on all CLI commands whose output is parsed programmatically.
|
|
169
169
|
8a. **`run` / `debug start` success/failure verdict comes from the outer `Result` (and equivalently the inner `HasErrors`), NEVER from any log entry's `Level`.** A successful workflow may emit `Log Message` activities at `Error` or `Warning` level as observability — those are workflow-emitted data, not CLI failures. Compile failures, validation failures, and unhandled runtime exceptions all flip `HasErrors` and propagate to the outer `Result`. Treating log-entry levels as a failure signal flips green runs to "failed" and burns retries on healthy workflows. In a debug session, check `DebugState` first — a `Suspended` response means an exception awaits your decision (continue / retry / ignore / cancel) while `HasErrors` is still `false`. See [cli-reference.md § run](references/cli-reference.md) and [debugging.md § Reading Debug Output Effectively](references/debugging.md).
|
|
170
170
|
9. **For "leverage / reuse / find shared libraries" requests, search the tenant feed — not the local filesystem, NuGet.org, or keyword-permutation loops.** Run `uip or libraries list --limit 500 --output-filter "<JMESPath>" --output json`. On zero results from the filtered call, take the fallback branch — do not re-keyword. Skip when an SDD already records §16 "Shared libraries referenced" or the user has said "no shared libraries" earlier in the session. See [tenant-library-search-guide.md](references/tenant-library-search-guide.md) for the full procedure.
|
|
@@ -243,7 +243,7 @@ uip rpa activities find --query log --output json > /dev/null 2>&1 &
|
|
|
243
243
|
- **All other activities:** (1) `activities find` → class name, (2) **read `<Activity>.md` first** and extract a property checklist (required + use-case-relevant), (3) `activities get-default-xaml` → starter element, (4) **diff your checklist against the starter and add what's missing** — an empty checklist means you skipped step 2, go back.
|
|
244
244
|
- **Doc lookup order:** primary `{PROJECT_DIR}/.local/docs/packages/<PackageId>/activities/<Activity>.md`; fallback `references/activity-docs/<PackageId>/<closest-version>/<Activity>.md` for older package versions where `.local/docs` is empty. **Exception — `UiPath.UIAutomation.Activities` has no bundled fallback:** `.local/docs` (present only after the package is installed) is its sole activity-doc source. If it is absent, do not hunt for a bundled copy — follow Rule 7a (install with consent per [uia-prerequisites.md](references/uia-prerequisites.md), or use the Placeholder-Selector Stub Pattern).
|
|
245
245
|
- **Trigger activities are special — read BOTH docs.** When the class name ends in `Trigger`, the namespace contains `.Triggers`, or the description mentions "starts a job" / "Monitor Events" / "Trigger Scope", also read the bundled `references/activity-docs/<PackageId>/<closest-version>/activities/<Activity>.md` **and** the package's bundled `overview.md`. The auto-generated `.local/docs` version is sparse for triggers; the bundled hand-written docs carry placement guidance (entry-point vs. `ui:TriggerScope`), deployment context, and cross-cutting namespace/assembly gotchas that the extractor does not capture. See Common Rule 12 and [trigger-pattern-guide.md](references/trigger-pattern-guide.md).
|
|
246
|
-
- **Skip-tax — concrete:** `activities get-default-xaml` omits any property whose value equals the type default. For `NGetText` the starter is literally `<uix:NGetText HealingAgentBehavior="SameAsCard" />` with **zero** output properties — authoring from this alone produces `NGetText.Value="..."` (does not exist; the
|
|
246
|
+
- **Skip-tax — concrete:** `activities get-default-xaml` omits any property whose value equals the type default. For `NGetText` the starter is literally `<uix:NGetText HealingAgentBehavior="SameAsCard" />` with **zero** output properties — authoring from this alone produces `NGetText.Value="..."` (does not exist; the output member is `TextString`), which `validate` accepts and `build` rejects. For `NTypeInto` that's 2 of 20 properties hidden.
|
|
247
247
|
- **Self-extending the card — "this activity feels simple, I'll add it to the card mentally" — is the failure mode.** The card is the only allowlist; for non-card activities the MD read is the only check.
|
|
248
248
|
- Full procedure: [xaml/xaml-basics-and-rules.md § Activity Property Surface](references/xaml/xaml-basics-and-rules.md).
|
|
249
249
|
21a. **[XAML] Built-in workflow activities: use the card only for this allowlist.** Fast-path card activities are: `Sequence`, `If`, `Switch<T>`, `TryCatch`, `While`, `DoWhile`, `ForEach<T>`, `Assign`, `LogMessage`, `WriteLine`, `Delay`, `Throw`, `Rethrow`. If the activity is on this list, open [references/common-activity-card.md](references/common-activity-card.md) and author from the card. If it is not on this list, follow full Rule 21. `InvokeWorkflowFile`, `Pick`, `Parallel`, and `ParallelForEach<T>` are intentionally off-card; use full Rule 21. Studio's "While" / "Do While" / "For Each" toolbox items emit UiPath wraps (`UiPath.Core.Activities.InterruptibleWhile` / `InterruptibleDoWhile` / `UiPath.Core.Activities.ForEach<T>`), not the framework `System.Activities.Statements.While`/`DoWhile`/`ForEach<T>`.
|
|
@@ -60,7 +60,7 @@ xmlns:s="clr-namespace:System;assembly=System.Private.CoreLib"
|
|
|
60
60
|
The `x:` prefix covers: `x:String`, `x:Int32`, `x:Int64`, `x:Double`, `x:Boolean`, `x:Decimal`.
|
|
61
61
|
The `s:` prefix is required for: `s:DateTimeOffset`, `s:Guid`, `s:String[]`, `s:DateTime`.
|
|
62
62
|
|
|
63
|
-
See [xaml-basics-and-rules.md § x: and s: namespace aliases](
|
|
63
|
+
See [xaml-basics-and-rules.md § x: and s: namespace aliases](../../../xaml/xaml-basics-and-rules.md) for the full type mapping.
|
|
64
64
|
|
|
65
65
|
## Operator Reference by Field Type
|
|
66
66
|
|
package/skills/uipath-rpa/references/activity-docs/UiPath.Web.Activities/2.5/coded/coded-api.md
CHANGED
|
@@ -488,7 +488,7 @@ Used by `ResponseOptions.FileOverwrite`.
|
|
|
488
488
|
## Related Activity Mappings
|
|
489
489
|
|
|
490
490
|
- `Deserialize JSON` activity is not exposed as a dedicated coded API service method; use `Newtonsoft.Json.JsonConvert.DeserializeObject<T>(...)` in coded workflows.
|
|
491
|
-
- `HTTP Request (Legacy)` is not exposed in coded workflows; use the `http` service (`IHttpService`) with `SendRequestAsync` instead. For behavioral differences versus the legacy activity, see [
|
|
491
|
+
- `HTTP Request (Legacy)` is not exposed in coded workflows; use the `http` service (`IHttpService`) with `SendRequestAsync` instead. For behavioral differences versus the legacy activity, see [NetHttpRequest Activity](../activities/NetHttpRequest.md).
|
|
492
492
|
- `Deserialize JSON Array` activity is not exposed as a dedicated coded API service method; use `Newtonsoft.Json.Linq.JArray.Parse(...)` in coded workflows.
|
|
493
493
|
- `Serialize JSON` activity is not exposed as a dedicated coded API service method; use `Newtonsoft.Json.JsonConvert.SerializeObject(...)` in coded workflows.
|
|
494
494
|
- `Deserialize XML` activity is not exposed as a dedicated coded API service method; use `System.Xml.Linq.XDocument.Parse(...)` in coded workflows.
|
package/skills/uipath-rpa/references/activity-docs/UiPath.Web.Activities/2.5/coded/curl-import.md
CHANGED
|
@@ -12,7 +12,7 @@ Read this file completely before generating code. The workflow is: **import ? ac
|
|
|
12
12
|
|
|
13
13
|
### Scope of this skill
|
|
14
14
|
|
|
15
|
-
This skill is concerned **only** with producing a correct `HttpRequestOptions` from a cURL command. Once the object is ready, hand it off to `http.SendRequestAsync()`. Diagnosing HTTP responses, iterating on failures, and processing response content are handled by [NetHttpRequest.md](
|
|
15
|
+
This skill is concerned **only** with producing a correct `HttpRequestOptions` from a cURL command. Once the object is ready, hand it off to `http.SendRequestAsync()`. Diagnosing HTTP responses, iterating on failures, and processing response content are handled by [NetHttpRequest.md](../activities/NetHttpRequest.md) and [service-discovery.md](service-discovery.md).
|
|
16
16
|
|
|
17
17
|
## When to use
|
|
18
18
|
|
|
@@ -201,7 +201,7 @@ var response = await http.SendRequestAsync(imported.Options);
|
|
|
201
201
|
|
|
202
202
|
## See Also
|
|
203
203
|
|
|
204
|
-
- [NetHttpRequest Activity](
|
|
205
|
-
- [HttpClient Activity (Legacy)](
|
|
204
|
+
- [NetHttpRequest Activity](../activities/NetHttpRequest.md) — modern HTTP activity behavior spec, inputs, outputs, and defaults
|
|
205
|
+
- [HttpClient Activity (Legacy)](../activities/HttpClient.md) — legacy HTTP activity reference
|
|
206
206
|
- [Service Discovery](service-discovery.md) — discovering unknown service endpoints and generating working requests
|
|
207
207
|
- [HTTP Request Upgrade](http-request-upgrade.md) — migrating from the legacy HTTP Request activity
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
# HTTP Request Upgrade — Legacy to Modern Migration
|
|
2
2
|
|
|
3
3
|
An agent skill for migrating workflows from the legacy HTTP Request activity (RestSharp-based) to the modern NetHttpRequest activity (.NET HttpClient-based).
|
|
4
4
|
|
|
@@ -680,7 +680,7 @@ Rules:
|
|
|
680
680
|
|
|
681
681
|
## See Also
|
|
682
682
|
|
|
683
|
-
- [NetHttpRequest Activity](
|
|
684
|
-
- [HttpClient Activity (Legacy)](
|
|
683
|
+
- [NetHttpRequest Activity](../activities/NetHttpRequest.md) — modern HTTP activity behavior spec, inputs, outputs, and defaults
|
|
684
|
+
- [HttpClient Activity (Legacy)](../activities/HttpClient.md) — legacy HTTP activity reference
|
|
685
685
|
- [cURL Import Skills](curl-import.md) — converting raw cURL commands to HttpRequestOptions
|
|
686
686
|
- [Service Discovery](service-discovery.md) — discovering unknown service endpoints and generating working requests
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
# Service Discovery
|
|
2
2
|
|
|
3
3
|
An agent skill for progressively exploring an unknown service URL and producing a working coded workflow.
|
|
4
4
|
|
|
@@ -501,6 +501,6 @@ User provides URL
|
|
|
501
501
|
|
|
502
502
|
## See Also
|
|
503
503
|
|
|
504
|
-
- [NetHttpRequest Activity](
|
|
504
|
+
- [NetHttpRequest Activity](../activities/NetHttpRequest.md) — HTTP activity behavior spec, inputs, outputs, and defaults
|
|
505
505
|
- [cURL Import](curl-import.md) — converting raw cURL commands to HttpRequestOptions
|
|
506
506
|
- [HTTP Request Upgrade](http-request-upgrade.md) — migrating from legacy HTTP Request activity
|