@uipath/skills 1.202.0-preview.755 → 1.202.0-preview.767
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/package.json +1 -1
- package/skills/uipath-agents/references/lowcode/agent-definition.md +1 -1
- package/skills/uipath-agents/references/lowcode/critical-rules/conversational-critical-rules.md +3 -1
- package/skills/uipath-agents/references/lowcode/lowcode.md +1 -2
- package/skills/uipath-agents/references/lowcode/project-lifecycle.md +2 -2
- package/skills/uipath-agents/references/lowcode/prompting/conversational-agent-prompting-guide.md +2 -2
- package/skills/uipath-automationhub/SKILL.md +1 -0
- package/skills/uipath-automationhub/references/api-endpoints.md +23 -1
- package/skills/uipath-automationhub/references/cli-commands.md +11 -0
- package/skills/uipath-automationhub/references/get-process-cli-guide.md +2 -0
- package/skills/uipath-automationhub/references/get-process.md +7 -4
- package/skills/uipath-automationhub/references/publish-process-cli-guide.md +1 -1
- package/skills/uipath-automationhub/references/publish-process.md +4 -2
- package/skills/uipath-maestro-flow/references/author/plugins/conversational-agent/impl.md +19 -1
- package/skills/uipath-maestro-flow/references/author/plugins/conversational-agent/planning.md +1 -1
- package/version-manifest.json +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uipath/skills",
|
|
3
|
-
"version": "1.202.0-preview.
|
|
3
|
+
"version": "1.202.0-preview.767",
|
|
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"
|
|
@@ -235,7 +235,7 @@ For **conversational agents**, each agent run handles one conversational exchang
|
|
|
235
235
|
|
|
236
236
|
For **autonomous agents**, the `outputSchema` defines the output properties of the agent.
|
|
237
237
|
|
|
238
|
-
For **conversational agents**, the `outputSchema` should not be modified, and thus always left empty. See [critical-rules/conversational-critical-rules.md](critical-rules/conversational-critical-rules.md) anti-pattern 1.
|
|
238
|
+
For **conversational agents**, the `outputSchema` should not be modified, and thus always left empty. The exception is a conversational agent scaffolded inline in a Maestro Flow, which does support structured outputs and is authored under the `uipath-maestro-flow` skill. See [critical-rules/conversational-critical-rules.md](critical-rules/conversational-critical-rules.md) anti-pattern 1.
|
|
239
239
|
|
|
240
240
|
|
|
241
241
|
## Messages
|
package/skills/uipath-agents/references/lowcode/critical-rules/conversational-critical-rules.md
CHANGED
|
@@ -8,7 +8,9 @@ These rules are the canonical source for rules specific to low-code conversation
|
|
|
8
8
|
|
|
9
9
|
## What NOT to Do
|
|
10
10
|
|
|
11
|
-
1. **Do not add properties to the `outputSchema` of a conversational agent.** After initialization, leave `outputSchema` empty.
|
|
11
|
+
1. **Do not add properties to the `outputSchema` of a conversational agent built here.** After initialization, leave `outputSchema` empty. Standalone, in-solution and published conversational agents do not support structured outputs — the runtime streams responses/tool-call events during the execution, so the final output is not relevant for the end-user in the conversation, and a populated schema is never filled.
|
|
12
|
+
|
|
13
|
+
**The exception is a conversational agent scaffolded inline in a Maestro Flow** (a `uipath.agent.conversational` node), authored under the `uipath-maestro-flow` skill. These inline conversational agent nodes allow structured outputs for branching capabilities, such as handing the conversation between several single-prompt conversational agent nodes.
|
|
12
14
|
|
|
13
15
|
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
16
|
|
|
@@ -22,14 +22,13 @@ UiPath low-code agents come in **two variants**, both sharing this skill.
|
|
|
22
22
|
|
|
23
23
|
2. Conversational agents are intended for use-cases involving multi-turn conversations / fast latency with real-time user-interaction / streamed responses.
|
|
24
24
|
|
|
25
|
-
> Currently, conversational agents are only standalone and not yet supported to be inline in a flow, so inline-in-flow use-cases should always use an autonomous agent.
|
|
26
25
|
> After deployment, conversational agents are interacted with through the UiPath Conversation Service, which manages conversation history and exposes a CLI/SDK for client UIs. Each user-initiated exchange invokes the agent for a single turn, streaming events back to the client.
|
|
26
|
+
> A standalone conversational agent is the simplest way to build a back-and-forth chat assistant driven by a single system prompt. For chats that need more — routing between several agents, deterministic replies, or behind-the-scenes automations running while the conversation continues — direct the user to the `uipath-maestro-flow` skill.
|
|
27
27
|
|
|
28
28
|
In summary:
|
|
29
29
|
| Signal | Variant |
|
|
30
30
|
|---|---|
|
|
31
31
|
| User wants general input → output execution | **Autonomous** |
|
|
32
|
-
| User wants inline-in-flow | **Autonomous** |
|
|
33
32
|
| `agent.json` has `metadata.isConversational: false` or unset | **Autonomous** |
|
|
34
33
|
| User wants multi-turn chat / fast latency with real-time user-interaction / streamed responses | **Conversational** |
|
|
35
34
|
| Existing `agent.json` has `metadata.isConversational: true` | **Conversational** |
|
|
@@ -30,7 +30,7 @@ The `<path>` argument is relative or absolute; the command can run from any dire
|
|
|
30
30
|
- `--model <model>` — LLM model to use (default: `gpt-5.4` for autonomous, `anthropic.claude-sonnet-4-5-20250929-v1:0` for conversational). This default is stale; override it post-init — discover current tenant models with `uip agent model list` and select per [model-selection-guide.md](model-selection-guide.md). Pass `--model` at init or edit `settings.model` after.
|
|
31
31
|
- `--system-prompt <prompt>` — Initial system prompt for the agent
|
|
32
32
|
- `--force` — Overwrite existing directory if non-empty
|
|
33
|
-
- `--inline-in-flow` — Scaffold an inline agent inside a flow project (see below).
|
|
33
|
+
- `--inline-in-flow` — Scaffold an inline agent inside a flow project (see below).
|
|
34
34
|
|
|
35
35
|
#### Inline mode: `--inline-in-flow`
|
|
36
36
|
|
|
@@ -45,7 +45,7 @@ uip agent init "<FLOW_PROJECT_DIR>" --inline-in-flow --output json
|
|
|
45
45
|
{ "Result": "Success", "Code": "LowCodeAgentInitInline", "Data": { "Status": "Inline agent created inside flow project", "Path": "/path/to/FlowProject/<uuid>", "ProjectId": "<uuid>", "Model": "gpt-4o-2024-11-20" } }
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
-
After scaffolding, add a `uipath.agent.autonomous` node to the flow with `inputs.source = <ProjectId>` and no node instance `model` block. See [capabilities/inline-in-flow/inline-in-flow.md](capabilities/inline-in-flow/inline-in-flow.md) for the full structure.
|
|
48
|
+
After scaffolding an autonomous agent, add a `uipath.agent.autonomous` node to the flow with `inputs.source = <ProjectId>` and no node instance `model` block. See [capabilities/inline-in-flow/inline-in-flow.md](capabilities/inline-in-flow/inline-in-flow.md) for the full structure. Inline conversational agents are added with a `uipath.agent.conversational` node and are authored under the `uipath-maestro-flow` skill.
|
|
49
49
|
|
|
50
50
|
### `uip agent guardrails list`
|
|
51
51
|
|
package/skills/uipath-agents/references/lowcode/prompting/conversational-agent-prompting-guide.md
CHANGED
|
@@ -103,7 +103,7 @@ User message: `""` — left blank. The Conversational Service injects the user t
|
|
|
103
103
|
| Field | Default | Change when |
|
|
104
104
|
|-------|---------|-------------|
|
|
105
105
|
| `inputSchema` | `{ "properties": {} }` | Add fields only when per-exchange, variable-based context beyond conversation history is genuinely needed. Reserved names: `messages`, `uipath__*` ([critical-rules/conversational-critical-rules.md](../critical-rules/conversational-critical-rules.md) Anti-patterns 4 and 5). |
|
|
106
|
-
| `outputSchema` | `{ "type": "object", "properties": {} }` | **Never populate** — runtime streams events, does not fill output ([critical-rules/conversational-critical-rules.md](../critical-rules/conversational-critical-rules.md) Anti-pattern 1). |
|
|
106
|
+
| `outputSchema` | `{ "type": "object", "properties": {} }` | **Never populate** — runtime streams events, does not fill output. Exception: inline-in-flow conversational agents, authored under the `uipath-maestro-flow` skill ([critical-rules/conversational-critical-rules.md](../critical-rules/conversational-critical-rules.md) Anti-pattern 1). |
|
|
107
107
|
| `messages[1].content` | `""` | **Keep blank** — Conversational Service injects the user turn at runtime ([critical-rules/conversational-critical-rules.md](../critical-rules/conversational-critical-rules.md) Anti-pattern 3). |
|
|
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). |
|
|
@@ -115,7 +115,7 @@ User message: `""` — left blank. The Conversational Service injects the user t
|
|
|
115
115
|
- **Vague role** — "You are a helpful agentic assistant." Name the role and bound the scope.
|
|
116
116
|
- **No tool-call criteria** — agent over-calls or under-calls tools.
|
|
117
117
|
- **Long tool-call loops** - agent runtime may stop and require the user to confirm continuation after a single agent run (turn) consists of a series of over 8 steps that each involve tool-call(s). Note that this is not a limitation on total parallel tool-calls on any individual step, so aim to parallelize tool-calls when possible and/or ask for user-confirmation to break up long loops of sequential steps.
|
|
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).
|
|
118
|
+
- **Populating `outputSchema`** — runtime streams events; populated schemas never get filled and confuse the agent. Exception: inline-in-flow conversational agents ([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
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).
|
|
@@ -68,5 +68,6 @@ Every addition keeps the skill's three invariants: collect inputs before the fir
|
|
|
68
68
|
## Notes
|
|
69
69
|
|
|
70
70
|
- **Cloud token only** — authorization is the user's real AH permissions; you see and can do exactly what their AH role allows.
|
|
71
|
+
- **If Automation Hub isn't available on the tenant, say so plainly and stop** — never let it surface as a generic failure. Two cases with **different remedies**: *not enabled* (only an admin can fix it) and *reachable but never onboarded* (self-service). Signals, and the exact wording to quote verbatim rather than paraphrase, live in one home per transport: [`references/api-endpoints.md`](references/api-endpoints.md) → **Automation Hub not available on this tenant** for the raw-API flows, [`references/cli-commands.md`](references/cli-commands.md) → same heading for the CLI flows.
|
|
71
72
|
- The publish flow fetches the idea-flow schema live, so it adapts automatically if fields change on the tenant.
|
|
72
73
|
- **Open dependency:** in a hosted runtime (e.g. Process Scribe/Delegate) the cloud token is expected via the environment (Authentication, option 1). Confirm the runtime provides `UIPATH_CLI_AUTH_TOKEN` (or an equivalent) before relying on it in production.
|
|
@@ -138,5 +138,27 @@ Linked components for the process.
|
|
|
138
138
|
| 400 | Validation — missing required field, invalid enum, empty `user_inputs`, missing `OVERVIEW_NAME` |
|
|
139
139
|
| 401 | Unauthorized — token missing/expired, or `x-ah-openapi-auth` was wrongly sent |
|
|
140
140
|
| 403 | Forbidden — the user lacks the AH permission (authorization = the user's real AH role) |
|
|
141
|
-
| 404 | Wrong URL, or AH not
|
|
141
|
+
| 404 | Wrong URL, or AH not available on the tenant — see **Automation Hub not available on this tenant** below |
|
|
142
142
|
| 409 | Duplicate process name |
|
|
143
|
+
|
|
144
|
+
### Automation Hub not available on this tenant
|
|
145
|
+
|
|
146
|
+
Two distinct cases, with **different remedies** — don't collapse them, the advice differs:
|
|
147
|
+
|
|
148
|
+
**1. AH is not enabled for the tenant.** The tenant has no Automation Hub service at all. Signals: a **404** whose body says `not found in organization`, or a **3xx redirect** to `portal_/unregistered` (following it would surface an HTML portal page as a JSON parse error). The user cannot fix this themselves — report exactly:
|
|
149
|
+
|
|
150
|
+
> Please contact your administrator to enable Automation Hub on this tenant.
|
|
151
|
+
|
|
152
|
+
**2. AH is reachable but the tenant was never onboarded into it.** The service answers **422 Tenant Lookup Error** on every call. This one *is* self-service — report exactly:
|
|
153
|
+
|
|
154
|
+
> Automation Hub is reachable for this tenant but has not finished setup. Open Automation Hub in the browser once to complete it, then retry.
|
|
155
|
+
|
|
156
|
+
In both cases: **stop after reporting** — do not retry, do not fall back to an admin OpenAPI token, and do not attempt the write against another tenant unless the user asks. Quote the message verbatim; don't paraphrase it.
|
|
157
|
+
|
|
158
|
+
**Making the signals observable from `curl`.** `curl` reports the status but not *where* a 3xx points, so the first call each flow makes against the tenant asks for both:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
curl -s -w "\n%{http_code} %{redirect_url}" …
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
The last line is then `<status> <redirect target>`: `%{redirect_url}` is empty on any non-3xx and carries the resolved `Location` on a 3xx — which is what makes the `portal_/unregistered` case above distinguishable from an ordinary redirect. **Never add `-L`.** Following the redirect throws away the one diagnosable signal and hands you an HTML portal page, which then fails as a JSON parse error — exactly the generic failure this section exists to prevent.
|
|
@@ -12,6 +12,17 @@ The CLI wraps the same Open API endpoints as [`api-endpoints.md`](api-endpoints.
|
|
|
12
12
|
|
|
13
13
|
If a command fails with an authentication error, tell the user to run `uip login` — never ask for or handle a raw token yourself.
|
|
14
14
|
|
|
15
|
+
## Automation Hub not available on this tenant
|
|
16
|
+
|
|
17
|
+
The CLI already classifies this for you — read its `Instructions` field:
|
|
18
|
+
|
|
19
|
+
- `Instructions` mentioning **"not provisioned on this tenant"** → AH is not enabled. Report: *"Please contact your administrator to enable Automation Hub on this tenant."*
|
|
20
|
+
- `Instructions` mentioning **"no tenant record of its own yet"** → reachable but not onboarded. Report: *"Automation Hub is reachable for this tenant but has not finished setup. Open Automation Hub in the browser once to complete it, then retry."*
|
|
21
|
+
|
|
22
|
+
Either way **stop** — don't retry and don't try another tenant unless asked, and quote the message verbatim rather than paraphrasing it.
|
|
23
|
+
|
|
24
|
+
> This section is the **canonical wording for the CLI path**; the CLI flows reference it instead of restating it, so each message exists in exactly one place per transport (raw-API twin: [`api-endpoints.md`](api-endpoints.md) → **Automation Hub not available on this tenant**, which also carries the raw signals behind each case). The two homes exist because the CLI files stay self-contained for the day the raw-API fallback retires — keep them in sync if the wording ever changes.
|
|
25
|
+
|
|
15
26
|
## Output envelope (every command)
|
|
16
27
|
|
|
17
28
|
Always pass `--output json`. Success:
|
|
@@ -19,6 +19,8 @@ Fetches one process (by id or search) and its documents, and downloads document
|
|
|
19
19
|
uip ah automations get $PROCESS_ID --output json
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
+
If the command fails with `Instructions` about AH **not being provisioned** on the tenant, or about the tenant having **no AH record yet**, report the message for the matching case, verbatim, from [`cli-commands.md`](cli-commands.md) → **Automation Hub not available on this tenant**, and stop.
|
|
23
|
+
|
|
22
24
|
`Data` is the projected record (`Id`, `Name`, `Phase`, `PhaseStatus`, `Tags`, …). Add `--all-fields` only when you need the raw record (e.g. `process_slug` for the deep link). `Failure` with not-found → no such process; auth error → `uip login`.
|
|
23
25
|
|
|
24
26
|
## Step 3: Fetch the documents
|
|
@@ -9,19 +9,22 @@ Fetches one process (by id or search) and its documents from Automation Hub, aut
|
|
|
9
9
|
- If the caller gives a **process id**, use it directly.
|
|
10
10
|
- Otherwise search by name:
|
|
11
11
|
```bash
|
|
12
|
-
curl -s -H "Authorization: Bearer $ACCESS_TOKEN" \
|
|
12
|
+
curl -s -w "\n%{http_code} %{redirect_url}" -H "Authorization: Bearer $ACCESS_TOKEN" \
|
|
13
13
|
"$BASE_URL/$ORG/$TENANT/automationhub_/api/v1/openapi/automations?search=$QUERY&limit=20"
|
|
14
14
|
```
|
|
15
|
-
|
|
15
|
+
The last line is `<status> <redirect target>` (empty target unless 3xx). Check it **before** the results: a **404 / 3xx to `portal_/unregistered` / 422 tenant lookup** means AH isn't available on this tenant at all — handle it as in Step 2, don't report it as "no match". Never add `-L`.
|
|
16
|
+
|
|
17
|
+
On a 200: one clear match → use its `process_id`. If several → show a short list (name + id + owner) and ask the user to pick. If none → tell the user and stop.
|
|
16
18
|
|
|
17
19
|
## Step 2: Fetch the process
|
|
18
20
|
|
|
19
21
|
```bash
|
|
20
|
-
curl -s -w "\n%{http_code}" -H "Authorization: Bearer $ACCESS_TOKEN" \
|
|
22
|
+
curl -s -w "\n%{http_code} %{redirect_url}" -H "Authorization: Bearer $ACCESS_TOKEN" \
|
|
21
23
|
"$BASE_URL/$ORG/$TENANT/automationhub_/api/v1/openapi/automations/$PROCESS_ID"
|
|
22
24
|
```
|
|
25
|
+
The last line is `<status> <redirect target>` (empty target unless 3xx) — the target is what separates a `portal_/unregistered` redirect from any other 3xx. Never add `-L`.
|
|
23
26
|
- **200** → keep the record; project to the useful fields for display (name, status/phase, category, owner, description). The raw record is large — don't dump it all unless asked.
|
|
24
|
-
- **401** → re-authenticate. **403** → the user can't view this process. **404** → no such process.
|
|
27
|
+
- **401** → re-authenticate. **403** → the user can't view this process. **404** → no such process — *unless* the body says `not found in organization` (or the call 3xx-redirects to `portal_/unregistered`, or answers **422 tenant lookup**), which means AH itself is not available on this tenant: report the message for the matching case, verbatim, from [`api-endpoints.md`](api-endpoints.md) → **Automation Hub not available on this tenant**, and stop.
|
|
25
28
|
|
|
26
29
|
## Step 3: Fetch the documents
|
|
27
30
|
|
|
@@ -12,7 +12,7 @@ uip ah idea-flows list --output json
|
|
|
12
12
|
|
|
13
13
|
- `Result: Success` → keep `Data` (flow names + ids) and tell the user "Connected to Automation Hub."
|
|
14
14
|
- Auth failure → tell the user to run `uip login` (or, in Delegate, to sign in). Never ask for a raw token.
|
|
15
|
-
- `Failure` mentioning the tenant/enablement → AH is not
|
|
15
|
+
- `Failure` mentioning the tenant/enablement → AH is not available on this tenant. Report the message for the matching case, verbatim, from [`cli-commands.md`](cli-commands.md) → **Automation Hub not available on this tenant** — then **stop**; nothing later in this flow can succeed.
|
|
16
16
|
|
|
17
17
|
## Step 2: Pick the idea flow
|
|
18
18
|
|
|
@@ -9,15 +9,17 @@ Creates one process in Automation Hub from a schema-driven payload and attaches
|
|
|
9
9
|
Verify the resolved token with a cheap call — this also fetches the idea flows you need next:
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
|
-
curl -s -w "\n%{http_code}" \
|
|
12
|
+
curl -s -w "\n%{http_code} %{redirect_url}" \
|
|
13
13
|
-H "Authorization: Bearer $ACCESS_TOKEN" \
|
|
14
14
|
"$BASE_URL/$ORG/$TENANT/automationhub_/api/v1/openapi/idea-flows"
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
+
The last line is `<status> <redirect target>` — the target is empty unless the response was a 3xx. Read both: a 3xx alone is ambiguous, a 3xx **to `portal_/unregistered`** is the tenant-not-enabled signal below. Never add `-L`.
|
|
18
|
+
|
|
17
19
|
- **200** → save the `data` array (reused in Step 2) and tell the user "Connected to Automation Hub."
|
|
18
20
|
- **401** → token missing/expired: if it came from `~/.uipath/.auth`, ask the user to run `uip login` again; re-resolve and retry. **Never** add `x-ah-openapi-auth` to "fix" a 401 — that routes to the admin-token path and guarantees failure.
|
|
19
21
|
- **403** → the user is authenticated but lacks AH access on this tenant.
|
|
20
|
-
- **404 /
|
|
22
|
+
- **404 / 3xx to `portal_/unregistered` / 422 tenant lookup** → AH is not available on this tenant. Confirm the org/tenant first; if they're right, report the message for the matching case, verbatim, from [`api-endpoints.md`](api-endpoints.md) → **Automation Hub not available on this tenant** — then **stop**.
|
|
21
23
|
|
|
22
24
|
Do not proceed until you have a 200.
|
|
23
25
|
|
|
@@ -206,7 +206,7 @@ Reads recent exchanges without waiting. Rarely needed, and constrained — see [
|
|
|
206
206
|
|
|
207
207
|
## Structured Outputs
|
|
208
208
|
|
|
209
|
-
In addition to responding to the chat, an **inline** conversational agent can also return named fields for a downstream node to route on.
|
|
209
|
+
In addition to responding to the chat, an **inline** conversational agent can also return named fields for a downstream node to route on. Imported standalone conversational agents (published or in-solution) do not support structured output fields.
|
|
210
210
|
|
|
211
211
|
Declare each field in two places or it yields nothing at run time:
|
|
212
212
|
|
|
@@ -217,6 +217,24 @@ Declare each field in two places or it yields nothing at run time:
|
|
|
217
217
|
|
|
218
218
|
Bind it downstream as `$vars.<agentNodeId>.output.shouldHandoff`. Writing one side without the other passes `agent validate` and `flow validate` — nothing checks the pair.
|
|
219
219
|
|
|
220
|
+
### Prompting: what goes where
|
|
221
|
+
|
|
222
|
+
The prompts that drive the agent's chat replies and structured output differ:
|
|
223
|
+
|
|
224
|
+
| Generated | Driven by |
|
|
225
|
+
| --- | --- |
|
|
226
|
+
| the chat reply | the system prompt **only** |
|
|
227
|
+
| the structured outputs | the system prompt **plus** each field's `description` |
|
|
228
|
+
|
|
229
|
+
So split the instructions by destination — *what to say* and *response instructions* in the system prompt, *how to fill the field* in that field's `description` (write the same description in both `agentOutputVariables[]` and `outputSchema.properties`):
|
|
230
|
+
|
|
231
|
+
| Where | Example |
|
|
232
|
+
| --- | --- |
|
|
233
|
+
| system prompt | "Thank the user when they would like to end the conversation." |
|
|
234
|
+
| `endConversation` (boolean) `description` | "Set to true when the user intends to end the conversation." |
|
|
235
|
+
|
|
236
|
+
**Do not name the output field and how to set it in the system prompt.** An instruction like "set `endConversation` to `true` when the user says goodbye" in the system prompt may make the LLM emit the structured value to the chat or look for a tool to set the output variables.
|
|
237
|
+
|
|
220
238
|
## Wire the Edges
|
|
221
239
|
|
|
222
240
|
An **inline** agent leaves on `success`; an in-solution or published one leaves on `output`. The smallest loop:
|
package/skills/uipath-maestro-flow/references/author/plugins/conversational-agent/planning.md
CHANGED
|
@@ -129,5 +129,5 @@ In the architectural plan:
|
|
|
129
129
|
- `chat-agent: <description>` — one line per agent; omit for a scripted chat. Inline: Reuse the [inline-agent](../inline-agent/planning.md) annotations. In-solution or published: `<agent-name> in <folder-path>`.
|
|
130
130
|
- `chat-agent-flavor: <agent-name> = inline | in-solution | published` — one per agent above; decides the node type (`uipath.agent.conversational` for inline, `uipath.core.agent.*` for the others — see the [flavor table](#pick-the-agent-flavor-before-you-build) for which suffix each takes) and on which port (`success` for inline, `output` for the others)
|
|
131
131
|
- `chat-send-message: <purpose>` — one line per flow-authored message (loading messages, handoff notice, node output results); a scripted chat consists mostly of these
|
|
132
|
-
- `chat-structured-output: <agent-name> = <fieldName>` — only when the flow branches on that conversational agent's reply; forces that conversational agent to inline flavor because in-solution and published conversational agents have no structured outputs
|
|
132
|
+
- `chat-structured-output: <agent-name> = <fieldName>` — only when the flow branches on that conversational agent's reply; forces that conversational agent to inline flavor because in-solution and published conversational agents have no structured outputs.
|
|
133
133
|
- Tools, contexts, and escalations on any inline chat agent reuse the [inline-agent](../inline-agent/planning.md) annotations
|
package/version-manifest.json
CHANGED