@uipath/maestro-builder-sdk 6.41.2 → 6.43.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api-index.md +99 -99
- package/dist/api-members.md +307 -307
- package/dist/check.d.ts +0 -19
- package/dist/check.js +40 -1036
- package/dist/cli/commands/registry.js +15 -0
- package/dist/compile-cli.js +2 -1
- package/dist/core/actions.d.ts +1 -713
- package/dist/core/actions.js +0 -193
- package/dist/core/agent-sidecar.d.ts +186 -0
- package/dist/core/agent-sidecar.js +409 -0
- package/dist/core/agent-tool-resources.d.ts +62 -0
- package/dist/core/agent-tool-resources.js +81 -0
- package/dist/core/cli-spelling.d.ts +9 -0
- package/dist/core/cli-spelling.js +9 -0
- package/dist/{config.js → core/connector-configuration.js} +2 -2
- package/dist/core/library-cache.d.ts +0 -9
- package/dist/core/library-cache.js +0 -9
- package/dist/core/library.d.ts +47 -0
- package/dist/core/library.js +135 -34
- package/dist/core/list-envelope.d.ts +36 -1
- package/dist/core/list-envelope.js +24 -19
- package/dist/core/lookup-store.d.ts +4 -3
- package/dist/core/lookup-store.js +46 -38
- package/dist/core/node-id-placeholder.d.ts +8 -0
- package/dist/core/node-id-placeholder.js +10 -0
- package/dist/core/read-text.d.ts +26 -0
- package/dist/core/read-text.js +43 -0
- package/dist/core/ts-literal.d.ts +6 -0
- package/dist/core/ts-literal.js +15 -0
- package/dist/core/typed-raw-node.js +0 -5
- package/dist/decompile.js +34 -822
- package/dist/flow-node-registry.js +2 -1
- package/dist/flow-node-type.d.ts +130 -6
- package/dist/flow-sdk.d.ts +1 -0
- package/dist/flow-sdk.js +1 -0
- package/dist/nodes/agent/flow/check.d.ts +88 -0
- package/dist/nodes/agent/flow/check.js +873 -0
- package/dist/nodes/agent/flow/factories.d.ts +134 -0
- package/dist/nodes/agent/flow/factories.js +143 -0
- package/dist/nodes/agent/flow/family.d.ts +3 -0
- package/dist/nodes/agent/flow/family.js +8 -0
- package/dist/nodes/agent/flow/index.d.ts +3 -0
- package/dist/nodes/agent/flow/index.js +3 -0
- package/dist/nodes/agent/flow/inline-agent-lift.d.ts +44 -0
- package/dist/nodes/agent/flow/inline-agent-lift.js +572 -0
- package/dist/nodes/agent/flow/inline-agent.d.ts +15 -0
- package/dist/nodes/agent/flow/inline-agent.js +526 -0
- package/dist/nodes/agent/flow/node-type.d.ts +20 -0
- package/dist/nodes/agent/flow/node-type.js +422 -0
- package/dist/nodes/agent/flow/resources.d.ts +502 -0
- package/dist/nodes/agent/flow/resources.js +1409 -0
- package/dist/nodes/agent/flow/spec.d.ts +448 -0
- package/dist/nodes/agent/flow/spec.js +1 -0
- package/dist/nodes/process/flow/check.d.ts +40 -2
- package/dist/nodes/process/flow/check.js +156 -0
- package/dist/nodes/process/flow/factories.d.ts +58 -3
- package/dist/nodes/process/flow/factories.js +59 -2
- package/dist/nodes/process/flow/node-type.d.ts +4 -1
- package/dist/nodes/process/flow/node-type.js +181 -10
- package/dist/nodes/process/flow/spec.d.ts +112 -5
- package/dist/registry/describe-cli.d.ts +10 -0
- package/dist/registry/describe-cli.js +41 -0
- package/dist/registry/library-reader.d.ts +12 -2
- package/dist/registry/library-reader.js +17 -16
- package/dist/registry/lookup-specs.d.ts +17 -1
- package/dist/registry/lookup-specs.js +3 -7
- package/dist/registry/path-cli.js +2 -1
- package/dist/registry/search-cli.js +2 -1
- package/dist/serialize.d.ts +9 -54
- package/dist/serialize.js +47 -2763
- package/package.json +2 -2
- /package/dist/{config.d.ts → core/connector-configuration.d.ts} +0 -0
- /package/dist/{ixp-definition.json → core/ixp-definition.json} +0 -0
package/dist/core/actions.d.ts
CHANGED
|
@@ -248,151 +248,6 @@ export interface InOutField extends FormFieldSettings {
|
|
|
248
248
|
required?: boolean;
|
|
249
249
|
}
|
|
250
250
|
export type FormField = ShownField | AskedField | InOutField;
|
|
251
|
-
/**
|
|
252
|
-
* How a conversational agent gets its turn — the node's own
|
|
253
|
-
* `conversationalAgentSettings` sub-object.
|
|
254
|
-
*
|
|
255
|
-
* @remarks
|
|
256
|
-
* `'simple'` (the default) derives everything from ONE conversation-context
|
|
257
|
-
* binding: `context` is the whole context object, and the platform reads
|
|
258
|
-
* `conversationId` / `latestExchangeId` / `messages` / `userSettings` out of
|
|
259
|
-
* it. `'custom'` binds each field yourself — for a flow that assembles a turn
|
|
260
|
-
* from more than one source.
|
|
261
|
-
*/
|
|
262
|
-
export interface ConversationalAgentSettings {
|
|
263
|
-
mode?: 'simple' | 'custom';
|
|
264
|
-
/** The whole conversation context — `'simple'` mode's single binding. */
|
|
265
|
-
context?: Expr | string;
|
|
266
|
-
/** `'custom'` mode: the conversation id. */
|
|
267
|
-
conversationId?: Expr | string;
|
|
268
|
-
/** `'custom'` mode: the exchange id. */
|
|
269
|
-
exchangeId?: Expr | string;
|
|
270
|
-
/** `'custom'` mode: the chat history array. */
|
|
271
|
-
messages?: Expr | string;
|
|
272
|
-
/** `'custom'` mode: the caller's per-user settings object. */
|
|
273
|
-
userSettings?: Expr | string;
|
|
274
|
-
}
|
|
275
|
-
export interface ConversationalAgentInputs {
|
|
276
|
-
/**
|
|
277
|
-
* The agent's standing instructions for the conversation. Plain text — a
|
|
278
|
-
* conversational agent's turn comes from the transcript, not from flow
|
|
279
|
-
* arguments, so there is no `{{input.…}}` templating.
|
|
280
|
-
*/
|
|
281
|
-
systemPrompt: string;
|
|
282
|
-
/** The MODEL to run, e.g. `'gpt-5.4'`. Required by the node's definition. */
|
|
283
|
-
model: string;
|
|
284
|
-
/**
|
|
285
|
-
* How the agent gets its turn. The common case is
|
|
286
|
-
* `{ context: out('<waitStep>', 'conversationContext') }` — one binding the
|
|
287
|
-
* platform reads conversation id, exchange id, history and user settings out
|
|
288
|
-
* of. See {@link ConversationalAgentSettings}.
|
|
289
|
-
*/
|
|
290
|
-
settings: ConversationalAgentSettings;
|
|
291
|
-
/**
|
|
292
|
-
* Whether the agent's reply CLOSES the exchange.
|
|
293
|
-
*
|
|
294
|
-
* @deprecated Has no effect and is not emitted. The platform retired the input:
|
|
295
|
-
* the conversational agent's v1.7 node migration removes it, and the converter
|
|
296
|
-
* always sends `conversationalService.endExchange = ''`. Wait-for-message and
|
|
297
|
-
* the end of the conversation close open exchanges.
|
|
298
|
-
*/
|
|
299
|
-
endExchange?: boolean;
|
|
300
|
-
/** Sampling temperature, 0–1. */
|
|
301
|
-
temperature?: number;
|
|
302
|
-
/** Max tokens in one response. */
|
|
303
|
-
maxTokenPerResponse?: number;
|
|
304
|
-
/**
|
|
305
|
-
* The model's own context ceiling.
|
|
306
|
-
*
|
|
307
|
-
* @deprecated Has no effect and is not emitted. Studio Web derives it from the
|
|
308
|
-
* selected model.
|
|
309
|
-
*/
|
|
310
|
-
modelMaxTokens?: number;
|
|
311
|
-
/** How many tool-calling rounds one turn may take, 1–100. */
|
|
312
|
-
maxIterations?: number;
|
|
313
|
-
/** Safety rails, the same array `inlineAgent` takes. */
|
|
314
|
-
guardrails?: AgentGuardrail[];
|
|
315
|
-
/**
|
|
316
|
-
* The agent's own directory name (a UUID) — the node carries it as `source`
|
|
317
|
-
* and the compiler writes `<source>/agent.json` beside the flow. Derived from
|
|
318
|
-
* the flow id + step name when omitted.
|
|
319
|
-
*/
|
|
320
|
-
source?: string;
|
|
321
|
-
}
|
|
322
|
-
export interface CreateOutgoingCallInputs {
|
|
323
|
-
/**
|
|
324
|
-
* The number to call FROM — a provisioned number on the tenant's telephony
|
|
325
|
-
* provider, in E.164 (`'+15551234567'`). Required.
|
|
326
|
-
*/
|
|
327
|
-
from: string | Expr;
|
|
328
|
-
/** The number to call, in E.164. Required. */
|
|
329
|
-
to: string | Expr;
|
|
330
|
-
}
|
|
331
|
-
export interface EndCallInputs {
|
|
332
|
-
/**
|
|
333
|
-
* The call to hang up — bind the `callContext` published by the incoming-call
|
|
334
|
-
* trigger (`out('start', 'callContext')`) or by `createOutgoingCall`
|
|
335
|
-
* (`out('<step>', 'callContext')`). Required.
|
|
336
|
-
*/
|
|
337
|
-
callContext: Expr | string;
|
|
338
|
-
}
|
|
339
|
-
/**
|
|
340
|
-
* The audio settings a voice agent speaks with.
|
|
341
|
-
*
|
|
342
|
-
* @remarks
|
|
343
|
-
* `model` is a VOICE model (a live/realtime one — not the text models
|
|
344
|
-
* `inlineAgent` takes), and `persona` is one of that model's own voices, so the
|
|
345
|
-
* two travel together. The platform's catalog today is
|
|
346
|
-
* `'gemini-3.1-flash-live-preview'` (personas Aoede, Charon, Fenrir, Kore,
|
|
347
|
-
* Leda, Orus, Puck, Zephyr) and `'gpt-realtime-2'` (alloy, ash, ballad, coral,
|
|
348
|
-
* echo, sage, shimmer, verse); omit both for the platform default.
|
|
349
|
-
*/
|
|
350
|
-
export interface VoiceSettings {
|
|
351
|
-
/** The voice model, e.g. `'gemini-3.1-flash-live-preview'`. */
|
|
352
|
-
model?: string;
|
|
353
|
-
/** One of that model's personas, e.g. `'Kore'`. */
|
|
354
|
-
persona?: string;
|
|
355
|
-
/** Sampling temperature, 0–1. */
|
|
356
|
-
temperature?: number;
|
|
357
|
-
/** Max tokens per response. */
|
|
358
|
-
maxTokens?: number;
|
|
359
|
-
/** The model's own context ceiling — informational. */
|
|
360
|
-
modelMaxTokens?: number;
|
|
361
|
-
}
|
|
362
|
-
export interface VoiceAgentInputs {
|
|
363
|
-
/**
|
|
364
|
-
* The agent's standing instructions — who it is on the call and what it must
|
|
365
|
-
* do. Use `{{input.<name>}}` placeholders for values declared in `inputs`;
|
|
366
|
-
* the caller's audio remains the conversational turn.
|
|
367
|
-
*/
|
|
368
|
-
systemPrompt: string;
|
|
369
|
-
/**
|
|
370
|
-
* Flow values made available to `systemPrompt` placeholders. Each key must
|
|
371
|
-
* be referenced as `{{input.<key>}}`; the compiler emits the node's runtime
|
|
372
|
-
* argument binding and the matching agent.json input contract together.
|
|
373
|
-
*/
|
|
374
|
-
inputs?: Record<string, unknown>;
|
|
375
|
-
/**
|
|
376
|
-
* The call to attach the agent to — the `callContext` from the incoming-call
|
|
377
|
-
* trigger or `createOutgoingCall`. Required: without it the agent has no
|
|
378
|
-
* audio channel to join.
|
|
379
|
-
*/
|
|
380
|
-
callContext: Expr | string;
|
|
381
|
-
/** How the agent sounds. Omit for the platform default voice. */
|
|
382
|
-
voice?: VoiceSettings;
|
|
383
|
-
/**
|
|
384
|
-
* How many tool-calling rounds the agent may take in one turn. The node's
|
|
385
|
-
* schema allows **1–8** — a tighter ceiling than a text agent's, because a
|
|
386
|
-
* caller is waiting.
|
|
387
|
-
*/
|
|
388
|
-
maxIterations?: number;
|
|
389
|
-
/**
|
|
390
|
-
* The agent's own directory name (a UUID) — the node carries it as `source`
|
|
391
|
-
* and the compiler writes `<source>/agent.json` beside the flow. Omit and one
|
|
392
|
-
* is derived from the flow id + step name, so a recompile is not a diff.
|
|
393
|
-
*/
|
|
394
|
-
source?: string;
|
|
395
|
-
}
|
|
396
251
|
/**
|
|
397
252
|
* Split an extractor's node type into the two GUIDs its tail packs.
|
|
398
253
|
*
|
|
@@ -491,107 +346,6 @@ export interface IxpExtractInputs {
|
|
|
491
346
|
* (`'in-solution'`). Shared by `rpaWorkflow`, `agenticProcess` and `agent`.
|
|
492
347
|
*/
|
|
493
348
|
export type ProcessLocation = 'published' | 'in-solution';
|
|
494
|
-
/**
|
|
495
|
-
* Which KIND of agent project was published behind a `uipath.core.agent.<key>`
|
|
496
|
-
* resource. Display-only — see {@link AgentInputs.flavour}.
|
|
497
|
-
*/
|
|
498
|
-
export type AgentFlavour = 'coded' | 'lowcode';
|
|
499
|
-
export type AgentLocation = ProcessLocation;
|
|
500
|
-
export interface AgentInputs {
|
|
501
|
-
/**
|
|
502
|
-
* The agent resource key (a GUID). It becomes the node's TYPE,
|
|
503
|
-
* `uipath.core.agent.<key>`. For a published agent this is the Orchestrator
|
|
504
|
-
* release key; for an in-solution sibling it is `resource.key` from
|
|
505
|
-
* `resources/solution_folder/process/agent/<project>.json`.
|
|
506
|
-
*
|
|
507
|
-
* Find it with `uip or processes list --all-folders --process-type Agent` (an agent's
|
|
508
|
-
* `ProcessKey` reads `<project>.agent.<name>`; the GUID you want is the row's
|
|
509
|
-
* **`Key`**) or `uip maestro flow registry search uipath.core.agent`.
|
|
510
|
-
*
|
|
511
|
-
* Pass `--limit`: `--all-folders` returns 50 rows and reports the truncation
|
|
512
|
-
* only in `Pagination.HasMore`, so an agent that exists can look absent.
|
|
513
|
-
*/
|
|
514
|
-
key: string;
|
|
515
|
-
/** The agent project name. */
|
|
516
|
-
name: string;
|
|
517
|
-
/**
|
|
518
|
-
* Where the referenced agent lives. Published is the backward-compatible
|
|
519
|
-
* default. Use `in-solution` only after registering a sibling agent project
|
|
520
|
-
* with `uip solution projects add`.
|
|
521
|
-
*/
|
|
522
|
-
location?: AgentLocation;
|
|
523
|
-
/**
|
|
524
|
-
* The Orchestrator folder holding it — e.g.
|
|
525
|
-
* `'Shared/uipath-maestro-flow/CountLetters LowCode'`.
|
|
526
|
-
*
|
|
527
|
-
* **Not optional, and not cosmetic.** Agent names are unique per FOLDER, not per
|
|
528
|
-
* tenant: `codereval/DefaultTenant` carries two agents called `CountLetters`,
|
|
529
|
-
* one in `Shared` and one in `Shared/uipath-maestro-flow/CountLetters CodedAgent`,
|
|
530
|
-
* with different release keys. The release is resolved by listing THIS
|
|
531
|
-
* folder, so the folder is what picks the agent you meant. Required for a
|
|
532
|
-
* published agent; omit it for an in-solution sibling.
|
|
533
|
-
*/
|
|
534
|
-
folderPath?: string;
|
|
535
|
-
/**
|
|
536
|
-
* The sibling agent project's `resource.projectKey`, read from
|
|
537
|
-
* `resources/solution_folder/process/agent/<project>.json`. Required only
|
|
538
|
-
* when `location` is `in-solution`.
|
|
539
|
-
*/
|
|
540
|
-
projectId?: string;
|
|
541
|
-
/**
|
|
542
|
-
* The AGENT's own input arguments, by its own argument names (e.g.
|
|
543
|
-
* `{ inputString: 'arrow' }`). Every agent declares its own — read them from
|
|
544
|
-
* `uip maestro flow registry get uipath.core.agent.<agent>` under
|
|
545
|
-
* `inputDefinition.properties`.
|
|
546
|
-
*
|
|
547
|
-
* **Required, unlike the other job families' `inputs`.** An agent node with
|
|
548
|
-
* nothing bound is one the platform REWRITES behind your back: flow-v1's
|
|
549
|
-
* `applyEmptyInputFloor` seeds `JobArguments: { input: <empty-for-declared-type> }`
|
|
550
|
-
* — a key named `input`, which is not in the agent's own schema unless the agent
|
|
551
|
-
* happens to declare one — because the Python agent runner validates the body
|
|
552
|
-
* against a schema with a required `input` field and rejects a bare `{}` with
|
|
553
|
-
* *"Field required: input"* (the pod then exits `0x33`). Locally the envelope
|
|
554
|
-
* passes straight through and the run is green, so nothing but a checker can see
|
|
555
|
-
* it. Pass `{}` explicitly if you really mean "no arguments" and `check` will
|
|
556
|
-
* tell you what the platform will do with it.
|
|
557
|
-
*/
|
|
558
|
-
inputs: Record<string, unknown>;
|
|
559
|
-
/**
|
|
560
|
-
* The agent's OUTPUT fields and their types (e.g.
|
|
561
|
-
* `{ count: 'integer', inputString: 'string' }`). Required if anything reads the
|
|
562
|
-
* step's output, for the same reason as `rpaWorkflow`'s: the schema lives on the
|
|
563
|
-
* tenant and authoring happens offline, so an undeclared read is rejected —
|
|
564
|
-
* rightly, since nothing offline could tell a real field from a typo.
|
|
565
|
-
*
|
|
566
|
-
* `uip maestro flow registry get uipath.core.agent.<agent>` shows what the
|
|
567
|
-
* platform declares, under `outputDefinition.output.schema.properties`.
|
|
568
|
-
*
|
|
569
|
-
* **Case matters.** The agent answers with the field names its own definition
|
|
570
|
-
* declares (`count`, not `Count`). It used to be a live-only trap: a poller that
|
|
571
|
-
* read the job through `uip agent run status` got a PascalCased envelope, so a
|
|
572
|
-
* read of `count` was right offline and `undefined` live (flow-builder-sdk #122).
|
|
573
|
-
* Declare the names the definition declares.
|
|
574
|
-
*
|
|
575
|
-
* @enforcedBy AGENT_READ_WITHOUT_RETURNS Reading a field off the result requires
|
|
576
|
-
* declaring it here.
|
|
577
|
-
*/
|
|
578
|
-
returns?: Record<string, ReturnFieldType>;
|
|
579
|
-
/**
|
|
580
|
-
* Whether the published resource is a CODED agent project (LangGraph /
|
|
581
|
-
* LlamaIndex / OpenAI Agents) or a low-code one built in Agent Builder.
|
|
582
|
-
*
|
|
583
|
-
* **Display-only, and it is the only thing that differs.** `registry get` on a
|
|
584
|
-
* coded and a low-code agent returns the same node type, the same
|
|
585
|
-
* `Orchestrator.StartAgentJob` service type, the same `sortOrder` and the
|
|
586
|
-
* same bindings shape; the single difference is `display.icon` —
|
|
587
|
-
* `coded-agent` vs `autonomous-agent`. Which one a given resource is cannot be
|
|
588
|
-
* known offline, so it is stated here rather than guessed. Check with
|
|
589
|
-
* `uip maestro flow registry get uipath.core.agent.<agent>` → `display.icon`.
|
|
590
|
-
*
|
|
591
|
-
* Defaults to `'lowcode'`. Nothing in the runtime keys on it.
|
|
592
|
-
*/
|
|
593
|
-
flavour?: AgentFlavour;
|
|
594
|
-
}
|
|
595
349
|
/** A JSON-schema-ish type for one field of an inline agent's input/output schema. */
|
|
596
350
|
export type InlineAgentFieldType = 'string' | 'number' | 'integer' | 'boolean' | 'object' | 'array';
|
|
597
351
|
/**
|
|
@@ -607,7 +361,7 @@ export type InlineAgentFieldType = 'string' | 'number' | 'integer' | 'boolean' |
|
|
|
607
361
|
* This type exists so that stays true. It was previously spelled inline at
|
|
608
362
|
* seven sites, `'integer'` was added to three of them, and the four left behind
|
|
609
363
|
* were not distinguishable by any contract — `rpaWorkflow` in particular is
|
|
610
|
-
* decompiled by the SAME
|
|
364
|
+
* decompiled by the SAME lift (`liftProcess`) as `apiWorkflow`, so a
|
|
611
365
|
* deployed process with an integer output round-tripped to source that would
|
|
612
366
|
* not compile.
|
|
613
367
|
*/
|
|
@@ -720,267 +474,6 @@ export interface BuiltInValidatorGuardrail {
|
|
|
720
474
|
}>;
|
|
721
475
|
}
|
|
722
476
|
export type AgentGuardrail = CustomGuardrail | BuiltInValidatorGuardrail;
|
|
723
|
-
export interface InlineAgentInputs {
|
|
724
|
-
/**
|
|
725
|
-
* The MODEL to run, e.g. `'gpt-5.4'`. Required by the node's definition, and
|
|
726
|
-
* worth a thought rather than a default: the platform's own scaffold ships
|
|
727
|
-
* `gpt-4o-2024-11-20`, which is stale, and v1's own smoke check for this node
|
|
728
|
-
* type FAILS a flow that keeps it. List what the tenant has with
|
|
729
|
-
* `uip agent model list`.
|
|
730
|
-
*/
|
|
731
|
-
model: string;
|
|
732
|
-
/**
|
|
733
|
-
* The agent's standing instructions — who it is, and what each `returns` field
|
|
734
|
-
* should hold. Required by the definition (`minLength: 1`).
|
|
735
|
-
*
|
|
736
|
-
* **Write it as plain text, and reference a value as `{{input.<name>}}`** — the
|
|
737
|
-
* agent's own template syntax, and the same names `inputs` declares:
|
|
738
|
-
*
|
|
739
|
-
* ```ts
|
|
740
|
-
* systemPrompt: 'You classify support email. Return a result conforming to the output '
|
|
741
|
-
* + 'schema. category: billing | technical | account. priority: low | normal | high.',
|
|
742
|
-
* userPrompt: 'Classify this email:\n{{input.body}}',
|
|
743
|
-
* inputs: { body: input('body') },
|
|
744
|
-
* returns: { category: 'string', priority: 'string' },
|
|
745
|
-
* ```
|
|
746
|
-
*
|
|
747
|
-
* Why a placeholder rather than an interpolated expression: an inline agent is two
|
|
748
|
-
* artifacts, and its prompt exists in TWO dialects. You write one; the compiler
|
|
749
|
-
* emits the other into the `agent.json` sidecar. The `.flow` node carries no copy
|
|
750
|
-
* of the prompt: it is a shell, so Studio Web reads the sidecar.
|
|
751
|
-
*
|
|
752
|
-
* 1. yours `{{input.claim}}`
|
|
753
|
-
* 2. the AGENT.JSON `{{input.prepare__output__claimRef}}` ← what the runtime SENDS
|
|
754
|
-
*
|
|
755
|
-
* The second exists because the platform does not send an agent the names you
|
|
756
|
-
* declared: it names each argument after the bound reference PATH, `__`-joined.
|
|
757
|
-
* For a flow input the two coincide (`$vars.notes` → `notes`); for a step output
|
|
758
|
-
* they do not, and a sidecar still saying `{{input.claim}}` templates against a key
|
|
759
|
-
* that is not there — the literal text reaches the model. See the inline-agent
|
|
760
|
-
* node reference (`website/reference/inline-agent.md`) §"The prompt dialects".
|
|
761
|
-
*
|
|
762
|
-
* **The answer's shape is `returns`, not the prompt.** `returns` becomes the node's
|
|
763
|
-
* `agentOutputVariables` and the `agent.json` `outputSchema` — what Studio Web's
|
|
764
|
-
* Outputs editor writes — and the platform's agent runtime ends each run with a
|
|
765
|
-
* built-in structured call (`end_execution`) that fills exactly those fields. So
|
|
766
|
-
* `out('<step>', '<field>')` reads a typed value, not text to parse. Describe what
|
|
767
|
-
* each field holds, in the product's own wording, as the example above does:
|
|
768
|
-
* `Return a result conforming to the output schema. <field>: <how to fill it>.`
|
|
769
|
-
*
|
|
770
|
-
* Never ask for JSON TEXT as well ("Return ONLY a JSON object with keys …"). The
|
|
771
|
-
* model then packs its whole answer, serialized, into ONE string field: a writer
|
|
772
|
-
* declaring `{ subject, body }` came back on 2026-09-23 with
|
|
773
|
-
* `body: '{"subject":"…","body":"Dear …"}'` in 3 of 3 debug runs, and the flow sent
|
|
774
|
-
* that text on. A field that should carry structure is declared `'object'` or
|
|
775
|
-
* `'array'` instead.
|
|
776
|
-
*
|
|
777
|
-
* @enforcedBy INLINE_AGENT_PROMPT_JSON_TEXT A prompt that asks for JSON text while
|
|
778
|
-
* `returns` declares fields is refused; the platform accepts it and the run returns
|
|
779
|
-
* the packed value.
|
|
780
|
-
*/
|
|
781
|
-
systemPrompt: string;
|
|
782
|
-
/**
|
|
783
|
-
* The per-run request. Required by the definition (`minLength: 1`). Same
|
|
784
|
-
* `{{input.<name>}}` placeholders as `systemPrompt`.
|
|
785
|
-
*/
|
|
786
|
-
userPrompt: string;
|
|
787
|
-
/**
|
|
788
|
-
* The values the agent gets, by YOUR name for each one — e.g.
|
|
789
|
-
* `{ body: input('body') }`. These become the node's `agentInputVariables`
|
|
790
|
-
* descriptor array (`{ id, type, binding }`, the shape 48 of 53 deployed instances
|
|
791
|
-
* carry) and the `agent.json`'s `inputSchema`.
|
|
792
|
-
*
|
|
793
|
-
* **The name is yours only in this file.** Both emitted artifacts carry the
|
|
794
|
-
* PLATFORM's name — the bound reference's path, `__`-joined
|
|
795
|
-
* (`out('prepare','claimRef')` → `prepare__output__claimRef`) — because that is what
|
|
796
|
-
* the runtime keys the agent's JobArguments by, and an `agent.json` speaking any
|
|
797
|
-
* other name templates against nothing. You never write the long form.
|
|
798
|
-
*
|
|
799
|
-
* **Reference each one in a prompt as `{{input.<name>}}`.** Not decoration: the
|
|
800
|
-
* platform's deployed input list is not necessarily this array. flow-v1's
|
|
801
|
-
* `preDeriveAgentInputDefinitions` pre-pass scans the node's PROMPTS for `$vars.*`
|
|
802
|
-
* references, merges what it finds with this list, and — when its caller asks for
|
|
803
|
-
* pruning — DROPS an entry no prompt reference points at. A referenced entry
|
|
804
|
-
* survives every one of those paths; an unreferenced one survives only some.
|
|
805
|
-
* `check` warns when none of them is referenced, which is the case where the agent
|
|
806
|
-
* would arrive with no arguments at all.
|
|
807
|
-
*
|
|
808
|
-
* Two shapes have no platform name and are handled rather than renamed:
|
|
809
|
-
*
|
|
810
|
-
* - a **literal** (`{ tier: 'Enterprise' }`) is INLINED into both prompts — there
|
|
811
|
-
* is no argument for one, so a token could never substitute;
|
|
812
|
-
* - a **computed expression** is refused by `check`
|
|
813
|
-
* (`INLINE_AGENT_COMPOSITE_INPUT`): the platform names one argument per
|
|
814
|
-
* reference, so an expression spanning several has none. Compute it in a
|
|
815
|
-
* `script` step first and bind that step's output.
|
|
816
|
-
*/
|
|
817
|
-
inputs?: Record<string, unknown>;
|
|
818
|
-
/**
|
|
819
|
-
* The fields the agent must return, and their types — e.g.
|
|
820
|
-
* `{ category: 'string', priority: 'string' }`. These become the node's
|
|
821
|
-
* `agentOutputVariables` descriptor array AND the emitted `agent.json`'s
|
|
822
|
-
* `outputSchema`, and they are what makes `out('<step>', 'category')` a checkable
|
|
823
|
-
* read.
|
|
824
|
-
*
|
|
825
|
-
* Defaults to the definition's own default, `{ content: 'string' }` — which is
|
|
826
|
-
* the toy scaffold shape, so declare something real if the flow reads fields.
|
|
827
|
-
*
|
|
828
|
-
* @enforcedBy INLINE_AGENT_READ_UNKNOWN_FIELD A read outside the declared set is
|
|
829
|
-
* undefined on every rung and on the platform.
|
|
830
|
-
*/
|
|
831
|
-
returns?: Record<string, InlineAgentFieldType>;
|
|
832
|
-
/**
|
|
833
|
-
* The agent's own directory name — a UUID. The node carries it as `source`, and
|
|
834
|
-
* the platform resolves the agent's configuration at `<source>/agent.json`
|
|
835
|
-
* relative to the project (flow-v1 emits `entryPoint: <source>/agent.json`), so
|
|
836
|
-
* the compiler writes that file next to the `.flow`.
|
|
837
|
-
*
|
|
838
|
-
* Omit it and one is derived from the flow id + step name, so a given flow emits
|
|
839
|
-
* the same uuid every time (a random one would make every compile a diff).
|
|
840
|
-
*/
|
|
841
|
-
source?: string;
|
|
842
|
-
/** Sampling temperature, 0–1. The definition's range; omit for the model's default. */
|
|
843
|
-
temperature?: number;
|
|
844
|
-
/** Max tokens in one response, 0–16384. */
|
|
845
|
-
maxTokenPerResponse?: number;
|
|
846
|
-
/**
|
|
847
|
-
* The model's own context ceiling, e.g. `128000`.
|
|
848
|
-
*
|
|
849
|
-
* @deprecated Has no effect and is not emitted. Studio Web derives it from the
|
|
850
|
-
* selected model each time the agent is opened, and the sidecar has no field
|
|
851
|
-
* for it.
|
|
852
|
-
*/
|
|
853
|
-
modelMaxTokens?: number;
|
|
854
|
-
/** How many tool-calling rounds the agent may take, 1–100. */
|
|
855
|
-
maxIterations?: number;
|
|
856
|
-
/**
|
|
857
|
-
* The harness the agent runs on — `'standard'` (the default) or
|
|
858
|
-
* `'advanced'`, written to the `agent.json`'s `settings.mode`. It does not
|
|
859
|
-
* change the node's version: every inline agent emits the bundle's newest
|
|
860
|
-
* `uipath.agent.autonomous` definition (1.4).
|
|
861
|
-
*/
|
|
862
|
-
mode?: 'standard' | 'advanced';
|
|
863
|
-
/**
|
|
864
|
-
* Safety rails over the agent's inputs, outputs, LLM calls and tools — the
|
|
865
|
-
* platform's own array shape ({@link AgentGuardrail}), carried in the
|
|
866
|
-
* `agent.json` (every bundled definition declares the input).
|
|
867
|
-
*
|
|
868
|
-
* ```ts
|
|
869
|
-
* guardrails: [{
|
|
870
|
-
* id: 'no-pii', $guardrailType: 'custom', name: 'Block PII',
|
|
871
|
-
* selector: { scopes: ['Agent'] },
|
|
872
|
-
* action: { $actionType: 'block', reason: 'PII detected' },
|
|
873
|
-
* enabledForEvals: true,
|
|
874
|
-
* rules: [{ $ruleType: 'word', fieldSelector: { $selectorType: 'all' },
|
|
875
|
-
* operator: 'matchesRegex', value: '\\d{3}-\\d{2}-\\d{4}' }],
|
|
876
|
-
* }]
|
|
877
|
-
* ```
|
|
878
|
-
*/
|
|
879
|
-
guardrails?: AgentGuardrail[];
|
|
880
|
-
/**
|
|
881
|
-
* Attach an episodic memory so the agent learns from past runs — one
|
|
882
|
-
* {@link AgentMemoryRef}, wired to the agent's `memory` handle (declared by
|
|
883
|
-
* the bundled 1.4 definition, which every inline agent uses).
|
|
884
|
-
*/
|
|
885
|
-
memory?: AgentMemoryRef;
|
|
886
|
-
/**
|
|
887
|
-
* GROUND the agent on tenant knowledge — one or more Context Grounding
|
|
888
|
-
* (semantic) indexes, wired to the agent's own `context` handle.
|
|
889
|
-
*
|
|
890
|
-
* ```ts
|
|
891
|
-
* inlineAgent({
|
|
892
|
-
* model: 'gpt-5.4',
|
|
893
|
-
* systemPrompt: 'You decide billing disputes from the SOPs. Return a result conforming to the output '
|
|
894
|
-
* + 'schema. determination: valid | invalid | needs_review. rationale: the SOP rule that decided it.',
|
|
895
|
-
* userPrompt: 'Dispute: {{input.description}}',
|
|
896
|
-
* inputs: { description: input('disputeDescription') },
|
|
897
|
-
* returns: { determination: 'string', rationale: 'string' },
|
|
898
|
-
* context: [{
|
|
899
|
-
* name: 'Billing Dispute SOP Index',
|
|
900
|
-
* id: 'cc45b9b4-dbf6-47b3-40ac-08debc0cec5b',
|
|
901
|
-
* folderPath: 'Shared/uipath-maestro-flow/BillingDispute',
|
|
902
|
-
* query: 'billing dispute resolution policy',
|
|
903
|
-
* }],
|
|
904
|
-
* })
|
|
905
|
-
* ```
|
|
906
|
-
*
|
|
907
|
-
* Each entry becomes its own NODE —
|
|
908
|
-
* `uipath.agent.resource.context.index.<slug>.<id>` — joined to the agent by an
|
|
909
|
-
* edge out of the agent's `context` port. That is the platform's own shape: the
|
|
910
|
-
* agent definition declares the handle with
|
|
911
|
-
* `allowedTargets: [{ nodeType: 'uipath.agent.resource.context.*' }]`, and the
|
|
912
|
-
* index's definition declares the mirror
|
|
913
|
-
* (`allowedSources: [{ nodeType: 'uipath.agent.autonomous', handleId: 'context' }]`,
|
|
914
|
-
* `maxConnections: 1`). Nothing is a binding: the index's identity is IN the node
|
|
915
|
-
* type, exactly as a published agent's release key is.
|
|
916
|
-
*
|
|
917
|
-
* **Both identifiers are needed and neither is derivable.** The node type carries
|
|
918
|
-
* a slug of the name AND the index's uuid; the node's inputs carry `indexName` +
|
|
919
|
-
* `indexId` again, because the designer reads one and the runtime the other. Find
|
|
920
|
-
* them together — the uuid is the tail of the registry node type:
|
|
921
|
-
*
|
|
922
|
-
* ```bash
|
|
923
|
-
* uip maestro flow registry search "<index name>" --output json
|
|
924
|
-
* ```
|
|
925
|
-
*
|
|
926
|
-
* **Grounding is a CLOUD-side capability.** An offline run has no retrieval
|
|
927
|
-
* service to reach, so its answer is ungrounded
|
|
928
|
-
* however this is configured — which is why an offline rung can only assert the
|
|
929
|
-
* WIRING and a live rung only that the agent answered. Say so in a task rather
|
|
930
|
-
* than letting a green rung imply retrieval happened.
|
|
931
|
-
*/
|
|
932
|
-
context?: ContextIndexRef | ContextIndexRef[];
|
|
933
|
-
/**
|
|
934
|
-
* Give the agent TOOLS — capabilities it may call while reasoning, wired to
|
|
935
|
-
* the agent's own `tool` handle. Each entry becomes its own resource NODE
|
|
936
|
-
* (`uipath.agent.resource.tool.<kind>…`), joined to the agent by an edge out
|
|
937
|
-
* of its `tool` port — the same artifact shape as `context`.
|
|
938
|
-
*
|
|
939
|
-
* ```ts
|
|
940
|
-
* tools: [
|
|
941
|
-
* { kind: 'builtin', tool: 'summarize' },
|
|
942
|
-
* { kind: 'connector', connector: 'uipath-atlassian-jira', operation: 'create-issue',
|
|
943
|
-
* connection: 'jira', folder: 'shared' }, // bindings.json labels, both required
|
|
944
|
-
* { kind: 'process', key: '6235d64e-b190-4b7a-8918-723df964c068',
|
|
945
|
-
* name: 'Create TestCase', folderPath: 'Shared',
|
|
946
|
-
* inputs: { title: 'string' }, returns: { id: 'string' } },
|
|
947
|
-
* ]
|
|
948
|
-
* ```
|
|
949
|
-
*
|
|
950
|
-
* WHEN a tool runs is the model's decision at run time — nothing in the flow
|
|
951
|
-
* calls it. Locally that means tool nodes are never stepped through (they are
|
|
952
|
-
* artifacts, not steps), so no local rung proves a tool was USED — only that
|
|
953
|
-
* the wiring and shapes are right. Say so in any task that scores this.
|
|
954
|
-
*/
|
|
955
|
-
tools?: ToolRef | ToolRef[];
|
|
956
|
-
/**
|
|
957
|
-
* Let the agent ESCALATE to a human mid-run — an Action Center app task,
|
|
958
|
-
* wired to the agent's own `escalation` handle (its TOP port).
|
|
959
|
-
*
|
|
960
|
-
* ```ts
|
|
961
|
-
* escalation: {
|
|
962
|
-
* name: 'ContentReview',
|
|
963
|
-
* description: 'Escalate uncertain content to a human reviewer',
|
|
964
|
-
* app: {
|
|
965
|
-
* key: '454921d6-137f-4897-943a-1ebf29b15f80',
|
|
966
|
-
* name: 'ContentReviewApp',
|
|
967
|
-
* folderPath: 'Shared',
|
|
968
|
-
* inputs: { ContentText: 'string' },
|
|
969
|
-
* outputs: { ReviewDecision: 'string' },
|
|
970
|
-
* },
|
|
971
|
-
* recipients: ['reviewer@example.com'],
|
|
972
|
-
* outcomes: ['approve', 'reject'],
|
|
973
|
-
* }
|
|
974
|
-
* ```
|
|
975
|
-
*
|
|
976
|
-
* The emitted node type is `uipath.agent.resource.escalation.coded-action-app`
|
|
977
|
-
* — the registry's CURRENT spelling (the bare `….escalation` is the pre-split
|
|
978
|
-
* era; the agent's handle accepts both, and `registry get` resolves only the
|
|
979
|
-
* suffixed one). The other variant, `escalation.quick-form`, is feature-gated
|
|
980
|
-
* off on this tenant and not authorable.
|
|
981
|
-
*/
|
|
982
|
-
escalation?: EscalationRef | EscalationRef[];
|
|
983
|
-
}
|
|
984
477
|
/** The three platform-shipped built-in tools (fixed registry types). */
|
|
985
478
|
export type BuiltinToolName = 'analyzefiles' | 'summarize' | 'batchtransform';
|
|
986
479
|
/**
|
|
@@ -1412,30 +905,6 @@ export interface ContextIndexRef extends AgentResourcePlacement {
|
|
|
1412
905
|
* whole body rather than an inputs payload.
|
|
1413
906
|
*/
|
|
1414
907
|
export interface FlowActionSpecs {
|
|
1415
|
-
/** The spec {@link createOutgoingCall} builds. */
|
|
1416
|
-
createOutgoingCall: {
|
|
1417
|
-
inputs: CreateOutgoingCallInputs;
|
|
1418
|
-
};
|
|
1419
|
-
/** The spec {@link endCall} builds. */
|
|
1420
|
-
endCall: {
|
|
1421
|
-
inputs: EndCallInputs;
|
|
1422
|
-
};
|
|
1423
|
-
/** The spec {@link voiceAgent} builds. */
|
|
1424
|
-
voiceAgent: {
|
|
1425
|
-
inputs: VoiceAgentInputs;
|
|
1426
|
-
};
|
|
1427
|
-
/** The spec {@link conversationalAgent} builds. */
|
|
1428
|
-
conversationalAgent: {
|
|
1429
|
-
inputs: ConversationalAgentInputs;
|
|
1430
|
-
};
|
|
1431
|
-
/** The spec {@link agent} builds. */
|
|
1432
|
-
agent: {
|
|
1433
|
-
inputs: AgentInputs;
|
|
1434
|
-
};
|
|
1435
|
-
/** The spec {@link inlineAgent} builds. */
|
|
1436
|
-
inlineAgent: {
|
|
1437
|
-
inputs: InlineAgentInputs;
|
|
1438
|
-
};
|
|
1439
908
|
/** The spec {@link ixpExtract} builds. */
|
|
1440
909
|
ixpExtract: {
|
|
1441
910
|
inputs: IxpExtractInputs;
|
|
@@ -1554,187 +1023,6 @@ export declare function builtinTriggerSpec<S extends object>(spec: S): S;
|
|
|
1554
1023
|
* @returns An action spec to pass to `.step(name, …)`.
|
|
1555
1024
|
*/
|
|
1556
1025
|
export declare function ixpExtract(inputs: IxpExtractInputs): ActionSpec;
|
|
1557
|
-
/**
|
|
1558
|
-
* Place an outgoing phone call
|
|
1559
|
-
* (`uipath.conversational.voice.create-outgoing-call`) and get back the
|
|
1560
|
-
* `callContext` every other voice step is keyed by.
|
|
1561
|
-
*
|
|
1562
|
-
* ```ts
|
|
1563
|
-
* .step('dial', createOutgoingCall({ from: '+15550001111', to: input('customerPhone') }))
|
|
1564
|
-
* .step('talk', voiceAgent({
|
|
1565
|
-
* systemPrompt: 'Confirm the delivery window, then thank them.',
|
|
1566
|
-
* callContext: out('dial', 'callContext'),
|
|
1567
|
-
* }))
|
|
1568
|
-
* ```
|
|
1569
|
-
*
|
|
1570
|
-
* @param inputs - The provisioned `from` number and the `to` number to dial.
|
|
1571
|
-
* @returns An action spec to pass to `.step(...)`.
|
|
1572
|
-
*/
|
|
1573
|
-
export declare function createOutgoingCall(inputs: CreateOutgoingCallInputs): ActionSpec;
|
|
1574
|
-
/**
|
|
1575
|
-
* Hang up (`uipath.conversational.voice.end-call`). Reads
|
|
1576
|
-
* `out('<step>', 'ended')`.
|
|
1577
|
-
*
|
|
1578
|
-
* @param inputs - The `callContext` of the call to end.
|
|
1579
|
-
* @returns An action spec to pass to `.step(...)`.
|
|
1580
|
-
*/
|
|
1581
|
-
export declare function endCall(inputs: EndCallInputs): ActionSpec;
|
|
1582
|
-
/**
|
|
1583
|
-
* Put a VOICE agent on a live call (`uipath.agent.voice`) — it speaks and
|
|
1584
|
-
* listens for one turn, then the flow continues.
|
|
1585
|
-
*
|
|
1586
|
-
* ```ts
|
|
1587
|
-
* .trigger(voiceTrigger())
|
|
1588
|
-
* .step('greet', voiceAgent({
|
|
1589
|
-
* systemPrompt: 'Greet {{input.customerName}} and find out why they called.',
|
|
1590
|
-
* inputs: { customerName: input('customerName') },
|
|
1591
|
-
* callContext: out('start', 'callContext'),
|
|
1592
|
-
* voice: { model: 'gemini-3.1-flash-live-preview', persona: 'Kore' },
|
|
1593
|
-
* }))
|
|
1594
|
-
* ```
|
|
1595
|
-
*
|
|
1596
|
-
* Like `inlineAgent`, compile emits the node PLUS a stable
|
|
1597
|
-
* `<source>/agent.json` sidecar. Unlike it, the turn's content comes from the
|
|
1598
|
-
* call rather than from a user-prompt argument. Flow context can still be
|
|
1599
|
-
* supplied through `inputs` and referenced from the system prompt. There are no
|
|
1600
|
-
* declared `returns`: read the turn back as
|
|
1601
|
-
* `out('<step>', 'uipath__agent_response_messages')`.
|
|
1602
|
-
*
|
|
1603
|
-
* @param inputs - The instructions, the call to join, and how the agent sounds.
|
|
1604
|
-
* @returns An action spec to pass to `.step(...)`.
|
|
1605
|
-
*/
|
|
1606
|
-
export declare function voiceAgent(inputs: VoiceAgentInputs): ActionSpec;
|
|
1607
|
-
/**
|
|
1608
|
-
* A CONVERSATIONAL agent (`uipath.agent.conversational`) — it answers one turn
|
|
1609
|
-
* of a live chat, reading the transcript rather than flow arguments.
|
|
1610
|
-
*
|
|
1611
|
-
* ```ts
|
|
1612
|
-
* .trigger(conversationTrigger())
|
|
1613
|
-
* .step('listen', waitForMessage({ conversationId: out('start', 'conversationId') }))
|
|
1614
|
-
* .step('reply', conversationalAgent({
|
|
1615
|
-
* model: 'gpt-5.4',
|
|
1616
|
-
* systemPrompt: 'You are a support agent. Be brief.',
|
|
1617
|
-
* settings: { context: out('listen', 'conversationContext') },
|
|
1618
|
-
* }))
|
|
1619
|
-
* ```
|
|
1620
|
-
*
|
|
1621
|
-
* The reply is `out('<step>', 'uipath__agent_response_messages')` — the
|
|
1622
|
-
* platform's own field name. Like `inlineAgent`, compile emits the node plus a
|
|
1623
|
-
* stable `<source>/agent.json` sidecar.
|
|
1624
|
-
*
|
|
1625
|
-
* `sendMessage` is the alternative when the flow (not a model) decides what to
|
|
1626
|
-
* say; this factory is for when the model does.
|
|
1627
|
-
*
|
|
1628
|
-
* @param inputs - The model, the instructions, and how the turn is bound.
|
|
1629
|
-
* @returns An action spec to pass to `.step(...)`.
|
|
1630
|
-
*/
|
|
1631
|
-
export declare function conversationalAgent(inputs: ConversationalAgentInputs): ActionSpec;
|
|
1632
|
-
/**
|
|
1633
|
-
* Invoke an AGENT resource — either one published to Orchestrator or a sibling
|
|
1634
|
-
* agent project registered in the same solution. Both start through
|
|
1635
|
-
* `Orchestrator.StartAgentJob`.
|
|
1636
|
-
*
|
|
1637
|
-
* @remarks
|
|
1638
|
-
* **Coded and low-code agents are the same node.** This one factory authors both.
|
|
1639
|
-
* `registry get` on a coded agent and on a low-code one returns the same node type,
|
|
1640
|
-
* the same service type, the same `sortOrder` and the same bindings shape; the
|
|
1641
|
-
* only difference is the icon, which is what `flavour` sets. Which kind a resource
|
|
1642
|
-
* is a property of what somebody published, not of the flow — so if a task asks for
|
|
1643
|
-
* "a coded agent", what it is asking you to get right is the RESOURCE you point at.
|
|
1644
|
-
*
|
|
1645
|
-
* **What this factory cannot do, said plainly:** it does not create an agent. A
|
|
1646
|
-
* published resource must already be deployed. An in-solution resource must first
|
|
1647
|
-
* be scaffolded and registered with `uip solution projects add`; this factory then
|
|
1648
|
-
* authors the local reference from the registered resource key and project id.
|
|
1649
|
-
*
|
|
1650
|
-
* The three identifiers are separate for `rpaWorkflow`'s reason: `agent` is the key
|
|
1651
|
-
* the node's TYPE carries (`uipath.core.agent.<agent>`), while `name` +
|
|
1652
|
-
* `folderPath` are what the runtime resolves the job by and together are the
|
|
1653
|
-
* `resourceKey`, `"<folderPath>.<name>"`. `folderPath` earns its keep twice here —
|
|
1654
|
-
* see {@link AgentInputs.folderPath} for the two-agents-called-CountLetters case.
|
|
1655
|
-
*
|
|
1656
|
-
* The step WAITS for the job and publishes its output arguments under `output`, so
|
|
1657
|
-
* `out('<step>', '<field>')` reads a field `returns` declares — using the names the
|
|
1658
|
-
* agent's own definition declares, case included.
|
|
1659
|
-
*
|
|
1660
|
-
* ── the live bar, stated ─────────────────────────────────────────────────────────
|
|
1661
|
-
* A green live rung here means **a model responded with the declared output shape**,
|
|
1662
|
-
* not that the answer was right. A real Orchestrator job runs, the flow's input
|
|
1663
|
-
* reaches it, and its answer reaches the flow's output — all four independently
|
|
1664
|
-
* checkable (`ladder.sh job`). Whether the number it returned is the correct number
|
|
1665
|
-
* is the model's business, and no rung asserts it. What CAN be asserted is that the
|
|
1666
|
-
* flow did not fake it: the offline seeds assert the exact UNFIXTURED value, which a
|
|
1667
|
-
* hardcoded answer cannot produce.
|
|
1668
|
-
*
|
|
1669
|
-
* @example
|
|
1670
|
-
* **Start a published agent and read one declared output**
|
|
1671
|
-
* ```ts
|
|
1672
|
-
* .step('countLetters', agent({
|
|
1673
|
-
* key: '6a47dc5b-5fd4-461f-b97d-6c1817abcaaa',
|
|
1674
|
-
* name: 'CountLetters LowCode Agent',
|
|
1675
|
-
* folderPath: 'Shared/uipath-maestro-flow/CountLetters LowCode',
|
|
1676
|
-
* inputs: { inputString: input('word') },
|
|
1677
|
-
* returns: { count: 'integer', inputString: 'string' },
|
|
1678
|
-
* }))
|
|
1679
|
-
* .return({ rs: out('countLetters', 'count') })
|
|
1680
|
-
* ```
|
|
1681
|
-
*
|
|
1682
|
-
* @param inputs - The agent to start (`name`, `folderPath`, and `key` or
|
|
1683
|
-
* `projectId`), its `inputs`, and the fields you read back via `returns`.
|
|
1684
|
-
* @returns An action spec to pass to `.step(name, …)`.
|
|
1685
|
-
*/
|
|
1686
|
-
export declare function agent(inputs: AgentInputs): ActionSpec;
|
|
1687
|
-
/**
|
|
1688
|
-
* Declare an INLINE AUTONOMOUS AGENT — an agent defined inside this flow's own
|
|
1689
|
-
* project rather than published to Orchestrator (`uipath.agent.autonomous`,
|
|
1690
|
-
* `Orchestrator.StartInlineAgentJob`).
|
|
1691
|
-
*
|
|
1692
|
-
* @remarks
|
|
1693
|
-
* **Two artifacts, not one.** The node carries the prompts and the variable
|
|
1694
|
-
* descriptors, and it points at a directory — `source` — where the platform expects
|
|
1695
|
-
* the agent's own configuration (flow-v1 emits `entryPoint: <source>/agent.json`).
|
|
1696
|
-
* So `compile` writes `<source>/agent.json` beside the `.flow`, built from the same
|
|
1697
|
-
* fields. Nothing to assemble by hand; `source` defaults to a uuid derived from the
|
|
1698
|
-
* flow id and step name so a recompile is not a diff.
|
|
1699
|
-
*
|
|
1700
|
-
* **How this differs from `agent()`.** That one references something already
|
|
1701
|
-
* published and started as an Orchestrator job; this one IS the definition, and the
|
|
1702
|
-
* platform runs it inside the flow's own debug/publish context. The practical
|
|
1703
|
-
* consequences: there is no folder, no release key and no binding pair here — and
|
|
1704
|
-
* no `uip` verb that starts one headlessly either.
|
|
1705
|
-
*
|
|
1706
|
-
* ── the live bar, stated ─────────────────────────────────────────────────────────
|
|
1707
|
-
* Weaker than `agent()`'s, and in a specific way. `Orchestrator.StartInlineAgentJob`
|
|
1708
|
-
* is Studio-Web-debug-only, so there is no Orchestrator job to point at and no
|
|
1709
|
-
* headless verb that starts one. No local runner currently calls a model for this
|
|
1710
|
-
* node either — an offline run asserts the WIRING and the declared `returns` shape,
|
|
1711
|
-
* never that a model answered. Two differences would remain for any runner that did
|
|
1712
|
-
* call one: knowledge grounding (a context handle) is a cloud-side index an offline
|
|
1713
|
-
* path does not have, so the call would be ungrounded; and the node's `model` would
|
|
1714
|
-
* have to be substituted for one reachable headlessly. Answer quality stays on the
|
|
1715
|
-
* offline `expect` seeds; real behaviour needs a Studio Web debug run.
|
|
1716
|
-
*
|
|
1717
|
-
* @example
|
|
1718
|
-
* **Classify an email with an agent defined inline**
|
|
1719
|
-
* ```ts
|
|
1720
|
-
* .step('triage', inlineAgent({
|
|
1721
|
-
* model: 'gpt-5.4',
|
|
1722
|
-
* systemPrompt:
|
|
1723
|
-
* 'You are a support triage assistant. Classify the email into exactly one ' +
|
|
1724
|
-
* 'category and one priority. Return a result conforming to the output schema. ' +
|
|
1725
|
-
* 'category: billing | technical | account. priority: low | normal | high.',
|
|
1726
|
-
* userPrompt: 'Classify this email:\n{{input.body}}',
|
|
1727
|
-
* inputs: { body: input('body') },
|
|
1728
|
-
* returns: { category: 'string', priority: 'string' },
|
|
1729
|
-
* }))
|
|
1730
|
-
* .return({ category: out('triage', 'category') })
|
|
1731
|
-
* ```
|
|
1732
|
-
*
|
|
1733
|
-
* @param inputs - The agent defined in this project: its `model`,
|
|
1734
|
-
* `systemPrompt`, `userPrompt`, and the `returns` fields it must produce.
|
|
1735
|
-
* @returns An action spec to pass to `.step(name, …)`.
|
|
1736
|
-
*/
|
|
1737
|
-
export declare function inlineAgent(inputs: InlineAgentInputs): ActionSpec;
|
|
1738
1026
|
/**
|
|
1739
1027
|
* Declare an Integration Service connector action — the typed form, where a
|
|
1740
1028
|
* generated descriptor supplies the nodeType and statically-checked input types:
|