@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.
Files changed (73) hide show
  1. package/dist/api-index.md +99 -99
  2. package/dist/api-members.md +307 -307
  3. package/dist/check.d.ts +0 -19
  4. package/dist/check.js +40 -1036
  5. package/dist/cli/commands/registry.js +15 -0
  6. package/dist/compile-cli.js +2 -1
  7. package/dist/core/actions.d.ts +1 -713
  8. package/dist/core/actions.js +0 -193
  9. package/dist/core/agent-sidecar.d.ts +186 -0
  10. package/dist/core/agent-sidecar.js +409 -0
  11. package/dist/core/agent-tool-resources.d.ts +62 -0
  12. package/dist/core/agent-tool-resources.js +81 -0
  13. package/dist/core/cli-spelling.d.ts +9 -0
  14. package/dist/core/cli-spelling.js +9 -0
  15. package/dist/{config.js → core/connector-configuration.js} +2 -2
  16. package/dist/core/library-cache.d.ts +0 -9
  17. package/dist/core/library-cache.js +0 -9
  18. package/dist/core/library.d.ts +47 -0
  19. package/dist/core/library.js +135 -34
  20. package/dist/core/list-envelope.d.ts +36 -1
  21. package/dist/core/list-envelope.js +24 -19
  22. package/dist/core/lookup-store.d.ts +4 -3
  23. package/dist/core/lookup-store.js +46 -38
  24. package/dist/core/node-id-placeholder.d.ts +8 -0
  25. package/dist/core/node-id-placeholder.js +10 -0
  26. package/dist/core/read-text.d.ts +26 -0
  27. package/dist/core/read-text.js +43 -0
  28. package/dist/core/ts-literal.d.ts +6 -0
  29. package/dist/core/ts-literal.js +15 -0
  30. package/dist/core/typed-raw-node.js +0 -5
  31. package/dist/decompile.js +34 -822
  32. package/dist/flow-node-registry.js +2 -1
  33. package/dist/flow-node-type.d.ts +130 -6
  34. package/dist/flow-sdk.d.ts +1 -0
  35. package/dist/flow-sdk.js +1 -0
  36. package/dist/nodes/agent/flow/check.d.ts +88 -0
  37. package/dist/nodes/agent/flow/check.js +873 -0
  38. package/dist/nodes/agent/flow/factories.d.ts +134 -0
  39. package/dist/nodes/agent/flow/factories.js +143 -0
  40. package/dist/nodes/agent/flow/family.d.ts +3 -0
  41. package/dist/nodes/agent/flow/family.js +8 -0
  42. package/dist/nodes/agent/flow/index.d.ts +3 -0
  43. package/dist/nodes/agent/flow/index.js +3 -0
  44. package/dist/nodes/agent/flow/inline-agent-lift.d.ts +44 -0
  45. package/dist/nodes/agent/flow/inline-agent-lift.js +572 -0
  46. package/dist/nodes/agent/flow/inline-agent.d.ts +15 -0
  47. package/dist/nodes/agent/flow/inline-agent.js +526 -0
  48. package/dist/nodes/agent/flow/node-type.d.ts +20 -0
  49. package/dist/nodes/agent/flow/node-type.js +422 -0
  50. package/dist/nodes/agent/flow/resources.d.ts +502 -0
  51. package/dist/nodes/agent/flow/resources.js +1409 -0
  52. package/dist/nodes/agent/flow/spec.d.ts +448 -0
  53. package/dist/nodes/agent/flow/spec.js +1 -0
  54. package/dist/nodes/process/flow/check.d.ts +40 -2
  55. package/dist/nodes/process/flow/check.js +156 -0
  56. package/dist/nodes/process/flow/factories.d.ts +58 -3
  57. package/dist/nodes/process/flow/factories.js +59 -2
  58. package/dist/nodes/process/flow/node-type.d.ts +4 -1
  59. package/dist/nodes/process/flow/node-type.js +181 -10
  60. package/dist/nodes/process/flow/spec.d.ts +112 -5
  61. package/dist/registry/describe-cli.d.ts +10 -0
  62. package/dist/registry/describe-cli.js +41 -0
  63. package/dist/registry/library-reader.d.ts +12 -2
  64. package/dist/registry/library-reader.js +17 -16
  65. package/dist/registry/lookup-specs.d.ts +17 -1
  66. package/dist/registry/lookup-specs.js +3 -7
  67. package/dist/registry/path-cli.js +2 -1
  68. package/dist/registry/search-cli.js +2 -1
  69. package/dist/serialize.d.ts +9 -54
  70. package/dist/serialize.js +47 -2763
  71. package/package.json +2 -2
  72. /package/dist/{config.d.ts → core/connector-configuration.d.ts} +0 -0
  73. /package/dist/{ixp-definition.json → core/ixp-definition.json} +0 -0
@@ -8,6 +8,7 @@
8
8
  */
9
9
  import { NodeTypeRegistry } from './core/nodes/registry.js';
10
10
  import { hasBundledDefinition } from './flow-definitions.js';
11
+ import { agentFlowFamily } from './nodes/agent/flow/family.js';
11
12
  import { aiPatternsFlowFamily } from './nodes/ai-patterns/flow/family.js';
12
13
  import { conversationFlowFamily } from './nodes/conversation/flow/family.js';
13
14
  import { dataFabricFlowFamily } from './nodes/data-fabric/flow/family.js';
@@ -21,5 +22,5 @@ import { queueFlowFamily } from './nodes/queue/flow/family.js';
21
22
  import { scriptFlowFamily } from './nodes/script/flow/family.js';
22
23
  import { transformFlowFamily } from './nodes/transform/flow/family.js';
23
24
  /** The families, in no significant order. Adding one is the whole of registering it. */
24
- export const FLOW_NODE_FAMILIES = [aiPatternsFlowFamily, conversationFlowFamily, dataFabricFlowFamily, delayFlowFamily, documentFlowFamily, hitlFlowFamily, httpFlowFamily, mockFlowFamily, processFlowFamily, queueFlowFamily, scriptFlowFamily, transformFlowFamily];
25
+ export const FLOW_NODE_FAMILIES = [agentFlowFamily, aiPatternsFlowFamily, conversationFlowFamily, dataFabricFlowFamily, delayFlowFamily, documentFlowFamily, hitlFlowFamily, httpFlowFamily, mockFlowFamily, processFlowFamily, queueFlowFamily, scriptFlowFamily, transformFlowFamily];
25
26
  export const FLOW_NODE_TYPES = new NodeTypeRegistry('flow', FLOW_NODE_FAMILIES, { hasBundledDefinition });
@@ -14,6 +14,7 @@ import type { VersionedNodeType } from './core/nodes/versioned.js';
14
14
  import type { NodeFamily, Placement } from './core/nodes/family.js';
15
15
  import type { DefinitionReference, NodeContribution } from './core/node-classes.js';
16
16
  import type { CheckOpts } from './check.js';
17
+ import type { SerializeOpts } from './serialize.js';
17
18
  import type { DeclaredExit, NoExits } from './core/step-ports.js';
18
19
  /**
19
20
  * What a Flow node type's `serialize` returns: the node's type-owned fields.
@@ -65,6 +66,27 @@ export interface FlowNodeContribution extends Omit<NodeContribution, 'definition
65
66
  * `{nodeId}` substitution, which a merged contribution's outputs get.
66
67
  */
67
68
  replaceOutputs?: boolean;
69
+ /**
70
+ * Resource nodes this node carries on its artifact handles — an agent's
71
+ * contexts, tools, escalations and memory. Each is placed after this node and
72
+ * before the edges into it, drawn as a circle, with no node-level `model`, and
73
+ * joined by an edge from this node's `port` to the resource's `input`. Its
74
+ * inputs are written as given (render them first), and its definition is
75
+ * emitted into `definitions[]` like a per-tenant node's. A resource is not a
76
+ * step: it takes no control flow and never reaches an End.
77
+ */
78
+ attach?: ReadonlyArray<{
79
+ /** Its node id, from {@link FlowSerializeContext.resourceNodeId}. */
80
+ readonly id: string;
81
+ /** Its definition (the manifest). */
82
+ readonly definition: unknown;
83
+ readonly label: string;
84
+ readonly inputs: Readonly<Record<string, unknown>>;
85
+ /** The artifact handle on THIS node the edge leaves from (`context`, `tool`, `escalation`, `memory`). */
86
+ readonly port: string;
87
+ /** Display fields set over the definition's, after `shape: 'circle'` (a tool's `description`). */
88
+ readonly display?: Readonly<Record<string, unknown>>;
89
+ }>;
68
90
  }
69
91
  /** What `serialize` may ask of the serializer, for one placement. */
70
92
  export interface FlowSerializeContext {
@@ -95,10 +117,12 @@ export interface FlowSerializeContext {
95
117
  /** A deterministic id for `seed`, unique to this flow and node. */
96
118
  mint(seed: string): string;
97
119
  /**
98
- * Hoist a binding entry into the flow's `bindings`, deduplicated by `id`. With
99
- * the contribution's own `bindings`, these must close every `<bindings.NAME>`
100
- * the node's definition references: serialize refuses a name left open
101
- * (`CONTRIBUTION_BINDING_UNRESOLVED`), and `check` does not see bindings.
120
+ * Hoist a binding entry into the flow's `bindings`, deduplicated by `id`. It is
121
+ * in {@link bindings} at once, so a second resource of this step sees the
122
+ * first one's pair. With the contribution's own `bindings`, these must close
123
+ * every `<bindings.NAME>` the node's definition references: serialize refuses
124
+ * a name left open (`CONTRIBUTION_BINDING_UNRESOLVED`), and `check` does not
125
+ * see bindings.
102
126
  */
103
127
  bind(entry: {
104
128
  readonly id: string;
@@ -122,7 +146,15 @@ export interface FlowSerializeContext {
122
146
  * refusal check reports, and a value that cannot be a tenant id is warned about
123
147
  * (`CONNECTION_STUB`). `where` names the site in both, e.g. `managed http "fetch"`.
124
148
  */
125
- resolveBinding(name: string, attribute: 'connection' | 'folder', where: string): string;
149
+ resolveBinding(name: string, attribute: 'connection' | 'folder', where: string, target?: {
150
+ key: string;
151
+ action?: string;
152
+ }): string;
153
+ /** An unset label resolves to nothing. */
154
+ resolveBinding(name: string | undefined, attribute: 'connection' | 'folder', where: string, target?: {
155
+ key: string;
156
+ action?: string;
157
+ }): string | undefined;
126
158
  /**
127
159
  * Hoist the Integration Service connection pair a definition's `model`
128
160
  * references (`<bindings.NAME>` for its connection id and folder key), deduped
@@ -133,11 +165,54 @@ export interface FlowSerializeContext {
133
165
  bindConnection(o: {
134
166
  model: unknown;
135
167
  connectorKey: string;
136
- connectionId: string;
168
+ /** Undefined for an unresolved connection: the entries still close the references, with no `default`. */
169
+ connectionId: string | undefined;
137
170
  folderKey?: string;
138
171
  /** The entries' `resourceKey`; defaults to `connectionId`. */
139
172
  resourceKey?: string;
140
173
  }): void;
174
+ /**
175
+ * The folder an agent step's files live in (`<source>/agent.json`), a uuid:
176
+ * `carried` when the author or the file gave one, else one derived from the
177
+ * flow id and step name, so a recompile is byte-identical — then moved by the
178
+ * compile's `agentSource` option when it owns the folders (#1184).
179
+ */
180
+ agentSource(carried: string | undefined): string;
181
+ /**
182
+ * Write a file beside the `.flow` (an agent's `agent.json`), at a path relative
183
+ * to it. The same file twice is not a clash (a subflow body emitted for two
184
+ * callers); two different contents at a path an explicit `source` chose are
185
+ * refused (`INLINE_AGENT_RESOURCE_SOURCE_DUP`). The `json` object is kept, not
186
+ * copied, so `typeAgentInputs` can still fill it in.
187
+ */
188
+ sidecar(file: {
189
+ path: string;
190
+ json: unknown;
191
+ }, explicitSource?: boolean): void;
192
+ /**
193
+ * Type an agent sidecar's `inputSchema` once this scope's variables are known:
194
+ * each ref's `flatName` property gets the JSON Schema of the variable its
195
+ * `binding` reads, which no step can know while it is serialized (a later step
196
+ * may declare it).
197
+ */
198
+ typeAgentInputs(schema: {
199
+ properties: Record<string, unknown>;
200
+ definitions?: Record<string, unknown>;
201
+ }, refs: ReadonlyArray<{
202
+ flatName: string;
203
+ binding: string;
204
+ }>): void;
205
+ /**
206
+ * Claim the node id of a resource this step attaches: `explicit` exactly as
207
+ * written (decompile writes the file's id), refused when blank or already
208
+ * another node's (`INLINE_AGENT_RESOURCE_NODE_ID`); else `<seed>`, deduped
209
+ * file-wide (`<seed>2`, …).
210
+ */
211
+ resourceNodeId(explicit: string | undefined, seed: string, where: string): string;
212
+ /** The definition this flow has already emitted for `type@version`, if any (definitions[] holds one per pair). */
213
+ emitted(typeName: string, version: string): unknown;
214
+ /** The connector library serialize was given, for a type that resolves a connector operation. */
215
+ readonly library: SerializeOpts['library'];
141
216
  }
142
217
  /** What `deserialize` may ask of the decompiler, for one serialized node. */
143
218
  export interface FlowDeserializeContext {
@@ -168,6 +243,33 @@ export interface FlowDeserializeContext {
168
243
  * decompile.
169
244
  */
170
245
  lossy(message: string): void;
246
+ /**
247
+ * A file beside the `.flow` (an agent's `<source>/agent.json`) as text, by its
248
+ * path relative to it; undefined when decompile was given no reader or the
249
+ * file is not there.
250
+ */
251
+ sidecar(path: string): string | undefined;
252
+ /** The id of the flow being decompiled, as the source will name it: compile derives a resource's folder from it. */
253
+ readonly flowId: string;
254
+ /** Another node's definition: the file's own `definitions[]` entry for its type and version. */
255
+ definitionOf(node: {
256
+ type: string;
257
+ typeVersion?: string;
258
+ }): unknown;
259
+ /**
260
+ * The nodes attached to this one on an artifact handle (`tool`, `context`,
261
+ * `escalation`, `memory`), in edge order, at most `limit` of them. Their edges
262
+ * are carried by this node's spec, so they are not reported as dropped.
263
+ */
264
+ attached(port: string, limit?: number): readonly unknown[];
265
+ /** The ids of every node attached on that handle, without claiming their edges. */
266
+ attachedIds(port: string): readonly string[];
267
+ /**
268
+ * Record that an attached node folds into this node's spec, and the id
269
+ * compile will give it (undefined: compile will not emit it again), so what
270
+ * decompile writes about it — a layout entry — names the recompiled node.
271
+ */
272
+ absorb(nodeId: string, compiledId: string | undefined): void;
171
273
  /** The source ports this node's out-edges leave from, in edge order (an empty list outside a graph). */
172
274
  outPorts(): readonly string[];
173
275
  /**
@@ -233,7 +335,29 @@ export interface FlowCheckContext {
233
335
  }, use?: {
234
336
  id: string;
235
337
  connector: string | undefined;
338
+ },
339
+ /** The connector operation the labels are for, so a refusal names the `prepare` command for it. */
340
+ target?: {
341
+ key: string;
342
+ action?: string;
236
343
  }): void;
344
+ /**
345
+ * The node ids and folders this step's attached resources take, recorded
346
+ * file-wide — across the root flow and every subflow, as compile claims them.
347
+ * An explicit id equal to one another node gets is reported once the whole
348
+ * file is checked (`INLINE_AGENT_RESOURCE_NODE_ID`).
349
+ */
350
+ readonly resources: {
351
+ /** An id compile derives for one of this step's resources, and what it is, for that report. */
352
+ derivedNodeId(id: string, what: string): void;
353
+ /** Claim an explicit node id: the earlier claimant when one already has it (and nothing is recorded), else undefined. */
354
+ claimNodeId(id: string, what: string): {
355
+ step: string;
356
+ what: string;
357
+ } | undefined;
358
+ /** Claim an agent's folder (its `source`, compared lower-cased): the other step that has it, else undefined. */
359
+ claimFolder(source: string): string | undefined;
360
+ };
237
361
  }
238
362
  /** What a family-level `check` may ask of the checker. */
239
363
  export interface FlowFamilyCheckContext {
@@ -18,6 +18,7 @@
18
18
  */
19
19
  export * from './core/expr.js';
20
20
  export * from './core/actions.js';
21
+ export * from './nodes/agent/flow/index.js';
21
22
  export * from './nodes/ai-patterns/flow/index.js';
22
23
  export * from './nodes/conversation/flow/index.js';
23
24
  export * from './nodes/data-fabric/flow/index.js';
package/dist/flow-sdk.js CHANGED
@@ -22,6 +22,7 @@
22
22
  export * from './core/expr.js';
23
23
  export * from './core/actions.js';
24
24
  // Node families' public surfaces (docs/NODE_TYPE_ARCHITECTURE_DESIGN.md §8).
25
+ export * from './nodes/agent/flow/index.js';
25
26
  export * from './nodes/ai-patterns/flow/index.js';
26
27
  export * from './nodes/conversation/flow/index.js';
27
28
  export * from './nodes/data-fabric/flow/index.js';
@@ -0,0 +1,88 @@
1
+ /**
2
+ * The agents family's rules: what is decidable from a call to
3
+ * `conversationalAgent()`, `voiceAgent()`, `createOutgoingCall()`, `endCall()`
4
+ * or `inlineAgent()` — the turn wiring, the call's numbers, the `callContext`
5
+ * the voice steps share, and an inline agent's prompts, inputs, guardrails and
6
+ * resources. Moved from check.ts in Phase 4 of
7
+ * docs/NODE_TYPE_ARCHITECTURE_DESIGN.md; codes and messages unchanged.
8
+ */
9
+ import type { DiagnosticCatalog } from '../../../core/nodes/family.js';
10
+ import type { OutputPathRead } from '../../../core/nodes/node-type.js';
11
+ import type { FlowCheckContext } from '../../../flow-node-type.js';
12
+ import type { InlineAgentInputs } from './spec.js';
13
+ export declare const AGENT_DIAGNOSTICS: DiagnosticCatalog;
14
+ /**
15
+ * A conversational AGENT step (Phase 5).
16
+ *
17
+ * The turn wiring is the whole risk: `'simple'` mode reads everything out of
18
+ * ONE conversation-context binding, so a flow that names neither the context
19
+ * nor the individual fields deploys an agent with no transcript to answer.
20
+ */
21
+ export declare function checkConversationalAgent(inputs: Record<string, unknown> | undefined, ctx: FlowCheckContext): void;
22
+ /**
23
+ * A VOICE step (Phase 5D): create-outgoing-call, end-call, or the voice agent.
24
+ *
25
+ * Two things are decidable offline and expensive later: a call needs both
26
+ * numbers in a form the telephony provider accepts, and every voice step needs
27
+ * the `callContext` OBJECT — binding a bare conversation id instead is the
28
+ * classic mistake, because the field is typed `object` and a string passes the
29
+ * file's schema while failing at dispatch.
30
+ */
31
+ export declare function checkVoice(kind: 'createOutgoingCall' | 'endCall' | 'voiceAgent', inputs: Record<string, unknown> | undefined, ctx: FlowCheckContext): void;
32
+ /**
33
+ * The phrase in `text` that tells a model to answer in JSON TEXT, or `undefined`.
34
+ *
35
+ * `check` uses it for `INLINE_AGENT_PROMPT_JSON_TEXT`, passing the step's `returns`
36
+ * keys so the brace form only counts a brace that spells one of them. Without
37
+ * `returnKeys` (the example and doc sweeps) any quoted identifier key counts.
38
+ * `{{input.*}}` placeholders are removed first, so an input named `json` never
39
+ * matches.
40
+ *
41
+ * @example
42
+ * ```ts
43
+ * jsonTextDirective('Return ONLY a JSON object with keys "subject" and "body".'); // 'Return ONLY a JSON'
44
+ * jsonTextDirective('Return ONLY {"category","priority"}.', ['category']); // '{"category",'
45
+ * jsonTextDirective('Return a result conforming to the output schema.'); // undefined
46
+ * jsonTextDirective('Do not return JSON.'); // undefined
47
+ * jsonTextDirective('Answer the question using the JSON data below.'); // undefined
48
+ * ```
49
+ */
50
+ export declare function jsonTextDirective(text: string, returnKeys?: readonly string[]): string | undefined;
51
+ /**
52
+ * Check an `inlineAgent(...)` call.
53
+ *
54
+ * The interesting difference from every other node this SDK authors: **nothing here
55
+ * lives on a tenant.** An inline agent's whole contract is in the call, so these
56
+ * rules can be certain rather than best-effort — the definition's own `required`
57
+ * list is checkable, and so is whether the prompts and the declared variables agree.
58
+ *
59
+ * Three rules exist because the PLATFORM does something with what you wrote:
60
+ *
61
+ * - `INLINE_AGENT_SCAFFOLD_MODEL` — the model the platform's own scaffold ships is
62
+ * stale, and v1's smoke check for this node type fails a flow that keeps it. A
63
+ * warning, not an error: it is a real model id, it just should not be a default
64
+ * nobody chose.
65
+ * - `INLINE_AGENT_UNREFERENCED_INPUT` — flow-v1 derives the deployed input list by
66
+ * scanning the PROMPTS for `$vars.*` references and only falls back to the
67
+ * authored `agentInputVariables` when that pre-pass did not run. So a declared
68
+ * input the prompts never mention is pruned deployed while arriving locally: a
69
+ * disagreement between rungs and the platform, which is the one class that has to
70
+ * be said out loud rather than left to a run.
71
+ * - `INLINE_AGENT_PROMPT_JSON_TEXT` — the platform returns `returns` as a typed
72
+ * object: it becomes the `agent.json` `outputSchema`, and the agent runtime ends
73
+ * a run with a structured call that fills exactly those fields. A prompt that
74
+ * ALSO asks for JSON text makes the model pack its whole answer, serialized, into
75
+ * one string field. See {@link jsonTextDirective}.
76
+ */
77
+ export declare function checkInlineAgent(inputs: InlineAgentInputs | undefined, ctx: FlowCheckContext): void;
78
+ /**
79
+ * A read of an inline agent's output: `out('<step>', '<field>')`.
80
+ *
81
+ * Stricter than the published families' equivalent, and it can afford to be: the
82
+ * declared `returns` IS the contract (there is no tenant to disagree with), and it
83
+ * is what any runner has to coerce the model's completion to: build
84
+ * `{ <declared keys> }` and put the raw completion in the first one if the model
85
+ * ignored the shape. So a read outside the set is undefined by construction, not
86
+ * merely probably.
87
+ */
88
+ export declare function checkInlineAgentRead({ node: name, field, rest, reader: step }: OutputPathRead, spec: InlineAgentInputs, report: (code: string, message: string, suggestion?: string) => void): void;