@uipath/skills 1.200.0 → 1.201.0-preview.433
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.cursor-plugin/plugin.json +32 -0
- package/CODEOWNERS +25 -4
- package/README.md +1 -0
- package/assets/skill-status.json +8 -0
- package/assets/uip-catalog-snapshot.json +113 -41
- package/assets/uipath-icon.png +0 -0
- package/commands/install-permissions.md +1 -0
- package/package.json +3 -2
- package/skills/uipath-admin/SKILL.md +1 -1
- package/skills/uipath-admin/references/authorization/permission-catalog.md +61 -1
- package/skills/uipath-admin/references/authorization/role-management.md +3 -1
- package/skills/uipath-admin/references/diagnose/references/failure-modes.md +29 -4
- package/skills/uipath-admin/references/diagnose/references/troubleshooting-guide.md +13 -0
- package/skills/uipath-agents/SKILL.md +1 -0
- package/skills/uipath-agents/references/coded/capabilities/context-grounding.md +3 -3
- package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails-recommend.md +6 -1
- package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails.md +89 -1
- package/skills/uipath-agents/references/coded/embedding-in-flows.md +17 -1
- package/skills/uipath-agents/references/coded/frameworks/llamaindex-integration.md +64 -2
- package/skills/uipath-agents/references/coded/lifecycle/deployment.md +3 -0
- package/skills/uipath-agents/references/coded/lifecycle/environment-variables.md +90 -0
- package/skills/uipath-agents/references/coded/lifecycle/file-sync.md +3 -1
- package/skills/uipath-agents/references/coded/quickstart.md +10 -6
- package/skills/uipath-agents/references/lowcode/capabilities/guardrails/guardrails-recommend.md +20 -5
- package/skills/uipath-agents/references/lowcode/capabilities/guardrails/guardrails.md +13 -0
- package/skills/uipath-agents/references/lowcode/capabilities/inline-in-flow/inline-in-flow.md +1 -3
- package/skills/uipath-api-workflow/references/operating-published-workflows.md +17 -6
- package/skills/uipath-automationhub/SKILL.md +58 -0
- package/skills/uipath-automationhub/references/api-endpoints.md +140 -0
- package/skills/uipath-automationhub/references/get-process.md +69 -0
- package/skills/uipath-automationhub/references/publish-process.md +171 -0
- package/skills/uipath-coded-apps/SKILL.md +24 -11
- package/skills/uipath-coded-apps/references/commands-reference.md +29 -29
- package/skills/uipath-coded-apps/references/create-action-app.md +4 -0
- package/skills/uipath-coded-apps/references/create-web-app.md +10 -0
- package/skills/uipath-coded-apps/references/debug.md +16 -0
- package/skills/uipath-coded-apps/references/oauth-client-setup.md +3 -1
- package/skills/uipath-coded-apps/references/oauth-scopes.md +39 -4
- package/skills/uipath-coded-apps/references/pack-publish-deploy.md +37 -21
- package/skills/uipath-coded-apps/references/sdk/conversational-agent.md +2 -0
- package/skills/uipath-coded-apps/references/sdk/data-fabric.md +2 -0
- package/skills/uipath-coded-apps/references/sdk/orchestrator.md +2 -0
- package/skills/uipath-coded-apps/references/widgets/conversational-agent-chat.md +90 -0
- package/skills/uipath-coded-apps/references/widgets/datatable.md +97 -0
- package/skills/uipath-coded-apps/references/widgets/external-auth.md +97 -0
- package/skills/uipath-coded-apps/references/widgets/multi-file-upload.md +98 -0
- package/skills/uipath-coded-apps/references/widgets/pdf-viewer.md +122 -0
- package/skills/uipath-coded-apps/references/widgets/validation-station.md +1 -1
- package/skills/uipath-functions/SKILL.md +11 -0
- package/skills/uipath-insights/SKILL.md +52 -247
- package/skills/uipath-insights/references/filter-discovery-guide.md +106 -0
- package/skills/uipath-insights/references/investigation-playbook-guide.md +24 -16
- package/skills/uipath-insights/references/jobs-commands-guide.md +196 -53
- package/skills/uipath-ixp/SKILL.md +10 -4
- package/skills/uipath-ixp/references/cli-reference.md +59 -5
- package/skills/uipath-ixp/references/label-documents-guide.md +12 -5
- package/skills/uipath-maestro-bpmn/SKILL.md +27 -9
- package/skills/uipath-maestro-bpmn/references/diagnose/references/failure-modes.md +6 -3
- package/skills/uipath-maestro-bpmn/references/operate/CAPABILITY.md +1 -1
- package/skills/uipath-maestro-bpmn/references/operate/references/ship.md +9 -3
- package/skills/uipath-maestro-bpmn/references/registry-workflow.md +1 -1
- package/skills/uipath-maestro-bpmn/references/shared/local-metadata-regeneration-guide.md +18 -11
- package/skills/uipath-maestro-bpmn/references/structural-bpmn.md +13 -7
- package/skills/uipath-maestro-case/SKILL.md +138 -170
- package/skills/uipath-maestro-case/references/bindings-and-expressions.md +14 -1
- package/skills/uipath-maestro-case/references/bindings-v2-sync.md +25 -1
- package/skills/uipath-maestro-case/references/brownfield.md +7 -3
- package/skills/uipath-maestro-case/references/case-commands.md +63 -8
- package/skills/uipath-maestro-case/references/case-editing-operations.md +11 -8
- package/skills/uipath-maestro-case/references/case-schema.md +5 -3
- package/skills/uipath-maestro-case/references/case-spec-input-details.md +4 -0
- package/skills/uipath-maestro-case/references/connector-integration.md +3 -1
- package/skills/uipath-maestro-case/references/connector-trigger-impl.md +236 -0
- package/skills/uipath-maestro-case/references/connector-trigger-planning.md +300 -0
- package/skills/uipath-maestro-case/references/entry-points-sync.md +2 -0
- package/skills/uipath-maestro-case/references/evals/evals.json +33 -40
- package/skills/uipath-maestro-case/references/implementation.md +58 -13
- package/skills/uipath-maestro-case/references/phased-execution.md +87 -20
- package/skills/uipath-maestro-case/references/placeholder-tasks.md +3 -1
- package/skills/uipath-maestro-case/references/planning.md +26 -16
- package/skills/uipath-maestro-case/references/plugins/case/impl-json.md +2 -5
- package/skills/uipath-maestro-case/references/plugins/case/planning.md +3 -1
- package/skills/uipath-maestro-case/references/plugins/conditions/case-exit-conditions/impl-json.md +3 -1
- package/skills/uipath-maestro-case/references/plugins/conditions/case-exit-conditions/planning.md +5 -3
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-entry-conditions/impl-json.md +4 -2
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-entry-conditions/planning.md +6 -4
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-exit-conditions/impl-json.md +6 -4
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-exit-conditions/planning.md +6 -4
- package/skills/uipath-maestro-case/references/plugins/conditions/task-entry-conditions/impl-json.md +42 -3
- package/skills/uipath-maestro-case/references/plugins/conditions/task-entry-conditions/planning.md +6 -4
- package/skills/uipath-maestro-case/references/plugins/logging/impl-json.md +50 -32
- package/skills/uipath-maestro-case/references/plugins/sla/impl-json.md +2 -4
- package/skills/uipath-maestro-case/references/plugins/sla/planning.md +3 -1
- package/skills/uipath-maestro-case/references/plugins/stages/impl-json.md +1 -4
- package/skills/uipath-maestro-case/references/plugins/stages/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/action/impl-json.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/action/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/agent/impl-json.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/agent/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/impl-json.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/planning.md +5 -3
- package/skills/uipath-maestro-case/references/plugins/tasks/case-management/impl-json.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/case-management/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-activity/impl-json.md +43 -13
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-activity/planning.md +4 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-trigger/impl-json.md +10 -7
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-trigger/planning.md +5 -3
- package/skills/uipath-maestro-case/references/plugins/tasks/create-inline-common.md +3 -1
- package/skills/uipath-maestro-case/references/plugins/tasks/process/impl-json.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/process/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/rpa/impl-json.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/rpa/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/wait-for-timer/impl-json.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/wait-for-timer/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/triggers/event/impl-json.md +9 -6
- package/skills/uipath-maestro-case/references/plugins/triggers/event/planning.md +5 -3
- package/skills/uipath-maestro-case/references/plugins/triggers/manual/impl-json.md +1 -4
- package/skills/uipath-maestro-case/references/plugins/triggers/manual/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/triggers/timer/impl-json.md +1 -4
- package/skills/uipath-maestro-case/references/plugins/triggers/timer/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/variables/bindings/impl-json.md +3 -1
- package/skills/uipath-maestro-case/references/plugins/variables/global-vars/impl-json.md +40 -2
- package/skills/uipath-maestro-case/references/plugins/variables/global-vars/planning.md +12 -2
- package/skills/uipath-maestro-case/references/plugins/variables/io-binding/impl-json.md +8 -6
- package/skills/uipath-maestro-case/references/plugins/variables/io-binding/planning.md +17 -3
- package/skills/uipath-maestro-case/references/registry-discovery.md +9 -5
- package/skills/uipath-maestro-case/references/sla-response-shapes.md +3 -1
- package/skills/uipath-maestro-case/references/troubleshooting-guide.md +2 -0
- package/skills/uipath-maestro-case/scripts/audit_plan.py +231 -0
- package/skills/uipath-maestro-flow/references/author/CAPABILITY.md +8 -4
- package/skills/uipath-maestro-flow/references/author/references/editing-operations-cli.md +5 -3
- package/skills/uipath-maestro-flow/references/author/references/editing-operations-json.md +14 -4
- package/skills/uipath-maestro-flow/references/author/references/editing-operations.md +3 -3
- package/skills/uipath-maestro-flow/references/author/references/greenfield.md +12 -3
- package/skills/uipath-maestro-flow/references/author/references/planning-arch.md +17 -13
- package/skills/uipath-maestro-flow/references/author/references/planning-impl.md +1 -1
- package/skills/uipath-maestro-flow/references/author/references/plugins/agent/impl.md +49 -4
- package/skills/uipath-maestro-flow/references/author/references/plugins/connector/impl.md +59 -17
- package/skills/uipath-maestro-flow/references/author/references/plugins/connector-trigger/impl.md +3 -3
- package/skills/uipath-maestro-flow/references/author/references/plugins/http/impl-connector.md +3 -1
- package/skills/uipath-maestro-flow/references/author/references/plugins/http/impl-manual.md +3 -1
- package/skills/uipath-maestro-flow/references/author/references/plugins/http/impl.md +5 -2
- package/skills/uipath-maestro-flow/references/author/references/plugins/inline-agent/impl.md +31 -16
- package/skills/uipath-maestro-flow/references/author/references/plugins/ixp/impl.md +13 -4
- package/skills/uipath-maestro-flow/references/author/references/plugins/loop/impl.md +185 -25
- package/skills/uipath-maestro-flow/references/author/references/plugins/loop/planning.md +18 -10
- package/skills/uipath-maestro-flow/references/author/references/plugins/rpa/impl.md +9 -3
- package/skills/uipath-maestro-flow/references/author/references/plugins/terminate/impl.md +6 -3
- package/skills/uipath-maestro-flow/references/diagnose/references/failure-modes.md +68 -0
- package/skills/uipath-maestro-flow/references/shared/cli-commands.md +2 -1
- package/skills/uipath-maestro-flow/references/shared/file-format.md +36 -9
- package/skills/uipath-maestro-flow/references/shared/node-output-wiring.md +1 -1
- package/skills/uipath-maestro-flow/references/shared/ux-narration-and-todos.md +1 -1
- package/skills/uipath-maestro-flow/references/shared/variables-and-expressions.md +77 -20
- package/skills/uipath-planner/SKILL.md +30 -12
- package/skills/{uipath-maestro-case/assets/templates/sdd-template-examples.md → uipath-planner/assets/templates/case-sdd-examples.md} +18 -32
- package/skills/uipath-planner/assets/templates/case-sdd-template.md +289 -309
- package/skills/uipath-planner/references/case-design-lane-guide.md +288 -0
- package/skills/uipath-planner/references/multi-skill-patterns-guide.md +1 -1
- package/skills/uipath-planner/references/package-selection-guide.md +2 -2
- package/skills/uipath-planner/references/pdd-driven-lane-guide.md +5 -1
- package/skills/uipath-planner/references/product-selection-guide.md +2 -2
- package/skills/uipath-planner/references/sdd-generation-guide.md +16 -15
- package/skills/uipath-planner/scripts/audit_sdd.py +437 -0
- package/skills/uipath-platform/SKILL.md +7 -2
- package/skills/uipath-platform/references/data-fabric/choice-sets.md +1 -1
- package/skills/uipath-platform/references/data-fabric/data-fabric.md +1 -1
- package/skills/uipath-platform/references/data-fabric/entity-schema.md +37 -21
- package/skills/uipath-platform/references/data-fabric/file-attachments.md +1 -1
- package/skills/uipath-platform/references/guardrails/byo-configurations.md +205 -0
- package/skills/uipath-platform/references/traces/feedback.md +4 -2
- package/skills/uipath-platform/references/uip-commands.md +2 -2
- package/skills/uipath-review/SKILL.md +55 -52
- package/skills/uipath-review/references/agents/agent-grading-rubric.md +62 -40
- package/skills/uipath-review/references/agents/agents-coded-rules.md +7 -1
- package/skills/uipath-review/references/agents/agents-lowcode-rules.md +21 -2
- package/skills/uipath-review/references/agents/guardrails/coded-guardrails-review.md +78 -13
- package/skills/uipath-review/references/agents/guardrails/guardrails-review.md +11 -4
- package/skills/uipath-review/references/architecture-assessment-guide.md +1 -1
- package/skills/uipath-review/references/review-workflow-guide.md +19 -10
- package/skills/uipath-review/references/rule-catalog-workflow.md +6 -6
- package/skills/uipath-review/references/rule-format.md +1 -1
- package/skills/uipath-rpa/SKILL.md +1 -1
- package/skills/uipath-solution/SKILL.md +4 -4
- package/skills/uipath-solution/references/solution-overview.md +7 -2
- package/skills/uipath-tasks/SKILL.md +27 -1
- package/skills/uipath-tasks/references/task-catalogs.md +79 -0
- package/skills/uipath-tasks/references/task-data.md +45 -0
- package/skills/uipath-tasks/references/task-metadata.md +69 -0
- package/skills/uipath-test/SKILL.md +3 -3
- package/skills/uipath-test/references/test-result-report-guide.md +16 -1
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/ambiguous-selector.md +1 -1
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/scope-container-wrong-page.md +1 -1
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/verify-execution-failure.md +2 -2
- package/skills/uipath-troubleshoot/references/products/agents/playbooks/guardrail-violation.md +12 -0
- package/version-manifest.json +2 -2
- package/skills/uipath-maestro-case/assets/templates/sdd-template.md +0 -667
- package/skills/uipath-maestro-case/references/connector-trigger-common.md +0 -511
- package/skills/uipath-maestro-case/references/phase-0-interview.md +0 -279
- package/skills/uipath-maestro-case/references/sdd-generation-rules.md +0 -1026
- package/skills/uipath-review/references/agents/agent-common-issues.md +0 -401
- package/skills/uipath-review/references/agents/agent-review-checklist.md +0 -379
- /package/skills/{uipath-maestro-case → uipath-planner}/assets/templates/sdd-viewer.html +0 -0
|
@@ -44,6 +44,7 @@ Determine the agent mode before proceeding:
|
|
|
44
44
|
| Create/build/deploy coded agent | Coded | [coded/quickstart.md](references/coded/quickstart.md) | `coded/lifecycle/*`, `coded/frameworks/*` |
|
|
45
45
|
| Select coded framework | Coded | [coded/quickstart.md](references/coded/quickstart.md) § Framework Selection | |
|
|
46
46
|
| Add coded capabilities (HITL, RAG, tracing) | Coded | [coded/quickstart.md](references/coded/quickstart.md) | `coded/capabilities/*` |
|
|
47
|
+
| Set a coded agent's environment variables, or reference an Orchestrator asset from one (`%ASSETS/<ASSET_NAME>%`) | Coded | [coded/lifecycle/environment-variables.md](references/coded/lifecycle/environment-variables.md) | `coded/lifecycle/file-sync.md` for what `.env` does and does not carry |
|
|
47
48
|
| Call an Integration Service connector (Slack, Jira, Web Search) from a coded agent | Coded | [coded/capabilities/integration-service.md](references/coded/capabilities/integration-service.md) **+ then immediately read** [`uipath-platform/references/integration-service/agent-workflow.md`](../uipath-platform/references/integration-service/agent-workflow.md) — discovery lives there, not in `uipath-agents` | `coded/capabilities/sdk-services.md` § Connections |
|
|
48
49
|
| Run coded evaluations | Coded | [coded/quickstart.md](references/coded/quickstart.md) § Evaluate | `coded/lifecycle/evaluate.md` |
|
|
49
50
|
| Create or scaffold a new low-code agent project | Low-code | [lowcode/lowcode.md](references/lowcode/lowcode.md) § Quick Start | `lowcode/project-lifecycle.md`, `lowcode/agent-definition.md` |
|
|
@@ -21,16 +21,16 @@ To create, ingest, poll, search, or delete the index from the CLI instead of the
|
|
|
21
21
|
|
|
22
22
|
## Folder Targeting
|
|
23
23
|
|
|
24
|
-
Context Grounding indexes live in Orchestrator folders.
|
|
24
|
+
Context Grounding indexes live in Orchestrator folders. Always pass a folder identifier, even when the index lives in the execution folder resolved from your auth context — omitting it can leave the `index` binding incorrectly applied, and the service may return `400 FolderKey required`. `ContextGroundingRetriever` accepts `folder_path` or `folder_key`; `ContextGroundingVectorStore` accepts `folder_path`.
|
|
25
25
|
|
|
26
26
|
```python
|
|
27
27
|
retriever = ContextGroundingRetriever(index_name="my_index", folder_path="Shared/Knowledge")
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
Add the supported folder argument for the component you use when cross-folder access is needed.
|
|
31
|
-
|
|
32
30
|
## Core Components
|
|
33
31
|
|
|
32
|
+
Import paths below are LangChain/LangGraph (`uipath_langchain.*`). For LlamaIndex agents, use `uipath_llamaindex.retrievers.ContextGroundingRetriever` / `uipath_llamaindex.query_engines.ContextGroundingQueryEngine` — see [frameworks/llamaindex-integration.md](../frameworks/llamaindex-integration.md) § Context Grounding (RAG).
|
|
33
|
+
|
|
34
34
|
### ContextGroundingRetriever
|
|
35
35
|
|
|
36
36
|
A document retrieval system using vector search to find relevant information based on natural language queries.
|
package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails-recommend.md
CHANGED
|
@@ -54,6 +54,8 @@ uip agent guardrails list --output json
|
|
|
54
54
|
|
|
55
55
|
Build a lookup of `{ validatorId: status }` from the `Data` array. You will use this to filter recommendations.
|
|
56
56
|
|
|
57
|
+
> **`Validator` is not unique — key on `(Validator, IsByo)`, not `Validator` alone.** A tenant with a bring-your-own (BYOG) configuration for a validator has two entries sharing the same `Validator` name — one built-in, one BYO (`IsByo: true`, carrying `ByoValidatorName`/`ByoConnectionId`/`ByoConfigurationId`). Collapsing them loses the distinction and can point the discovery/wiring flow at the wrong entry. See [guardrails.md § BYO (bring-your-own) validators](guardrails.md#byo-bring-your-own-validators).
|
|
58
|
+
|
|
57
59
|
> **Catalog vs. list — the key distinction:** The catalog lists all guardrails that exist on the platform (with rich metadata for reasoning). The guardrails list returns only those accessible to this tenant. Only recommend validators where `Status == "Available"` in the list.
|
|
58
60
|
|
|
59
61
|
### SDK Documentation (NEVER skipped — Python class names)
|
|
@@ -115,6 +117,8 @@ For **each entry** in the catalog (`guardrails[]` array from the cached JSON):
|
|
|
115
117
|
|
|
116
118
|
Do **not** apply predetermined knowledge about which guardrail maps to which schema field. Let the catalog entry's authored fields drive every recommendation decision.
|
|
117
119
|
|
|
120
|
+
> **Built-in vs. BYO — default to built-in.** When a matched validator has both a built-in entry and one or more `Available` BYO (`IsByo: true`) entries, recommend the standard SDK validator/middleware (built-in) by default, and mention a BYO alternative exists. Only wire in a specific BYO configuration when the user names it or asks for BYO explicitly — see [guardrails.md § BYO (bring-your-own) validators](guardrails.md#byo-bring-your-own-validators) for how that's actually referenced in code.
|
|
121
|
+
|
|
118
122
|
### Step 3 — De-duplicate Overlapping Validators
|
|
119
123
|
|
|
120
124
|
Several catalog validators address the same threat. Recommending more than one of them at the same scope and stage is redundant — it doubles latency and cost on every call for marginal benefit (the canonical case is `prompt_injection` and `user_prompt_attacks`: both have `security_category: "adversarial_input"` and both run at LLM · PRE).
|
|
@@ -235,7 +239,7 @@ For each existing guardrail discovered in the Python file (Step 1 from Recommend
|
|
|
235
239
|
|
|
236
240
|
### Correctness Check
|
|
237
241
|
|
|
238
|
-
From the SDK docs and the catalog, look up the validator class referenced in the code
|
|
242
|
+
From the SDK docs and the catalog, look up the validator class referenced in the code. **If the guardrails list has more than one entry sharing the referenced `Validator` name** (built-in plus BYOG), disambiguate by whether the code wires a BYO validator construct (`ByoValidator(...)` or `UiPathByoGuardrailMiddleware(...)`, identified by its `validator_name`) or the plain SDK validator/middleware class — match against the corresponding list entry's `IsByo` before reading `Parameters`/scopes for that entry.
|
|
239
243
|
|
|
240
244
|
| Aspect | What to check |
|
|
241
245
|
|--------|---------------|
|
|
@@ -295,3 +299,4 @@ python3 -c "import ast; ast.parse(open('graph.py').read())"
|
|
|
295
299
|
13. **Class names and enum names come from the SDK docs** — never invent them. The SDK evolves; relying on memory produces stale code. For **import paths**, use the `langchain/guardrails/` page when the agent is LangChain (paths live in `uipath_langchain.guardrails`); for every other framework use the `core/guardrails/` page (paths live in `uipath.platform.guardrails`). See Rule 8.
|
|
296
300
|
14. **Read [guardrails.md](guardrails.md) before writing any Python** — the middleware spread (`*`), decorator placement above `@tool` / factory, factory refactor, and import-source rules are specified there and cannot be safely inferred.
|
|
297
301
|
15. **`EscalateAction` is the human-in-the-loop option only when the SDK docs expose it** — recommend it when the user wants a person to review/approve a flagged item rather than hard-block it. It requires a **deployed Action App** declared in `bindings.json` (`app_name` / `app_folder_path`) through the coded-agent bindings sync workflow; if the docs, app, or binding prerequisite is unavailable, fall back to Block/Log and say so — never silently drop the requested escalation. See Step 6 and [guardrails.md § Escalation action (HITL)](guardrails.md#escalation-action-human-in-the-loop).
|
|
302
|
+
16. **`Validator` is not unique — disambiguate built-in vs. BYO by `IsByo` before matching on name.** A tenant can have both a built-in and one or more BYOG entries sharing the same `Validator` name. Key any lookup on `(Validator, IsByo)`, and default recommendations/wiring to the built-in SDK validator/middleware unless the user names a BYO configuration or asks for BYO. Never fabricate the BYO validator construct from memory — see [guardrails.md § BYO (bring-your-own) validators](guardrails.md#byo-bring-your-own-validators).
|
|
@@ -57,6 +57,87 @@ If the requested validator has `Status != "Available"` → tell the user and sto
|
|
|
57
57
|
|
|
58
58
|
---
|
|
59
59
|
|
|
60
|
+
## BYO (bring-your-own) validators
|
|
61
|
+
|
|
62
|
+
A validator can be fulfilled by a tenant-registered **external** provider (a "BYOG" configuration — e.g. Azure AI Content Safety, Databricks AI Guardrails) instead of UiPath's own built-in implementation. Registration is admin-side — Admin → AI Trust Layer → Guardrails Configurations, or `uip guardrails byo-configurations create` (see [uipath-platform § BYO Guardrail Configurations](/uipath:uipath-platform)); this section covers wiring an already-registered BYOG configuration into agent code.
|
|
63
|
+
|
|
64
|
+
**Same rule as [Step 0](#step-0--fetch-official-documentation): confirm the constructor signature against the fetched SDK docs before writing code, and never invent arguments.** The two constructs below exist today; if a future fetch shows one missing or renamed, follow the fetched page and say so rather than writing what's here from memory.
|
|
65
|
+
|
|
66
|
+
### Which construct exists where
|
|
67
|
+
|
|
68
|
+
| Construct | Style | Ships in | Notes |
|
|
69
|
+
|---|---|---|---|
|
|
70
|
+
| `UiPathByoGuardrailMiddleware` | middleware | `uipath_langchain.guardrails` **only** | LangChain/LangGraph agents only — there is no framework-agnostic middleware. |
|
|
71
|
+
| `ByoValidator` | decorator | `uipath.platform.guardrails` (**core**), re-exported by `uipath_langchain.guardrails` | Framework-agnostic class, so BYO is **not** LangChain-only. |
|
|
72
|
+
|
|
73
|
+
> **BYO is not LangChain-only** — a common wrong inference, because the core SDK docs page historically omitted `ByoValidator`. The class is in core. What *is* LangChain-only is the middleware.
|
|
74
|
+
>
|
|
75
|
+
> The usual [Imports Pattern](#imports-pattern) rule still governs which module you import from: a LangChain agent imports from `uipath_langchain.guardrails` (adapter registration — see Critical Rule 8), everything else from `uipath.platform.guardrails`. And on a framework with no published adapter, the decorator carries the same silent-no-op risk it does for every other validator — that caveat belongs to the decorator *mechanism*, not to BYO.
|
|
76
|
+
|
|
77
|
+
**Wire format** — both coded styles emit `validatorType: "byo"` plus `byoValidatorName: "<name>"`. The only field shared with low-code is `byoValidatorName`: a low-code `agent.json` pins the same BYOG configuration by adding `byoValidatorName` while keeping `validatorType` = the real validator id (e.g. `pii_detection`). `validatorType: "byo"` is the coded SDK wire format — never write it in a low-code `agent.json`.
|
|
78
|
+
|
|
79
|
+
Discovery steps (in addition to the fetched docs):
|
|
80
|
+
|
|
81
|
+
1. Confirm a BYOG configuration exists for the desired validator and get its identifying value:
|
|
82
|
+
```bash
|
|
83
|
+
uip agent guardrails list --byo --output json
|
|
84
|
+
```
|
|
85
|
+
Read `ByoValidatorName` from the matching entry — the validator name is the **only** value the code passes; it is unique across the tenant, and the platform resolves the underlying connection server-side from the stored configuration. Do not pass a connection id, and never guess or fabricate the name.
|
|
86
|
+
2. Before wiring it in, cross-check the configuration's health on the admin side:
|
|
87
|
+
```bash
|
|
88
|
+
uip guardrails byo-configurations list --output json
|
|
89
|
+
```
|
|
90
|
+
Confirm `Enabled: true` and `ValidConnection: true` for the matching `ValidatorName`. A disabled configuration or a broken connection means the guardrail will fail at runtime (or silently fall back, depending on `FallbackOnUiPath`) — tell the user rather than wiring it in anyway. The admin-side fix (re-enable via `update <id> --enabled`, repoint the connection via `update <id> --connection-id`) is covered by [uipath-platform § BYO Guardrail Configurations](/uipath:uipath-platform).
|
|
91
|
+
|
|
92
|
+
### BYO middleware (LangChain only)
|
|
93
|
+
|
|
94
|
+
`validator_name`, `scopes`, and `action` are all required. `validator_parameters` is optional passthrough — BYO parameter schemas are connector-defined, so read the ids and allowed values from that entry's `Parameters` array in the discovery output rather than guessing. Spread with `*` like every other middleware.
|
|
95
|
+
|
|
96
|
+
```python
|
|
97
|
+
from uipath_langchain.guardrails import (
|
|
98
|
+
BlockAction,
|
|
99
|
+
UiPathByoGuardrailMiddleware,
|
|
100
|
+
)
|
|
101
|
+
from uipath.core.guardrails import GuardrailScope
|
|
102
|
+
|
|
103
|
+
*UiPathByoGuardrailMiddleware(
|
|
104
|
+
validator_name="my-pii-guardrail", # ByoValidatorName from `guardrails list --byo`
|
|
105
|
+
scopes=[GuardrailScope.AGENT],
|
|
106
|
+
action=BlockAction(),
|
|
107
|
+
),
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
For Tool scope, pass the tool objects as usual:
|
|
111
|
+
|
|
112
|
+
```python
|
|
113
|
+
*UiPathByoGuardrailMiddleware(
|
|
114
|
+
validator_name="my-pii-guardrail",
|
|
115
|
+
scopes=[GuardrailScope.TOOL],
|
|
116
|
+
action=BlockAction(),
|
|
117
|
+
tools=[lookup_account_info], # required whenever TOOL is in scopes
|
|
118
|
+
),
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### BYO decorator (any framework)
|
|
122
|
+
|
|
123
|
+
The validator name is the **first positional argument**; `parameters` is keyword-only. Scope comes from the decorated target (`@tool` → Tool, LLM factory → Llm, agent factory → Agent), exactly as for the built-in validators.
|
|
124
|
+
|
|
125
|
+
```python
|
|
126
|
+
from uipath_langchain.guardrails import BlockAction, ByoValidator, guardrail
|
|
127
|
+
|
|
128
|
+
byog_pii = ByoValidator("my-pii-guardrail")
|
|
129
|
+
|
|
130
|
+
@guardrail(validator=byog_pii, action=BlockAction())
|
|
131
|
+
def create_support_agent():
|
|
132
|
+
return create_agent(model=llm, tools=[lookup_account_info])
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
On a non-LangChain framework the same code works with `from uipath.platform.guardrails import BlockAction, ByoValidator, guardrail` — subject to the adapter caveat above.
|
|
136
|
+
|
|
137
|
+
**Stages:** BYO validator capabilities are connector-defined and can't be known statically, so no stage restriction is applied — all stages are supported, and the middleware defaults to `PRE_AND_POST`.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
60
141
|
## Step 1 — Style Choice
|
|
61
142
|
|
|
62
143
|
If the user has not specified **middleware** or **decorator**, ask before generating any code. Do not implement both unless explicitly asked.
|
|
@@ -178,7 +259,11 @@ Pass `scopes=[GuardrailScope.LLM]` or `[GuardrailScope.AGENT]`. No `tools=`.
|
|
|
178
259
|
|
|
179
260
|
### Stage is fixed by the validator — no `stage=` on middleware
|
|
180
261
|
|
|
181
|
-
Middleware classes take
|
|
262
|
+
Middleware classes for the **fixed-stage** validators take no `stage` argument: `UiPathUserPromptAttacksMiddleware`, `UiPathPromptInjectionMiddleware` (both PRE-only) and `UiPathIntellectualPropertyMiddleware` (POST-only). Passing `stage=` to those raises `TypeError` — their stage is a property of the validator, not a choice.
|
|
263
|
+
|
|
264
|
+
> Validators whose stage genuinely varies **do** accept `stage=` on the middleware (defaulting to `PRE_AND_POST`) — PII, harmful content, LLM-as-judge, deterministic, and BYO. Confirm against the fetched `langchain/guardrails/` page for the validator you're wiring rather than assuming either way.
|
|
265
|
+
|
|
266
|
+
For BYO middleware specifically, see [BYO (bring-your-own) validators](#byo-bring-your-own-validators).
|
|
182
267
|
|
|
183
268
|
### Intellectual property (output-only) middleware
|
|
184
269
|
|
|
@@ -211,6 +296,8 @@ Runs at POST (checks the LLM's output) — fixed by the validator, not a paramet
|
|
|
211
296
|
|
|
212
297
|
Full documentation and examples: [Core Guardrails](https://uipath.github.io/uipath-python/core/guardrails/)
|
|
213
298
|
|
|
299
|
+
For a bring-your-own (BYOG) validator, see [BYO (bring-your-own) validators](#byo-bring-your-own-validators) — `ByoValidator` slots into the same `@guardrail(validator=..., action=...)` shape as the built-ins.
|
|
300
|
+
|
|
214
301
|
### Tool scope — decorate the `@tool` function
|
|
215
302
|
|
|
216
303
|
Place `@guardrail` **above** `@tool`:
|
|
@@ -398,3 +485,4 @@ For non-LangChain frameworks, there is no published adapter yet, so the decorato
|
|
|
398
485
|
15. **`EscalateAction` requires a deployed Action App** referenced by `app_name` + `app_folder_path` and declared as an `app` resource in **`bindings.json`** — discover it with `uip solution resources list --kind App`, resolve duplicate names by folder, pass the literal name/folder in code (not env vars), and sync bindings with [../../lifecycle/bindings-reference.md](../../lifecycle/bindings-reference.md). Route the task with `TaskRecipient` when the user names a reviewer. See [Escalation action (HITL)](#escalation-action-human-in-the-loop).
|
|
399
486
|
16. **Verify the escalation app schema when tenant access is available** — the app must expose the guardrail review inputs/outputs/outcomes listed in the prerequisite section. If the schema cannot be verified in a local smoke task, say that runtime readiness is unverified.
|
|
400
487
|
17. **A HITL guardrail suspends, it doesn't block.** On violation `EscalateAction` suspends via `interrupt(CreateEscalation(...))`; it terminates **only on Reject** (Approve resumes). Verify by confirming the run suspends + a task is created — never expect a "block" for an escalation guardrail (Rule for the [verification step](#verify-guardrails-are-actually-wired-mandatory-after-writing-for-langchain-ml-guardrails)).
|
|
488
|
+
18. **BYO: pass the validator name and nothing else, and get that name from discovery — never from memory.** `ByoValidatorName` comes from `uip agent guardrails list --byo`; there is **no connection-id argument** in either construct (the platform resolves the connection server-side from the configuration). Pick the construct by style, not by framework: `UiPathByoGuardrailMiddleware` is LangChain-only, while `ByoValidator` is a **core** class (`uipath.platform.guardrails`) re-exported by `uipath_langchain.guardrails` — so **BYO is not LangChain-only**, and a subagent or stale doc claiming otherwise is wrong. Import per Rule 8 regardless. Cross-check `Enabled`/`ValidConnection` via `uip guardrails byo-configurations list` before wiring one in. See [BYO (bring-your-own) validators](#byo-bring-your-own-validators).
|
|
@@ -98,6 +98,22 @@ Without `--local`, `registry list`/`get` query the tenant registry (Orchestrator
|
|
|
98
98
|
|
|
99
99
|
## Wiring the Agent's Inputs
|
|
100
100
|
|
|
101
|
-
|
|
101
|
+
One `inputs.<field>` entry per property in the agent's input schema (`entry-points.json`, mirrored in the definition's `inputDefinition.properties`). Two valid value shapes, same binding:
|
|
102
|
+
|
|
103
|
+
```json
|
|
104
|
+
"inputs": {
|
|
105
|
+
"<INPUT_FIELD>": {
|
|
106
|
+
"type": "jsExpression",
|
|
107
|
+
"expression": "$vars.<UPSTREAM_NODE_ID>.output.<FIELD>",
|
|
108
|
+
"fieldType": "<FIELD_TYPE>"
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
- `jsExpression` — bare `$vars...` expression, no `=js:` prefix. Upstream values read as `$vars.<nodeId>.output.<field>`; flow globals as `$vars.<global>`.
|
|
114
|
+
- `literal` — text template; static text mixable with `{{ }}` interpolations: `{ "type": "literal", "expression": "{{ $vars.<UPSTREAM_NODE_ID>.output.<FIELD> }}", "fieldType": "<FIELD_TYPE>" }`.
|
|
115
|
+
- `<FIELD_TYPE>` is the property's JSON-schema type from the agent's input schema (e.g. `string`, `boolean`, `number`) — read it from there, do not invent it.
|
|
116
|
+
|
|
117
|
+
NEVER a plain `"=js:..."` string value — it ships as a literal string to the agent activity and fails at runtime with `Cannot find name '<identifier>'`. Complete worked example (trigger → agent → end): uipath-maestro-flow skill, agent-plugin reference § Wiring Inputs.
|
|
102
118
|
|
|
103
119
|
Input-only rule. Mapping the agent's output back to a flow-level global on an End node DOES use `=js:` — see [variables-and-expressions.md § Variable Updates](../../../uipath-maestro-flow/references/shared/variables-and-expressions.md#variable-updates-variableupdates).
|
|
@@ -268,15 +268,41 @@ See `../capabilities/conversational-agents.md` § Running Locally for the `--kee
|
|
|
268
268
|
|
|
269
269
|
### Context Grounding (RAG)
|
|
270
270
|
|
|
271
|
+
Two RAG primitives ship in `uipath-llamaindex`. Pick by workflow shape:
|
|
272
|
+
|
|
273
|
+
| Primitive | Import | Use when |
|
|
274
|
+
|-----------|--------|----------|
|
|
275
|
+
| `ContextGroundingQueryEngine` | `uipath_llamaindex.query_engines` | Retrieval + LLM synthesis in one call, or exposing the index as a `QueryEngineTool` in an agentic workflow. Constructor REQUIRES `response_synthesizer` (no default). |
|
|
276
|
+
| `ContextGroundingRetriever` | `uipath_llamaindex.retrievers` | Deterministic workflow RAG — retrieve raw passages in a `@step`, then synthesize the answer with your own prompt and LLM call. |
|
|
277
|
+
|
|
278
|
+
The query engine wraps `ContextGroundingRetriever` + your synthesizer internally — use the retriever directly when the workflow already has its own synthesis step.
|
|
279
|
+
|
|
280
|
+
> **Prefer using these primitives — not raw `sdk.context_grounding.search()` / `search_async()`.** They return LlamaIndex `NodeWithScore` objects that plug into synthesizers and tools, and declare `index_name` + `folder_path` at one call site — the exact shape of the `index` binding entry (see [../lifecycle/bindings-reference.md](../lifecycle/bindings-reference.md)). `index` bindings have no virtual fallback: the index must exist in Orchestrator before `uip codedagent push`.
|
|
281
|
+
|
|
282
|
+
Both accept `index_name`, `folder_path` (or `folder_key`), and `number_of_results` (default 10). Always pass `folder_path`, even when the index lives in the execution folder resolved from your auth context — omitting it can leave the `index` binding incorrectly applied. Instantiate both inside a `@step` — never at module level (same lazy-client rule as LLMs, § UiPathOpenAI above).
|
|
283
|
+
|
|
284
|
+
#### ContextGroundingQueryEngine
|
|
285
|
+
|
|
286
|
+
Build the required `response_synthesizer` with `get_response_synthesizer(llm=UiPathOpenAI())` — omitting it raises a constructor error:
|
|
287
|
+
|
|
271
288
|
```python
|
|
289
|
+
from llama_index.core.response_synthesizers import get_response_synthesizer
|
|
290
|
+
from uipath_llamaindex.llms import UiPathOpenAI
|
|
272
291
|
from uipath_llamaindex.query_engines import ContextGroundingQueryEngine
|
|
273
|
-
from llama_index.core.tools import QueryEngineTool, ToolMetadata
|
|
274
292
|
|
|
293
|
+
# Inside a @step:
|
|
275
294
|
query_engine = ContextGroundingQueryEngine(
|
|
276
295
|
index_name="my_knowledge_base",
|
|
277
296
|
folder_path="Shared",
|
|
278
|
-
response_synthesizer=
|
|
297
|
+
response_synthesizer=get_response_synthesizer(llm=UiPathOpenAI()),
|
|
279
298
|
)
|
|
299
|
+
response = await query_engine.aquery(ev.question)
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
As an agent tool:
|
|
303
|
+
|
|
304
|
+
```python
|
|
305
|
+
from llama_index.core.tools import QueryEngineTool, ToolMetadata
|
|
280
306
|
|
|
281
307
|
tools = [
|
|
282
308
|
QueryEngineTool(
|
|
@@ -289,6 +315,42 @@ tools = [
|
|
|
289
315
|
]
|
|
290
316
|
```
|
|
291
317
|
|
|
318
|
+
#### Workflow RAG with ContextGroundingRetriever
|
|
319
|
+
|
|
320
|
+
```python
|
|
321
|
+
from llama_index.core.workflow import StartEvent, StopEvent, Workflow, step
|
|
322
|
+
from uipath_llamaindex.llms import UiPathOpenAI
|
|
323
|
+
from uipath_llamaindex.retrievers import ContextGroundingRetriever
|
|
324
|
+
|
|
325
|
+
class QuestionEvent(StartEvent):
|
|
326
|
+
question: str
|
|
327
|
+
|
|
328
|
+
class AnswerEvent(StopEvent):
|
|
329
|
+
answer: str
|
|
330
|
+
|
|
331
|
+
class RagAgent(Workflow):
|
|
332
|
+
@step
|
|
333
|
+
async def answer(self, ev: QuestionEvent) -> AnswerEvent:
|
|
334
|
+
retriever = ContextGroundingRetriever(
|
|
335
|
+
index_name="my_knowledge_base",
|
|
336
|
+
folder_path="Shared",
|
|
337
|
+
number_of_results=5,
|
|
338
|
+
)
|
|
339
|
+
nodes = await retriever.aretrieve(ev.question)
|
|
340
|
+
if not nodes:
|
|
341
|
+
return AnswerEvent(answer="No relevant passages found in the knowledge base.")
|
|
342
|
+
passages = "\n\n".join(n.node.get_content() for n in nodes)
|
|
343
|
+
llm = UiPathOpenAI()
|
|
344
|
+
response = await llm.acomplete(
|
|
345
|
+
"Answer the question using ONLY the passages below. "
|
|
346
|
+
"If they do not answer it, say so.\n\n"
|
|
347
|
+
f"Passages:\n{passages}\n\nQuestion: {ev.question}"
|
|
348
|
+
)
|
|
349
|
+
return AnswerEvent(answer=str(response))
|
|
350
|
+
|
|
351
|
+
workflow = RagAgent(timeout=60)
|
|
352
|
+
```
|
|
353
|
+
|
|
292
354
|
### Human-in-the-Loop
|
|
293
355
|
|
|
294
356
|
```python
|
|
@@ -122,9 +122,12 @@ In all three cases, when the downstream goal is consumption rather than upgrade:
|
|
|
122
122
|
| `pyproject.toml` | You | Project name, version, dependencies |
|
|
123
123
|
| `entry-points.json` | `uip codedagent init` | Entry points and input/output schemas |
|
|
124
124
|
| `bindings.json` | `uip codedagent init` | Runtime bindings |
|
|
125
|
+
| `.env` | You | Local-run environment variables + `UIPATH_PROJECT_ID`. Neither packaged nor pushed — see [environment-variables.md](environment-variables.md) |
|
|
125
126
|
|
|
126
127
|
`uip codedagent deploy` and `invoke` read credentials (`UIPATH_URL`, `UIPATH_ACCESS_TOKEN`, org/tenant identifiers) from your active `uip login` session — no manual `.env` wiring is required.
|
|
127
128
|
|
|
129
|
+
A deployed agent's environment variables come from Orchestrator (process- or job-level), not `.env`. To supply one from an asset instead of a literal, set its value to `%ASSETS/<ASSET_NAME>%` — resolved against the **job's** folder at dispatch. See [environment-variables.md](environment-variables.md).
|
|
130
|
+
|
|
128
131
|
## Typical Flow
|
|
129
132
|
|
|
130
133
|
1. `uip codedagent run <ENTRYPOINT> '<input>'` — verify locally.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Coded Agent Environment Variables
|
|
2
|
+
|
|
3
|
+
Where a coded agent's environment variables are stored, which store the runtime reads, and how to pull a value from an Orchestrator asset instead of hardcoding it.
|
|
4
|
+
|
|
5
|
+
## Three stores, one variable
|
|
6
|
+
|
|
7
|
+
Not the same store. Only one is what the cloud runtime reads.
|
|
8
|
+
|
|
9
|
+
| Store | Read by | Authored with |
|
|
10
|
+
|-------|---------|---------------|
|
|
11
|
+
| `<PROJECT_DIR>/.env` | Local runs only (`uip codedagent run`, `uipath run`) | Edit file directly |
|
|
12
|
+
| Project configuration (AgentHub) | Cloud runtime, every debug and Studio Web run | Studio Web → agent properties → **Coded agent environment variables**. VS Code extension mirrors `.env` here on debug |
|
|
13
|
+
| Orchestrator process / job environment variables | Published agent started as an Orchestrator job | `uip or processes update --environment-variables`, or per job on `jobs start` — see [`uipath-platform` run-jobs](../../../../uipath-platform/references/orchestrator/run-jobs.md) |
|
|
14
|
+
|
|
15
|
+
Consequences:
|
|
16
|
+
|
|
17
|
+
1. **`.env` is not pushed.** `uip codedagent push` excludes it — see [file-sync](file-sync.md) § Files Involved. Editing `.env` alone changes nothing in the cloud.
|
|
18
|
+
2. **Local and cloud runs can disagree.** Different stores. Diagnose a cloud-only failure by comparing both, not by trusting `.env`.
|
|
19
|
+
3. **No credentials in `.env`.** `UIPATH_URL`, `UIPATH_ACCESS_TOKEN`, org/tenant identifiers come from the `uip login` session. `UIPATH_PROJECT_ID` is the one identity value that belongs there.
|
|
20
|
+
|
|
21
|
+
## Referencing an Orchestrator asset
|
|
22
|
+
|
|
23
|
+
Set a variable's whole value to `%ASSETS/<ASSET_NAME>%`. The platform substitutes the asset's value before the agent process starts; the agent reads an ordinary environment variable and never calls the Assets API.
|
|
24
|
+
|
|
25
|
+
```env
|
|
26
|
+
MY_API_KEY=%ASSETS/ServiceApiKey%
|
|
27
|
+
DATABASE_HOST=%ASSETS/DbHost%
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
```python
|
|
31
|
+
import os
|
|
32
|
+
|
|
33
|
+
api_key = os.getenv("MY_API_KEY")
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
The asset name stays out of the code, so it can be re-pointed per environment without a code change.
|
|
37
|
+
|
|
38
|
+
### Format rules
|
|
39
|
+
|
|
40
|
+
1. **Whole value only.** `%ASSETS/Name%` resolves. `https://%ASSETS/Host%/api` does not — passed through as literal text, no error.
|
|
41
|
+
2. **Uppercase prefix: `%ASSETS/`.** One parser in the chain compares the prefix case-sensitively, so `%assets/Name%` silently fails to resolve on the published path even though the design-time editor accepts it.
|
|
42
|
+
3. **Asset name matched case-insensitively.** Name only between the slash and closing `%` — no folder path.
|
|
43
|
+
4. **One asset per variable.** No concatenation, no default value.
|
|
44
|
+
|
|
45
|
+
### Lookup folder
|
|
46
|
+
|
|
47
|
+
The reference carries no folder, so the folder comes from the launch path. Most common reason a reference resolves in one place but not another:
|
|
48
|
+
|
|
49
|
+
| Launch path | Lookup folder |
|
|
50
|
+
|-------------|---------------|
|
|
51
|
+
| Debug run (Studio Web or VS Code extension) | User's **personal workspace** |
|
|
52
|
+
| Published agent started as an Orchestrator job | The **job's** folder — not the agent's, not where the package was published |
|
|
53
|
+
|
|
54
|
+
An asset that exists only in a solution folder resolves for the deployed agent but not while debugging. Create it in the personal workspace too when both paths are needed.
|
|
55
|
+
|
|
56
|
+
### Asset value types
|
|
57
|
+
|
|
58
|
+
`Text`, `Bool`, `Integer`, `Secret` resolve. `KeyValueList` and connection-string types have no single-string form and never resolve. Credential types behave differently across the debug and published paths — do not reference them from an environment variable.
|
|
59
|
+
|
|
60
|
+
### Failures are silent
|
|
61
|
+
|
|
62
|
+
> An unresolvable reference — asset missing from the lookup folder, no permission, unsupported value type, lowercase prefix — does NOT fail the job and does NOT log a user-visible error. The value resolves to empty and the variable is then dropped from the process environment, so the agent sees it as unset. Nothing anywhere reports why.
|
|
63
|
+
|
|
64
|
+
Fail loudly in agent code instead:
|
|
65
|
+
|
|
66
|
+
```python
|
|
67
|
+
api_key = os.getenv("MY_API_KEY")
|
|
68
|
+
if not api_key:
|
|
69
|
+
raise ValueError("MY_API_KEY is not set — check the referenced asset exists in the job's folder")
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Solution resources
|
|
73
|
+
|
|
74
|
+
Saving env vars in Studio Web also registers each referenced asset as a resource on the surrounding solution.
|
|
75
|
+
|
|
76
|
+
## Anti-patterns
|
|
77
|
+
|
|
78
|
+
1. **Do not expect `%ASSETS/...%` to resolve locally.** Substitution is server-side. `uip codedagent run` reads `.env` verbatim, so `os.getenv` returns the literal `%ASSETS/Name%`. Put a real value in `.env` for local testing.
|
|
79
|
+
2. **Do not embed a reference in a larger string.** Format rule 1 — no substitution, no warning.
|
|
80
|
+
3. **Do not add a variable to `.env` and expect a cloud run to see it.** `.env` is not pushed. Update the project configuration, or debug from the VS Code extension, which mirrors the file.
|
|
81
|
+
4. **Do not log a resolved secret.** After substitution it is an ordinary string in the process environment; dumping the environment exposes it.
|
|
82
|
+
|
|
83
|
+
## Troubleshooting
|
|
84
|
+
|
|
85
|
+
| Symptom | Cause | Fix |
|
|
86
|
+
|---------|-------|-----|
|
|
87
|
+
| Agent prints literal `%ASSETS/Name%` | Local run | Expected. Put a real value in `.env`. For a cloud run, check the project configuration, not `.env` |
|
|
88
|
+
| Variable unset in a cloud run | Reference did not resolve, variable dropped | Confirm the asset exists in the lookup folder for that launch path: `uip or assets list --folder-path "<FOLDER_PATH>" --output json` |
|
|
89
|
+
| Resolves when deployed, not when debugging | Asset is in the solution folder; debug looks in the personal workspace | Create the asset in the personal workspace too |
|
|
90
|
+
| Stored with lowercase prefix | `%assets/` fails the case-sensitive prefix check on the published path | Rewrite as `%ASSETS/` |
|
|
@@ -35,6 +35,8 @@ UIPATH_PROJECT_ID=12345
|
|
|
35
35
|
|
|
36
36
|
`UIPATH_URL`, `UIPATH_ACCESS_TOKEN`, and org/tenant identifiers come from the `uip login` session automatically — do not add them to `.env`.
|
|
37
37
|
|
|
38
|
+
`.env` may also hold the agent's own runtime environment variables, but it is **not** pushed (see [Files Involved](#files-involved)) — editing it does not change what a cloud run sees. For the store the cloud runtime reads, and for referencing an Orchestrator asset with `%ASSETS/<ASSET_NAME>%`, see [environment-variables.md](environment-variables.md).
|
|
39
|
+
|
|
38
40
|
## Pull
|
|
39
41
|
|
|
40
42
|
Downloads all files from the remote Studio Web project to your local workspace, preserving directory structure.
|
|
@@ -94,7 +96,7 @@ uip codedagent push --overwrite
|
|
|
94
96
|
| `pyproject.toml`, `main.py`, `.py`, `.json`, `.yaml` | yes | Project source and metadata |
|
|
95
97
|
| `uipath.json`, `entry-points.json`, `bindings.json` | yes | UiPath project configuration |
|
|
96
98
|
| `uv.lock` | yes (skip with `--nolock`) | Dependency lockfile |
|
|
97
|
-
| `__pycache__/`, `.git/`, `.uipath/`, `.env` | no | Build artifacts, VCS, secrets |
|
|
99
|
+
| `__pycache__/`, `.git/`, `.uipath/`, `.env` | no | Build artifacts, VCS, secrets — for `.env` see [environment-variables.md](environment-variables.md) |
|
|
98
100
|
|
|
99
101
|
Use `packOptions` in `uipath.json` to refine what gets included.
|
|
100
102
|
|
|
@@ -59,6 +59,7 @@ Each stage has a reference file with detailed instructions. Read **only** the re
|
|
|
59
59
|
| **Setup** | [lifecycle/setup.md](lifecycle/setup.md) | `uv venv --python 3.13`, `source .venv/bin/activate`, `uip codedagent setup --force`, `uip codedagent new <name>`, `uv add <framework-package>`, `uv add uipath-dev --dev`, `uv sync`, `uip codedagent init` |
|
|
60
60
|
| **Build** | [lifecycle/build.md](lifecycle/build.md) | Code agent logic with framework patterns |
|
|
61
61
|
| **Bindings** | [lifecycle/bindings-reference.md](lifecycle/bindings-reference.md) | Sync resource overrides in `bindings.json` |
|
|
62
|
+
| **Env vars** | [lifecycle/environment-variables.md](lifecycle/environment-variables.md) | Which store the cloud runtime reads (not `.env`); `%ASSETS/<ASSET_NAME>%` to pull a value from an Orchestrator asset |
|
|
62
63
|
| **Run** | [lifecycle/running-agents.md](lifecycle/running-agents.md) | `uip codedagent run` |
|
|
63
64
|
| **Evaluate** | [lifecycle/evaluate.md](lifecycle/evaluate.md) | `uip codedagent eval` |
|
|
64
65
|
| **Deploy** | [lifecycle/deployment.md](lifecycle/deployment.md) | `uip codedagent deploy`, `uip codedagent invoke` |
|
|
@@ -250,24 +251,27 @@ Execute the following in order, end-to-end, in one pass — do not pause for con
|
|
|
250
251
|
|
|
251
252
|
This auto-registers the flow as a project in the solution.
|
|
252
253
|
|
|
253
|
-
3. **Scaffold the coded agent as a sibling folder.** From the solution root (still inside `<SolutionName>/`):
|
|
254
|
+
3. **Scaffold the coded agent as a sibling folder.** From the solution root (still inside `<SolutionName>/`) — `uip codedagent new` scaffolds into the **current directory**, it does NOT create a subfolder, so create the agent folder first and run everything inside it:
|
|
254
255
|
|
|
255
256
|
```bash
|
|
257
|
+
mkdir "<AgentName>"
|
|
258
|
+
cd "<AgentName>"
|
|
256
259
|
uv venv --python 3.13
|
|
257
260
|
source .venv/bin/activate # .venv\Scripts\activate on Windows
|
|
258
|
-
uv
|
|
259
|
-
uv add uipath-dev --dev
|
|
260
|
-
uv sync
|
|
261
|
+
uv pip install <framework-package> # e.g. uipath-langchain for LangGraph
|
|
261
262
|
uip codedagent setup --force
|
|
262
263
|
uip codedagent new "<AgentName>"
|
|
264
|
+
uv add uipath-dev --dev
|
|
265
|
+
uv sync
|
|
263
266
|
```
|
|
264
267
|
|
|
268
|
+
`uv add` requires the `pyproject.toml` that `codedagent new` generates — run it only after `new`, never at the solution root.
|
|
269
|
+
|
|
265
270
|
Result: `<SolutionName>/<AgentName>/` sibling to `<SolutionName>/<FlowName>/`.
|
|
266
271
|
|
|
267
|
-
4. **Implement the agent's `main.py`** with lazy LLM initialization (LLM clients inside graph nodes only — never at module top level), then regenerate entry-points / bindings:
|
|
272
|
+
4. **Implement the agent's `main.py`** with lazy LLM initialization (LLM clients inside graph nodes only — never at module top level), then regenerate entry-points / bindings (still inside `<AgentName>/`):
|
|
268
273
|
|
|
269
274
|
```bash
|
|
270
|
-
cd "<AgentName>"
|
|
271
275
|
uip codedagent init
|
|
272
276
|
```
|
|
273
277
|
|
package/skills/uipath-agents/references/lowcode/capabilities/guardrails/guardrails-recommend.md
CHANGED
|
@@ -33,7 +33,9 @@ else:
|
|
|
33
33
|
uip agent guardrails catalog --output json > .guardrails-catalog-cache.json
|
|
34
34
|
```
|
|
35
35
|
|
|
36
|
-
Inspect the saved JSON.
|
|
36
|
+
Inspect the saved JSON. **Only stop for the specific, structured signal that the catalog endpoint itself is unavailable:** the output contains `"Code": "GuardrailCatalogUnavailable"`. In that exact case, surface the message to the user and **stop** — do not fall back to guessing. Note: the CLI writes all structured output (both success and error JSON) to stdout, so the redirect captures error responses correctly — do not add `2>&1`.
|
|
37
|
+
|
|
38
|
+
**A generic CLI parse error is a different signal — do not stop for it.** If the output is instead something like `"Message": "error: unknown command 'catalog'"` (a `ValidationError`/parse error, not `GuardrailCatalogUnavailable`), that means this CLI build predates the `catalog` subcommand — it is an older/local build, not a tenant-side unavailability. Do not halt the whole workflow on this. Fall back to `uip agent guardrails list` plus built-in reasoning about the request, note in the report that the catalog command wasn't available on this CLI build, and continue.
|
|
37
39
|
|
|
38
40
|
The cache file is `.guardrails-catalog-cache.json` in the current working directory. Add it to `.gitignore` if one exists.
|
|
39
41
|
|
|
@@ -47,6 +49,8 @@ uip agent guardrails list --output json
|
|
|
47
49
|
|
|
48
50
|
Build a lookup of `{ validatorId: status }` from the `Data` array. You will use this in Steps 2 and 5 to filter recommendations.
|
|
49
51
|
|
|
52
|
+
> **`Validator` is not unique — key the lookup on `(Validator, IsByo)`, not `Validator` alone.** A tenant with a bring-your-own (BYOG) configuration for a validator sees two entries sharing the same `Validator` name — one built-in (`IsByo` absent/false), one BYO (`IsByo: true`, carrying `ByoValidatorName`/`ByoConfigurationId`/etc.). Collapsing them into a single `{ validatorId: status }` key silently picks whichever entry happens to win the collision and can validate against the wrong `Parameters`/`AllowedScopes`. See [guardrails.md § BYO (bring-your-own) guardrails](guardrails.md#byo-bring-your-own-guardrails).
|
|
53
|
+
|
|
50
54
|
> **Catalog vs. list — the key distinction:** The catalog lists all guardrails that exist on the platform (with rich metadata for reasoning). The guardrails list returns only those accessible to this tenant. Only recommend validators where `Status == "Available"` in the list.
|
|
51
55
|
|
|
52
56
|
---
|
|
@@ -73,6 +77,11 @@ its input or output (literal word/phrase, regex, number, boolean, or always),
|
|
|
73
77
|
use the custom deterministic recipe below. This decision happens before
|
|
74
78
|
built-in catalog candidate ranking:
|
|
75
79
|
|
|
80
|
+
0. **Run the Step 0 catalog and guardrails-list fetches now, even though this
|
|
81
|
+
branch does not use their content to pick a validator.** They are still
|
|
82
|
+
mandatory discovery/audit steps before writing any guardrail — this branch
|
|
83
|
+
only skips catalog-driven *ranking* (step 2 below), not the Step 0 calls
|
|
84
|
+
themselves.
|
|
76
85
|
1. Treat quoted text and a distinct all-caps token such as `CONFIDENTIAL` as
|
|
77
86
|
an exact literal predicate, even when the surrounding request is phrased
|
|
78
87
|
semantically (for example, "worried it might publish CONFIDENTIAL content"
|
|
@@ -92,8 +101,8 @@ built-in catalog candidate ranking:
|
|
|
92
101
|
Broad semantic threats without an exact mechanical predicate continue through
|
|
93
102
|
the built-in catalog ranking in Step 2.
|
|
94
103
|
|
|
95
|
-
Once this deterministic branch matches, the catalog/list calls
|
|
96
|
-
|
|
104
|
+
Once this deterministic branch matches, the Step 0 catalog/list calls (already
|
|
105
|
+
run per step 0 above) cannot replace or override the custom rule with
|
|
97
106
|
`llm_as_judge`, PII detection, or any other built-in validator.
|
|
98
107
|
|
|
99
108
|
### Step 2 — Catalog-Driven Recommendation Analysis
|
|
@@ -114,6 +123,8 @@ For **each entry** in the catalog (`guardrails[]` array from the cached JSON):
|
|
|
114
123
|
|
|
115
124
|
Do **not** apply predetermined knowledge about which guardrail maps to which schema field. Let the catalog entry's authored fields drive every recommendation decision.
|
|
116
125
|
|
|
126
|
+
> **Built-in vs. BYO — default to built-in.** When a matched validator has both a built-in entry and one or more `Available` BYO (`IsByo: true`) entries in the guardrails list, recommend the built-in implementation (omit `byoValidatorName`) by default, and mention that a BYO alternative exists. Only recommend a specific BYO configuration when the user names it or asks for BYO explicitly.
|
|
127
|
+
|
|
117
128
|
### Step 3 — De-duplicate Overlapping Validators
|
|
118
129
|
|
|
119
130
|
Several catalog validators address the same threat. Recommending more than one of them at the same scope and stage is redundant — it doubles latency and cost on every call for marginal benefit (the canonical case is `prompt_injection` and `user_prompt_attacks`: both have `security_category: "adversarial_input"` and both run at Llm · PRE).
|
|
@@ -183,9 +194,12 @@ Generate a fresh UUID for each guardrail `id`.
|
|
|
183
194
|
Write the new guardrail blocks to `agent.json`'s `guardrails[]` array. Then run:
|
|
184
195
|
|
|
185
196
|
```bash
|
|
197
|
+
uip agent refresh "<AgentName>" --output json
|
|
186
198
|
uip agent validate "<AgentName>" --output json
|
|
187
199
|
```
|
|
188
200
|
|
|
201
|
+
`refresh` regenerates `entry-points.json` and `bindings_v2.json` so Studio Web sees the updated guardrails — always run it before `validate`, matching [guardrails.md](guardrails.md)'s base walkthrough.
|
|
202
|
+
|
|
189
203
|
**Deterministic completion gate:** when the request matched the exact
|
|
190
204
|
named-Tool branch, re-read `agent.json` before validation and confirm the
|
|
191
205
|
written entry has `$guardrailType: "custom"`, Tool scope, the exact Tool name,
|
|
@@ -211,7 +225,7 @@ For each existing guardrail in `agent.json`'s `guardrails[]`:
|
|
|
211
225
|
|
|
212
226
|
### Correctness Check
|
|
213
227
|
|
|
214
|
-
Run `uip agent guardrails list --output json` (from Step 0) and find the matching validator by `Validator` name. The `Parameters` array is the authoritative source for all validation rules:
|
|
228
|
+
Run `uip agent guardrails list --output json` (from Step 0) and find the matching validator by `Validator` name. **If more than one entry shares that `Validator` name** (a built-in plus one or more BYOG entries), disambiguate before reading `Parameters`: the guardrail JSON carries `byoValidatorName` when it targets a specific BYO configuration — match on that against the list entries' `ByoValidatorName`; if the guardrail JSON has no `byoValidatorName`, it targets the built-in entry (`IsByo` absent/false). Validating against the wrong entry's `Parameters` produces false correctness findings. The `Parameters` array (of the correctly matched entry) is the authoritative source for all validation rules:
|
|
215
229
|
|
|
216
230
|
| CLI field | What to check |
|
|
217
231
|
|-----------|---------------|
|
|
@@ -252,7 +266,7 @@ If the user asks to fix identified issues: apply corrections to `agent.json`, ru
|
|
|
252
266
|
## Critical Rules
|
|
253
267
|
|
|
254
268
|
1. **Always fetch catalog first** (use cache if fresh); **always fetch guardrails list second** (no cache). Both are required before any analysis.
|
|
255
|
-
2. **If `GuardrailCatalogUnavailable`** → surface the message and stop. Do not fall back to guessing or hardcoded recommendations.
|
|
269
|
+
2. **If the catalog call returns `"Code": "GuardrailCatalogUnavailable"`** → surface the message and stop. Do not fall back to guessing or hardcoded recommendations. **A generic CLI error (e.g. `"unknown command 'catalog'"`) is not this signal** — that means an older CLI build, not tenant unavailability; fall back to `guardrails list` + built-in reasoning and note the limitation in the report instead of halting.
|
|
256
270
|
3. **Only recommend `Available` validators**. Mention `Unauthorised` ones to the user so they can contact their administrator.
|
|
257
271
|
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.
|
|
258
272
|
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.
|
|
@@ -265,3 +279,4 @@ If the user asks to fix identified issues: apply corrections to `agent.json`, ru
|
|
|
265
279
|
12. **All map-enum keys must exactly match the corresponding enum-list values** — no extra or missing keys. This is the most common correctness error.
|
|
266
280
|
13. **Read [guardrails.md](guardrails.md) before writing any JSON** — discriminator fields, PascalCase constraints, and parameter shapes are specified there and cannot be safely inferred.
|
|
267
281
|
14. **Do NOT use TaskCreate, TaskUpdate, or other task-tracking tools for guardrail edits.** Edit `agent.json` directly — task management tools add bookkeeping turns without benefit and push runs over their turn budget.
|
|
282
|
+
15. **`Validator` is not unique — disambiguate built-in vs. BYO by `IsByo` before matching on name.** A tenant can have both a built-in and one or more BYOG entries sharing the same `Validator` name. Key any lookup on `(Validator, IsByo)`, and when an existing guardrail carries `byoValidatorName`, match it against `ByoValidatorName` — not `Validator` alone — before reading `Parameters`/`AllowedScopes` for correctness or recommendation. Default recommendations to the built-in entry unless the user asks for BYO. See [guardrails.md § BYO (bring-your-own) guardrails](guardrails.md#byo-bring-your-own-guardrails).
|
|
@@ -625,9 +625,21 @@ Run `uip agent guardrails list --output json` to get the authoritative list. Onl
|
|
|
625
625
|
| `GuardrailStages[scope]` | Valid execution stages for that scope |
|
|
626
626
|
| `Parameters[].Id` | `validatorParameters[].id` |
|
|
627
627
|
| `Parameters[].Type` | `validatorParameters[].$parameterType` |
|
|
628
|
+
| `IsByo` | Disambiguates a bring-your-own (BYOG) entry from a built-in one — see [BYO (bring-your-own) guardrails](#byo-bring-your-own-guardrails) below. Not itself a JSON field. |
|
|
629
|
+
| `ByoValidatorName` | `byoValidatorName` value — include this field to pin the guardrail to this exact BYO configuration. Required whenever more than one entry shares this `Validator` name (a built-in plus one or more BYOG configurations). |
|
|
628
630
|
|
|
629
631
|
> **Important:** PII entity names use PascalCase (`"Email"`, not `"email_address"`). Harmful content categories use PascalCase (`"Hate"`, not `"hate"`). Scope values use PascalCase (`"Agent"`, `"Llm"`, `"Tool"`).
|
|
630
632
|
|
|
633
|
+
## BYO (bring-your-own) guardrails
|
|
634
|
+
|
|
635
|
+
A validator can be fulfilled by a tenant-registered **external** provider (a "BYOG" configuration — e.g. Azure AI Content Safety, Databricks AI Guardrails) instead of, or alongside, UiPath's own built-in implementation. A tenant admin registers these at Admin → AI Trust Layer → Guardrails Configurations or via `uip guardrails byo-configurations create`; see [uipath-platform § BYO Guardrail Configurations](/uipath:uipath-platform) for the admin-side lifecycle commands (`uip guardrails byo-configurations list|create|update|delete`).
|
|
636
|
+
|
|
637
|
+
- **`Validator` is not unique.** A tenant with a BYOG `harmful_content` configuration sees **two** entries named `harmful_content` in `uip agent guardrails list` output — one built-in, one BYO. Use `IsByo` to tell them apart; never assume a single match.
|
|
638
|
+
- **Filter to BYO-only entries** with `uip agent guardrails list --byo --output json` when the user specifically wants to see or target a BYO-backed validator.
|
|
639
|
+
- **BYO entries carry extra fields**: `ByoValidatorName`, `ByoConnectionId`, `ByoConfigurationId`, `ByoConnectorName`, `ByoConnectorKey`, `FolderKey` — alongside the same `Parameters`/`AllowedScopes`/`GuardrailStages`/`Status` shape a built-in entry has.
|
|
640
|
+
- **To author a guardrail against a specific BYO configuration**, build the `builtInValidator` guardrail exactly as for a built-in validator (same `validatorType`, same `validatorParameters` from that entry's `Parameters`), and add `byoValidatorName` set to that entry's `ByoValidatorName`. Omit it to use the built-in implementation. (`ByoConfigurationId` is the configuration's own admin-side id — useful for cross-referencing `uip guardrails byo-configurations list`, but it is not what the guardrail JSON carries; `ByoValidatorName` is unique per tenant and is the value that pins it.)
|
|
641
|
+
- **`Status: "Disabled"` on a BYO entry** means the tenant switched that specific configuration off — the entry still shows (it doesn't vanish), so a disabled BYOG configuration is distinguishable from one that was never set up. Do not author a guardrail against a `Disabled` BYO entry; treat it the same as `Unauthorised` (skip, tell the user).
|
|
642
|
+
|
|
631
643
|
## Full Examples
|
|
632
644
|
|
|
633
645
|
### Example 1: Block PII in Agent and Tool Outputs
|
|
@@ -1030,6 +1042,7 @@ Add the `guardrails` array at the agent.json root level alongside `settings`, `m
|
|
|
1030
1042
|
18. **Do not attempt OR logic within a single guardrail** — all rules and all fields within a guardrail are combined with AND. OR is not supported. To achieve OR behavior, create separate guardrails — one per condition branch.
|
|
1031
1043
|
19. **Do not generate guardrails targeting unsupported tool types** — `matchNames` can only reference tools of supported types: agent, process, activity, builtInTool, ixpTool, or Integration Service connector. Do not generate guardrails with `matchNames` targeting other tool types.
|
|
1032
1044
|
20. **Do not omit `matchNames` to target "all tools"** — always explicitly list every tool resource name in `matchNames`. Read the agent's `resources/` directory first. If the agent has no tool resources, do not add the guardrail.
|
|
1045
|
+
21. **Do not assume `Validator` is unique** — a tenant can have both a built-in and one or more bring-your-own (BYOG) entries sharing the same `Validator` name. Always check `IsByo` before treating two same-named entries as a duplicate or conflict, and set `byoValidatorName` when targeting a specific BYO entry. See [BYO (bring-your-own) guardrails](#byo-bring-your-own-guardrails).
|
|
1033
1046
|
|
|
1034
1047
|
## Walkthrough
|
|
1035
1048
|
|
package/skills/uipath-agents/references/lowcode/capabilities/inline-in-flow/inline-in-flow.md
CHANGED
|
@@ -213,8 +213,6 @@ Resource body shape is identical to the standalone-agent docs — only the folde
|
|
|
213
213
|
"typeVersion": "1.0",
|
|
214
214
|
"display": { "label": "Autonomous Agent" },
|
|
215
215
|
"inputs": {
|
|
216
|
-
"systemPrompt": "You are an agentic assistant.",
|
|
217
|
-
"userPrompt": "What is the current date?",
|
|
218
216
|
"source": "<projectId-uuid>", // UUID linking to the inline agent directory
|
|
219
217
|
"agentInputVariables": [],
|
|
220
218
|
"agentOutputVariables": [
|
|
@@ -240,7 +238,7 @@ Resource body shape is identical to the standalone-agent docs — only the folde
|
|
|
240
238
|
|
|
241
239
|
**Critical fields:**
|
|
242
240
|
- `inputs.source` — The inline agent's `projectId` UUID. Must match the subdirectory name and `agent.json.projectId` inside the flow project. The definition still declares `model.source: true`, but flow-core hoists that identity field onto `inputs.source` for the `uipath.agent.autonomous` node instance.
|
|
243
|
-
- `inputs.systemPrompt` / `inputs.userPrompt` —
|
|
241
|
+
- `inputs.systemPrompt` / `inputs.userPrompt` — **do not write these keys.** A prompt string on the node makes the flow converter drop every `agentInputVariables[]` entry the prompt text does not reference. Empty strings fail `uip maestro flow validate`. The canonical prompts live in `agent.json.messages[]`. Validator behavior and the older-CLI fallback: [inline-agent guide § Refresh and Validate](../../../../../uipath-maestro-flow/references/author/references/plugins/inline-agent/impl.md#refresh-and-validate).
|
|
244
242
|
- `definitions[]` — The `uipath.agent.autonomous` definition copied from the flow registry supplies `model.serviceType: "Orchestrator.StartInlineAgentJob"`, BPMN type, version, and context. Do not copy those fields into the node instance.
|
|
245
243
|
- No node instance `model` block — the inline-agent source lives at `inputs.source`.
|
|
246
244
|
|