@uipath/skills 1.204.0 → 1.204.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.cursor-plugin/plugin.json +1 -1
- package/CODEOWNERS +12 -14
- package/package.json +1 -1
- package/skills/uipath-agents/references/coded/embedding-in-flows.md +1 -3
- package/skills/uipath-agents/references/coded/quickstart.md +0 -2
- package/skills/uipath-agents/references/lowcode/capabilities/inline-in-flow/inline-in-flow.md +10 -8
- package/skills/uipath-agents/references/lowcode/prompting/autonomous-agent-prompting-guide.md +1 -1
- package/skills/uipath-human-in-the-loop/SKILL.md +1 -3
- package/skills/uipath-human-in-the-loop/references/hitl-node-apptask.md +0 -2
- package/skills/uipath-human-in-the-loop/references/hitl-node-coded-action-app.md +0 -2
- package/skills/uipath-human-in-the-loop/references/hitl-node-quickform.md +2 -2
- package/skills/uipath-maestro-flow/.maintenance/README.md +265 -0
- package/skills/uipath-maestro-flow/.maintenance/check-all.sh +40 -0
- package/skills/uipath-maestro-flow/.maintenance/check-anchors.sh +101 -0
- package/skills/uipath-maestro-flow/.maintenance/check-depth.sh +132 -0
- package/skills/uipath-maestro-flow/.maintenance/check-link-text.sh +123 -0
- package/skills/uipath-maestro-flow/.maintenance/check-links.sh +73 -0
- package/skills/uipath-maestro-flow/.maintenance/check-orphans.sh +93 -0
- package/skills/uipath-maestro-flow/.maintenance/check-plugin-pairs.sh +39 -0
- package/skills/uipath-maestro-flow/.maintenance/check-template.sh +42 -0
- package/skills/uipath-maestro-flow/.maintenance/check-uip-commands.sh +270 -0
- package/skills/uipath-maestro-flow/.maintenance/check-versions.sh +160 -0
- package/skills/uipath-maestro-flow/SKILL.md +69 -886
- package/skills/uipath-maestro-flow/references/author/CAPABILITY.md +207 -0
- package/skills/uipath-maestro-flow/references/author/brownfield.md +91 -0
- package/skills/uipath-maestro-flow/references/author/editing-operations-cli.md +190 -0
- package/skills/uipath-maestro-flow/references/author/editing-operations-json.md +374 -0
- package/skills/uipath-maestro-flow/references/author/editing-operations.md +104 -0
- package/skills/uipath-maestro-flow/references/author/greenfield.md +420 -0
- package/skills/uipath-maestro-flow/references/author/planning-arch.md +364 -0
- package/skills/uipath-maestro-flow/references/author/planning-impl.md +291 -0
- package/skills/uipath-maestro-flow/references/author/plugins/agent/impl.md +237 -0
- package/skills/uipath-maestro-flow/references/author/plugins/agent/planning.md +97 -0
- package/skills/uipath-maestro-flow/references/author/plugins/agentic-process/impl.md +107 -0
- package/skills/uipath-maestro-flow/references/author/plugins/agentic-process/planning.md +61 -0
- package/skills/uipath-maestro-flow/references/author/plugins/api-workflow/impl.md +108 -0
- package/skills/uipath-maestro-flow/references/author/plugins/api-workflow/planning.md +60 -0
- package/skills/uipath-maestro-flow/references/author/plugins/batch-transform/impl.md +171 -0
- package/skills/uipath-maestro-flow/references/author/plugins/batch-transform/planning.md +72 -0
- package/skills/uipath-maestro-flow/references/author/plugins/connector/impl-inline.md +120 -0
- package/skills/uipath-maestro-flow/references/author/plugins/connector/impl.md +463 -0
- package/skills/uipath-maestro-flow/references/author/plugins/connector/planning.md +186 -0
- package/skills/uipath-maestro-flow/references/author/plugins/connector-trigger/impl.md +517 -0
- package/skills/uipath-maestro-flow/references/author/plugins/connector-trigger/planning.md +115 -0
- package/skills/uipath-maestro-flow/references/author/plugins/conversational-agent/impl.md +309 -0
- package/skills/uipath-maestro-flow/references/author/plugins/conversational-agent/planning.md +133 -0
- package/skills/uipath-maestro-flow/references/author/plugins/data-fabric/impl.md +428 -0
- package/skills/uipath-maestro-flow/references/author/plugins/data-fabric/planning.md +188 -0
- package/skills/uipath-maestro-flow/references/author/plugins/decision/impl.md +83 -0
- package/skills/uipath-maestro-flow/references/author/plugins/decision/planning.md +38 -0
- package/skills/uipath-maestro-flow/references/author/plugins/delay/impl.md +38 -0
- package/skills/uipath-maestro-flow/references/author/plugins/delay/planning.md +53 -0
- package/skills/uipath-maestro-flow/references/author/plugins/end/impl.md +56 -0
- package/skills/uipath-maestro-flow/references/author/plugins/end/planning.md +28 -0
- package/skills/uipath-maestro-flow/references/author/plugins/flow/impl.md +107 -0
- package/skills/uipath-maestro-flow/references/author/plugins/flow/planning.md +58 -0
- package/skills/uipath-maestro-flow/references/author/plugins/hitl/impl.md +181 -0
- package/skills/uipath-maestro-flow/references/author/plugins/hitl/planning.md +166 -0
- package/skills/uipath-maestro-flow/references/author/plugins/http/impl-connector.md +86 -0
- package/skills/uipath-maestro-flow/references/author/plugins/http/impl-manual.md +68 -0
- package/skills/uipath-maestro-flow/references/author/plugins/http/impl.md +173 -0
- package/skills/uipath-maestro-flow/references/author/plugins/http/planning.md +107 -0
- package/skills/uipath-maestro-flow/references/author/plugins/inline-agent/impl.md +540 -0
- package/skills/uipath-maestro-flow/references/author/plugins/inline-agent/planning.md +115 -0
- package/skills/uipath-maestro-flow/references/author/plugins/inline-voice-agent/impl.md +269 -0
- package/skills/uipath-maestro-flow/references/author/plugins/inline-voice-agent/planning.md +128 -0
- package/skills/uipath-maestro-flow/references/author/plugins/ixp/impl.md +424 -0
- package/skills/uipath-maestro-flow/references/author/plugins/ixp/planning.md +95 -0
- package/skills/uipath-maestro-flow/references/author/plugins/loop/impl.md +403 -0
- package/skills/uipath-maestro-flow/references/author/plugins/loop/planning.md +60 -0
- package/skills/uipath-maestro-flow/references/author/plugins/merge/impl.md +43 -0
- package/skills/uipath-maestro-flow/references/author/plugins/merge/planning.md +24 -0
- package/skills/uipath-maestro-flow/references/author/plugins/queue/impl.md +82 -0
- package/skills/uipath-maestro-flow/references/author/plugins/queue/planning.md +44 -0
- package/skills/uipath-maestro-flow/references/author/plugins/rpa/impl.md +117 -0
- package/skills/uipath-maestro-flow/references/author/plugins/rpa/planning.md +61 -0
- package/skills/uipath-maestro-flow/references/author/plugins/scheduled-trigger/impl.md +56 -0
- package/skills/uipath-maestro-flow/references/author/plugins/scheduled-trigger/planning.md +93 -0
- package/skills/uipath-maestro-flow/references/author/plugins/script/impl.md +98 -0
- package/skills/uipath-maestro-flow/references/author/plugins/script/planning.md +42 -0
- package/skills/uipath-maestro-flow/references/author/plugins/subflow/impl.md +164 -0
- package/skills/uipath-maestro-flow/references/author/plugins/subflow/planning.md +35 -0
- package/skills/uipath-maestro-flow/references/author/plugins/summarize/impl.md +189 -0
- package/skills/uipath-maestro-flow/references/author/plugins/summarize/planning.md +66 -0
- package/skills/uipath-maestro-flow/references/author/plugins/switch/impl.md +72 -0
- package/skills/uipath-maestro-flow/references/author/plugins/switch/planning.md +34 -0
- package/skills/uipath-maestro-flow/references/author/plugins/terminate/impl.md +48 -0
- package/skills/uipath-maestro-flow/references/author/plugins/terminate/planning.md +29 -0
- package/skills/uipath-maestro-flow/references/author/plugins/transform/impl.md +252 -0
- package/skills/uipath-maestro-flow/references/author/plugins/transform/planning.md +47 -0
- package/skills/uipath-maestro-flow/references/diagnose/CAPABILITY.md +73 -0
- package/skills/uipath-maestro-flow/references/diagnose/failure-modes.md +353 -0
- package/skills/uipath-maestro-flow/references/diagnose/troubleshooting-guide.md +174 -0
- package/skills/uipath-maestro-flow/references/evaluate/CAPABILITY.md +134 -0
- package/skills/uipath-maestro-flow/references/evaluate/commands-reference.md +376 -0
- package/skills/uipath-maestro-flow/references/evaluate/eval-sets-guide.md +227 -0
- package/skills/uipath-maestro-flow/references/evaluate/evaluators-guide.md +143 -0
- package/skills/uipath-maestro-flow/references/evaluate/running-guide.md +215 -0
- package/skills/uipath-maestro-flow/references/evaluate/upload-safety.md +94 -0
- package/skills/uipath-maestro-flow/references/operate/CAPABILITY.md +77 -0
- package/skills/uipath-maestro-flow/references/operate/manage.md +39 -0
- package/skills/uipath-maestro-flow/references/operate/run.md +121 -0
- package/skills/uipath-maestro-flow/references/operate/ship.md +57 -0
- package/skills/uipath-maestro-flow/references/shared/action-nodes.md +100 -0
- package/skills/uipath-maestro-flow/references/shared/cli-commands.md +269 -0
- package/skills/uipath-maestro-flow/references/shared/cli-conventions.md +178 -0
- package/skills/uipath-maestro-flow/references/shared/file-format.md +582 -0
- package/skills/uipath-maestro-flow/references/shared/node-output-wiring.md +86 -0
- package/skills/uipath-maestro-flow/references/shared/ux-narration-and-todos.md +113 -0
- package/skills/uipath-maestro-flow/references/shared/variables-and-expressions.md +787 -0
- package/skills/uipath-platform/references/integration-service/activities.md +2 -2
- package/skills/uipath-platform/references/integration-service/activity-generation.md +8 -1
- package/skills/uipath-platform/references/integration-service/triggers.md +1 -3
- package/version-manifest.json +1 -1
- package/skills/uipath-maestro-flow/examples/AquariumSafetyStop.flow.ts +0 -26
- package/skills/uipath-maestro-flow/examples/ArchiveCardExtract.flow.ts +0 -38
- package/skills/uipath-maestro-flow/examples/BakeOffEntryForm.flow.ts +0 -27
- package/skills/uipath-maestro-flow/examples/BeeHiveLedger.flow.ts +0 -61
- package/skills/uipath-maestro-flow/examples/BeltProgression.flow.ts +0 -53
- package/skills/uipath-maestro-flow/examples/BirdCountLookup.flow.ts +0 -24
- package/skills/uipath-maestro-flow/examples/ClubDirectory.flow.ts +0 -56
- package/skills/uipath-maestro-flow/examples/ConcertSoundcheck.flow.ts +0 -59
- package/skills/uipath-maestro-flow/examples/DoorbellLog.flow.ts +0 -45
- package/skills/uipath-maestro-flow/examples/FestivalMapScaffold.flow.ts +0 -22
- package/skills/uipath-maestro-flow/examples/FieldTripQuickForm.flow.ts +0 -45
- package/skills/uipath-maestro-flow/examples/FossilCatalogEnrich.flow.ts +0 -26
- package/skills/uipath-maestro-flow/examples/GallerySubmission.flow.ts +0 -67
- package/skills/uipath-maestro-flow/examples/GreenhouseWatering.flow.ts +0 -39
- package/skills/uipath-maestro-flow/examples/HarbourRadioLine.flow.ts +0 -31
- package/skills/uipath-maestro-flow/examples/HerbariumDispatch.flow.ts +0 -34
- package/skills/uipath-maestro-flow/examples/KilnReview.flow.ts +0 -38
- package/skills/uipath-maestro-flow/examples/LibraryDeskChat.flow.ts +0 -39
- package/skills/uipath-maestro-flow/examples/LighthouseSignal.flow.ts +0 -30
- package/skills/uipath-maestro-flow/examples/MeteorShowerPages.flow.ts +0 -39
- package/skills/uipath-maestro-flow/examples/NeighborhoodWalkPlanner.flow.ts +0 -27
- package/skills/uipath-maestro-flow/examples/ObservatorySeeing.flow.ts +0 -51
- package/skills/uipath-maestro-flow/examples/OralHistoryDigest.flow.ts +0 -31
- package/skills/uipath-maestro-flow/examples/PlanetariumConfirmation.flow.ts +0 -34
- package/skills/uipath-maestro-flow/examples/PlantNameAdvisor.flow.ts +0 -28
- package/skills/uipath-maestro-flow/examples/PostcardCaption.flow.ts +0 -44
- package/skills/uipath-maestro-flow/examples/PotteryStudioCallback.flow.ts +0 -41
- package/skills/uipath-maestro-flow/examples/RecipeScaler.flow.ts +0 -62
- package/skills/uipath-maestro-flow/examples/SeedPacketReader.flow.ts +0 -49
- package/skills/uipath-maestro-flow/examples/TideTableConverter.flow.ts +0 -35
- package/skills/uipath-maestro-flow/examples/TrailLogSummary.flow.ts +0 -75
- package/skills/uipath-maestro-flow/examples/WorkshopInventory.flow.ts +0 -27
- package/skills/uipath-maestro-flow/examples/bindings.json +0 -85
- package/skills/uipath-maestro-flow/references/CLI-LOOP.md +0 -309
- package/skills/uipath-maestro-flow/references/agent-resources.md +0 -74
- package/skills/uipath-maestro-flow/references/agent.md +0 -175
- package/skills/uipath-maestro-flow/references/agentic-process.md +0 -41
- package/skills/uipath-maestro-flow/references/api-workflow.md +0 -29
- package/skills/uipath-maestro-flow/references/author.md +0 -178
- package/skills/uipath-maestro-flow/references/batch-transform.md +0 -23
- package/skills/uipath-maestro-flow/references/bindings.md +0 -178
- package/skills/uipath-maestro-flow/references/branch.md +0 -18
- package/skills/uipath-maestro-flow/references/brownfield.md +0 -152
- package/skills/uipath-maestro-flow/references/connector-params.md +0 -624
- package/skills/uipath-maestro-flow/references/conversational.md +0 -77
- package/skills/uipath-maestro-flow/references/data-fabric.md +0 -268
- package/skills/uipath-maestro-flow/references/delay.md +0 -26
- package/skills/uipath-maestro-flow/references/diagnose.md +0 -141
- package/skills/uipath-maestro-flow/references/document-pipeline.md +0 -47
- package/skills/uipath-maestro-flow/references/error-handling.md +0 -75
- package/skills/uipath-maestro-flow/references/evaluate.md +0 -168
- package/skills/uipath-maestro-flow/references/event-trigger.md +0 -155
- package/skills/uipath-maestro-flow/references/form-trigger.md +0 -41
- package/skills/uipath-maestro-flow/references/hitl.md +0 -169
- package/skills/uipath-maestro-flow/references/http.md +0 -105
- package/skills/uipath-maestro-flow/references/inline-agent.md +0 -132
- package/skills/uipath-maestro-flow/references/ixp.md +0 -167
- package/skills/uipath-maestro-flow/references/loops.md +0 -77
- package/skills/uipath-maestro-flow/references/manual-trigger.md +0 -39
- package/skills/uipath-maestro-flow/references/operate.md +0 -204
- package/skills/uipath-maestro-flow/references/or-processes.md +0 -91
- package/skills/uipath-maestro-flow/references/parallel-merge.md +0 -21
- package/skills/uipath-maestro-flow/references/placeholder.md +0 -70
- package/skills/uipath-maestro-flow/references/published-function.md +0 -66
- package/skills/uipath-maestro-flow/references/queue.md +0 -53
- package/skills/uipath-maestro-flow/references/return.md +0 -20
- package/skills/uipath-maestro-flow/references/rpa-workflow.md +0 -27
- package/skills/uipath-maestro-flow/references/scheduled-trigger.md +0 -34
- package/skills/uipath-maestro-flow/references/script.md +0 -52
- package/skills/uipath-maestro-flow/references/subflow.md +0 -33
- package/skills/uipath-maestro-flow/references/summarize.md +0 -20
- package/skills/uipath-maestro-flow/references/switch.md +0 -20
- package/skills/uipath-maestro-flow/references/terminate.md +0 -22
- package/skills/uipath-maestro-flow/references/transform.md +0 -32
- package/skills/uipath-maestro-flow/references/voice.md +0 -70
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
# Chat (Text-based Conversation) Nodes — Implementation
|
|
2
|
+
|
|
3
|
+
Wire whatever shape the conversation needs, inside the rules in [planning.md](planning.md#critical-rules-any-conversational-flow-must-follow).
|
|
4
|
+
|
|
5
|
+
For a phone conversation, use [inline-voice-agent/impl.md](../inline-voice-agent/impl.md) instead.
|
|
6
|
+
|
|
7
|
+
Everything here is the same for all three agent flavors except the agent node itself and its port. Settle the flavor first — [planning.md](planning.md#pick-the-agent-flavor-before-you-build).
|
|
8
|
+
|
|
9
|
+
## Resolve the Agent
|
|
10
|
+
|
|
11
|
+
**Inline** — scaffold it, from the solution root:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
uip agent init "<FlowProjectName>" --inline-in-flow --conversational
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Writes `<FlowProject>/<uuid>/agent.json` plus `flow-layout.json`, and returns `Data.ProjectId`. **Keep that UUID** — it is what the agent node's `inputs.source` must carry.
|
|
18
|
+
|
|
19
|
+
**In-solution** — the agent is a sibling project; nothing to scaffold in the flow. Find its node type:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
uip maestro flow registry list --local --output json
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**Published** — already on the tenant:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
uip maestro flow registry search "<agent name>" --output json
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Both of the latter give a `uipath.core.agent.*` node type — suffixed with the solution resource key in-solution, the Orchestrator-assigned UUID when published. `registry get` on it returns `inputDefaults` holding `isConversational: true` and `conversationalAgentSettings`, which is how you confirm the agent really is a chat agent rather than an autonomous one. Discovery details live in [agent/impl.md](../agent/impl.md#discovery-and-registry-validation).
|
|
32
|
+
|
|
33
|
+
**If an in-solution agent comes back autonomous**, the registry could not read its `agent.json` — it builds that node from the sibling project's file, and falls back to autonomous when the file is missing or malformed. Re-run with `--log-level debug` and it names the reason:
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
[DEBUG] Unparseable agent.json in <projectDir>: … The node will describe an autonomous agent.
|
|
37
|
+
[DEBUG] No readable agent.json in <projectDir>; the node will describe an autonomous agent.
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Nothing else reports it, and the authored node would run as autonomous with no error at any step. Published agents are unaffected — their flag comes from the release, not a local file.
|
|
41
|
+
|
|
42
|
+
## Configure `agent.json`
|
|
43
|
+
|
|
44
|
+
Edit the scaffolded file, then regenerate its derived fields:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
uip agent refresh "<FlowProject>/<uuid>" --inline-in-flow
|
|
48
|
+
uip agent validate "<FlowProject>/<uuid>" --inline-in-flow
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
`refresh` rebuilds `contentTokens[]` from `messages[].content`. **Skip it and `agent validate` fails** with `contentTokens has 0 entries but content requires 1` — the error does not name `agent refresh`, so it is easy to get stuck on.
|
|
52
|
+
|
|
53
|
+
Run `refresh` after any `agent.json` edit — for an in-solution agent too, without the flag: `uip agent refresh "<AgentProject>"`. A published agent has no local file, so there is nothing to refresh.
|
|
54
|
+
|
|
55
|
+
Settings that matter for a conversational agent:
|
|
56
|
+
|
|
57
|
+
| Key | Value | Why |
|
|
58
|
+
| --- | --- | --- |
|
|
59
|
+
| `settings.engine` | `conversational-v1` | What makes it a chat agent rather than autonomous |
|
|
60
|
+
| `metadata.isConversational` | `true` | Read by the registry to pick the icon and keep the agent out of the agent-as-tool picker |
|
|
61
|
+
| `settings.maxIterations` | `8` | keep what the scaffold wrote |
|
|
62
|
+
|
|
63
|
+
`uip agent init --conversational` writes all three. Do not remove them.
|
|
64
|
+
|
|
65
|
+
## Registry Validation
|
|
66
|
+
|
|
67
|
+
`flow validate` has **no registry fallback** — a hand-authored node must carry its manifest in the file's `definitions[]`. Fetch one per node type in the flow:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
uip maestro flow registry get core.trigger.conversation --output json
|
|
71
|
+
uip maestro flow registry get uipath.conversational.wait-for-message --output json
|
|
72
|
+
uip maestro flow registry get uipath.agent.conversational --output json
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Append each `Data.Node` verbatim to the `.flow`'s `definitions[]`, and set the node's `typeVersion` to exactly the `version` the command returned. Miss one and validate reports `Node type "<type>:<version>" has no matching definition`.
|
|
76
|
+
|
|
77
|
+
The conversational agent node requires a login; the trigger and the tool nodes resolve from the bundled catalog.
|
|
78
|
+
|
|
79
|
+
## The `conversationalAgentSettings` Wiring Rule
|
|
80
|
+
|
|
81
|
+
This is the one that goes wrong silently. The agent reads the conversation through `inputs.conversationalAgentSettings`, which holds **five** keys — a `context` binding plus four fields derived from it:
|
|
82
|
+
|
|
83
|
+
```json
|
|
84
|
+
"conversationalAgentSettings": {
|
|
85
|
+
"mode": "simple",
|
|
86
|
+
"context": { "type": "jsExpression", "expression": "$vars.waitForMessage1.output.conversationContext", "fieldType": "object" },
|
|
87
|
+
"conversationId": { "type": "jsExpression", "expression": "$vars.waitForMessage1.output.conversationContext.conversationId", "fieldType": "string" },
|
|
88
|
+
"exchangeId": { "type": "jsExpression", "expression": "$vars.waitForMessage1.output.conversationContext.latestExchangeId", "fieldType": "string" },
|
|
89
|
+
"messages": { "type": "jsExpression", "expression": "$vars.waitForMessage1.output.conversationContext.messages", "fieldType": "array" },
|
|
90
|
+
"userSettings": { "type": "jsExpression", "expression": "$vars.waitForMessage1.output.conversationContext.userSettings", "fieldType": "object" }
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**`mode` and `context` exist only to restore the editor UI.** The four individual fields are what the runtime reads, in either mode, and validation requires `conversationId` regardless. `custom` is for a turn assembled from more than one source. `mode` is optional; the examples here all declare `simple`.
|
|
95
|
+
|
|
96
|
+
**Write all five.** In Studio Web the author fills `context` and the panel derives the other four, but that derivation only runs in the editor — nothing derives them when the file is authored from the CLI.
|
|
97
|
+
|
|
98
|
+
Validation only requires `conversationId`, so it half-helps: leave that out and validate fails, but bind `context` and `conversationId` while dropping `exchangeId`, `messages` and `userSettings` and validate passes. The runtime reads all four, so that flow ships an agent with no chat history and no user settings.
|
|
99
|
+
|
|
100
|
+
Note the field is `latestExchangeId` inside `conversationContext`, not `exchangeId`.
|
|
101
|
+
|
|
102
|
+
## Bindings Are Objects, Not `=js:` Strings
|
|
103
|
+
|
|
104
|
+
Every expression binding in a `.flow` is the object form above. A bare `"=js:$vars.…"` string is a pre-1.3 file format that current files no longer use — Studio Web renders it as literal text rather than a binding, and nothing warns.
|
|
105
|
+
|
|
106
|
+
This matters when using `node add`, which writes `--input` JSON through untouched:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
# WRONG — lands in the file verbatim, renders as text
|
|
110
|
+
uip maestro flow node add ChatFlow/ChatFlow.flow uipath.conversational.wait-for-message \
|
|
111
|
+
--input '{"conversationId":"=js:$vars.conversationTrigger1.output.conversationId"}'
|
|
112
|
+
|
|
113
|
+
# RIGHT
|
|
114
|
+
uip maestro flow node add ChatFlow/ChatFlow.flow uipath.conversational.wait-for-message \
|
|
115
|
+
--input '{"conversationId":{"type":"jsExpression","expression":"$vars.conversationTrigger1.output.conversationId","fieldType":"string"}}'
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
(`uip maestro flow node configure --detail` uses the `=js:` form for **connector** nodes — that is a different surface and does not apply here.)
|
|
119
|
+
|
|
120
|
+
## Node JSON
|
|
121
|
+
|
|
122
|
+
> **Which surface authors this node.** [inline-agent/impl.md § What NOT to Do](../inline-agent/impl.md#what-not-to-do) bars Flow CLI `node add` / `edge add` for inline **autonomous** agent graph edits. That rule does not cover `uipath.agent.conversational`: the CLI path below is the supported one for this node, `--source` is a documented `node add` flag for it, and the full recipe validates clean. Use `Edit` / `Write` when you prefer, but do not read the inline-agent prohibition as applying here.
|
|
123
|
+
|
|
124
|
+
Editing the `.flow` directly carries the usual obligations — chiefly a `variables.nodes[]` entry for every data-producing node, which is what makes `$vars.<id>.output` resolve at all. See [editing-operations-json.md](../../editing-operations-json.md). `node add` writes those entries for you.
|
|
125
|
+
|
|
126
|
+
### Conversation trigger
|
|
127
|
+
|
|
128
|
+
Replace the default manual trigger — `flow init` scaffolds `core.trigger.manual`, and the conversation trigger is what makes the packaged flow conversational and exposed as a chat experience. Same two-step shape as [editing-operations-cli.md § Replace manual trigger with connector trigger](../../editing-operations-cli.md#replace-manual-trigger-with-connector-trigger), with the conversation trigger in place of a connector one.
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
uip maestro flow node remove ChatFlow/ChatFlow.flow start
|
|
132
|
+
uip maestro flow node add ChatFlow/ChatFlow.flow core.trigger.conversation --position 256,144
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Wait for message
|
|
136
|
+
|
|
137
|
+
```json
|
|
138
|
+
{
|
|
139
|
+
"id": "waitForMessage1",
|
|
140
|
+
"type": "uipath.conversational.wait-for-message",
|
|
141
|
+
"inputs": {
|
|
142
|
+
"conversationId": { "type": "jsExpression", "expression": "$vars.conversationTrigger1.output.conversationId", "fieldType": "string" },
|
|
143
|
+
"from": "User"
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### The agent — inline
|
|
149
|
+
|
|
150
|
+
`inputs.source` is the scaffolded UUID; `conversationalAgentSettings` is the five-key block above.
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
uip maestro flow node add ChatFlow/ChatFlow.flow uipath.agent.conversational \
|
|
154
|
+
--position 768,144 --source <ProjectId> --input '<the settings JSON>'
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### The agent — in-solution or published
|
|
158
|
+
|
|
159
|
+
Same settings block, different node type, and `isConversational` alongside it instead of `source`. The suffix is the solution resource key in-solution and the Orchestrator-assigned UUID when published, so read the exact `nodeType` off `registry get` either way:
|
|
160
|
+
|
|
161
|
+
```json
|
|
162
|
+
{
|
|
163
|
+
"id": "supportAgent1",
|
|
164
|
+
"type": "uipath.core.agent.<suffix from registry get>",
|
|
165
|
+
"typeVersion": "<version from registry get>",
|
|
166
|
+
"inputs": {
|
|
167
|
+
"isConversational": true,
|
|
168
|
+
"conversationalAgentSettings": { "...": "the five-key block above" }
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
An in-solution agent needs its `definitions[]` entry fetched with `--local`; a published one comes from the pulled tenant registry.
|
|
174
|
+
|
|
175
|
+
### Send message (for flow-composed messages)
|
|
176
|
+
|
|
177
|
+
`conversationId`, `exchangeId`, `content`, `role` and `mimeType` are all required. `role` and `mimeType` each accept exactly one value, so write them as shown. `content` is normally a literal — the agent's own replies are streamed, not routed through this node.
|
|
178
|
+
|
|
179
|
+
```json
|
|
180
|
+
{
|
|
181
|
+
"id": "sendMessage1",
|
|
182
|
+
"type": "uipath.conversational.send-message",
|
|
183
|
+
"inputs": {
|
|
184
|
+
"conversationId": { "type": "jsExpression", "expression": "$vars.conversationTrigger1.output.conversationId", "fieldType": "string" },
|
|
185
|
+
"exchangeId": { "type": "jsExpression", "expression": "$vars.waitForMessage1.output.conversationContext.latestExchangeId", "fieldType": "string" },
|
|
186
|
+
"content": { "type": "literal", "expression": "Anything else I can help with?", "fieldType": "string" },
|
|
187
|
+
"role": "assistant",
|
|
188
|
+
"mimeType": "text/markdown"
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Get conversation context
|
|
194
|
+
|
|
195
|
+
Reads recent exchanges without waiting. Rarely needed, and constrained — see [planning.md § Get Conversation Context](planning.md#get-conversation-context).
|
|
196
|
+
```json
|
|
197
|
+
{
|
|
198
|
+
"id": "getConversationContext1",
|
|
199
|
+
"type": "uipath.conversational.get-conversation-context",
|
|
200
|
+
"inputs": {
|
|
201
|
+
"conversationId": { "type": "jsExpression", "expression": "$vars.conversationTrigger1.output.conversationId", "fieldType": "string" },
|
|
202
|
+
"exchangeLimit": 20
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## Structured Outputs
|
|
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. Imported standalone conversational agents (published or in-solution) do not support structured output fields.
|
|
210
|
+
|
|
211
|
+
Declare each field in two places or it yields nothing at run time:
|
|
212
|
+
|
|
213
|
+
| Where | What |
|
|
214
|
+
| --- | --- |
|
|
215
|
+
| the node, in the `.flow` | `inputs.agentOutputVariables: [{ "id": "shouldHandoff", "type": "boolean", "description": "..." }]` |
|
|
216
|
+
| the inline `agent.json` | the same field under `outputSchema.properties` |
|
|
217
|
+
|
|
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
|
+
|
|
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
|
+
|
|
238
|
+
## Wire the Edges
|
|
239
|
+
|
|
240
|
+
An **inline** agent leaves on `success`; an in-solution or published one leaves on `output`. The smallest loop:
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
uip maestro flow edge add ChatFlow/ChatFlow.flow conversationTrigger1 waitForMessage1
|
|
244
|
+
uip maestro flow edge add ChatFlow/ChatFlow.flow waitForMessage1 conversationalAgent1
|
|
245
|
+
uip maestro flow edge add ChatFlow/ChatFlow.flow conversationalAgent1 waitForMessage1 --source-port success
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
Omit `--source-port success` and the command fails with `Source port "output" not found on node "conversationalAgent1". Available source ports: escalation, context, tool, success`.
|
|
249
|
+
|
|
250
|
+
## Validate
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
uip maestro flow validate ChatFlow/ChatFlow.flow
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Unbound identifiers each report their own error, naming the node and field:
|
|
257
|
+
|
|
258
|
+
```
|
|
259
|
+
[nodes[waitForMessage1].inputs.conversationId] [SCHEMA_ERROR] Conversation ID is required
|
|
260
|
+
[nodes[sendMessage1].inputs.exchangeId] [SCHEMA_ERROR] Exchange ID is required
|
|
261
|
+
[nodes[sendMessage1].inputs.content] [SCHEMA_ERROR] Content is required
|
|
262
|
+
[nodes[conversationalAgent1].inputs.conversationalAgentSettings.conversationId]
|
|
263
|
+
[CONVERSATIONAL_CONVERSATION_ID_REQUIRED] Conversation ID is required
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
A clean validate does **not** mean the bindings are right — see [planning.md § Output Variables](planning.md#output-variables).
|
|
267
|
+
|
|
268
|
+
## Pack and Ship
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
uip maestro flow pack ChatFlow ./dist --version 1.0.0
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
Confirm the marker in the packaged `content/operate.json`:
|
|
275
|
+
|
|
276
|
+
```json
|
|
277
|
+
"runtimeOptions": { "isConversational": true }
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
The marker is the contract with the runtime chat channels: a headless SDK lists any deployed process carrying it, and every OOTB integration on that SDK (e.g. web-chat, iframe embedding, UiPath Assistant, Microsoft Teams, Slack) plus custom UIs pick it up automatically.
|
|
281
|
+
|
|
282
|
+
Absent means the flow does not start on `core.trigger.conversation`, and it will not be listed as a Conversational Agent in the channels.
|
|
283
|
+
|
|
284
|
+
## Debug — the CLI Hands Off
|
|
285
|
+
|
|
286
|
+
A chat cannot be driven headlessly, so `flow debug` uploads the solution and stops:
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
uip maestro flow debug ChatFlow --open-in-browser
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
Returns `Code: FlowDebugStudioWebHandoff` with `Data.studioWebUrl` and `Data.handedOff: true`, and no debug session is started. `--timeout` has no effect on this path.
|
|
293
|
+
|
|
294
|
+
Two chat UIs can drive the run — the CLI names both:
|
|
295
|
+
|
|
296
|
+
- **Studio Web** — open `Data.studioWebUrl` (`--open-in-browser` does it for you) and chat from its panel
|
|
297
|
+
- **UiPath Maestro VS Code extension** — open the flow and hit Debug
|
|
298
|
+
|
|
299
|
+
If the solution's `.uipx` already carries a `SolutionId`, the upload overwrites that solution rather than creating a second one.
|
|
300
|
+
|
|
301
|
+
## What NOT to Do
|
|
302
|
+
|
|
303
|
+
- **Do not stop at `context` and `conversationId`** — see [§ The `conversationalAgentSettings` Wiring Rule](#the-conversationalagentsettings-wiring-rule).
|
|
304
|
+
- **Do not invent output paths.** `waitForMessage1.output.exchangeId` and `conversationalAgent1.output.response` do not exist, and validate accepts both.
|
|
305
|
+
- **Do not use `=js:` strings** for bindings in a `.flow`.
|
|
306
|
+
- **Do not carry one flavor's agent port across.** Inline continues on `success`, in-solution and published on `output`.
|
|
307
|
+
- **Do not add a send-message just to deliver the conversational agent's reply.** The conversational agent already streams it.
|
|
308
|
+
- **Do not expect `flow debug` to run the conversation.** It hands off to Studio Web or the VS Code extension.
|
|
309
|
+
- **Do not leave the manual trigger in place.** Without `core.trigger.conversation` the package is not marked conversational, and nothing errors.
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Chat (Text-based Conversation) Nodes — Planning
|
|
2
|
+
|
|
3
|
+
Build a conversational flow whose job is to model a **text-based chat**: a user types, the Flow responds through AI or deterministic answers, and waits for the next message or eventually terminates. For a chat that happens over a **phone call**, use [inline-voice-agent](../inline-voice-agent/planning.md) instead — same idea, different medium, different node types.
|
|
4
|
+
|
|
5
|
+
The flow is **surface-agnostic**; one conversational flow is consumed from many channels. Once deployed, the common UiPath TypeScript SDK can list every conversational flow on the tenant, and every OOTB integration built on that SDK — e.g. web-chat, iframe embedding, UiPath Assistant, Microsoft Teams, Slack — plus any customer's custom UI is able to converse with the chat experience. Author for the conversation, not for a channel.
|
|
6
|
+
|
|
7
|
+
## Node Types
|
|
8
|
+
|
|
9
|
+
| Node type | Role |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| `core.trigger.conversation` | Starts the flow when a conversation is created. Emits the `conversationId` every other node is addressed by. |
|
|
12
|
+
| `uipath.conversational.wait-for-message` | Pauses until the user sends a message (initiates an exchange). Returns the conversation context (which includes the recent exchanges in the chat history), intended for input into a conversational agent node. |
|
|
13
|
+
| conversational agent node | Requires the user to initiate an exchange first. Given the conversation context, runs a single response turn, streaming its messages and tool-calls back to the chat. Which node type depends on where the agent lives — see below. |
|
|
14
|
+
| `uipath.conversational.send-message` | Requires the user to initiate an exchange first. Sends a flow-composed message (e.g. a handoff notice, results/updates from other nodes) back to the chat. |
|
|
15
|
+
| `uipath.conversational.get-conversation-context` | Immediately reads the conversation context without waiting for a user message. Rarely needed, and constrained — see [§ Get Conversation Context](#get-conversation-context). |
|
|
16
|
+
|
|
17
|
+
### Pick the agent flavor before you build
|
|
18
|
+
|
|
19
|
+
The trigger and message nodes are identical whichever you pick. Only the agent node changes — and **ask the user rather than defaulting**, because the answer decides the node type, the ports, and whether you scaffold anything at all:
|
|
20
|
+
|
|
21
|
+
| Flavor | Node type | Where the agent lives | Choose it when |
|
|
22
|
+
| --- | --- | --- | --- |
|
|
23
|
+
| **Inline** | `uipath.agent.conversational` | A UUID subdirectory inside this flow project | The agent exists only as part of this conversational flow, or you need [structured outputs](impl.md#structured-outputs) to route on — only inline has them. You scaffold it with `agent init --inline-in-flow --conversational`. |
|
|
24
|
+
| **In-solution** | `uipath.core.agent.{key}` | A sibling project in the same solution | The agent is its own project, versioned separately, maybe reused by other flows in the solution. Discover it with `registry list --local`. |
|
|
25
|
+
| **Published** | `uipath.core.agent.<agentUuid>` | The tenant, already published | The user names an existing agent, or one is already deployed. Discover it with `registry search`. Nothing to scaffold. |
|
|
26
|
+
|
|
27
|
+
`{key}` is the in-solution agent's solution resource key, the `key` in `resources/solution_folder/process/agent/<Project>.json`, and **not** `agent.json`'s `projectId`. A published agent's suffix is the Orchestrator-assigned UUID instead. Read either off `registry get`.
|
|
28
|
+
|
|
29
|
+
**If the user names an existing agent, it is not inline.** Run `uip maestro flow registry search "<name>" --output json` (and `registry list --local` for solution siblings) before scaffolding anything — the same rule the [agent](../agent/planning.md) plugin states for autonomous agents.
|
|
30
|
+
|
|
31
|
+
In-solution and published share one node type and one set of ports; inline differs on both (see [Ports](#ports)).
|
|
32
|
+
|
|
33
|
+
Read each node's current inputs and version from the registry rather than assuming — these move between releases:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
uip maestro flow registry get uipath.conversational.wait-for-message
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## When to Use
|
|
40
|
+
|
|
41
|
+
Use these nodes when the flow **is** the conversation: a support chat, an intake questionnaire, a triage bot. The flow's shape generally loops with wait-for-message, but can also have termination - once the flow ends, the conversation gracefully completes, with a UI change to the user that the conversation has completed.
|
|
42
|
+
|
|
43
|
+
### Chat vs Voice vs Autonomous
|
|
44
|
+
|
|
45
|
+
| Situation | Text-based conversation (`uipath.agent.conversational`) | Voice ([`uipath.agent.voice`](../inline-voice-agent/planning.md)) | Inline autonomous ([`uipath.agent.autonomous`](../inline-agent/planning.md)) |
|
|
46
|
+
| --- | --- | --- | --- |
|
|
47
|
+
| The user types and reads replies | Yes | No | No |
|
|
48
|
+
| The user is on a phone call | No | Yes | No |
|
|
49
|
+
| A reasoning step over flow data, nobody talking | No | No | Yes |
|
|
50
|
+
| Reply reaches the user | Streamed by the agent | Spoken on the call | Only through send-message node with the agent's result (high latency) |
|
|
51
|
+
|
|
52
|
+
### When NOT to Use
|
|
53
|
+
- **The conversation is a phone call** — [inline-voice-agent](../inline-voice-agent/planning.md).
|
|
54
|
+
- **A single pause for a human to review, approve, or fill in data** — See [hitl](../hitl/planning.md) for a form.
|
|
55
|
+
|
|
56
|
+
## Critical Rules Any Conversational Flow Must Follow
|
|
57
|
+
Combine the nodes, along with flow's other nodes and routing capabilities, to model conversational paths as needed. The **following rules hold for whatever shape you build:**
|
|
58
|
+
|
|
59
|
+
- **Start with `core.trigger.conversation`.** The trigger alone sets `runtimeOptions.isConversational` in the packed `operate.json`, marking it as a chattable process.
|
|
60
|
+
- **Immediately follow the conversation trigger with a wait-for-message node.** This is so the Flow can immediately handle user's first chat message.
|
|
61
|
+
- Related: the flow **cannot send a message "first"** and can only reply. The user must initiate an exchange before conversational agent and send-message nodes can respond, as those nodes require an exchange ID to reply to; this exchange ID is included in the conversation context outputted from a wait-for-message node.
|
|
62
|
+
- Every key in `conversationalAgentSettings` derives from a wait-for-message node's `conversationContext` — see [impl.md](impl.md#the-conversationalagentsettings-wiring-rule).
|
|
63
|
+
- **Reach a wait node again to keep the conversation alive.** The flow's response to the latest exchange ends when either (1) arriving back at a wait-for-message node or (2) when the flow ends. Until either occurs, the user is not expected to send a message (chat UI blocks input, since it is the flow's turn in the exchange). When the flow ends, the chat UI will indicate to the user that the conversation has gracefully completed.
|
|
64
|
+
- **The conversational agent node streams its own reply.** No send-message is needed for the agent to answer, since its message and tool-calls are streamed automatically to the chat and appended to the conversation history.
|
|
65
|
+
- **Leave the conversational agent on the port its flavor exposes** — `success` for inline, `output` for in-solution and published. See [Ports](#ports).
|
|
66
|
+
|
|
67
|
+
A simple flow that satisfies all the rules:
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
core.trigger.conversation → wait-for-message → conversational agent ──┐
|
|
71
|
+
▲ │
|
|
72
|
+
└───────────────────────────────────┘
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
That is a starting point, not the only supported shape. Add whatever the conversational flow needs: additional agent and send-message nodes, a decision on the agent's outputs, handoffs, parallel branches to execute behind-the-scenes tasks, an escalation to [hitl](../hitl/planning.md), a connector or RPA call between turns, or no loop back at all when the conversation should end.
|
|
76
|
+
|
|
77
|
+
### Get Conversation Context
|
|
78
|
+
|
|
79
|
+
`get-conversation-context` is legal but usually redundant — wait-for-message already returns the context. It may be useful for cases when conversational agent and send-message nodes are chained together (to re-obtain the chat-history between them) or when needing the most up-to-date conversation-history without requiring the user to send a message. Note that you **cannot** immediately use `get-conversation-context` after the `core.trigger.conversation` and use the outputted conversation context as input for conversational agents and send-message nodes, since there is not yet an initiated exchange (see above critical rules).
|
|
80
|
+
|
|
81
|
+
## Ports
|
|
82
|
+
|
|
83
|
+
| Node type | Target | Source |
|
|
84
|
+
| --- | --- | --- |
|
|
85
|
+
| `core.trigger.conversation` | — | `output` |
|
|
86
|
+
| `uipath.conversational.wait-for-message` | `input` | `output` |
|
|
87
|
+
| `uipath.agent.conversational` (inline) | `input` | `success`, `escalation`, `context`, `tool` |
|
|
88
|
+
| `uipath.core.agent.{key}` (in-solution) | `input` | `output` |
|
|
89
|
+
| `uipath.core.agent.<agentUuid>` (published) | `input` | `output`, `error` |
|
|
90
|
+
| `uipath.conversational.send-message` | `input` | `output` |
|
|
91
|
+
| `uipath.conversational.get-conversation-context` | `input` | `output` |
|
|
92
|
+
|
|
93
|
+
Only the inline agent breaks the pattern: `success`, and no `output` port. In-solution and published have `output` and no `success`. Both mistakes are caught — `edge add` lists the real ports, validate reports `Edge references undeclared source handle`. Note `output` is also a variable namespace (`$vars.<id>.output.…`) on every node, which is why the inline agent has one without having the port.
|
|
94
|
+
|
|
95
|
+
## Output Variables
|
|
96
|
+
|
|
97
|
+
| Node | Output |
|
|
98
|
+
| --- | --- |
|
|
99
|
+
| `core.trigger.conversation` | `output.conversationId` |
|
|
100
|
+
| `uipath.conversational.wait-for-message` | `output.conversationContext` — an object holding `conversationId`, `latestExchangeId`, `messages`, `userSettings` |
|
|
101
|
+
| `uipath.agent.conversational` | `output.uipath__agent_response_messages` — this turn's messages (role, contentParts, toolCalls). The reply is streamed, so there is no `output.response`. |
|
|
102
|
+
|
|
103
|
+
There is **no `output.exchangeId`** on wait-for-message and **no `output.response`** on the agent. Binding either produces `undefined` at runtime, and `flow validate` does not catch it — invented `$vars` paths pass validation today, so read the real field names off `registry get` rather than trusting a clean validate.
|
|
104
|
+
|
|
105
|
+
## Scaffolding Prerequisite
|
|
106
|
+
|
|
107
|
+
The inline agent node points at an agent project directory that must exist first:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
uip agent init "<FlowProjectName>" --inline-in-flow --conversational
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
The returned `ProjectId` is the UUID the node's `inputs.source` must carry. See [impl.md](impl.md) for the scaffold contents and the `agent.json` settings that matter.
|
|
114
|
+
|
|
115
|
+
## Resources — tools, context, escalation
|
|
116
|
+
|
|
117
|
+
The `tool`, `context` and `escalation` source ports behave exactly as they do on the inline autonomous node: discover the resource node type through the registry, add the node with `Edit`, wire the artifact edge from the agent's port, and author the matching `resource.json`. Do not re-derive that flow — [inline-agent/impl.md § Adding Resource Nodes](../inline-agent/impl.md#adding-resource-nodes) owns discovery, the one UUID that serves as both `inputs.source` and the sidecar directory, and the `refresh --bindings-target` step that propagates tool bindings into the parent flow.
|
|
118
|
+
|
|
119
|
+
Three things differ from the autonomous node:
|
|
120
|
+
|
|
121
|
+
- **There is no `memory` port.** The autonomous node has one; `uipath.agent.conversational` does not. An edge to it fails the same way any bad port does — `edge add` will not list it, and validate reports `Edge references undeclared source handle`.
|
|
122
|
+
- **Guardrails ride as a top-level `guardrails` array in the inline agent's `agent.json`**, which `uip agent init --inline-in-flow --conversational` scaffolds for you. Which guardrails apply is flavor-specific — Studio Web's properties panel filters the catalog by conversational vs autonomous — so do not assume a guardrail available on an autonomous agent is offered here.
|
|
123
|
+
- **Do not add `guardrails` to `inputSchema.properties`.** That requirement is autonomous-only, where it sits alongside the process arguments. A conversational agent's `inputSchema` stays `{"type": "object", "properties": {}}`; populating it breaks the shape the `uipath-agents` scaffold test asserts.
|
|
124
|
+
|
|
125
|
+
## Planning Annotation
|
|
126
|
+
|
|
127
|
+
In the architectural plan:
|
|
128
|
+
|
|
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
|
+
- `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
|
+
- `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.
|
|
133
|
+
- Tools, contexts, and escalations on any inline chat agent reuse the [inline-agent](../inline-agent/planning.md) annotations
|