@uipath/skills 1.197.0-preview.0 → 1.197.0
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/plugin.json +4 -1
- package/CODEOWNERS +5 -3
- package/README.md +1 -0
- package/assets/skill-status.json +5 -0
- package/hooks/send-telemetry.sh +42 -18
- package/hooks/suggest-permissions.sh +0 -0
- package/hooks/validate-skill-descriptions.sh +0 -0
- package/package.json +1 -1
- package/skills/uipath-agents/SKILL.md +7 -6
- package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails-recommend.md +5 -3
- package/skills/uipath-agents/references/coded/lifecycle/build.md +1 -0
- package/skills/uipath-agents/references/coded/lifecycle/setup.md +1 -1
- package/skills/uipath-agents/references/coded/quickstart.md +7 -6
- package/skills/uipath-agents/references/lowcode/capabilities/guardrails/guardrails-recommend.md +3 -1
- package/skills/uipath-agents/references/lowcode/capabilities/guardrails/guardrails.md +16 -16
- package/skills/uipath-agents/references/lowcode/capabilities/inline-in-flow/inline-in-flow.md +23 -3
- package/skills/uipath-agents/references/lowcode/critical-rules/conversational-critical-rules.md +2 -2
- package/skills/uipath-agents/references/lowcode/project-lifecycle.md +9 -0
- package/skills/uipath-agents/references/lowcode/prompting/conversational-agent-prompting-guide.md +2 -2
- package/skills/uipath-api-workflow/SKILL.md +31 -11
- package/skills/uipath-api-workflow/references/cli-reference.md +102 -17
- package/skills/uipath-api-workflow/references/troubleshooting.md +16 -5
- package/skills/uipath-api-workflow/references/workflow-file-format.md +25 -7
- package/skills/uipath-coded-apps/SKILL.md +53 -13
- package/skills/uipath-coded-apps/assets/fixtures/governance-dashboard-starter-kit.tar.gz +0 -0
- package/skills/uipath-coded-apps/assets/scripts/dashboards/build-dashboard.mjs +1371 -0
- package/skills/uipath-coded-apps/assets/scripts/dashboards/capability-registry.json +845 -0
- package/skills/uipath-coded-apps/assets/scripts/dashboards/flows/build.mjs +338 -0
- package/skills/uipath-coded-apps/assets/scripts/dashboards/flows/edit.mjs +248 -0
- package/skills/uipath-coded-apps/assets/scripts/dashboards/flows/template.mjs +82 -0
- package/skills/uipath-coded-apps/assets/scripts/dashboards/flows/upgrade.mjs +73 -0
- package/skills/uipath-coded-apps/assets/scripts/dashboards/lifecycle.mjs +207 -0
- package/skills/uipath-coded-apps/assets/scripts/dashboards/setup-admin-folder.mjs +146 -0
- package/skills/uipath-coded-apps/assets/scripts/dashboards/tests/regime-eject.test.mjs +124 -0
- package/skills/uipath-coded-apps/assets/scripts/dashboards/tests/resolution.test.mjs +1635 -0
- package/skills/uipath-coded-apps/assets/templates/web-app-template.md +255 -78
- package/skills/uipath-coded-apps/references/create-web-app.md +63 -27
- package/skills/uipath-coded-apps/references/dashboards/CAPABILITY.md +179 -0
- package/skills/uipath-coded-apps/references/dashboards/aesthetic/charting.md +138 -0
- package/skills/uipath-coded-apps/references/dashboards/aesthetic/layout-patterns.md +152 -0
- package/skills/uipath-coded-apps/references/dashboards/plugins/build/impl.md +423 -0
- package/skills/uipath-coded-apps/references/dashboards/plugins/deploy/impl.md +322 -0
- package/skills/uipath-coded-apps/references/dashboards/primitives/customization.md +66 -0
- package/skills/uipath-coded-apps/references/dashboards/primitives/detail-views.md +64 -0
- package/skills/uipath-coded-apps/references/dashboards/primitives/incremental-editor.md +92 -0
- package/skills/uipath-coded-apps/references/dashboards/primitives/state-file.md +64 -0
- package/skills/uipath-coded-apps/references/dashboards/primitives/tier-resolution.md +474 -0
- package/skills/uipath-coded-apps/references/debug.md +15 -21
- package/skills/uipath-coded-apps/references/oauth-client-setup.md +5 -5
- package/skills/uipath-coded-apps/references/oauth-scopes.md +44 -2
- package/skills/uipath-coded-apps/references/pack-publish-deploy.md +10 -5
- package/skills/uipath-coded-apps/references/patterns.md +10 -5
- package/skills/uipath-coded-apps/references/sdk/agents.md +241 -0
- package/skills/uipath-coded-apps/references/sdk/governance-traces.md +186 -0
- package/skills/uipath-coded-apps/references/sdk/governance.md +72 -0
- package/skills/uipath-coded-apps/references/sdk/imports.md +4 -0
- package/skills/uipath-coded-apps/references/sdk/maestro.md +114 -0
- package/skills/uipath-coded-apps/references/sdk/orchestrator.md +74 -2
- package/skills/uipath-coded-apps/references/sdk/pagination.md +2 -0
- package/skills/uipath-coded-apps/references/sdk/traces.md +89 -0
- package/skills/uipath-coded-apps/references/widgets/validation-station.md +1 -1
- package/skills/{uipath-agents/references/coded/frameworks/coded-functions.md → uipath-functions/SKILL.md} +36 -23
- package/skills/uipath-governance/SKILL.md +37 -8
- package/skills/uipath-governance/references/auth-context.md +101 -0
- package/skills/uipath-governance/references/cli-cheatsheet.md +207 -0
- package/skills/uipath-governance/references/compliance-pack/catalog/impl.md +79 -0
- package/skills/uipath-governance/references/compliance-pack/coverage/impl.md +141 -0
- package/skills/uipath-governance/references/compliance-pack/disable/impl.md +39 -0
- package/skills/uipath-governance/references/compliance-pack/full-apply/impl.md +164 -0
- package/skills/uipath-governance/references/compliance-pack/partial-apply/impl.md +266 -0
- package/skills/uipath-governance/references/compliance-pack/partial-apply/merge-overrides-guide.md +28 -0
- package/skills/uipath-governance/references/compliance-pack/partial-apply/planning.md +82 -0
- package/skills/uipath-governance/references/compliance-pack/partial-apply/synthesize-formdata-guide.md +22 -0
- package/skills/uipath-governance/references/compliance-pack/preview-gate.md +43 -0
- package/skills/uipath-governance/references/compliance-pack/query/impl.md +75 -0
- package/skills/uipath-governance/references/disambiguation-guide.md +15 -0
- package/skills/uipath-governance/scripts/merge-overrides.mjs +81 -0
- package/skills/uipath-governance/scripts/synthesize-formdata.mjs +86 -0
- package/skills/uipath-human-in-the-loop/SKILL.md +30 -25
- package/skills/uipath-human-in-the-loop/references/hitl-node-apptask.md +38 -4
- package/skills/uipath-human-in-the-loop/references/hitl-node-coded-action-app.md +2 -3
- package/skills/uipath-human-in-the-loop/references/hitl-node-quickform.md +92 -34
- package/skills/uipath-ixp/SKILL.md +1 -0
- package/skills/uipath-ixp/references/label-documents-guide.md +3 -1
- package/skills/uipath-maestro-bpmn/validator/bpmn-spec.json +6 -2
- package/skills/uipath-maestro-flow/.maintenance/check-all.sh +0 -0
- package/skills/uipath-maestro-flow/.maintenance/check-anchors.sh +0 -0
- package/skills/uipath-maestro-flow/.maintenance/check-depth.sh +0 -0
- package/skills/uipath-maestro-flow/.maintenance/check-link-text.sh +0 -0
- package/skills/uipath-maestro-flow/.maintenance/check-links.sh +0 -0
- package/skills/uipath-maestro-flow/.maintenance/check-orphans.sh +0 -0
- package/skills/uipath-maestro-flow/.maintenance/check-plugin-pairs.sh +0 -0
- package/skills/uipath-maestro-flow/.maintenance/check-template.sh +0 -0
- package/skills/uipath-maestro-flow/.maintenance/check-uip-commands.sh +0 -0
- package/skills/uipath-maestro-flow/.maintenance/check-versions.sh +0 -0
- package/skills/uipath-maestro-flow/references/author/CAPABILITY.md +1 -1
- package/skills/uipath-maestro-flow/references/author/references/planning-arch.md +2 -2
- package/skills/uipath-maestro-flow/references/author/references/plugins/hitl/impl.md +11 -11
- package/skills/uipath-maestro-flow/references/author/references/plugins/hitl/planning.md +6 -6
- package/skills/uipath-maestro-flow/references/author/references/plugins/inline-agent/impl.md +88 -78
- package/skills/uipath-maestro-flow/references/shared/cli-commands.md +1 -1
- package/skills/uipath-planner/SKILL.md +3 -1
- package/skills/uipath-planner/assets/templates/rpa-sdd-template.md +15 -0
- package/skills/uipath-planner/references/asdd-crosswalk-guide.md +55 -0
- package/skills/uipath-planner/references/attended-reauth-pattern-guide.md +43 -0
- package/skills/uipath-planner/references/multi-skill-patterns-guide.md +2 -0
- package/skills/uipath-planner/references/pdd-analysis-guide.md +1 -0
- package/skills/uipath-planner/references/platform-availability-guide.md +2 -3
- package/skills/uipath-planner/references/product-selection-guide.md +1 -1
- package/skills/uipath-planner/references/sdd-generation-guide.md +11 -5
- package/skills/uipath-planner/scripts/docx-extract.sh +0 -0
- package/skills/uipath-planner/scripts/sdd-to-docx.sh +2 -3
- package/skills/uipath-platform/SKILL.md +3 -4
- package/skills/uipath-platform/references/data-fabric/bulk-import.md +4 -2
- package/skills/uipath-platform/references/data-fabric/choice-sets.md +8 -3
- package/skills/uipath-platform/references/data-fabric/data-fabric.md +74 -25
- package/skills/uipath-platform/references/data-fabric/entity-schema.md +90 -94
- package/skills/uipath-platform/references/data-fabric/file-attachments.md +1 -1
- package/skills/uipath-platform/references/data-fabric/filter-platform-contract.md +1 -1
- package/skills/uipath-platform/references/uip-commands.md +0 -1
- package/skills/uipath-rpa/SKILL.md +11 -2
- package/skills/uipath-rpa/references/cli-reference.md +28 -2
- package/skills/uipath-rpa/references/common-activity-card.md +1 -1
- package/skills/uipath-rpa/references/error-handling-guide.md +381 -0
- package/skills/uipath-rpa/references/reframework-guide.md +2 -0
- package/skills/uipath-rpa/references/testing-guide.md +19 -0
- package/version-manifest.json +1 -1
- /package/{agents → skills/uipath-rpa/agents}/uipath-project-discovery-agent.md +0 -0
package/CODEOWNERS
CHANGED
|
@@ -8,9 +8,6 @@
|
|
|
8
8
|
# Hooks
|
|
9
9
|
/hooks/ @DragosUnguru @RaduAna-Maria
|
|
10
10
|
|
|
11
|
-
# Plugin agents
|
|
12
|
-
/agents/ @RaduAna-Maria
|
|
13
|
-
|
|
14
11
|
# Plugin-namespaced slash commands (e.g., /uipath:install-permissions)
|
|
15
12
|
/commands/ @DragosUnguru @tmatup
|
|
16
13
|
|
|
@@ -66,6 +63,11 @@
|
|
|
66
63
|
/tests/tasks/uipath-agents/lowcode/guardrails/ @apetraru-uipath @valentinabojan @ctiliescuuipath
|
|
67
64
|
/tests/tasks/uipath-agents/coded/guardrails/ @apetraru-uipath @valentinabojan @ctiliescuuipath
|
|
68
65
|
|
|
66
|
+
# Functions skill (Python Coded Functions — Phase 1; JS HTTP/background Phase 2/3)
|
|
67
|
+
/skills/uipath-functions/ @AlexBizon @UiPath/team-coded-agents
|
|
68
|
+
/tests/tasks/uipath-functions/ @AlexBizon @UiPath/team-coded-agents
|
|
69
|
+
/tests/tasks/activation/uipath-functions.jsonl @AlexBizon @UiPath/team-coded-agents
|
|
70
|
+
|
|
69
71
|
# Planner skill (PDD → SDD design + multi-skill task planning)
|
|
70
72
|
/skills/uipath-planner/ @RaduAna-Maria
|
|
71
73
|
/tests/tasks/uipath-planner/ @RaduAna-Maria
|
package/README.md
CHANGED
|
@@ -95,6 +95,7 @@ Every skill's maturity is tracked in [`assets/skill-status.json`](assets/skill-s
|
|
|
95
95
|
| `uipath-coded-apps` | Preview |
|
|
96
96
|
| `uipath-connector-builder` | In-development |
|
|
97
97
|
| `uipath-feedback` | Stable |
|
|
98
|
+
| `uipath-functions` | Preview |
|
|
98
99
|
| `uipath-governance` | In-development |
|
|
99
100
|
| `uipath-human-in-the-loop` | In-development |
|
|
100
101
|
| `uipath-ixp` | In-development |
|
package/assets/skill-status.json
CHANGED
package/hooks/send-telemetry.sh
CHANGED
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
# The CLI (see UiPath/cli#2600) owns transport, the App Insights connection,
|
|
12
12
|
# the event name, the authenticated cloud identity, and the `source:
|
|
13
13
|
# "skills-plugin"` dimension. This hook only derives + sanitizes fields and
|
|
14
|
-
# gates on opt-
|
|
15
|
-
# the CLI and skills ship co-versioned.
|
|
14
|
+
# gates on the opt-out flag; value sanitization stays the hook's responsibility
|
|
15
|
+
# because the CLI and skills ship co-versioned.
|
|
16
16
|
#
|
|
17
17
|
# REGION-SCOPED EXTRACTION (see extract_fields): the payload embeds free-form
|
|
18
18
|
# customer content (prompts, command lines, stdout/stderr, file contents). A
|
|
@@ -23,9 +23,20 @@
|
|
|
23
23
|
# ENVELOPE (top-level) -> toolName, toolUseId, sessionId, permissionMode,
|
|
24
24
|
# durationMs, effortLevel (effort.level), agentType
|
|
25
25
|
# tool_input -> skillName, uipSubcommand (command), fileExtension
|
|
26
|
-
# (file_path), subagentType
|
|
26
|
+
# (file_path), subagentType (subagent_type, or
|
|
27
|
+
# agent_type for a Codex spawn_agent call)
|
|
27
28
|
# tool_response -> outcome (interrupted/success), subagentModel
|
|
28
29
|
# (resolvedModel)
|
|
30
|
+
#
|
|
31
|
+
# CROSS-AGENT: registered as a PostToolUse hook, this also runs under other
|
|
32
|
+
# coding agents that honor hooks.json (e.g. Codex). Codex's envelope matches
|
|
33
|
+
# Claude's (hook_event_name, tool_name, tool_use_id, session_id,
|
|
34
|
+
# permission_mode, tool_input/{command,file_path}), so Bash-`uip` and file
|
|
35
|
+
# attribution work unchanged. Differences handled / accepted: agent spawns use
|
|
36
|
+
# `spawn_agent` + tool_input.agent_type (see is_uipath_call + outkey); Codex
|
|
37
|
+
# omits duration_ms / effort.level (-> durationMs null, effortLevel "") and
|
|
38
|
+
# serializes tool_response as a JSON STRING, not an object, so success /
|
|
39
|
+
# interrupted / resolvedModel are absent and outcome is ok|unknown only.
|
|
29
40
|
# Only derived, low-cardinality, PII-free values ever leave the machine.
|
|
30
41
|
#
|
|
31
42
|
# Non-blocking by contract: registered as an async hook in hooks.json
|
|
@@ -37,9 +48,9 @@
|
|
|
37
48
|
# Structure: pure helpers + side-effecting procedures (below), driven by main()
|
|
38
49
|
# (bottom). Configuration is env only:
|
|
39
50
|
# UIPATH_TELEMETRY_DISABLED Gate. Reuses the uip CLI's variable name.
|
|
40
|
-
#
|
|
41
|
-
# (default) or "
|
|
42
|
-
#
|
|
51
|
+
# Opt-out: send by DEFAULT. Skip ONLY when set to
|
|
52
|
+
# "1". Unset (default) or "0" -> send. Absent is
|
|
53
|
+
# treated as enabled.
|
|
43
54
|
|
|
44
55
|
set +e
|
|
45
56
|
|
|
@@ -64,13 +75,22 @@ extract_fields() {
|
|
|
64
75
|
k=="permission_mode"||k=="duration_ms"||k=="agent_type"|| \
|
|
65
76
|
k=="hook_event_name")
|
|
66
77
|
if (d == 2 && c == "input")
|
|
67
|
-
return (k=="skill"||k=="command"||k=="file_path"||k=="subagent_type"
|
|
78
|
+
return (k=="skill"||k=="command"||k=="file_path"||k=="subagent_type"|| \
|
|
79
|
+
k=="agent_type")
|
|
68
80
|
if (d == 2 && c == "response")
|
|
69
81
|
return (k=="interrupted"||k=="success"||k=="resolvedModel")
|
|
70
82
|
if (d == 2 && c == "effort")
|
|
71
83
|
return (k=="level")
|
|
72
84
|
return 0
|
|
73
85
|
}
|
|
86
|
+
# outkey: remap a JSON key to the field name read_fields expects. Codex
|
|
87
|
+
# spawn_agent carries the spawned type in tool_input.agent_type; normalize
|
|
88
|
+
# it to subagent_type so it lands in the same field as Claude (tool_input.
|
|
89
|
+
# subagent_type) and never collides with the envelope agent_type (agentType).
|
|
90
|
+
function outkey(k, d, c) {
|
|
91
|
+
if (d == 2 && c == "input" && k == "agent_type") return "subagent_type"
|
|
92
|
+
return k
|
|
93
|
+
}
|
|
74
94
|
{ buf = buf $0 "\n" }
|
|
75
95
|
END {
|
|
76
96
|
n = length(buf)
|
|
@@ -88,7 +108,7 @@ extract_fields() {
|
|
|
88
108
|
if (c == "\"") {
|
|
89
109
|
instr = 0
|
|
90
110
|
if (isval) {
|
|
91
|
-
if (buffering) print pkey "\t" cur
|
|
111
|
+
if (buffering) print outkey(pkey, pdepth, ctx) "\t" cur
|
|
92
112
|
pend = 0; isval = 0
|
|
93
113
|
} else {
|
|
94
114
|
laststr = cur
|
|
@@ -137,7 +157,7 @@ extract_fields() {
|
|
|
137
157
|
if (c==","||c=="}"||c=="]"||c==" "||c=="\t"||c=="\n"||c=="\r") break
|
|
138
158
|
lit = lit c; i++
|
|
139
159
|
}
|
|
140
|
-
if (interesting(pkey, pdepth, ctx)) print pkey "\t" lit
|
|
160
|
+
if (interesting(pkey, pdepth, ctx)) print outkey(pkey, pdepth, ctx) "\t" lit
|
|
141
161
|
pend = 0; continue # leave delimiter for the main loop
|
|
142
162
|
}
|
|
143
163
|
i++
|
|
@@ -190,12 +210,15 @@ is_uipath_call() {
|
|
|
190
210
|
Skill)
|
|
191
211
|
case "$skill" in uipath:*|uipath-*) return 0 ;; esac
|
|
192
212
|
;;
|
|
193
|
-
Agent)
|
|
194
|
-
# UiPath agents or
|
|
195
|
-
#
|
|
213
|
+
Agent|spawn_agent)
|
|
214
|
+
# UiPath agents, or a built-in/generic agent type — NOT custom agents from
|
|
215
|
+
# other plugins (`<plugin>:<name>`) or user-defined ones. Claude Code spawns
|
|
216
|
+
# via `Agent` + tool_input.subagent_type; Codex via `spawn_agent` +
|
|
217
|
+
# tool_input.agent_type (the awk normalizes that to subagent_type). `default`
|
|
218
|
+
# is Codex's generic agent — the equivalent of Claude's general-purpose/claude.
|
|
196
219
|
case "$subagent_type" in
|
|
197
220
|
uipath:*|uipath-*) return 0 ;;
|
|
198
|
-
general-purpose|Explore|Plan|claude|claude-code-guide|statusline-setup|fork) return 0 ;;
|
|
221
|
+
general-purpose|Explore|Plan|claude|claude-code-guide|statusline-setup|fork|default) return 0 ;;
|
|
199
222
|
esac
|
|
200
223
|
;;
|
|
201
224
|
Bash|PowerShell)
|
|
@@ -366,9 +389,10 @@ EOF
|
|
|
366
389
|
|
|
367
390
|
# --- main ------------------------------------------------------------------
|
|
368
391
|
main() {
|
|
369
|
-
#
|
|
370
|
-
#
|
|
371
|
-
|
|
392
|
+
# Opt-out: send by default; skip only when telemetry is explicitly disabled
|
|
393
|
+
# (UIPATH_TELEMETRY_DISABLED=1 or =true). Matches the CLI's isTelemetryDisabled()
|
|
394
|
+
# gate, so `uip track` and this hook short-circuit on the same values.
|
|
395
|
+
case "${UIPATH_TELEMETRY_DISABLED:-0}" in 1|true) exit 0 ;; esac
|
|
372
396
|
|
|
373
397
|
payload="$(cat)"
|
|
374
398
|
read_fields "$(printf '%s' "$payload" | extract_fields)"
|
|
@@ -411,8 +435,8 @@ main() {
|
|
|
411
435
|
# `event` key, no envelope, and no `source` (the CLI overrides it).
|
|
412
436
|
#
|
|
413
437
|
# Detached subshell ( cmd & ) survives this hook's exit so the agent never
|
|
414
|
-
# waits. `uip track` is
|
|
415
|
-
#
|
|
438
|
+
# waits. `uip track` is never-fail (exits 0, emits nothing when telemetry is
|
|
439
|
+
# opted out); piping to it is harmless even if the CLI is absent.
|
|
416
440
|
( printf '%s' "$(build_event_json)" | uip track >/dev/null 2>&1 & )
|
|
417
441
|
|
|
418
442
|
exit 0
|
|
File without changes
|
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uipath/skills",
|
|
3
|
-
"version": "1.197.0
|
|
3
|
+
"version": "1.197.0",
|
|
4
4
|
"description": "UiPath agent skills for Claude Code, Codex, Cursor, Copilot, Gemini and OpenCode — RPA, UI automation, UI testing, coded agents/apps/workflows, and troubleshooting. Distributed as the UiPath Claude Code plugin.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "UiPath"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: uipath-agents
|
|
3
|
-
description: "End-to-end work with UiPath Agents of all types: build, integrate with UiPath Products (e.g., Orchestrator, Flow, Maestro), design with UiPath Tools (e.g., Agent Builder/Studio Web), deploy, and configure/validate. Covers Coded Agents (e.g., LangGraph, LlamaIndex, OpenAI Agents) and Low-Code Agents (`agent.json` / Agent Builder).
|
|
3
|
+
description: "End-to-end work with UiPath Agents of all types: build, integrate with UiPath Products (e.g., Orchestrator, Flow, Maestro), design with UiPath Tools (e.g., Agent Builder/Studio Web), deploy, and configure/validate. Covers Coded Agents (e.g., LangGraph, LlamaIndex, OpenAI Agents) and Low-Code Agents (`agent.json` / Agent Builder). For deterministic Python Coded Functions (`uip functions`, `uipath.json` functions map, no agent runtime/LLM)→uipath-functions."
|
|
4
4
|
when_to_use: "Must use when user mentions or implies any Agent lifecycle phase - e.g., auth, design, scaffold, Studio Web sync, flow integration, editing, pack/deploy/version bump, eval, debug, tracing, guardrails, memory spaces, bindings, attachments. Example requests: 'create/build a UiPath agent', 'build a low-code / Agent Builder agent', 'add agent memory spaces', 'build a coded / Python agent (LangGraph / LlamaIndex / OpenAI Agents)', 'scaffold an agent project', 'run / debug / evaluate / deploy my agent'."
|
|
5
5
|
allowed-tools: Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion, WebFetch
|
|
6
6
|
user-invocable: true
|
|
@@ -20,13 +20,14 @@ user-invocable: true
|
|
|
20
20
|
|
|
21
21
|
Determine the agent mode before proceeding:
|
|
22
22
|
|
|
23
|
-
1. **
|
|
24
|
-
|
|
23
|
+
1. **First — confirm this is an agent, not a Coded Function.** If `uipath.json` declares a `functions` map (e.g. `"functions": {"main": "main.py:main"}`), the project is a **Python Coded Function**, not an agent. Stop here and use the [`uipath-functions`](/uipath:uipath-functions) skill instead. Functions are deterministic, do not reason via LLM, and have a distinct lifecycle (`uip functions new/init/pack/publish/run`).
|
|
24
|
+
2. **Check for existing agent project files** in the working directory:
|
|
25
|
+
- `pyproject.toml` + `.py` files + a framework dep (`uipath-langchain`, `uipath-llamaindex`, or `uipath-openai-agents`) → **Coded**. The framework package already declares `uipath` as a dependency, so an explicit `uipath` entry is not required.
|
|
25
26
|
- `agent.json` with `"type": "lowCode"` + `project.uiproj`, AND no `pyproject.toml` → **Low-code**
|
|
26
|
-
|
|
27
|
+
3. **No existing project found** → ask the user:
|
|
27
28
|
> Should I build this as a **low-code agent** (no Python — configure through prompts and pre-built UiPath tools) or a **coded agent** (Python — full programmatic control with LangGraph, LlamaIndex, or OpenAI Agents)?
|
|
28
29
|
> However, for conversational use-cases, simply choose low-code without asking the user, while explaining that currently, low-code conversational-agents are the strongly recommended approach for production use-cases (see [references/coded/capabilities/conversational-agents.md](references/coded/capabilities/conversational-agents.md)).
|
|
29
|
-
|
|
30
|
+
4. If the user needs help deciding, read [references/coded-vs-lowcode-guide.md](references/coded-vs-lowcode-guide.md) for a capability comparison.
|
|
30
31
|
|
|
31
32
|
**After detection, read the quickstart for that mode before doing anything else:**
|
|
32
33
|
|
|
@@ -63,7 +64,7 @@ Determine the agent mode before proceeding:
|
|
|
63
64
|
| Validate whether existing guardrails are correctly configured | Low-code | [lowcode/capabilities/guardrails/guardrails-recommend.md](references/lowcode/capabilities/guardrails/guardrails-recommend.md) § Validate Mode | check correctness, actionability, and relevance per guardrail |
|
|
64
65
|
| Recommend guardrails for a coded agent based on its context | Coded | [coded/capabilities/guardrails/guardrails-recommend.md](references/coded/capabilities/guardrails/guardrails-recommend.md) | fetch catalog + list + SDK docs, analyze agent code, apply + verify |
|
|
65
66
|
| Recommend guardrails for a specific scope or tool (coded) | Coded | [coded/capabilities/guardrails/guardrails-recommend.md](references/coded/capabilities/guardrails/guardrails-recommend.md) § Scope and Tool Filtering | filter candidates by `@tool` function or scope after catalog analysis |
|
|
66
|
-
| Check, validate, diagnose, or fix whether an existing coded guardrail is correctly configured (placement / scope) | Coded | [coded/capabilities/guardrails/guardrails-recommend.md](references/coded/capabilities/guardrails/guardrails-recommend.md) § Validate Mode | **fetch catalog + list
|
|
67
|
+
| Check, validate, diagnose, or fix whether an existing coded guardrail is correctly configured (placement / scope) | Coded | [coded/capabilities/guardrails/guardrails-recommend.md](references/coded/capabilities/guardrails/guardrails-recommend.md) § Validate Mode | **fetch SDK docs first (authoritative for scope/placement)**; also fetch catalog + list for relevance/entitlement — then check correctness, actionability, and relevance — fix in place |
|
|
67
68
|
| Embed a low-code agent inline in a flow, or wire a multi-agent solution | Low-code | [lowcode/lowcode.md](references/lowcode/lowcode.md) § Capability Registry | `lowcode/capabilities/inline-in-flow/inline-in-flow.md`, `lowcode/capabilities/process/solution-agent.md` |
|
|
68
69
|
| Run low-code evaluations | Low-code | [lowcode/evaluations/evaluate.md](references/lowcode/evaluations/evaluate.md) | `lowcode/evaluations/evaluators.md`, `lowcode/evaluations/evaluation-sets.md`, `lowcode/evaluations/running-evaluations.md` |
|
|
69
70
|
| Run offline evals for a published Orchestrator package | Low-code | [lowcode/evaluations/orchestrator-eval-run.md](references/lowcode/evaluations/orchestrator-eval-run.md) | Use `uip or eval run-offline-evals` (requires package published to Orchestrator) |
|
package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails-recommend.md
CHANGED
|
@@ -12,6 +12,8 @@ Both workflows are driven by live data — the catalog (`uip agent guardrails ca
|
|
|
12
12
|
|
|
13
13
|
## Step 0 — Fetch Catalog, Available Validators, and SDK Docs (MANDATORY — do this before any analysis)
|
|
14
14
|
|
|
15
|
+
> Full three-fetch mandate applies to **Recommend mode**. In **Validate mode** of an existing guardrail the SDK docs are the authoritative, sufficient source for a validator's scope/stage — `catalog` (relevance metadata) and `list` (tenant entitlement) are recommended cross-checks, not a hard prerequisite for a scope/placement fix. See [Validate Mode](#validate-mode).
|
|
16
|
+
|
|
15
17
|
### Catalog (cacheable — 30-minute TTL)
|
|
16
18
|
|
|
17
19
|
The catalog is the same for all tenants (authored metadata, rarely changes). Cache it locally for 30 minutes to avoid redundant calls.
|
|
@@ -219,7 +221,7 @@ Report to the user:
|
|
|
219
221
|
|
|
220
222
|
Use when the agent already has guardrails and the user asks whether they are correctly configured or appropriate.
|
|
221
223
|
|
|
222
|
-
**
|
|
224
|
+
**Fetch the SDK docs first (WebFetch) — they are the authoritative source** for which Python class corresponds to which `validator_id` and which scopes/stages each class supports; a scope/placement diagnosis is grounded there. Also run the `catalog` and `list` fetches to support the Relevance (`when_not_to_use`) and entitlement checks below — recommended, but not a hard prerequisite once the SDK docs settle the scope question.
|
|
223
225
|
|
|
224
226
|
For each existing guardrail discovered in the Python file (Step 1 from Recommend Mode):
|
|
225
227
|
|
|
@@ -238,7 +240,7 @@ From the SDK docs and the catalog, look up the validator class referenced in the
|
|
|
238
240
|
|
|
239
241
|
### Actionability Check
|
|
240
242
|
|
|
241
|
-
1.
|
|
243
|
+
1. Read the validator's allowed scopes and per-scope stages from the **SDK docs** (authoritative for coded); cross-check against the `catalog` entry's `allowed_scopes` when it was fetched.
|
|
242
244
|
2. Confirm the in-code scope is permitted:
|
|
243
245
|
- Middleware — every `GuardrailScope` in the `scopes=[...]` argument is in `allowed_scopes`.
|
|
244
246
|
- Decorator — the function the `@guardrail` decorates matches the implied scope: `@tool` for Tool scope, LLM factory for LLM scope, agent factory for Agent scope.
|
|
@@ -270,7 +272,7 @@ python3 -c "import ast; ast.parse(open('graph.py').read())"
|
|
|
270
272
|
|
|
271
273
|
## Critical Rules
|
|
272
274
|
|
|
273
|
-
1. **
|
|
275
|
+
1. **Recommend mode / net-new adds:** fetch catalog first (use cache if fresh), guardrails list second (no cache), and the two SDK doc pages via WebFetch third (no cache) — all three required before any analysis or code edit. **Validate mode of an existing guardrail:** the SDK docs are the authoritative, sufficient grounding for a scope/placement fix; still fetch catalog + list for the Relevance and entitlement checks, but they are not a hard prerequisite.
|
|
274
276
|
2. **If `GuardrailCatalogUnavailable`** → surface the message and stop. Do not fall back to guessing or hardcoded recommendations.
|
|
275
277
|
3. **Only recommend `Available` validators**. Mention `Unauthorised` ones to the user so they can contact their administrator.
|
|
276
278
|
4. **Every recommendation must cite** the catalog entry's `when_to_use` or a specific `use_cases` item that matched the agent's context. Do not recommend a guardrail without explaining why it applies.
|
|
@@ -45,6 +45,7 @@ Load capability references **only if the task requires them** — do not preload
|
|
|
45
45
|
|
|
46
46
|
## Additional Instructions
|
|
47
47
|
|
|
48
|
+
- **File/document input → `Attachment`, never a filesystem path string.** If the prompt says the agent "takes a CSV/PDF/file as input" (or similar), read `../capabilities/file-attachments.md` before defining the `Input` model. A `str` path field runs locally with `uip codedagent run` but breaks on Studio Web/Orchestrator, where no such path exists in the container.
|
|
48
49
|
- **Select a framework before writing any code.** Infer from the prompt if possible (tools/orchestration → LangGraph, RAG → LlamaIndex, simple LLM → OpenAI Agents, no LLM → Coded Function). If ambiguous, ask the user to choose.
|
|
49
50
|
- **Structured input contract → not OpenAI Agents.** OpenAI Agents always require a `messages` input field and cannot express an input contract without it (see `../frameworks/openai-agents-integration.md` § Input). When the user needs a strict typed/structured input (e.g. a single named field, no `messages`), choose LangGraph (custom `StateGraph` with arbitrary input state) instead. Do NOT silently fall back to a Coded Function to satisfy the input shape — a Coded Function produces `ProjectType: Function`, not a coded agent, so it does not fulfill a request for an agent.
|
|
50
51
|
- **Read ONLY the single framework reference** for the selected framework before writing code. Do NOT read other framework references or capability references unless the task explicitly requires that capability.
|
|
@@ -94,7 +94,7 @@ Edit the scaffolded `main.py`'s `Input` / `Output` models and `async def main` t
|
|
|
94
94
|
```
|
|
95
95
|
|
|
96
96
|
**Key fields:**
|
|
97
|
-
- **`runtimeOptions.isConversational`** -
|
|
97
|
+
- **`runtimeOptions.isConversational`** - scaffold defaults to `false` (single-shot). Building a chat/conversational agent? Flip to `true` BEFORE `uip codedagent init` so `entry-points.json` gets the chat shape. See [conversational-agents](../capabilities/conversational-agents.md).
|
|
98
98
|
- **`packOptions`** - Control which files are included when packaging for deployment
|
|
99
99
|
- **`functions`** - Entrypoint mappings (format: `"file_path:function_name"`)
|
|
100
100
|
|
|
@@ -313,14 +313,15 @@ Execute the following in order, end-to-end, in one pass — do not pause for con
|
|
|
313
313
|
|
|
314
314
|
## Framework Selection
|
|
315
315
|
|
|
316
|
-
|
|
316
|
+
> **First — is this an agent at all?** If the task is deterministic logic with no LLM reasoning (validate data, call an API with custom auth, transform records, upload/download files), it's a **Python Coded Function** — not an agent. Use the [`uipath-functions`](/uipath:uipath-functions) skill instead of this one. Coded Functions use typed I/O (`@dataclass`, Pydantic `BaseModel`, or a thin Python class with typed annotations) and a `functions` map in `uipath.json`; what distinguishes an agent is LLM reasoning and a framework graph.
|
|
317
317
|
|
|
318
|
-
|
|
319
|
-
2. **LangGraph** — StateGraph with conditional routing, tool use, interrupts. Best for complex LLM agents.
|
|
320
|
-
3. **LlamaIndex** — Workflow with events and RAG support. Best for knowledge retrieval.
|
|
321
|
-
4. **OpenAI Agents** — Lightweight agent with tools and handoffs. Best for simple LLM agents; lacks HITL, process invocation, and state persistence.
|
|
318
|
+
If the task needs LLM reasoning, infer the framework from the user's prompt when possible. If ambiguous, ask them to choose:
|
|
322
319
|
|
|
323
|
-
**
|
|
320
|
+
1. **LangGraph** (recommended — best integrated with the UiPath ecosystem) — StateGraph with conditional routing, tool use, interrupts. Best for complex LLM agents.
|
|
321
|
+
2. **LlamaIndex** — Workflow with events and RAG support. Most complete LangGraph alternative.
|
|
322
|
+
3. **OpenAI Agents** — Lightweight agent with tools and handoffs. Best for simple LLM agents; lacks HITL, process invocation, and state persistence.
|
|
323
|
+
|
|
324
|
+
**Inference hints:** mentions of tools/tool calling, multi-step, or orchestration → LangGraph. Simple handoffs or lightweight LLM → OpenAI Agents. No LLM needed → not an agent — use [`uipath-functions`](/uipath:uipath-functions). Summarize / research / synthesize over PDF or TXT (incl. bucket files, attachments) → not a framework choice — see [capabilities/deeprag/planning.md](capabilities/deeprag/planning.md). Per-row CSV extraction → see [capabilities/batch-transform/planning.md](capabilities/batch-transform/planning.md). When in doubt, ask.
|
|
324
325
|
|
|
325
326
|
**Always tell the user which framework you selected and why** before proceeding to build. Example: "I'll use **LangGraph** for this agent since it involves tool calling and multi-step orchestration."
|
|
326
327
|
|
package/skills/uipath-agents/references/lowcode/capabilities/guardrails/guardrails-recommend.md
CHANGED
|
@@ -119,6 +119,8 @@ When a validator supports **more than one scope** (e.g. `pii_detection` allows A
|
|
|
119
119
|
|
|
120
120
|
Concretely: **PII detection meant to stop the agent handling personal data goes at `selector.scopes: ["Agent"]`, not `["Llm"]`** — both are listed in `AllowedScopes` for `pii_detection`, but Agent · PRE blocks the run earlier (before the LLM call) and covers the whole agent, not just one model invocation. Only drop to a narrower scope when the validator does not support the broader one (`prompt_injection` and `user_prompt_attacks` are Llm-only, so Llm · PRE is the earliest available for them) or when the user explicitly asks for a narrower scope.
|
|
121
121
|
|
|
122
|
+
> **Conversational agents: this entire table is autonomous-only.** Built-in validators (any `$guardrailType: "builtInValidator"` — the validators returned by `uip agent guardrails list`) are **not usable on conversational agents** (`agent.json` → `metadata.isConversational: true` / `settings.engine: "conversational-v1"`). Do NOT recommend or author any `builtInValidator` for a conversational agent. The only guardrails that run are `$guardrailType: "custom"` deterministic rules (word/number/boolean/always) scoped to a `Tool`. If the user asks for built-in-style detection (PII, harmful content, injection) on a conversational agent, explain it is autonomous-only and offer a Custom deterministic Tool guardrail or an autonomous agent. Detect `isConversational` before applying the preference table. See [../../critical-rules/conversational-critical-rules.md](../../critical-rules/conversational-critical-rules.md) Critical Rule 1.
|
|
123
|
+
|
|
122
124
|
Always confirm the chosen scope is in the validator's `AllowedScopes` from the guardrails list — never assume a scope the catalog/SDK does not permit.
|
|
123
125
|
|
|
124
126
|
### Step 5 — Choose the Action
|
|
@@ -218,7 +220,7 @@ If the user asks to fix identified issues: apply corrections to `agent.json`, ru
|
|
|
218
220
|
4. **Every recommendation must cite** the catalog entry's `when_to_use` or a specific `use_cases` item that matched the agent's context. Do not recommend a guardrail without explaining why it applies.
|
|
219
221
|
5. **Never recommend two validators with the same `security_category` at the same scope and stage** (e.g. `prompt_injection` + `user_prompt_attacks` at Llm PRE). De-duplicate per Step 3: drop catalog-deprecated entries, keep the best fit, mention the alternative. Derive the grouping and deprecation from the catalog's own fields — do not hardcode validator names.
|
|
220
222
|
6. **Default the action to the catalog example's `action_type`; never silently downgrade `block` → `log`.** Security-critical guardrails (`adversarial_input`, `content_safety`) default to `{"$actionType": "block"}`. If you use `{"$actionType": "log"}` for a guardrail whose catalog default is `block`, state it and the reason in the report (Step 5).
|
|
221
|
-
7. **Block as early as possible — pick the outermost scope the validator allows.** For input protection (PII, jailbreak, injection) prefer `selector.scopes: ["Agent"]` over `["Llm"]` over `["Tool"]`, so the run halts before the LLM call. PII meant to stop the agent handling personal data goes at **Agent**, not Llm. Only narrow when the validator is scope-restricted (e.g. `prompt_injection` / `user_prompt_attacks` are Llm-only) or the user asks for a narrower scope. See Step 4.
|
|
223
|
+
7. **Block as early as possible — pick the outermost scope the validator allows.** For input protection (PII, jailbreak, injection) prefer `selector.scopes: ["Agent"]` over `["Llm"]` over `["Tool"]`, so the run halts before the LLM call. PII meant to stop the agent handling personal data goes at **Agent**, not Llm. Only narrow when the validator is scope-restricted (e.g. `prompt_injection` / `user_prompt_attacks` are Llm-only) or the user asks for a narrower scope. See Step 4. **Exception — conversational agents: built-in validators are NOT usable at all** (Critical Rule 1); this whole preference is autonomous-only. Detect `isConversational` first — if true, do not author any `builtInValidator`; conversational agents run only Custom deterministic `Tool` guardrails.
|
|
222
224
|
8. **For Tool scope**: verify the tool exists in `resources/` before writing `matchNames`. If the agent has no tool resources, do not add a Tool-scoped guardrail.
|
|
223
225
|
9. **Correctness validation uses `uip agent guardrails list` output** — `Parameters[].Type`, `Options`, `KeySource`, `Min`, `Max`, `Step` are the authoritative source for all parameter rules. Do not hardcode validator-specific knowledge.
|
|
224
226
|
10. **The cache file is `.guardrails-catalog-cache.json`** in the working directory. Add it to `.gitignore` if one exists.
|
|
@@ -8,11 +8,11 @@ Two types exist:
|
|
|
8
8
|
- **`custom`** — deterministic rules you define (word matching, number comparison, boolean checks, universal triggers)
|
|
9
9
|
- **`builtInValidator`** — UiPath Guardrails API validators (PII detection, harmful content, prompt injection, IP protection, user prompt attacks)
|
|
10
10
|
|
|
11
|
-
> **Autonomous agents:** All guardrails are configured at the `agent.json` root `guardrails` array. **Conversational agents:**
|
|
11
|
+
> **Autonomous agents:** All guardrails are configured at the `agent.json` root `guardrails` array. **Conversational agents:** the `agent.json` root `guardrails[]` is **authoritative** (source for the Studio Web UI and both runtimes); each Tool-scoped guardrail is also mirrored into the tool's `resources/<Tool>/resource.json` → `guardrail.policies[]` — see § Conversational Support below.
|
|
12
12
|
|
|
13
13
|
## Conversational Support
|
|
14
14
|
|
|
15
|
-
**Status: Tool
|
|
15
|
+
**Status: Custom (deterministic) `Tool`-scoped guardrails ONLY. No built-in validators.** Built-in validators (any `$guardrailType: "builtInValidator"` — the validators returned by `uip agent guardrails list`; see the [Validators Quick Reference](#validators-quick-reference)) are autonomous-only — the conversational runtime never runs them, at any scope. The only guardrails that run are `$guardrailType: "custom"` deterministic rules (word/number/boolean/always) with `selector.scopes: ["Tool"]`. Write each as the **same object (same `id`) in two places** — the `agent.json` root `guardrails[]` is **authoritative** (source for the Studio Web UI and both runtimes); the tool's `resources/<Tool>/resource.json` → `guardrail.policies[]` is its **mirror**. Write both (the CLI doesn't auto-sync), but a guardrail present only in the tool resource is invisible in Studio Web and does not run on the Unified (Python) runtime. `"Agent"` and `"Llm"` scopes are not available. If asked for PII / harmful-content / injection detection, explain built-in validators are autonomous-only and offer a Custom Tool guardrail or an autonomous agent instead.
|
|
16
16
|
|
|
17
17
|
This restriction is enforced as [../../critical-rules/conversational-critical-rules.md](../../critical-rules/conversational-critical-rules.md) Critical Rule 1.
|
|
18
18
|
|
|
@@ -34,7 +34,7 @@ Every guardrail object in the `guardrails` array shares these base fields:
|
|
|
34
34
|
|
|
35
35
|
The `selector` field controls where the guardrail applies.
|
|
36
36
|
|
|
37
|
-
> **Conversational agents —
|
|
37
|
+
> **Conversational agents — Custom (deterministic) `Tool` guardrails ONLY; no `builtInValidator` at all. `"Agent"`/`"Llm"` scopes are NOT available.** (see [../../critical-rules/conversational-critical-rules.md](../../critical-rules/conversational-critical-rules.md) Rule 1).
|
|
38
38
|
|
|
39
39
|
```json
|
|
40
40
|
"selector": {
|
|
@@ -102,7 +102,7 @@ Each entry in the `Data` array contains:
|
|
|
102
102
|
|
|
103
103
|
Do not hardcode assumptions about scope/stage support or availability.
|
|
104
104
|
|
|
105
|
-
> **Conversational override** (see [../../critical-rules/conversational-critical-rules.md](../../critical-rules/conversational-critical-rules.md) Critical Rule 1)**.** `AllowedScopes` describes what
|
|
105
|
+
> **Conversational override** (see [../../critical-rules/conversational-critical-rules.md](../../critical-rules/conversational-critical-rules.md) Critical Rule 1)**.** `AllowedScopes` describes what a **built-in validator's** schema accepts — but built-in validators are **not usable at all** on conversational agents (they are autonomous-only). Do NOT author any `builtInValidator` guardrail for a conversational agent, at any scope. The only guardrails the conversational runtime runs are `$guardrailType: "custom"` deterministic rules scoped to `Tool`.
|
|
106
106
|
|
|
107
107
|
## Actions
|
|
108
108
|
|
|
@@ -569,24 +569,24 @@ Built-in validators call the UiPath Guardrails API. They have a `validatorType`
|
|
|
569
569
|
|
|
570
570
|
### Validators Quick Reference
|
|
571
571
|
|
|
572
|
-
> **
|
|
572
|
+
> **These are all `builtInValidator` guardrails — autonomous-only. NONE are usable on conversational agents** (see [../../critical-rules/conversational-critical-rules.md](../../critical-rules/conversational-critical-rules.md) Critical Rule 1); the conversational runtime runs only Custom deterministic `Tool` guardrails. The table below describes autonomous support.
|
|
573
573
|
|
|
574
574
|
| Validator | Scopes (autonomous) | Conversational | Stages | Supported Actions |
|
|
575
575
|
|-----------|---------------------|----------------|--------|-------------------|
|
|
576
|
-
| `pii_detection` | Agent, Llm, Tool | **
|
|
577
|
-
| `prompt_injection` | Llm | **Not usable** (
|
|
578
|
-
| `harmful_content` | Agent, Llm, Tool | **
|
|
579
|
-
| `intellectual_property` | Llm, Agent | **Not usable** (
|
|
580
|
-
| `user_prompt_attacks` | Llm | **Not usable** (
|
|
576
|
+
| `pii_detection` | Agent, Llm, Tool | **Not usable** (autonomous-only) | Pre + Post | Block, Log, Escalate |
|
|
577
|
+
| `prompt_injection` | Llm | **Not usable** (autonomous-only) | Pre only | Block, Log, Escalate |
|
|
578
|
+
| `harmful_content` | Agent, Llm, Tool | **Not usable** (autonomous-only) | Pre + Post | Block, Log, Escalate |
|
|
579
|
+
| `intellectual_property` | Llm, Agent | **Not usable** (autonomous-only) | Post only | Block, Log, Escalate |
|
|
580
|
+
| `user_prompt_attacks` | Llm | **Not usable** (autonomous-only) | Pre only | Block, Log, Escalate |
|
|
581
581
|
|
|
582
|
-
Run `uip agent guardrails list --output json` to get the authoritative list. Only use validators where `Status` is `"Available"`. Use the output to populate `validatorType`, `selector.scopes`, and `validatorParameters` fields. **
|
|
582
|
+
Run `uip agent guardrails list --output json` to get the authoritative list. Only use validators where `Status` is `"Available"`. Use the output to populate `validatorType`, `selector.scopes`, and `validatorParameters` fields. **These built-in validators are autonomous-only — do NOT author any of them on a conversational agent (they will not run at any scope). Conversational agents use Custom deterministic `Tool` guardrails only.**
|
|
583
583
|
**How to map `uip agent guardrails list` output to guardrail JSON:**
|
|
584
584
|
|
|
585
585
|
| CLI field | Maps to |
|
|
586
586
|
|-----------|---------|
|
|
587
587
|
| `Status` | Gate check — only proceed if `"Available"` |
|
|
588
588
|
| `Validator` | `validatorType` value |
|
|
589
|
-
| `AllowedScopes` | Valid values for `selector.scopes` (autonomous
|
|
589
|
+
| `AllowedScopes` | Valid values for `selector.scopes` (autonomous only — built-in validators are not usable on conversational agents; see [../../critical-rules/conversational-critical-rules.md](../../critical-rules/conversational-critical-rules.md) Critical Rule 1). |
|
|
590
590
|
| `GuardrailStages[scope]` | Valid execution stages for that scope |
|
|
591
591
|
| `Parameters[].Id` | `validatorParameters[].id` |
|
|
592
592
|
| `Parameters[].Type` | `validatorParameters[].$parameterType` |
|
|
@@ -981,7 +981,7 @@ Add the `guardrails` array at the agent.json root level alongside `settings`, `m
|
|
|
981
981
|
4. **Do not add `intellectual_property` to Tool scope** — only `"Llm"` and `"Agent"` scopes are supported.
|
|
982
982
|
5. **Do not add `intellectual_property` to PreExecution stage** — PostExecution only.
|
|
983
983
|
6. **Do not omit `matchNames` when `Tool` is in `scopes`** — always explicitly list the target tool names. See [matchNames — "All Tools" Behavior](#matchnames--all-tools-behavior).
|
|
984
|
-
7. **Do not use `filter` action on built-in validators** — `"$actionType": "filter"` is only supported on deterministic rules.
|
|
984
|
+
7. **Do not use `filter` action on built-in validators** — `"$actionType": "filter"` is only supported on deterministic (`custom`) rules. Every built-in validator (`$guardrailType: "builtInValidator"`) supports only `block`, `log`, and `escalate` (see the [Validators Quick Reference](#validators-quick-reference) § Supported Actions).
|
|
985
985
|
8. **Do not use odd numbers or floats for `harmfulContentEntityThresholds`** — only `0`, `2`, `4`, `6` are valid severity values. Values like `3` or `2.5` cause validation errors.
|
|
986
986
|
9. **Do not add a built-in validator without first running `uip agent guardrails list --output json`** — always fetch the list, verify the validator exists, and confirm `Status` is `"Available"`. Adding an `Unauthorised` or non-existent validator causes runtime failures.
|
|
987
987
|
10. **Do not use Action Center apps with `Type: "VB Action"` or `Type: "Coded"` as escalation targets** — only entries with `Type: "Workflow Action"` can back a guardrail escalation. Always filter `uip solution resources list --kind App` results by this type.
|
|
@@ -1002,15 +1002,15 @@ Use when adding input/output safeguards (PII detection, harmful content blocking
|
|
|
1002
1002
|
|
|
1003
1003
|
> **MANDATORY: Read this file BEFORE writing any guardrail JSON.** The guardrail schema uses discriminator fields (`$actionType`, `$parameterType`, `$ruleType`, `$selectorType`) that cannot be guessed. PII detection uses `$guardrailType: "builtInValidator"` with `validatorType: "pii_detection"` — NOT `$guardrailType: "pii"`. Parameters use `id` (not `name`) and require `$parameterType`. Actions use `$actionType` (not `type`). PII entities are PascalCase (`"Email"`, not `"email_address"`). There is no `pattern`, `target`, or `message` field.
|
|
1004
1004
|
>
|
|
1005
|
-
> **MANDATORY:
|
|
1005
|
+
> **MANDATORY for `builtInValidator` guardrails: run `uip agent guardrails list --output json` before writing one.** The command gives you the exact `$parameterType` values, parameter `id` names, and allowed scopes — values you cannot safely derive from the type name alone. Skipping it leads to invalid parameter shapes that fail schema validation. **Custom guardrails (`$guardrailType: "custom"`) do NOT need this step** — their rules (word/number/boolean/always), operators, and actions are fully specified here in this reference and use no validator catalog. Only run `guardrails list` for a custom guardrail if you are unsure whether the request should instead use a built-in validator.
|
|
1006
1006
|
|
|
1007
|
-
### Step 0 — Fetch available validators (mandatory for
|
|
1007
|
+
### Step 0 — Fetch available validators (mandatory for `builtInValidator` guardrails; skip for custom-only)
|
|
1008
1008
|
|
|
1009
1009
|
```bash
|
|
1010
1010
|
uip agent guardrails list --output json
|
|
1011
1011
|
```
|
|
1012
1012
|
|
|
1013
|
-
Build a lookup of `{ validatorId: status }` from `Data`. Required
|
|
1013
|
+
Build a lookup of `{ validatorId: status }` from `Data`. Required before adding any built-in validator — confirms the correct parameter shapes and scope/stage constraints. Skip this step when the guardrail is purely custom (deterministic rules); the validator catalog does not apply to custom rules.
|
|
1014
1014
|
|
|
1015
1015
|
### Step 1 — Verify existing agent
|
|
1016
1016
|
|
package/skills/uipath-agents/references/lowcode/capabilities/inline-in-flow/inline-in-flow.md
CHANGED
|
@@ -73,8 +73,8 @@ Generate a unique UUID (e.g., `5029c8a8-799b-426a-803f-c4ec75255439`). Create a
|
|
|
73
73
|
|
|
74
74
|
Same schema as a standalone agent (see [../../agent-definition.md](../../agent-definition.md)), with these conventions:
|
|
75
75
|
- `projectId` matches the folder name UUID
|
|
76
|
-
- `inputSchema.properties
|
|
77
|
-
- `messages
|
|
76
|
+
- `inputSchema.properties`: one `<triggerNodeId>__output__<global>` key per flow input — **mandatory**. See [§ Wiring Flow Inputs Into an Inline Agent](#wiring-flow-inputs-into-an-inline-agent-required).
|
|
77
|
+
- `messages[].content`: reference inputs as `{{input.<triggerNodeId>__output__<global>}}` (the `input.` form). Then run `uip agent refresh` to regenerate `contentTokens` from `content` — don't hand-author them. See [§ Wiring Flow Inputs Into an Inline Agent](#wiring-flow-inputs-into-an-inline-agent-required).
|
|
78
78
|
- `guardrails: []` at root level — can be populated with guardrail objects. See [../guardrails/guardrails.md](../guardrails/guardrails.md)
|
|
79
79
|
- No `metadata.targetRuntime` field
|
|
80
80
|
|
|
@@ -126,6 +126,24 @@ features/
|
|
|
126
126
|
resources/
|
|
127
127
|
```
|
|
128
128
|
|
|
129
|
+
## Wiring Flow Inputs Into an Inline Agent (required)
|
|
130
|
+
|
|
131
|
+
**The CLI does not derive the input wiring** — you author it; `refresh` only regenerates `contentTokens` from `content` (it does not fill `inputSchema` or `agentInputVariables`). `flow validate` *does* catch a prompt↔schema mismatch (a `{{input.K}}` that's malformed or names a key not in `inputSchema`), but **not** a missing/wrong node `agentInputVariables` binding — that delivery gap surfaces only at `flow debug`.
|
|
132
|
+
|
|
133
|
+
This skill authors the **`agent.json` side** (flatten rule: `$vars.<trigger>.output.<var>` → `<trigger>__output__<var>`):
|
|
134
|
+
- `inputSchema.properties` — one `<trigger>__output__<var>` key per input (mandatory; binds the delivered `JobArguments` into the agent's `input`). Empty schema → the agent sees the literal `input.<key>` token even when the value arrived.
|
|
135
|
+
- `messages[].content` — reference each input as `{{input.<trigger>__output__<var>}}` (the `input.` form, **not** `$vars`), plus a real system prompt. `content` is the source of truth; run `uip agent refresh` to generate the matching `contentTokens` from it (don't hand-author them).
|
|
136
|
+
|
|
137
|
+
```json
|
|
138
|
+
"inputSchema": { "properties": {
|
|
139
|
+
"start__output__disputeSummary": { "type": "string", "description": "Bound from $vars.start.output.disputeSummary" }
|
|
140
|
+
} },
|
|
141
|
+
"messages": [{ "role": "user",
|
|
142
|
+
"content": "Write a billing resolution email for this dispute:\n{{input.start__output__disputeSummary}}" }]
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
The **flow side** — the trigger global and the node `agentInputVariables[]` binding (the only thing the converter turns into `JobArguments`) — is authored through the `uipath-maestro-flow` skill (Critical Rule 15). The full four-piece contract, the converter behavior, and the `content`↔`contentTokens` invariant + validator errors all live there: [inline-agent prompt-wiring guide § Wiring Flow Variables into Agent Prompts](../../../../../uipath-maestro-flow/references/author/references/plugins/inline-agent/impl.md#wiring-flow-variables-into-agent-prompts).
|
|
146
|
+
|
|
129
147
|
## Refresh and Validate Inline Agent
|
|
130
148
|
|
|
131
149
|
```bash
|
|
@@ -133,7 +151,9 @@ uip agent refresh "<FlowProjectDir>/<projectId>" --inline-in-flow --output json
|
|
|
133
151
|
uip agent validate "<FlowProjectDir>/<projectId>" --inline-in-flow --output json
|
|
134
152
|
```
|
|
135
153
|
|
|
136
|
-
`--inline-in-flow` skips `entry-points.json`
|
|
154
|
+
`--inline-in-flow` skips the `entry-points.json` / `project.uiproj` checks. In inline mode `refresh` regenerates `messages[].contentTokens` (from `content`) and `bindings_v2.json` — **not** `entry-points.json` (standalone only). `validate` is read-only (it flags `contentTokens` drift but doesn't repair it — fix by re-running `refresh`).
|
|
155
|
+
|
|
156
|
+
**Verify at `flow debug`, not after refresh:** `refresh` never fills `inputSchema` — it is non-empty only because you authored it (`DerivedFiles: 0` is normal and does **not** mean input is missing). The end-to-end check (run `uip maestro flow debug` and confirm the agent resolves the input rather than echoing the literal `input.<key>` token) is owned by the `uipath-maestro-flow` skill — see its [inline-agent guide § Debug](../../../../../uipath-maestro-flow/references/author/references/plugins/inline-agent/impl.md#debug).
|
|
137
157
|
|
|
138
158
|
For inline agents with external capabilities (tools, contexts, memory spaces, or escalations), pass `--bindings-target` to **`refresh`** after all flow graph edits:
|
|
139
159
|
|
package/skills/uipath-agents/references/lowcode/critical-rules/conversational-critical-rules.md
CHANGED
|
@@ -4,13 +4,13 @@ These rules are the canonical source for rules specific to low-code conversation
|
|
|
4
4
|
|
|
5
5
|
## Critical Rules
|
|
6
6
|
|
|
7
|
-
1. **Conversational agents support
|
|
7
|
+
1. **Conversational agents support ONLY Custom (deterministic) guardrails scoped to a Tool.** Built-in validators (any `$guardrailType: "builtInValidator"` — the validators returned by `uip agent guardrails list`) are **autonomous-only**. Author only `$guardrailType: "custom"` deterministic rules (word/number/boolean/always) with `selector.scopes: ["Tool"]` at the `agent.json` root `guardrails[]` (authoritative for UI + runtime), mirrored into each affected tool's `resources/<Tool>/resource.json` → `guardrail.policies[]`. Write both (the CLI doesn't auto-sync), but treat the root as the source of truth — a guardrail only in the tool resource is invisible in Studio Web and does not run on the Unified (Python) runtime. `"Agent"` and `"Llm"` scopes are not available. If asked for PII / harmful-content / injection detection on a conversational agent, explain built-in validators are autonomous-only and offer a Custom deterministic Tool guardrail. See [../capabilities/guardrails/guardrails.md § Conversational Support](../capabilities/guardrails/guardrails.md#conversational-support).
|
|
8
8
|
|
|
9
9
|
## What NOT to Do
|
|
10
10
|
|
|
11
11
|
1. **Do not add properties to the `outputSchema` of a conversational agent.** After initialization, leave `outputSchema` empty. The conversational agent runtime streams responses/tool-call events during the execution, so the final output is not relevant for the end-user in the conversation.
|
|
12
12
|
|
|
13
|
-
2. **Do not set `selector.scopes` to anything other than `["Tool"]
|
|
13
|
+
2. **Do not author any `builtInValidator` guardrail on a conversational agent, and do not set `selector.scopes` to anything other than `["Tool"]`.** Built-in validators (any `$guardrailType: "builtInValidator"`) are autonomous-only; Agent- and Llm-scoped guardrails are likewise not honored. Author the Custom `Tool` guardrail at the `agent.json` root `guardrails[]` (authoritative for UI + runtime) and mirror it into the tool's `resources/<Tool>/resource.json` → `guardrail.policies[]`; a guardrail only in the tool resource is invisible in Studio Web and does not run on the Unified (Python) runtime, per Critical Rule 1.
|
|
14
14
|
|
|
15
15
|
3. **Do not remove the user-message `messages[1]`, despite it being irrelevant for Conversational Agents.** Simply leave the message content fields blank. The runtime or other APIs may currently require its presence, so it should be simply left untouched with empty content after the conversational agent project is initialized.
|
|
16
16
|
|
|
@@ -115,6 +115,15 @@ uip agent refresh [path] --output json
|
|
|
115
115
|
|
|
116
116
|
**Workflow:** run `uip agent refresh` to apply writes and regenerate derived files, then `uip agent validate` to verify the project is clean. For routine edits with no schema migration pending, refresh is still needed to keep `entry-points.json` and `bindings_v2.json` in sync.
|
|
117
117
|
|
|
118
|
+
### Common refresh / validate errors
|
|
119
|
+
|
|
120
|
+
`refresh` and `validate` share the same static checks. Two errors are easy to misread — resolve at the source, do not spelunk the CLI schema:
|
|
121
|
+
|
|
122
|
+
| Error (in `Data.Errors[]`) | Cause | Fix |
|
|
123
|
+
|---|---|---|
|
|
124
|
+
| `resources/<Folder>/resource.json: folder must be named after the resource name "<Name>" (found "<Folder>")` | Resource folder name must exactly equal the resource's `name` field — case- and whitespace-sensitive (`Count Sources`, not `CountSources`). | Rename the folder to match `name` verbatim, spaces included. |
|
|
125
|
+
| `resources/<Name>/resource.json: Invalid input` (no field path) | A required field on that tool resource is missing or malformed. The path-less message does not name it. Most common cause: the required `guardrail` object is absent (every tool resource requires it, schema V21+). | Add `"guardrail": { "policies": [] }` to the resource. If already present, diff the resource against a CLI-generated one (`uip agent tool add`) for the missing/mistyped field. |
|
|
126
|
+
|
|
118
127
|
### `uip agent memory`
|
|
119
128
|
|
|
120
129
|
Manage low-code agent memory space features and seed items. These commands write `features/{FeatureName}/feature.json`; run refresh and validate afterwards to regenerate bindings.
|
package/skills/uipath-agents/references/lowcode/prompting/conversational-agent-prompting-guide.md
CHANGED
|
@@ -108,7 +108,7 @@ User message: `""` — left blank. The Conversational Service injects the user t
|
|
|
108
108
|
| `settings.temperature` | `0` | Raise for open-ended brainstorming or casual chats. Keep `0` for factual support flows. |
|
|
109
109
|
| `settings.maxTokens` | `64000` | Set ≤ the model's `MaxTokens` cap — see [model-selection-guide.md](../model-selection-guide.md#1-discover-primary-path). |
|
|
110
110
|
| `settings.model` | `anthropic.claude-sonnet-4-5-20250929-v1:0` | **Always verify** — discover + select per [model-selection-guide.md](../model-selection-guide.md). |
|
|
111
|
-
| `guardrails` | `[]` | Tool-
|
|
111
|
+
| `guardrails` | `[]` | Custom (deterministic) Tool guardrails only — no built-in validators; mirror in tool `resource.json`. See [capabilities/guardrails/guardrails.md](../capabilities/guardrails/guardrails.md) ([critical-rules/conversational-critical-rules.md](../critical-rules/conversational-critical-rules.md) Critical Rule 1). |
|
|
112
112
|
|
|
113
113
|
## Anti-patterns
|
|
114
114
|
|
|
@@ -118,6 +118,6 @@ User message: `""` — left blank. The Conversational Service injects the user t
|
|
|
118
118
|
- **Populating `outputSchema`** — runtime streams events; populated schemas never get filled and confuse the agent ([critical-rules/conversational-critical-rules.md](../critical-rules/conversational-critical-rules.md) Anti-pattern 1).
|
|
119
119
|
- **Templating data into the user message** — the user message content stays blank; per-exchange context goes into the **system prompt** via `inputSchema` templating.
|
|
120
120
|
- **Adding `messages` or `uipath__*` to `inputSchema`** — reserved names; runtime injects ([critical-rules/conversational-critical-rules.md](../critical-rules/conversational-critical-rules.md) Anti-patterns 4 and 5).
|
|
121
|
-
- **Using
|
|
121
|
+
- **Using built-in validator guardrails (PII, harmful content, etc.) or `Agent`/`Llm` scopes** — built-in validators are autonomous-only and silently ignored; conversational agents support only Custom deterministic `Tool`-scoped guardrails ([critical-rules/conversational-critical-rules.md](../critical-rules/conversational-critical-rules.md) Critical Rule 1).
|
|
122
122
|
- **Defining citation-generation format in the system prompt** — agent runtime wraps citation formatting around the prompt; redefining it conflicts or confuses citation generation (see § 1 callout).
|
|
123
123
|
- **Cargo-culted `temperature`** — copying a nonzero temperature into a deterministic, factual-based conversation task.
|