@uipath/flow-tool 1.201.0-preview.131 → 1.201.0-preview.133
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/{authoring-rezk32bm.js → authoring-7r6g06c7.js} +2 -2
- package/dist/{conversion-W6HMHBWW-6qbqgqks.js → conversion-H2VEEYLB-ng48mbf7.js} +536 -161
- package/dist/{de-K6MLR24N-5N5XGLH6-gbwpvdz4.js → de-5HU6GFWV-4EZK6G7N-yrh21f52.js} +273 -13
- package/dist/{de-K6MLR24N-00fjz82b.js → de-5HU6GFWV-zheyw6d2.js} +271 -10
- package/dist/de-5KVP66U6-f7knj511.js +161 -0
- package/dist/de-5KVP66U6-t37qr521.js +161 -0
- package/dist/{de-B2KIY5TC-81f703v3.js → de-HKTOVV4H-d5yw5j21.js} +3 -3
- package/dist/{de-WMKOGI7B-r1821wpe.js → de-WMKOGI7B-6dc1zdnp.js} +3 -3
- package/dist/en-4KXU7N7B-24v330b5.js +118 -0
- package/dist/en-4KXU7N7B-66fntxa2.js +118 -0
- package/dist/{en-ILA4HPE5-ALHGESZE-zrv4qss8.js → en-MABQK6C4-REWE2WG2-8dp4cqdg.js} +109 -6
- package/dist/{en-ILA4HPE5-fhwvq92r.js → en-MABQK6C4-nkzq2j8t.js} +106 -2
- package/dist/{en-P6PNWNTO-g1f6cjh5.js → en-P4AS26D7-szrzfxz1.js} +3 -5
- package/dist/{en-X4DLPKLJ-dt1wtdm7.js → en-X4DLPKLJ-1h9gj5c1.js} +3 -3
- package/dist/{es-BVPGJUWA-9gk2g9yb.js → es-BVPGJUWA-0k59eqfv.js} +3 -3
- package/dist/{es-HTQSD352-YTAEDCE5-nhsbg581.js → es-LUTYN7U7-IY5QWOUF-k2aefzc0.js} +273 -13
- package/dist/{es-HTQSD352-m9rr3f0g.js → es-LUTYN7U7-ye5zn4sn.js} +271 -10
- package/dist/{es-MX-3SP2SSV6-f20qspbr.js → es-MX-H2EAXLYI-qwnqt48x.js} +3 -3
- package/dist/{es-MX-FOX525CG-87g500gr.js → es-MX-POESXYP2-9538722k.js} +272 -11
- package/dist/{es-MX-FOX525CG-HLM27OEL-whr0t9v3.js → es-MX-POESXYP2-UW6VP5QI-cd3a79g9.js} +274 -14
- package/dist/{es-MX-U6YL5KQX-ynwxdjr8.js → es-MX-U6YL5KQX-k4qvpgd4.js} +3 -3
- package/dist/es-MX-XAVLOQW3-47a405kf.js +161 -0
- package/dist/es-MX-XAVLOQW3-9b3cp9n8.js +161 -0
- package/dist/{es-BBX4AUJX-h99fcr53.js → es-O4PAV2CR-jwfaawwk.js} +3 -3
- package/dist/es-VFPNVMP5-6sftsdxe.js +161 -0
- package/dist/es-VFPNVMP5-thm0z9sr.js +161 -0
- package/dist/{fr-FSTBVVGK-t3y57xrb.js → fr-5YRGHXF5-q6b63yg0.js} +3 -3
- package/dist/fr-E5MDO4EG-exvrs7ge.js +161 -0
- package/dist/fr-E5MDO4EG-f3x1jeqw.js +161 -0
- package/dist/{fr-EKTTDR7Z-bmpwp31r.js → fr-EKTTDR7Z-m2t68j0m.js} +3 -3
- package/dist/{fr-54THJ4QH-IGABNGU6-fpzw2mba.js → fr-LJIK56LW-STG6QR3T-cextvv8q.js} +274 -14
- package/dist/{fr-54THJ4QH-d6ezjbhw.js → fr-LJIK56LW-xf3xf2kh.js} +272 -11
- package/dist/{index-6hp3p3eq.js → index-dhcd9b82.js} +2 -2
- package/dist/{index-zvxfkpkr.js → index-er6vy3jk.js} +71 -5
- package/dist/index.js +22 -16
- package/dist/init.js +19 -13
- package/dist/ja-DPO5PPLO-fmbg7zt2.js +161 -0
- package/dist/ja-DPO5PPLO-s2a7j3nj.js +161 -0
- package/dist/{ja-MHUPLSWO-CS3KE4Y3-mbtkzwd7.js → ja-FGEGLBJ3-MG3BSWXD-vq19zt2p.js} +273 -13
- package/dist/{ja-MHUPLSWO-3qwy4jc0.js → ja-FGEGLBJ3-w9byjhze.js} +271 -10
- package/dist/{ja-FW33BJBW-htfk4d8t.js → ja-SDAPAVCR-943p5gx7.js} +3 -3
- package/dist/{ja-Y2YBTXNN-96cvy5av.js → ja-Y2YBTXNN-5sszk2zv.js} +3 -3
- package/dist/ko-ITOPNIYI-aqy82jk8.js +161 -0
- package/dist/ko-ITOPNIYI-qz39kamf.js +161 -0
- package/dist/{ko-PDO5AXNW-d653t4pc.js → ko-NAGOZLC3-wb3y9yhh.js} +3 -3
- package/dist/{ko-S33XAV26-cxf4dn2t.js → ko-S33XAV26-rfsv9myd.js} +3 -3
- package/dist/{ko-XPJTXIKK-DNSW4KYQ-956vp61f.js → ko-TUAK3G3A-TBEBKOTM-ns78t2rv.js} +277 -17
- package/dist/{ko-XPJTXIKK-w1hs4px7.js → ko-TUAK3G3A-s25w0ckg.js} +275 -14
- package/dist/{node-rnmmv28d.js → node-qyxvhbw6.js} +2 -2
- package/dist/{packager-tool-cqrsre00.js → packager-tool-0567pxpm.js} +121 -12
- package/dist/{packager-tool-3wf3tkrc.js → packager-tool-09xysehb.js} +3 -5
- package/dist/{packager-tool-b0s5d4ek.js → packager-tool-0sz8se22.js} +1 -1
- package/dist/{packager-tool-s5y06ny4.js → packager-tool-2xgc101h.js} +544 -45
- package/dist/{packager-tool-03knb0er.js → packager-tool-3wygxefb.js} +116 -17
- package/dist/packager-tool-6ejqwbw9.js +26 -0
- package/dist/{packager-tool-952kqpax.js → packager-tool-78a3szsp.js} +890 -339
- package/dist/{packager-tool-xzcywm2b.js → packager-tool-c42dp002.js} +1 -1
- package/dist/{packager-tool-v61wap3v.js → packager-tool-djagtpkt.js} +12111 -6271
- package/dist/{packager-tool-1gjx8w7m.js → packager-tool-fgdsmd8k.js} +258 -486
- package/dist/packager-tool-gasyxww9.js +23964 -0
- package/dist/packager-tool-gmrwvnyh.js +1171 -0
- package/dist/packager-tool-jysvpt8p.js +11 -0
- package/dist/packager-tool-m6x5sczh.js +899 -0
- package/dist/packager-tool-mcaf4ewf.js +46 -0
- package/dist/packager-tool-p9j43p8h.js +115 -0
- package/dist/{packager-tool-v2p6g3fd.js → packager-tool-pkq70dec.js} +1 -1
- package/dist/{packager-tool-zh6g3h65.js → packager-tool-sf18719z.js} +5 -5
- package/dist/packager-tool-tq9q9m77.js +115 -0
- package/dist/{packager-tool-1yy9x4vk.js → packager-tool-v74yk918.js} +2 -2
- package/dist/packager-tool-vdd02vns.js +55924 -0
- package/dist/packager-tool-xj0agqpk.js +11 -0
- package/dist/packager-tool.js +15 -9
- package/dist/{pt-JLZYSSXX-7jth254x.js → pt-7TR74ZMB-1g8my56g.js} +3 -3
- package/dist/{pt-BR-TV7NR3ID-PDSSHRHU-nddwzj29.js → pt-BR-7XGDXRDJ-TR5D7JYL-533wvy7p.js} +274 -14
- package/dist/{pt-BR-TV7NR3ID-vgd26pj1.js → pt-BR-7XGDXRDJ-espnkgrj.js} +272 -11
- package/dist/pt-BR-BXURWX4W-dqr4dnf9.js +161 -0
- package/dist/pt-BR-BXURWX4W-xzyndmrx.js +161 -0
- package/dist/{pt-BR-LQH3RSBB-kyb4jmcw.js → pt-BR-DXXSYJDO-bn84ewp7.js} +3 -3
- package/dist/{pt-BR-JO45SCNI-4kbfnzc4.js → pt-BR-JO45SCNI-mt93s33c.js} +3 -3
- package/dist/{pt-4JEPEAST-JO5WN33S-ccdbdab2.js → pt-TMVOOITK-H2ADYHSD-ezpggv33.js} +273 -13
- package/dist/{pt-4JEPEAST-40npwxyw.js → pt-TMVOOITK-myha14p9.js} +271 -10
- package/dist/{pt-W3NA4LIZ-f02gapvs.js → pt-W3NA4LIZ-fwd1q4j0.js} +3 -3
- package/dist/pt-YI4VE4YQ-521681zf.js +161 -0
- package/dist/pt-YI4VE4YQ-v7gjeg82.js +161 -0
- package/dist/{ro-RKJ74FV3-QS3I6XKJ-kb31d85k.js → ro-2VALF3S5-NXBJUEZN-nqw1zs33.js} +277 -17
- package/dist/{ro-RKJ74FV3-qn0ey39v.js → ro-2VALF3S5-cdz5afkr.js} +275 -14
- package/dist/{ro-E2EBPQGT-vn573vcr.js → ro-BJFER5OI-334n28rj.js} +3 -3
- package/dist/ro-RKXZUG7Z-cm3xn3fj.js +161 -0
- package/dist/ro-RKXZUG7Z-pdztdafr.js +161 -0
- package/dist/{ro-WLKX6HF5-fcbe2zz8.js → ro-WLKX6HF5-b9tj8q67.js} +3 -3
- package/dist/ru-GSCT4ARZ-FTVCGQTL-5nh4jf2e.js +14 -0
- package/dist/ru-T73OPRTC-mp5gn7gs.js +10 -0
- package/dist/ru-WBLQ5B2U-8xd4gpv2.js +10 -0
- package/dist/ru-WBLQ5B2U-mswqs9wc.js +10 -0
- package/dist/serialization-GAW7UFOK-9hkdmmd2.js +36541 -0
- package/dist/services/flow-eval-schema/deterministic-evaluators.d.ts +110 -0
- package/dist/services/flow-eval-schema/evaluator-fields.d.ts +66 -0
- package/dist/services/flow-eval-schema/helpers.d.ts +9 -0
- package/dist/services/flow-eval-schema/index.d.ts +4 -0
- package/dist/services/flow-eval-schema/llm-judge-evaluators.d.ts +174 -0
- package/dist/services/flow-eval-schema/prompts.d.ts +2 -0
- package/dist/services/flow-eval-schema/registry.d.ts +375 -0
- package/dist/services/flow-eval-schema/tool-call-evaluators.d.ts +93 -0
- package/dist/services/flow-eval-schema/types.d.ts +78 -0
- package/dist/services/flow-eval-types.d.ts +6 -0
- package/dist/services/flow-eval-utils.d.ts +14 -0
- package/dist/services/flow-validate-service.d.ts +11 -0
- package/dist/services/packaging-utils.d.ts +3 -29
- package/dist/tool.js +22 -16
- package/dist/{tr-3U2W2XCA-zg3zcmq3.js → tr-3U2W2XCA-43ptfc0m.js} +3 -3
- package/dist/tr-AA6O2WSR-bj9n80k8.js +161 -0
- package/dist/tr-AA6O2WSR-ga1xnymp.js +161 -0
- package/dist/{tr-X7R6GQNB-VMEZAWRJ-vdbjqw23.js → tr-RIFCEXFH-BZS7S7QK-q465b62g.js} +279 -19
- package/dist/{tr-X7R6GQNB-shwv16dz.js → tr-RIFCEXFH-hgkb4g8y.js} +277 -16
- package/dist/{tr-ZUUSMHER-pfn5dq1r.js → tr-RQTZ2DMS-bpgd4kma.js} +3 -3
- package/dist/utils/flow-io.d.ts +8 -0
- package/dist/validation.js +19 -13
- package/dist/{zh-CN-FEZ24J4A-q5b5x20w.js → zh-CN-IP3FMXWM-1cfarhcp.js} +271 -10
- package/dist/{zh-CN-FEZ24J4A-LSEMG63K-db8kf6rm.js → zh-CN-IP3FMXWM-H3JI2XUM-ta4yac7h.js} +273 -13
- package/dist/{zh-CN-IPZYQR3P-1h76csc4.js → zh-CN-IPZYQR3P-egjmvyjf.js} +3 -3
- package/dist/zh-CN-R2KLHXQV-wttmznep.js +161 -0
- package/dist/zh-CN-R2KLHXQV-x6gnk2n0.js +161 -0
- package/dist/{zh-CN-YFKQ7HBX-w98q5zqf.js → zh-CN-ZC6LT4IN-vty9mvv8.js} +3 -3
- package/dist/{zh-TW-GKSCT6NW-JLMWTDAF-g2smq1gm.js → zh-TW-AGIDXIPF-R4XZRDJZ-cgxxz5k4.js} +274 -14
- package/dist/{zh-TW-GKSCT6NW-4n1yfre0.js → zh-TW-AGIDXIPF-n6r6w7vy.js} +272 -11
- package/dist/{zh-TW-CP5PCVEJ-wvbxf7c7.js → zh-TW-R7Y5KVMU-q81f4z2p.js} +3 -3
- package/dist/zh-TW-RJGCQANM-gqn0aca0.js +161 -0
- package/dist/zh-TW-RJGCQANM-tt8j5wv2.js +161 -0
- package/dist/{zh-TW-YPVSQVGT-wbybwpwt.js → zh-TW-YPVSQVGT-b378ztph.js} +3 -3
- package/package.json +2 -2
- package/dist/packager-tool-1169tjst.js +0 -87554
- package/dist/packager-tool-c19w8vg9.js +0 -26
- package/dist/packager-tool-gbgfwx8f.js +0 -2
- package/dist/packager-tool-jpcm3xas.js +0 -12
- package/dist/packager-tool-mt2g0zjx.js +0 -36187
- package/dist/packager-tool-pvgqbm48.js +0 -21
- package/dist/ru-D6DDND7Z-e4en56d2.js +0 -10
- package/dist/ru-GSCT4ARZ-3TVTUGWP-bbg6360z.js +0 -15
- package/dist/serialization-GTFWODSH-p7wmsmj7.js +0 -148
- /package/dist/{packager-tool-ny53xmsd.js → packager-tool-cvwr40ax.js} +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
registerPackagerFactories
|
|
3
|
-
} from "./packager-tool-
|
|
3
|
+
} from "./packager-tool-c42dp002.js";
|
|
4
4
|
import {
|
|
5
5
|
flowInitAsync
|
|
6
|
-
} from "./packager-tool-
|
|
6
|
+
} from "./packager-tool-sf18719z.js";
|
|
7
7
|
import {
|
|
8
8
|
ERROR_SOURCE_PORT,
|
|
9
9
|
FlowEvalFileStore,
|
|
@@ -12,6 +12,8 @@ import {
|
|
|
12
12
|
NodeTypeNotFoundError,
|
|
13
13
|
SourceRequiredError,
|
|
14
14
|
addNodeToFlow,
|
|
15
|
+
buildDefaultCriteria,
|
|
16
|
+
buildEvaluatorConfig,
|
|
15
17
|
buildInlineAgentDescriptors,
|
|
16
18
|
captureMigrationIssues,
|
|
17
19
|
collectNodeBindingResourceKeys,
|
|
@@ -19,23 +21,28 @@ import {
|
|
|
19
21
|
enableErrorHandlingForErrorEdges,
|
|
20
22
|
ensureDirectory,
|
|
21
23
|
ensureProcessBindings,
|
|
24
|
+
evaluatorTypeAliases,
|
|
22
25
|
expandHandleIds,
|
|
23
26
|
fileNodesToPackagingNodes,
|
|
24
27
|
formatMigrationFailureMessage,
|
|
28
|
+
getEvaluatorRef,
|
|
25
29
|
isConnectorTriggerType,
|
|
26
30
|
isConnectorWaitForEventType,
|
|
27
31
|
isEventDrivenConnectorType,
|
|
28
|
-
|
|
32
|
+
isRecord,
|
|
33
|
+
isUUID,
|
|
29
34
|
listNodesInFlow,
|
|
30
35
|
packageInlineAgents,
|
|
31
36
|
portMatchesTemplate,
|
|
32
|
-
readInlineAgentSource,
|
|
33
37
|
regenerateBindingsFile,
|
|
38
|
+
resolveEvaluatorType,
|
|
34
39
|
scanDetailForCrossNodeBindings,
|
|
40
|
+
slugify,
|
|
35
41
|
stageInlineAgentPackageFiles,
|
|
42
|
+
stripJsonExt,
|
|
36
43
|
writePackagingArtifacts,
|
|
37
44
|
writePackagingArtifactsDetailed
|
|
38
|
-
} from "./packager-tool-
|
|
45
|
+
} from "./packager-tool-2xgc101h.js";
|
|
39
46
|
import {
|
|
40
47
|
ensureProjectId
|
|
41
48
|
} from "./packager-tool-7yjpwj92.js";
|
|
@@ -50,6 +57,7 @@ import {
|
|
|
50
57
|
buildInputMetadata,
|
|
51
58
|
buildManagedHttpEssentialConfiguration,
|
|
52
59
|
buildSolutionPackageFromDir,
|
|
60
|
+
buildStudioWebDesignerUrl,
|
|
53
61
|
createConfiguredActivityClient,
|
|
54
62
|
createZipFromDir,
|
|
55
63
|
debugPimsGet,
|
|
@@ -77,11 +85,13 @@ import {
|
|
|
77
85
|
registerSharedInstanceCommands,
|
|
78
86
|
registerSharedProcessCommands,
|
|
79
87
|
registerSharedProcessesCommands,
|
|
88
|
+
resolveProjectFlowFile,
|
|
89
|
+
setAgentProjectMetadataReader,
|
|
80
90
|
substituteFilterVariables,
|
|
81
91
|
uploadAndDebugSolution,
|
|
82
92
|
uploadOrOverwriteSolution,
|
|
83
93
|
writeFlowWorkflow
|
|
84
|
-
} from "./packager-tool-
|
|
94
|
+
} from "./packager-tool-djagtpkt.js";
|
|
85
95
|
import {
|
|
86
96
|
JobsApi,
|
|
87
97
|
PackageFeedsApi,
|
|
@@ -98,7 +108,7 @@ import {
|
|
|
98
108
|
resolveFolder,
|
|
99
109
|
updateSolutionFile,
|
|
100
110
|
uploadJobAttachment
|
|
101
|
-
} from "./packager-tool-
|
|
111
|
+
} from "./packager-tool-0sz8se22.js";
|
|
102
112
|
import {
|
|
103
113
|
ATTACHMENT_INSTRUCTIONS,
|
|
104
114
|
ATTACHMENT_UPLOAD_INSTRUCTIONS,
|
|
@@ -129,17 +139,19 @@ import {
|
|
|
129
139
|
readStdin,
|
|
130
140
|
registerPackageMetadataOptions,
|
|
131
141
|
resolveAttachmentInputs
|
|
132
|
-
} from "./packager-tool-
|
|
142
|
+
} from "./packager-tool-cvwr40ax.js";
|
|
133
143
|
import {
|
|
134
144
|
getFileSystem
|
|
135
145
|
} from "./packager-tool-1cb0d5e0.js";
|
|
136
146
|
import {
|
|
137
147
|
DEFAULT_LAYOUT_OPTIONS,
|
|
148
|
+
GRID_SPACING,
|
|
138
149
|
addBinding,
|
|
139
150
|
addEdge,
|
|
140
151
|
addNode,
|
|
141
152
|
addVariable,
|
|
142
153
|
applyNodeMigrations,
|
|
154
|
+
assertVoiceAgentDefinitionsEmbedded,
|
|
143
155
|
checkNodeMigrations,
|
|
144
156
|
convertFlowToBpmn,
|
|
145
157
|
createBinding,
|
|
@@ -147,8 +159,11 @@ import {
|
|
|
147
159
|
createWorkflowVariable,
|
|
148
160
|
generateNodeIdAndName,
|
|
149
161
|
generateNodeVariables,
|
|
162
|
+
generateRandomId,
|
|
163
|
+
isInlineAgentNodeType,
|
|
150
164
|
migrateWorkflowToFloor,
|
|
151
165
|
minimumSupportedVersion,
|
|
166
|
+
readInlineAgentSource,
|
|
152
167
|
replaceExporterVersion,
|
|
153
168
|
resolveHeight,
|
|
154
169
|
resolveWidth,
|
|
@@ -157,18 +172,20 @@ import {
|
|
|
157
172
|
runtimeVersion,
|
|
158
173
|
setPublishIntentOnInlineAgents,
|
|
159
174
|
snapToGrid,
|
|
160
|
-
validateIdentifier
|
|
161
|
-
|
|
175
|
+
validateIdentifier,
|
|
176
|
+
voiceConvertOptions
|
|
177
|
+
} from "./packager-tool-gasyxww9.js";
|
|
162
178
|
import {
|
|
163
179
|
compareVersions,
|
|
164
180
|
executeWritePlan,
|
|
165
181
|
generatePackageDescriptor,
|
|
166
|
-
|
|
182
|
+
getStartEventNodes,
|
|
167
183
|
inMemoryWorkflowToFileFormat,
|
|
168
184
|
isExpressionValue,
|
|
169
185
|
isStartEventNode,
|
|
186
|
+
isVoiceAgentNodeType,
|
|
170
187
|
planWriteThrough
|
|
171
|
-
} from "./packager-tool-
|
|
188
|
+
} from "./packager-tool-78a3szsp.js";
|
|
172
189
|
import {
|
|
173
190
|
__require,
|
|
174
191
|
__toESM
|
|
@@ -177,7 +194,7 @@ import {
|
|
|
177
194
|
var package_default = {
|
|
178
195
|
name: "@uipath/flow-tool",
|
|
179
196
|
license: "MIT",
|
|
180
|
-
version: "1.201.0-preview.
|
|
197
|
+
version: "1.201.0-preview.133",
|
|
181
198
|
description: "Create, debug, and run UiPath Flow projects and jobs.",
|
|
182
199
|
private: false,
|
|
183
200
|
repository: {
|
|
@@ -226,11 +243,11 @@ var package_default = {
|
|
|
226
243
|
"@uipath/builder-sdk": "workspace:*",
|
|
227
244
|
"@uipath/common": "workspace:*",
|
|
228
245
|
"@uipath/filesystem": "workspace:*",
|
|
229
|
-
"@uipath/flow-core": "^0.
|
|
246
|
+
"@uipath/flow-core": "^0.92.5",
|
|
230
247
|
elkjs: "^0.11.1",
|
|
231
|
-
"@uipath/flow-converter": "^0.
|
|
248
|
+
"@uipath/flow-converter": "^0.53.6",
|
|
232
249
|
"@uipath/flow-migrations": "^0.33.0",
|
|
233
|
-
"@uipath/flow-schema": "^0.
|
|
250
|
+
"@uipath/flow-schema": "^0.57.6",
|
|
234
251
|
"@uipath/integrationservice-sdk": "workspace:*",
|
|
235
252
|
i18next: "^23.16.8",
|
|
236
253
|
"@uipath/maestro-sdk": "workspace:*",
|
|
@@ -920,6 +937,30 @@ class UnregisteredProjectError extends Error {
|
|
|
920
937
|
this.instructions = buildFlowDebugUnregisteredProjectInstructions(projectDir, solutionFile);
|
|
921
938
|
}
|
|
922
939
|
}
|
|
940
|
+
var VOICE_TRIGGER_TYPE = "core.trigger.voice";
|
|
941
|
+
var FLOW_DEBUG_INBOUND_VOICE_MESSAGE = "Inbound voice flows cannot be debugged from the CLI.";
|
|
942
|
+
var buildFlowDebugInboundVoiceInstructions = (triggerLabel) => [
|
|
943
|
+
`This flow starts from an incoming-call trigger ("${triggerLabel}"), which only a real call can raise.`,
|
|
944
|
+
"Publish the flow, bind a phone number to it ('uip conversational trunks assign'), then call that number to run it.",
|
|
945
|
+
"Outbound voice flows (manual trigger + Create outgoing call) do run under 'uip maestro flow debug'."
|
|
946
|
+
].join(`
|
|
947
|
+
`);
|
|
948
|
+
|
|
949
|
+
class InboundVoiceDebugError extends Error {
|
|
950
|
+
instructions;
|
|
951
|
+
constructor(triggerLabel) {
|
|
952
|
+
super(FLOW_DEBUG_INBOUND_VOICE_MESSAGE);
|
|
953
|
+
this.name = "InboundVoiceDebugError";
|
|
954
|
+
this.instructions = buildFlowDebugInboundVoiceInstructions(triggerLabel);
|
|
955
|
+
}
|
|
956
|
+
}
|
|
957
|
+
function assertNotInboundVoiceFlow(workflow) {
|
|
958
|
+
const trigger = (workflow.nodes ?? []).find((node) => node.type === VOICE_TRIGGER_TYPE);
|
|
959
|
+
if (!trigger) {
|
|
960
|
+
return;
|
|
961
|
+
}
|
|
962
|
+
throw new InboundVoiceDebugError(trigger.display?.label ?? trigger.id ?? "Incoming call");
|
|
963
|
+
}
|
|
923
964
|
|
|
924
965
|
class FlowDebugService {
|
|
925
966
|
fs;
|
|
@@ -967,10 +1008,26 @@ class FlowDebugService {
|
|
|
967
1008
|
if (projectDir) {
|
|
968
1009
|
await this.hydrateInlineAgentInputs(workflow, projectDir);
|
|
969
1010
|
}
|
|
1011
|
+
const flowNodes = workflow.nodes ?? [];
|
|
1012
|
+
const voiceNodes = flowNodes.filter((node) => isVoiceAgentNodeType(node.type));
|
|
1013
|
+
if (voiceNodes.length > 0 && !projectDir) {
|
|
1014
|
+
throw new Error("This flow contains voice agent nodes; the flow project directory is required to resolve their agent definitions.");
|
|
1015
|
+
}
|
|
1016
|
+
const voiceAgentPackages = projectDir ? await packageInlineAgents(this.fs, projectDir, voiceNodes) : [];
|
|
970
1017
|
const fileFormat = inMemoryWorkflowToFileFormat(workflow);
|
|
971
|
-
const
|
|
972
|
-
const { bpmn } = await convertFlowToBpmn(
|
|
973
|
-
|
|
1018
|
+
const flowJson = JSON.stringify(fileFormat, null, 2);
|
|
1019
|
+
const { bpmn: rawBpmn } = await convertFlowToBpmn(flowJson, voiceConvertOptions({
|
|
1020
|
+
flowJson,
|
|
1021
|
+
nodes: flowNodes,
|
|
1022
|
+
builtAgents: new Map(voiceAgentPackages.map((agent) => [
|
|
1023
|
+
agent.source,
|
|
1024
|
+
agent.agentJson
|
|
1025
|
+
])),
|
|
1026
|
+
convertOptions: { detached: true }
|
|
1027
|
+
}));
|
|
1028
|
+
const bpmn = replaceExporterVersion(rawBpmn, package_default.version);
|
|
1029
|
+
assertVoiceAgentDefinitionsEmbedded(bpmn, flowNodes);
|
|
1030
|
+
return bpmn;
|
|
974
1031
|
}
|
|
975
1032
|
async hydrateInlineAgentInputs(workflow, projectDir) {
|
|
976
1033
|
const nodes = workflow.nodes ?? [];
|
|
@@ -1234,8 +1291,9 @@ class FlowDebugService {
|
|
|
1234
1291
|
const projectUiproj = JSON.parse(projectUiprojContent);
|
|
1235
1292
|
const projectName = projectUiproj.Name;
|
|
1236
1293
|
const safeName = projectName.replace(/[^a-zA-Z0-9_-]/g, "_");
|
|
1237
|
-
const flowFilePath = await
|
|
1294
|
+
const flowFilePath = await resolveProjectFlowFile(absoluteProjectPath);
|
|
1238
1295
|
const { workflow: flowData } = await readFlowWorkflow(flowFilePath);
|
|
1296
|
+
assertNotInboundVoiceFlow(flowData);
|
|
1239
1297
|
if (options?.inputs && flowData.variables?.globals) {
|
|
1240
1298
|
for (const variable of flowData.variables.globals) {
|
|
1241
1299
|
if (Object.hasOwn(options.inputs, variable.id)) {
|
|
@@ -1309,7 +1367,7 @@ class FlowDebugService {
|
|
|
1309
1367
|
];
|
|
1310
1368
|
const startNodeId = entryPoints[0]?.filePath.split("#")[1] ?? startEventId;
|
|
1311
1369
|
entryPoint = `/${bpmnFileName}#${startNodeId}`;
|
|
1312
|
-
const [refreshError, refreshResult] = await catchError(import("./index-
|
|
1370
|
+
const [refreshError, refreshResult] = await catchError(import("./index-dhcd9b82.js").then((mod) => mod.resourceRefreshAsync(stagingDir)));
|
|
1313
1371
|
if (refreshError) {
|
|
1314
1372
|
logger.warn(`Resource refresh threw before debug: ${refreshError.message}. Continuing without generated overwrites.`);
|
|
1315
1373
|
} else if (refreshResult.ok) {
|
|
@@ -1342,6 +1400,24 @@ class FlowDebugService {
|
|
|
1342
1400
|
}
|
|
1343
1401
|
return importResult;
|
|
1344
1402
|
};
|
|
1403
|
+
if (options?.uploadOnly) {
|
|
1404
|
+
const importResult = await uploadAndPatch();
|
|
1405
|
+
await updateSolutionFile(this.fs, absoluteProjectPath, importResult.id);
|
|
1406
|
+
const project = importResult.projects.find((candidate) => candidate.name === projectName) ?? importResult.projects[0];
|
|
1407
|
+
const studioWebUrl = buildStudioWebDesignerUrl({
|
|
1408
|
+
baseUrl: apiConfig.baseUrl,
|
|
1409
|
+
organizationName: config.organizationName,
|
|
1410
|
+
projectId: project.id,
|
|
1411
|
+
solutionId: importResult.id
|
|
1412
|
+
});
|
|
1413
|
+
logger.info("Uploaded without starting a debug session — only a chat UI can drive this flow.");
|
|
1414
|
+
callbacks?.onStudioWebUrl?.(studioWebUrl);
|
|
1415
|
+
return {
|
|
1416
|
+
uploadedOnly: true,
|
|
1417
|
+
solutionId: importResult.id,
|
|
1418
|
+
studioWebUrl
|
|
1419
|
+
};
|
|
1420
|
+
}
|
|
1345
1421
|
const result = await uploadAndDebugSolution({
|
|
1346
1422
|
upload: uploadAndPatch,
|
|
1347
1423
|
onSolutionId: (id) => updateSolutionFile(this.fs, absoluteProjectPath, id),
|
|
@@ -1554,6 +1630,26 @@ function buildIncidentInstructions(incidents, instanceId) {
|
|
|
1554
1630
|
- `)}
|
|
1555
1631
|
${detailHint}${traceHint}`;
|
|
1556
1632
|
}
|
|
1633
|
+
var CONVERSATION_TRIGGER_NODE_TYPE = "core.trigger.conversation";
|
|
1634
|
+
function startsOnConversationTrigger(workflow) {
|
|
1635
|
+
const startNodes = getStartEventNodes(fileNodesToPackagingNodes([...workflow.nodes ?? []]));
|
|
1636
|
+
return startNodes[0]?.type === CONVERSATION_TRIGGER_NODE_TYPE;
|
|
1637
|
+
}
|
|
1638
|
+
var CONVERSATIONAL_DEBUG_WARNING = "This flow, which starts on a conversation trigger, can only be debugged from a chat UI. " + `Debug it using the chat panel from either:
|
|
1639
|
+
` + " 1. Studio Web — open the debug URL printed once the solution uploads " + `(also 'Data.studioWebUrl' in the result).
|
|
1640
|
+
` + " 2. UiPath Maestro VS Code extension — open the flow and hit Debug.";
|
|
1641
|
+
async function projectStartsOnConversationTrigger(projectPath) {
|
|
1642
|
+
const [error, found] = await catchError((async () => {
|
|
1643
|
+
const flowFilePath = await resolveProjectFlowFile(projectPath);
|
|
1644
|
+
const { workflow } = await readFlowWorkflow(flowFilePath);
|
|
1645
|
+
return startsOnConversationTrigger(workflow);
|
|
1646
|
+
})());
|
|
1647
|
+
if (error) {
|
|
1648
|
+
logger.info(`Skipped the conversational pre-flight scan: ${error.message}`);
|
|
1649
|
+
return false;
|
|
1650
|
+
}
|
|
1651
|
+
return found === true;
|
|
1652
|
+
}
|
|
1557
1653
|
var FLOW_DEBUG_EXAMPLES = [
|
|
1558
1654
|
{
|
|
1559
1655
|
Description: "Debug a local flow project via Studio Web",
|
|
@@ -1573,6 +1669,18 @@ var FLOW_DEBUG_EXAMPLES = [
|
|
|
1573
1669
|
}
|
|
1574
1670
|
}
|
|
1575
1671
|
},
|
|
1672
|
+
{
|
|
1673
|
+
Description: "Conversational flow (core.trigger.conversation) — uploaded to Studio Web and handed off, since only a chat UI can drive it. No debug session is started",
|
|
1674
|
+
Command: "uip maestro flow debug ./my-chat-flow --open-in-browser",
|
|
1675
|
+
Output: {
|
|
1676
|
+
Code: "FlowDebugStudioWebHandoff",
|
|
1677
|
+
Data: {
|
|
1678
|
+
solutionId: "e5f6a7b8-0000-0000-0000-000000000001",
|
|
1679
|
+
studioWebUrl: "https://cloud.uipath.com/org/studio_/designer/a1b2c3d4?solutionId=e5f6a7b8",
|
|
1680
|
+
handedOff: true
|
|
1681
|
+
}
|
|
1682
|
+
}
|
|
1683
|
+
},
|
|
1576
1684
|
{
|
|
1577
1685
|
Description: 'Faulted debug — emitted as a Result: "Failure" envelope (exit 1) with incident details (errorCode, errorMessage, elementId) inline on Data.incidents, so no follow-up command is needed',
|
|
1578
1686
|
Command: "uip maestro flow debug ./my-flow-project",
|
|
@@ -1603,6 +1711,21 @@ var FOLDER_TARGETING_INSTRUCTIONS = "Pass at most one of --folder-id, --folder-k
|
|
|
1603
1711
|
var FOLDER_RESOLUTION_INSTRUCTIONS = "Provide a valid --folder-key (UUID) or --folder-path. Use 'uip or folders list' to confirm the key or path.";
|
|
1604
1712
|
var FOLDER_RESOLUTION_NETWORK_INSTRUCTIONS = "The folder lookup itself failed (network / Orchestrator API). Re-authenticate with 'uip login', verify connectivity, and retry.";
|
|
1605
1713
|
var DEBUG_FAILURE_INSTRUCTIONS = "Check that the flow project is valid, the selected folder is accessible, and Studio Web debug is available, then retry.";
|
|
1714
|
+
async function openInBrowserOrWarn(url) {
|
|
1715
|
+
const [openError] = await catchError(async () => {
|
|
1716
|
+
await getFileSystem().utils.open(url);
|
|
1717
|
+
});
|
|
1718
|
+
if (openError) {
|
|
1719
|
+
OutputFormatter.log({
|
|
1720
|
+
Warning: `Could not open the browser automatically: ${openError.message}`
|
|
1721
|
+
});
|
|
1722
|
+
}
|
|
1723
|
+
}
|
|
1724
|
+
function buildHandoffInstructions(studioWebUrl) {
|
|
1725
|
+
return "This flow can only be driven from a chat UI, so no debug session was started. " + `Debug it using the chat panel from either:
|
|
1726
|
+
` + ` 1. Studio Web — open ${studioWebUrl}.
|
|
1727
|
+
` + " 2. UiPath Maestro VS Code extension — open the flow and hit Debug.";
|
|
1728
|
+
}
|
|
1606
1729
|
function isFolderInputError(err) {
|
|
1607
1730
|
if ("response" in err)
|
|
1608
1731
|
return false;
|
|
@@ -1631,7 +1754,19 @@ function parsePositiveIntegerOption(value, optionName) {
|
|
|
1631
1754
|
return { ok: true, value: parsed };
|
|
1632
1755
|
}
|
|
1633
1756
|
function registerDebugCommand(program) {
|
|
1634
|
-
program.command("debug").description("Debug a flow project by uploading to Studio Web and running a debug session").argument("<project-path>", "Path to the flow project directory (must contain project.uiproj)").option("--folder-id <id>", "Orchestrator folder ID (OrganizationUnitId) as a positive integer. Mutually exclusive with --folder-key/--folder-path. Auto-detected if none are provided.").option("--folder-key <key>", "Orchestrator folder key (UUID). The CLI resolves it to the folder ID. Mutually exclusive with --folder-id/--folder-path.").option("--folder-path <path>", "Orchestrator folder path (e.g. 'Shared/Sub'). The CLI resolves it to the folder ID. Mutually exclusive with --folder-id/--folder-key.").option("--poll-interval <ms>", "Polling interval in milliseconds", "2000").option("--timeout <seconds>", "Maximum seconds to wait for debug completion").option("-i, --inputs <json>", "Input parameters as JSON string or @file.json").option("--attachment <name=path>", "Upload a file as a file-typed workflow input variable (repeatable). " + "Example: --attachment file1=./resume.pdf", appendOption, []).option("--login-validity <minutes>", "Minimum minutes before token expiration to trigger a refresh (default: 10)", parseInt, 10).examples(FLOW_DEBUG_EXAMPLES).trackedAction(processContext, async (projectPath, options) => {
|
|
1757
|
+
program.command("debug").description("Debug a flow project by uploading to Studio Web and running a debug session").argument("<project-path>", "Path to the flow project directory (must contain project.uiproj)").option("--folder-id <id>", "Orchestrator folder ID (OrganizationUnitId) as a positive integer. Mutually exclusive with --folder-key/--folder-path. Auto-detected if none are provided.").option("--folder-key <key>", "Orchestrator folder key (UUID). The CLI resolves it to the folder ID. Mutually exclusive with --folder-id/--folder-path.").option("--folder-path <path>", "Orchestrator folder path (e.g. 'Shared/Sub'). The CLI resolves it to the folder ID. Mutually exclusive with --folder-id/--folder-key.").option("--poll-interval <ms>", "Polling interval in milliseconds", "2000").option("--timeout <seconds>", "Maximum seconds to wait for debug completion").option("-i, --inputs <json>", "Input parameters as JSON string or @file.json").option("--attachment <name=path>", "Upload a file as a file-typed workflow input variable (repeatable). " + "Example: --attachment file1=./resume.pdf", appendOption, []).option("--open-in-browser", "Open the Studio Web URL in the browser once it is known.").option("--login-validity <minutes>", "Minimum minutes before token expiration to trigger a refresh (default: 10)", parseInt, 10).examples(FLOW_DEBUG_EXAMPLES).trackedAction(processContext, async (projectPath, options) => {
|
|
1758
|
+
const isConversational = await projectStartsOnConversationTrigger(projectPath);
|
|
1759
|
+
if (isConversational) {
|
|
1760
|
+
OutputFormatter.log({
|
|
1761
|
+
Warning: CONVERSATIONAL_DEBUG_WARNING
|
|
1762
|
+
});
|
|
1763
|
+
if (options.timeout !== undefined) {
|
|
1764
|
+
OutputFormatter.log({
|
|
1765
|
+
Warning: "--timeout has no effect here: the CLI uploads and hands off without polling a run."
|
|
1766
|
+
});
|
|
1767
|
+
}
|
|
1768
|
+
}
|
|
1769
|
+
let urlReported = false;
|
|
1635
1770
|
const [loginError, login] = await catchError(getLoginStatusAsync({
|
|
1636
1771
|
ensureTokenValidityMinutes: options.loginValidity
|
|
1637
1772
|
}));
|
|
@@ -1846,7 +1981,8 @@ function registerDebugCommand(program) {
|
|
|
1846
1981
|
}
|
|
1847
1982
|
const debugOptions = {
|
|
1848
1983
|
inputs,
|
|
1849
|
-
...maxPolls === undefined ? {} : { maxPolls }
|
|
1984
|
+
...maxPolls === undefined ? {} : { maxPolls },
|
|
1985
|
+
...isConversational ? { uploadOnly: true } : {}
|
|
1850
1986
|
};
|
|
1851
1987
|
logger.info(`Starting Studio Web debug session for: ${projectPath}`);
|
|
1852
1988
|
const [executeError, result] = await catchError(service.executeProjectViaStudioWeb(projectPath, studioWebConfig, {
|
|
@@ -1861,6 +1997,17 @@ function registerDebugCommand(program) {
|
|
|
1861
1997
|
},
|
|
1862
1998
|
onIncident: (incidents2) => {
|
|
1863
1999
|
logger.warn(`Incidents: ${JSON.stringify(incidents2)}`);
|
|
2000
|
+
},
|
|
2001
|
+
onStudioWebUrl: (url) => {
|
|
2002
|
+
if (options.openInBrowser !== true)
|
|
2003
|
+
return;
|
|
2004
|
+
if (urlReported)
|
|
2005
|
+
return;
|
|
2006
|
+
urlReported = true;
|
|
2007
|
+
OutputFormatter.log({
|
|
2008
|
+
Message: `Studio Web debug URL: ${url}`
|
|
2009
|
+
});
|
|
2010
|
+
openInBrowserOrWarn(url);
|
|
1864
2011
|
}
|
|
1865
2012
|
}, pollInterval, debugOptions));
|
|
1866
2013
|
if (executeError) {
|
|
@@ -1873,6 +2020,15 @@ function registerDebugCommand(program) {
|
|
|
1873
2020
|
processContext.exit(3);
|
|
1874
2021
|
return;
|
|
1875
2022
|
}
|
|
2023
|
+
if (executeError instanceof InboundVoiceDebugError) {
|
|
2024
|
+
OutputFormatter.error({
|
|
2025
|
+
Result: RESULTS.ValidationError,
|
|
2026
|
+
Message: executeError.message,
|
|
2027
|
+
Instructions: executeError.instructions
|
|
2028
|
+
});
|
|
2029
|
+
processContext.exit(3);
|
|
2030
|
+
return;
|
|
2031
|
+
}
|
|
1876
2032
|
if (executeError instanceof UnregisteredProjectError) {
|
|
1877
2033
|
OutputFormatter.error({
|
|
1878
2034
|
Result: RESULTS.ValidationError,
|
|
@@ -1894,6 +2050,20 @@ function registerDebugCommand(program) {
|
|
|
1894
2050
|
processContext.exit(1);
|
|
1895
2051
|
return;
|
|
1896
2052
|
}
|
|
2053
|
+
if ("uploadedOnly" in result) {
|
|
2054
|
+
OutputFormatter.success({
|
|
2055
|
+
Result: RESULTS.Success,
|
|
2056
|
+
Code: "FlowDebugStudioWebHandoff",
|
|
2057
|
+
Data: {
|
|
2058
|
+
solutionId: result.solutionId,
|
|
2059
|
+
studioWebUrl: result.studioWebUrl,
|
|
2060
|
+
handedOff: true
|
|
2061
|
+
},
|
|
2062
|
+
Instructions: buildHandoffInstructions(result.studioWebUrl)
|
|
2063
|
+
}, { preserveDataKeys: true });
|
|
2064
|
+
processContext.exit(0);
|
|
2065
|
+
return;
|
|
2066
|
+
}
|
|
1897
2067
|
const success = isSuccessfulDebugStatus(result.finalStatus);
|
|
1898
2068
|
const data = {
|
|
1899
2069
|
jobKey: result.jobKey,
|
|
@@ -2320,451 +2490,6 @@ function mimeFromExt(ext) {
|
|
|
2320
2490
|
return MIME_BY_EXT[ext.toLowerCase()] ?? "application/octet-stream";
|
|
2321
2491
|
}
|
|
2322
2492
|
|
|
2323
|
-
// src/services/flow-eval-schema/prompts.ts
|
|
2324
|
-
var DEFAULT_EVALUATOR_PROMPT = `As an expert evaluator, analyze the semantic similarity of these JSON contents to determine a score from 0-100. Focus on comparing the meaning and contextual equivalence of corresponding fields, accounting for alternative valid expressions, synonyms, and reasonable variations in language while maintaining high standards for accuracy and completeness. Provide your score with a justification, explaining briefly and concisely why you gave that score.
|
|
2325
|
-
----
|
|
2326
|
-
ExpectedOutput:
|
|
2327
|
-
{{ExpectedOutput}}
|
|
2328
|
-
----
|
|
2329
|
-
ActualOutput:
|
|
2330
|
-
{{ActualOutput}}
|
|
2331
|
-
`;
|
|
2332
|
-
var DEFAULT_TRAJECTORY_EVALUATOR_PROMPT = `As an expert evaluator, determine how well the agent did on a scale of 0-100. Focus on if the simulation was successful and if the agent behaved according to the expected output accounting for alternative valid expressions, and reasonable variations in language while maintaining high standards for accuracy and completeness. Provide your score with a justification, explaining briefly and concisely why you gave that score.
|
|
2333
|
-
----
|
|
2334
|
-
UserOrSyntheticInputGivenToAgent:
|
|
2335
|
-
{{UserOrSyntheticInput}}
|
|
2336
|
-
----
|
|
2337
|
-
SimulationInstructions:
|
|
2338
|
-
{{SimulationInstructions}}
|
|
2339
|
-
----
|
|
2340
|
-
ExpectedAgentBehavior:
|
|
2341
|
-
{{ExpectedAgentBehavior}}
|
|
2342
|
-
----
|
|
2343
|
-
AgentRunHistory:
|
|
2344
|
-
{{AgentRunHistory}}
|
|
2345
|
-
`;
|
|
2346
|
-
|
|
2347
|
-
// src/services/flow-eval-schema/evaluator-fields.ts
|
|
2348
|
-
var targetOutputKeyConfigField = {
|
|
2349
|
-
key: "targetOutputKey",
|
|
2350
|
-
label: "Target Output Key",
|
|
2351
|
-
type: "targetOutputKey",
|
|
2352
|
-
required: false,
|
|
2353
|
-
description: "The key in the output to evaluate"
|
|
2354
|
-
};
|
|
2355
|
-
var caseSensitiveConfigField = {
|
|
2356
|
-
key: "caseSensitive",
|
|
2357
|
-
label: "Case Sensitive",
|
|
2358
|
-
type: "boolean",
|
|
2359
|
-
required: false,
|
|
2360
|
-
default: false,
|
|
2361
|
-
description: "If true, the comparison is case-sensitive"
|
|
2362
|
-
};
|
|
2363
|
-
var negatedConfigField = {
|
|
2364
|
-
key: "negated",
|
|
2365
|
-
label: "Negated",
|
|
2366
|
-
type: "boolean",
|
|
2367
|
-
required: false,
|
|
2368
|
-
default: false,
|
|
2369
|
-
description: "If true, the evaluation passes when the match is not found"
|
|
2370
|
-
};
|
|
2371
|
-
var expectedOutputCriteriaField = {
|
|
2372
|
-
key: "expectedOutput",
|
|
2373
|
-
label: "Expected Output",
|
|
2374
|
-
type: "object",
|
|
2375
|
-
required: false,
|
|
2376
|
-
description: "The expected output value for this evaluator"
|
|
2377
|
-
};
|
|
2378
|
-
var llmBaseConfigFields = [
|
|
2379
|
-
{
|
|
2380
|
-
key: "model",
|
|
2381
|
-
label: "Model",
|
|
2382
|
-
type: "llmModel",
|
|
2383
|
-
required: true,
|
|
2384
|
-
description: "The LLM model to use for judging"
|
|
2385
|
-
},
|
|
2386
|
-
{
|
|
2387
|
-
key: "prompt",
|
|
2388
|
-
label: "Evaluation Prompt",
|
|
2389
|
-
type: "string",
|
|
2390
|
-
required: true,
|
|
2391
|
-
default: DEFAULT_EVALUATOR_PROMPT,
|
|
2392
|
-
description: "Custom prompt template for the LLM judge"
|
|
2393
|
-
},
|
|
2394
|
-
{
|
|
2395
|
-
key: "temperature",
|
|
2396
|
-
label: "Temperature",
|
|
2397
|
-
type: "number",
|
|
2398
|
-
required: true,
|
|
2399
|
-
default: 0,
|
|
2400
|
-
min: 0,
|
|
2401
|
-
max: 2,
|
|
2402
|
-
step: 0.1,
|
|
2403
|
-
description: "Temperature for LLM generation"
|
|
2404
|
-
},
|
|
2405
|
-
{
|
|
2406
|
-
key: "maxTokens",
|
|
2407
|
-
label: "Max Tokens",
|
|
2408
|
-
type: "number",
|
|
2409
|
-
required: true,
|
|
2410
|
-
default: 8192,
|
|
2411
|
-
min: 0,
|
|
2412
|
-
max: 16384,
|
|
2413
|
-
step: 256,
|
|
2414
|
-
description: "Maximum tokens for LLM response"
|
|
2415
|
-
}
|
|
2416
|
-
];
|
|
2417
|
-
var llmTrajectoryBaseConfigFields = llmBaseConfigFields.map((field) => field.key === "prompt" ? { ...field, default: DEFAULT_TRAJECTORY_EVALUATOR_PROMPT } : field);
|
|
2418
|
-
|
|
2419
|
-
// src/services/flow-eval-schema/deterministic-evaluators.ts
|
|
2420
|
-
var DETERMINISTIC_EVALUATOR_TYPES = {
|
|
2421
|
-
"uipath-contains": {
|
|
2422
|
-
name: "Contains Text",
|
|
2423
|
-
description: "Check if output contains specific text",
|
|
2424
|
-
category: "deterministic",
|
|
2425
|
-
shortDescription: "Passes when output contains given text",
|
|
2426
|
-
configFields: [
|
|
2427
|
-
targetOutputKeyConfigField,
|
|
2428
|
-
caseSensitiveConfigField,
|
|
2429
|
-
{
|
|
2430
|
-
...negatedConfigField,
|
|
2431
|
-
label: "Negated (should NOT contain)"
|
|
2432
|
-
}
|
|
2433
|
-
],
|
|
2434
|
-
criteriaFields: [
|
|
2435
|
-
{
|
|
2436
|
-
key: "searchText",
|
|
2437
|
-
label: "Search Text",
|
|
2438
|
-
type: "string",
|
|
2439
|
-
required: false,
|
|
2440
|
-
minLength: 1,
|
|
2441
|
-
description: "The text to search for in the output"
|
|
2442
|
-
}
|
|
2443
|
-
],
|
|
2444
|
-
examples: {
|
|
2445
|
-
criteria: { searchText: "loan approved" }
|
|
2446
|
-
}
|
|
2447
|
-
},
|
|
2448
|
-
"uipath-exact-match": {
|
|
2449
|
-
name: "Exact Match",
|
|
2450
|
-
description: "Check if output exactly matches expected value",
|
|
2451
|
-
category: "deterministic",
|
|
2452
|
-
shortDescription: "Passes when output is an exact match",
|
|
2453
|
-
configFields: [
|
|
2454
|
-
targetOutputKeyConfigField,
|
|
2455
|
-
caseSensitiveConfigField,
|
|
2456
|
-
negatedConfigField
|
|
2457
|
-
],
|
|
2458
|
-
criteriaFields: [expectedOutputCriteriaField],
|
|
2459
|
-
examples: {
|
|
2460
|
-
criteria: { expectedOutput: { value: "Application approved" } }
|
|
2461
|
-
}
|
|
2462
|
-
},
|
|
2463
|
-
"uipath-json-similarity": {
|
|
2464
|
-
name: "JSON Similarity",
|
|
2465
|
-
description: "Compare JSON output similarity",
|
|
2466
|
-
category: "deterministic",
|
|
2467
|
-
shortDescription: "Passes when JSON structures are similar",
|
|
2468
|
-
configFields: [targetOutputKeyConfigField],
|
|
2469
|
-
criteriaFields: [expectedOutputCriteriaField],
|
|
2470
|
-
examples: {
|
|
2471
|
-
criteria: { expectedOutput: { status: "ok" } }
|
|
2472
|
-
}
|
|
2473
|
-
}
|
|
2474
|
-
};
|
|
2475
|
-
|
|
2476
|
-
// src/services/flow-eval-schema/llm-judge-evaluators.ts
|
|
2477
|
-
var LLM_JUDGE_EVALUATOR_TYPES = {
|
|
2478
|
-
"uipath-llm-judge-output-semantic-similarity": {
|
|
2479
|
-
name: "LLM Judge Output",
|
|
2480
|
-
description: "Use LLM to judge semantic similarity of outputs",
|
|
2481
|
-
category: "llm-judge",
|
|
2482
|
-
shortDescription: "AI judges if output semantically matches expected",
|
|
2483
|
-
configFields: [...llmBaseConfigFields, targetOutputKeyConfigField],
|
|
2484
|
-
criteriaFields: [expectedOutputCriteriaField],
|
|
2485
|
-
examples: {
|
|
2486
|
-
config: { model: "gpt-4o", temperature: 0 },
|
|
2487
|
-
criteria: {
|
|
2488
|
-
expectedOutput: {
|
|
2489
|
-
text: "The loan has been approved for the requested amount."
|
|
2490
|
-
}
|
|
2491
|
-
}
|
|
2492
|
-
}
|
|
2493
|
-
},
|
|
2494
|
-
"uipath-llm-judge-output-strict-json-similarity": {
|
|
2495
|
-
name: "LLM Judge Strict JSON",
|
|
2496
|
-
description: "Use LLM to judge strict JSON similarity",
|
|
2497
|
-
category: "llm-judge",
|
|
2498
|
-
shortDescription: "AI judges strict JSON structural match",
|
|
2499
|
-
configFields: [...llmBaseConfigFields, targetOutputKeyConfigField],
|
|
2500
|
-
criteriaFields: [expectedOutputCriteriaField],
|
|
2501
|
-
examples: {
|
|
2502
|
-
config: { model: "gpt-4o", temperature: 0 },
|
|
2503
|
-
criteria: { expectedOutput: { result: "success" } }
|
|
2504
|
-
}
|
|
2505
|
-
},
|
|
2506
|
-
"uipath-llm-judge-trajectory-similarity": {
|
|
2507
|
-
name: "LLM Judge Trajectory",
|
|
2508
|
-
description: "Use LLM to judge agent trajectory and behavior",
|
|
2509
|
-
category: "llm-judge",
|
|
2510
|
-
shortDescription: "AI judges if agent followed expected behavior",
|
|
2511
|
-
configFields: llmTrajectoryBaseConfigFields,
|
|
2512
|
-
criteriaFields: [
|
|
2513
|
-
{
|
|
2514
|
-
key: "expectedAgentBehavior",
|
|
2515
|
-
label: "Expected Agent Behavior",
|
|
2516
|
-
type: "string",
|
|
2517
|
-
required: false,
|
|
2518
|
-
description: "Description of expected agent behavior and actions"
|
|
2519
|
-
}
|
|
2520
|
-
],
|
|
2521
|
-
examples: {
|
|
2522
|
-
config: { model: "gpt-4o" },
|
|
2523
|
-
criteria: {
|
|
2524
|
-
expectedAgentBehavior: "Agent checks eligibility, then calls approval API"
|
|
2525
|
-
}
|
|
2526
|
-
}
|
|
2527
|
-
},
|
|
2528
|
-
"uipath-llm-judge-trajectory-simulation": {
|
|
2529
|
-
name: "LLM Judge Simulation",
|
|
2530
|
-
description: "Use LLM to judge simulation trajectory",
|
|
2531
|
-
category: "llm-judge",
|
|
2532
|
-
shortDescription: "AI judges simulated agent execution path",
|
|
2533
|
-
configFields: llmTrajectoryBaseConfigFields,
|
|
2534
|
-
criteriaFields: [
|
|
2535
|
-
{
|
|
2536
|
-
key: "expectedAgentBehavior",
|
|
2537
|
-
label: "Expected Agent Behavior",
|
|
2538
|
-
type: "string",
|
|
2539
|
-
required: false,
|
|
2540
|
-
description: "Description of expected agent behavior during simulation"
|
|
2541
|
-
}
|
|
2542
|
-
],
|
|
2543
|
-
examples: {
|
|
2544
|
-
config: { model: "gpt-4o" },
|
|
2545
|
-
criteria: {
|
|
2546
|
-
expectedAgentBehavior: "Agent simulates the user journey through checkout flow"
|
|
2547
|
-
}
|
|
2548
|
-
}
|
|
2549
|
-
}
|
|
2550
|
-
};
|
|
2551
|
-
|
|
2552
|
-
// src/services/flow-eval-schema/tool-call-evaluators.ts
|
|
2553
|
-
var TOOL_CALL_EVALUATOR_TYPES = {
|
|
2554
|
-
"uipath-tool-call-args": {
|
|
2555
|
-
name: "Tool Call Arguments",
|
|
2556
|
-
description: "Verify tool call arguments match expected values",
|
|
2557
|
-
category: "tool-call",
|
|
2558
|
-
shortDescription: "Checks that tools were called with correct arguments",
|
|
2559
|
-
configFields: [
|
|
2560
|
-
{
|
|
2561
|
-
key: "strict",
|
|
2562
|
-
label: "Strict Mode",
|
|
2563
|
-
type: "boolean",
|
|
2564
|
-
required: false,
|
|
2565
|
-
default: false,
|
|
2566
|
-
description: "If true, requires exact match of all tool call arguments"
|
|
2567
|
-
},
|
|
2568
|
-
{
|
|
2569
|
-
key: "subset",
|
|
2570
|
-
label: "Subset Mode",
|
|
2571
|
-
type: "boolean",
|
|
2572
|
-
required: false,
|
|
2573
|
-
default: false,
|
|
2574
|
-
description: "If true, allows actual tool calls to be a subset of expected"
|
|
2575
|
-
}
|
|
2576
|
-
],
|
|
2577
|
-
criteriaFields: [
|
|
2578
|
-
{
|
|
2579
|
-
key: "toolCalls",
|
|
2580
|
-
label: "Tool Calls",
|
|
2581
|
-
type: "toolCallArgs",
|
|
2582
|
-
required: false,
|
|
2583
|
-
description: "Expected tool calls with names and arguments"
|
|
2584
|
-
}
|
|
2585
|
-
]
|
|
2586
|
-
},
|
|
2587
|
-
"uipath-tool-call-count": {
|
|
2588
|
-
name: "Tool Call Count",
|
|
2589
|
-
description: "Verify tool call counts match expected values",
|
|
2590
|
-
category: "tool-call",
|
|
2591
|
-
shortDescription: "Checks number of times each tool was called",
|
|
2592
|
-
configFields: [
|
|
2593
|
-
{
|
|
2594
|
-
key: "strict",
|
|
2595
|
-
label: "Strict Mode",
|
|
2596
|
-
type: "boolean",
|
|
2597
|
-
required: false,
|
|
2598
|
-
default: false,
|
|
2599
|
-
description: "If true, requires exact count match"
|
|
2600
|
-
}
|
|
2601
|
-
],
|
|
2602
|
-
criteriaFields: [
|
|
2603
|
-
{
|
|
2604
|
-
key: "toolCallsCount",
|
|
2605
|
-
label: "Tool Calls Count",
|
|
2606
|
-
type: "toolCallCount",
|
|
2607
|
-
required: false,
|
|
2608
|
-
description: "Expected tool call counts with comparison operators"
|
|
2609
|
-
}
|
|
2610
|
-
]
|
|
2611
|
-
},
|
|
2612
|
-
"uipath-tool-call-order": {
|
|
2613
|
-
name: "Tool Call Order",
|
|
2614
|
-
description: "Verify tool calls occur in expected order",
|
|
2615
|
-
category: "tool-call",
|
|
2616
|
-
shortDescription: "Checks that tools were called in the right sequence",
|
|
2617
|
-
configFields: [
|
|
2618
|
-
{
|
|
2619
|
-
key: "strict",
|
|
2620
|
-
label: "Strict Mode",
|
|
2621
|
-
type: "boolean",
|
|
2622
|
-
required: false,
|
|
2623
|
-
default: false,
|
|
2624
|
-
description: "If true, requires exact order match"
|
|
2625
|
-
}
|
|
2626
|
-
],
|
|
2627
|
-
criteriaFields: [
|
|
2628
|
-
{
|
|
2629
|
-
key: "toolCallsOrder",
|
|
2630
|
-
label: "Tool Calls Order",
|
|
2631
|
-
type: "toolCallOrder",
|
|
2632
|
-
required: false,
|
|
2633
|
-
description: "Tool names in expected execution order"
|
|
2634
|
-
}
|
|
2635
|
-
]
|
|
2636
|
-
},
|
|
2637
|
-
"uipath-tool-call-output": {
|
|
2638
|
-
name: "Tool Call Output",
|
|
2639
|
-
description: "Verify tool call outputs match expected values",
|
|
2640
|
-
category: "tool-call",
|
|
2641
|
-
shortDescription: "Checks that tool outputs match expected values",
|
|
2642
|
-
configFields: [
|
|
2643
|
-
{
|
|
2644
|
-
key: "strict",
|
|
2645
|
-
label: "Strict Mode",
|
|
2646
|
-
type: "boolean",
|
|
2647
|
-
required: false,
|
|
2648
|
-
default: false,
|
|
2649
|
-
description: "If true, requires exact output match"
|
|
2650
|
-
}
|
|
2651
|
-
],
|
|
2652
|
-
criteriaFields: [
|
|
2653
|
-
{
|
|
2654
|
-
key: "toolOutputs",
|
|
2655
|
-
label: "Tool Outputs",
|
|
2656
|
-
type: "toolCallOutput",
|
|
2657
|
-
required: false,
|
|
2658
|
-
description: "Expected tool outputs with names and output values"
|
|
2659
|
-
}
|
|
2660
|
-
]
|
|
2661
|
-
}
|
|
2662
|
-
};
|
|
2663
|
-
|
|
2664
|
-
// src/services/flow-eval-schema/registry.ts
|
|
2665
|
-
var EVALUATOR_TYPE_REGISTRY = {
|
|
2666
|
-
...DETERMINISTIC_EVALUATOR_TYPES,
|
|
2667
|
-
...LLM_JUDGE_EVALUATOR_TYPES,
|
|
2668
|
-
...TOOL_CALL_EVALUATOR_TYPES
|
|
2669
|
-
};
|
|
2670
|
-
var EVALUATOR_TYPE_ALIASES = {
|
|
2671
|
-
"exact-match": "uipath-exact-match",
|
|
2672
|
-
"json-similarity": "uipath-json-similarity",
|
|
2673
|
-
contains: "uipath-contains",
|
|
2674
|
-
"llm-judge-output": "uipath-llm-judge-output-semantic-similarity",
|
|
2675
|
-
"llm-judge-strict-json": "uipath-llm-judge-output-strict-json-similarity",
|
|
2676
|
-
"llm-judge-trajectory": "uipath-llm-judge-trajectory-similarity",
|
|
2677
|
-
"llm-judge-trajectory-simulation": "uipath-llm-judge-trajectory-simulation"
|
|
2678
|
-
};
|
|
2679
|
-
|
|
2680
|
-
// src/services/flow-eval-schema/helpers.ts
|
|
2681
|
-
function evaluatorTypeAliases() {
|
|
2682
|
-
return Object.keys(EVALUATOR_TYPE_ALIASES);
|
|
2683
|
-
}
|
|
2684
|
-
function isEvaluatorTypeId(value) {
|
|
2685
|
-
return value in EVALUATOR_TYPE_REGISTRY;
|
|
2686
|
-
}
|
|
2687
|
-
function getEvaluatorTypeDefinition(typeId) {
|
|
2688
|
-
if (!isEvaluatorTypeId(typeId)) {
|
|
2689
|
-
return null;
|
|
2690
|
-
}
|
|
2691
|
-
return EVALUATOR_TYPE_REGISTRY[typeId];
|
|
2692
|
-
}
|
|
2693
|
-
function resolveEvaluatorType(type) {
|
|
2694
|
-
const resolved = EVALUATOR_TYPE_ALIASES[type] ?? type;
|
|
2695
|
-
if (!isEvaluatorTypeId(resolved)) {
|
|
2696
|
-
throw new Error(`Unknown evaluator type "${type}". Valid types: ${evaluatorTypeAliases().join(", ")}`);
|
|
2697
|
-
}
|
|
2698
|
-
return resolved;
|
|
2699
|
-
}
|
|
2700
|
-
function getDefaultConfigForEvaluatorType(typeId) {
|
|
2701
|
-
return collectFieldDefaults(EVALUATOR_TYPE_REGISTRY[typeId].configFields);
|
|
2702
|
-
}
|
|
2703
|
-
function collectFieldDefaults(fields) {
|
|
2704
|
-
const defaults = {};
|
|
2705
|
-
for (const field of fields) {
|
|
2706
|
-
if (field.default !== undefined) {
|
|
2707
|
-
defaults[field.key] = field.default;
|
|
2708
|
-
}
|
|
2709
|
-
}
|
|
2710
|
-
return defaults;
|
|
2711
|
-
}
|
|
2712
|
-
function evaluatorTypeHasConfigField(typeId, fieldKey) {
|
|
2713
|
-
return getEvaluatorTypeDefinition(typeId)?.configFields.some((field) => field.key === fieldKey) ?? false;
|
|
2714
|
-
}
|
|
2715
|
-
function evaluatorCanUseSharedExpectedOutput(typeId) {
|
|
2716
|
-
return getEvaluatorTypeDefinition(typeId)?.criteriaFields.some((field) => field.key === "expectedOutput" && field.type === "object") ?? false;
|
|
2717
|
-
}
|
|
2718
|
-
// src/services/flow-eval-utils.ts
|
|
2719
|
-
function isRecord(value) {
|
|
2720
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
2721
|
-
}
|
|
2722
|
-
var UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
2723
|
-
function isUUID(value) {
|
|
2724
|
-
return UUID_RE.test(value);
|
|
2725
|
-
}
|
|
2726
|
-
function stripJsonExt(name) {
|
|
2727
|
-
return name.endsWith(".json") ? name.slice(0, -".json".length) : name;
|
|
2728
|
-
}
|
|
2729
|
-
function slugify(text) {
|
|
2730
|
-
const slug = text.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
|
|
2731
|
-
return slug || "untitled";
|
|
2732
|
-
}
|
|
2733
|
-
function getEvaluatorRef(evaluator) {
|
|
2734
|
-
return stripJsonExt(evaluator.fileName ?? `${evaluator.id}.json`);
|
|
2735
|
-
}
|
|
2736
|
-
function buildEvaluatorConfig(typeId, options) {
|
|
2737
|
-
const evaluatorConfig = {
|
|
2738
|
-
name: options.name,
|
|
2739
|
-
...getDefaultConfigForEvaluatorType(typeId)
|
|
2740
|
-
};
|
|
2741
|
-
if (evaluatorTypeHasConfigField(typeId, "targetOutputKey")) {
|
|
2742
|
-
evaluatorConfig.targetOutputKey = options.targetOutputKey ?? "*";
|
|
2743
|
-
}
|
|
2744
|
-
if (options.model !== undefined) {
|
|
2745
|
-
evaluatorConfig.model = options.model;
|
|
2746
|
-
}
|
|
2747
|
-
if (options.prompt !== undefined) {
|
|
2748
|
-
evaluatorConfig.prompt = options.prompt;
|
|
2749
|
-
}
|
|
2750
|
-
return evaluatorConfig;
|
|
2751
|
-
}
|
|
2752
|
-
function buildDefaultCriteria(evaluators, expectedOutput, searchText) {
|
|
2753
|
-
const criterias = {};
|
|
2754
|
-
for (const evaluator of evaluators) {
|
|
2755
|
-
const key = evaluator.id;
|
|
2756
|
-
if (expectedOutput !== undefined && evaluatorCanUseSharedExpectedOutput(evaluator.evaluatorTypeId)) {
|
|
2757
|
-
criterias[key] = { expectedOutput };
|
|
2758
|
-
} else if (searchText !== undefined && evaluator.evaluatorTypeId === "uipath-contains") {
|
|
2759
|
-
criterias[key] = { searchText };
|
|
2760
|
-
} else {
|
|
2761
|
-
const defaultCriteria = evaluator.evaluatorConfig.defaultEvaluationCriteria;
|
|
2762
|
-
criterias[key] = isRecord(defaultCriteria) ? defaultCriteria : null;
|
|
2763
|
-
}
|
|
2764
|
-
}
|
|
2765
|
-
return criterias;
|
|
2766
|
-
}
|
|
2767
|
-
|
|
2768
2493
|
// src/services/flow-eval-input-schema.ts
|
|
2769
2494
|
class FlowEvalInputSchema {
|
|
2770
2495
|
fs;
|
|
@@ -3868,7 +3593,7 @@ class FlowLocalWorkspaceEvalPreparer {
|
|
|
3868
3593
|
}
|
|
3869
3594
|
const projectName = projectFile.Name;
|
|
3870
3595
|
const safeProjectName = projectName.replace(/[^a-zA-Z0-9_-]/g, "_");
|
|
3871
|
-
const flowFilePath = await
|
|
3596
|
+
const flowFilePath = await resolveProjectFlowFile(absoluteProjectPath);
|
|
3872
3597
|
const flowFileName = this.fs.path.basename(flowFilePath);
|
|
3873
3598
|
const flowBaseName = flowFileName.replace(/\.flow$/i, "");
|
|
3874
3599
|
const bpmnFileName = `${flowBaseName}.bpmn`;
|
|
@@ -3930,6 +3655,10 @@ class FlowLocalWorkspaceEvalPreparer {
|
|
|
3930
3655
|
}
|
|
3931
3656
|
}
|
|
3932
3657
|
async convertToBpmn(workflow) {
|
|
3658
|
+
const hasVoiceAgent = (workflow.nodes ?? []).some((node) => isVoiceAgentNodeType(node.type));
|
|
3659
|
+
if (hasVoiceAgent) {
|
|
3660
|
+
throw new Error("Evaluation runs are not supported for flows with voice agent nodes.");
|
|
3661
|
+
}
|
|
3933
3662
|
const fileFormat = inMemoryWorkflowToFileFormat(workflow);
|
|
3934
3663
|
setPublishIntentOnInlineAgents(fileFormat);
|
|
3935
3664
|
const { bpmn } = await convertFlowToBpmn(JSON.stringify(fileFormat, null, 2));
|
|
@@ -6097,13 +5826,13 @@ function registerJobCommand(program) {
|
|
|
6097
5826
|
|
|
6098
5827
|
// src/services/flow-migrate-service.ts
|
|
6099
5828
|
var buildNodeMigrationRegistry = () => {
|
|
6100
|
-
const
|
|
5829
|
+
const registry = {};
|
|
6101
5830
|
for (const [nodeType, mod] of Object.entries(nodeModuleRegistry)) {
|
|
6102
5831
|
if (mod.migrations?.length) {
|
|
6103
|
-
|
|
5832
|
+
registry[nodeType] = mod.migrations;
|
|
6104
5833
|
}
|
|
6105
5834
|
}
|
|
6106
|
-
return
|
|
5835
|
+
return registry;
|
|
6107
5836
|
};
|
|
6108
5837
|
var netWorkflowSteps = (fromVersion, steps) => {
|
|
6109
5838
|
const cmp = compareVersions(fromVersion, minimumSupportedVersion);
|
|
@@ -6124,12 +5853,12 @@ var migrateFlow = async (filePath, options = {}) => {
|
|
|
6124
5853
|
}
|
|
6125
5854
|
const migrated = wfResult.migrated ? wfResult.workflow : workflow;
|
|
6126
5855
|
const workflowSteps = wfResult.migrated ? netWorkflowSteps(fromVersion, wfResult.steps) : [];
|
|
6127
|
-
const
|
|
5856
|
+
const registry = buildNodeMigrationRegistry();
|
|
6128
5857
|
const allNodes = [
|
|
6129
5858
|
...migrated.nodes ?? [],
|
|
6130
5859
|
...Object.values(migrated.subflows ?? {}).flatMap((sf) => sf?.nodes ?? [])
|
|
6131
5860
|
];
|
|
6132
|
-
const check = checkNodeMigrations(allNodes, allDefinitions,
|
|
5861
|
+
const check = checkNodeMigrations(allNodes, allDefinitions, registry);
|
|
6133
5862
|
const includeOptional = options.includeOptional ?? true;
|
|
6134
5863
|
const toApply = includeOptional ? [...check.forced, ...check.optional] : check.forced;
|
|
6135
5864
|
const nodeResult = applyNodeMigrations(migrated, toApply);
|
|
@@ -7507,7 +7236,7 @@ Packing flow project...
|
|
|
7507
7236
|
const packageId = `${packageName}.flow.Flow`;
|
|
7508
7237
|
const version = options.version || "1.0.0";
|
|
7509
7238
|
registerPackagerFactories();
|
|
7510
|
-
const { createNodeProjectPackager, ProjectPackOptions } = await import("./node-
|
|
7239
|
+
const { createNodeProjectPackager, ProjectPackOptions } = await import("./node-qyxvhbw6.js");
|
|
7511
7240
|
const packager = await createNodeProjectPackager({
|
|
7512
7241
|
logHandler: logger.handleLog
|
|
7513
7242
|
});
|
|
@@ -7553,21 +7282,31 @@ Packing flow project...
|
|
|
7553
7282
|
if (await this.fs.exists(uiprojPath)) {
|
|
7554
7283
|
await this.fs.writeFile(this.fs.path.join(stagingDir, "project.uiproj"), await this.fs.readFile(uiprojPath, "utf-8"));
|
|
7555
7284
|
}
|
|
7285
|
+
const flowNodes = flowContent.nodes;
|
|
7286
|
+
const inlineAgents = await packageInlineAgents(this.fs, projectPath, flowNodes);
|
|
7287
|
+
if (inlineAgents.length > 0) {
|
|
7288
|
+
logger.info(`Found ${inlineAgents.length} inline agent(s) to package`);
|
|
7289
|
+
}
|
|
7556
7290
|
logger.info("Converting .flow to BPMN...");
|
|
7557
7291
|
const fileFormat = inMemoryWorkflowToFileFormat(flowContent);
|
|
7558
7292
|
setPublishIntentOnInlineAgents(fileFormat);
|
|
7559
|
-
const
|
|
7293
|
+
const flowJson = JSON.stringify(fileFormat, null, 2);
|
|
7294
|
+
const { bpmn: rawBpmn } = await convertFlowToBpmn(flowJson, voiceConvertOptions({
|
|
7295
|
+
flowJson,
|
|
7296
|
+
nodes: flowNodes,
|
|
7297
|
+
builtAgents: new Map(inlineAgents.map((agent) => [
|
|
7298
|
+
agent.source,
|
|
7299
|
+
agent.agentJson
|
|
7300
|
+
]))
|
|
7301
|
+
}));
|
|
7560
7302
|
const bpmn = replaceExporterVersion(rawBpmn, package_default.version);
|
|
7303
|
+
assertVoiceAgentDefinitionsEmbedded(bpmn, flowNodes);
|
|
7561
7304
|
const bpmnFileName = `${safeName}.bpmn`;
|
|
7562
7305
|
await this.fs.writeFile(this.fs.path.join(stagingDir, bpmnFileName), bpmn);
|
|
7563
7306
|
logger.info("Generating packaging artifacts...");
|
|
7564
7307
|
const packagingNodes = fileNodesToPackagingNodes(flowContent.nodes);
|
|
7565
7308
|
const startEventId = extractStartEventId(bpmn);
|
|
7566
7309
|
const projectId = flowContent.id || await ensureProjectId(projectPath, this.fs);
|
|
7567
|
-
const inlineAgents = await packageInlineAgents(this.fs, projectPath, flowContent.nodes);
|
|
7568
|
-
if (inlineAgents.length > 0) {
|
|
7569
|
-
logger.info(`Found ${inlineAgents.length} inline agent(s) to package`);
|
|
7570
|
-
}
|
|
7571
7310
|
const packageDescriptorJson = inlineAgents.length > 0 ? generatePackageDescriptor([{ name: bpmnFileName }], [{ name: `${safeName}.flow` }], inlineAgents.map((agent) => ({
|
|
7572
7311
|
name: `${agent.source}/agent.json`
|
|
7573
7312
|
}))) : undefined;
|
|
@@ -8538,6 +8277,9 @@ function buildArtifactParentWrappers(artifactGroups) {
|
|
|
8538
8277
|
}
|
|
8539
8278
|
var ARTIFACT_GROUP_SPACING = 96;
|
|
8540
8279
|
var ARTIFACT_HORIZONTAL_SPACING = ARTIFACT_GROUP_SPACING / 2;
|
|
8280
|
+
var edgeNodeClearance = (options) => snapToGrid(options.layerSpacing / 2);
|
|
8281
|
+
var EDGE_EDGE_CLEARANCE_PX = GRID_SPACING;
|
|
8282
|
+
var GRID_PADDING = `[top=${GRID_SPACING},left=${GRID_SPACING},bottom=${GRID_SPACING},right=${GRID_SPACING}]`;
|
|
8541
8283
|
function makeGroupId(group) {
|
|
8542
8284
|
return `${group.parentId}__${group.sourceHandle}_group`;
|
|
8543
8285
|
}
|
|
@@ -8826,7 +8568,7 @@ var ElkLayoutEngine = class {
|
|
|
8826
8568
|
for (const edge of root.edges ?? []) {
|
|
8827
8569
|
if (!realEdgeIds.has(edge.id))
|
|
8828
8570
|
continue;
|
|
8829
|
-
const points = (edge.sections ?? []).flatMap((s) => s.bendPoints ?? []).map((p) => ({ x: p.x, y: p.y }));
|
|
8571
|
+
const points = (edge.sections ?? []).flatMap((s) => s.bendPoints ?? []).map((p) => ({ x: snapToGrid(p.x), y: snapToGrid(p.y) }));
|
|
8830
8572
|
if (points.length > 0)
|
|
8831
8573
|
result.set(edge.id, points);
|
|
8832
8574
|
}
|
|
@@ -8837,7 +8579,8 @@ var ElkLayoutEngine = class {
|
|
|
8837
8579
|
"elk.algorithm": options.algorithm,
|
|
8838
8580
|
"elk.direction": options.direction,
|
|
8839
8581
|
"elk.spacing.nodeNode": options.nodeSpacing.toString(),
|
|
8840
|
-
"elk.layered.considerModelOrder.strategy": "NODES_AND_EDGES"
|
|
8582
|
+
"elk.layered.considerModelOrder.strategy": "NODES_AND_EDGES",
|
|
8583
|
+
"elk.padding": GRID_PADDING
|
|
8841
8584
|
};
|
|
8842
8585
|
switch (options.algorithm) {
|
|
8843
8586
|
case "layered":
|
|
@@ -8847,8 +8590,10 @@ var ElkLayoutEngine = class {
|
|
|
8847
8590
|
if (options.minimizeCrossings) {
|
|
8848
8591
|
opts["elk.layered.crossingMinimization.strategy"] = "LAYER_SWEEP";
|
|
8849
8592
|
}
|
|
8593
|
+
opts["elk.layered.cycleBreaking.strategy"] = "GREEDY_MODEL_ORDER";
|
|
8850
8594
|
opts["elk.spacing.edgeNode"] = options.nodeSpacing.toString();
|
|
8851
|
-
opts["elk.spacing.edgeEdge"] =
|
|
8595
|
+
opts["elk.spacing.edgeEdge"] = EDGE_EDGE_CLEARANCE_PX.toString();
|
|
8596
|
+
opts["elk.layered.spacing.edgeNodeBetweenLayers"] = edgeNodeClearance(options).toString();
|
|
8852
8597
|
opts["elk.edgeRouting"] = "ORTHOGONAL";
|
|
8853
8598
|
break;
|
|
8854
8599
|
case "mrtree":
|
|
@@ -9462,7 +9207,7 @@ function querystringSingleKey(key, value, keyPrefix = "") {
|
|
|
9462
9207
|
var package_default2 = {
|
|
9463
9208
|
name: "@uipath/agent-sdk",
|
|
9464
9209
|
license: "MIT",
|
|
9465
|
-
version: "1.201.0-preview.
|
|
9210
|
+
version: "1.201.0-preview.133",
|
|
9466
9211
|
description: "SDK for the UiPath Agent Runtime API — evaluation execution and debug sessions.",
|
|
9467
9212
|
repository: {
|
|
9468
9213
|
type: "git",
|
|
@@ -10039,6 +9784,32 @@ var registerVariableCommand = (program) => {
|
|
|
10039
9784
|
});
|
|
10040
9785
|
};
|
|
10041
9786
|
|
|
9787
|
+
// src/services/project-metadata-reader.ts
|
|
9788
|
+
async function readAgentProjectMetadata(projectDir) {
|
|
9789
|
+
const fs = getFileSystem();
|
|
9790
|
+
const [readError, content] = await catchError(fs.readFile(fs.path.join(projectDir, "agent.json"), "utf-8"));
|
|
9791
|
+
if (readError || typeof content !== "string") {
|
|
9792
|
+
logger.debug(`No readable agent.json in ${projectDir}; the node will describe an autonomous agent.`);
|
|
9793
|
+
return {};
|
|
9794
|
+
}
|
|
9795
|
+
const [parseError, parsed] = catchError(() => JSON.parse(content));
|
|
9796
|
+
if (parseError) {
|
|
9797
|
+
logger.debug(`Unparseable agent.json in ${projectDir}: ${parseError.message}. The node will describe an autonomous agent.`);
|
|
9798
|
+
return {};
|
|
9799
|
+
}
|
|
9800
|
+
const metadata = {};
|
|
9801
|
+
const isConversational = parsed.metadata?.isConversational;
|
|
9802
|
+
if (typeof isConversational === "boolean") {
|
|
9803
|
+
metadata.isConversational = isConversational;
|
|
9804
|
+
}
|
|
9805
|
+
const targetRuntime = parsed.metadata?.targetRuntime;
|
|
9806
|
+
if (typeof targetRuntime === "string") {
|
|
9807
|
+
metadata.targetRuntime = targetRuntime;
|
|
9808
|
+
}
|
|
9809
|
+
return metadata;
|
|
9810
|
+
}
|
|
9811
|
+
var agentProjectMetadataReader = (projectDir, projectType) => projectType === "Agent" ? readAgentProjectMetadata(projectDir) : Promise.resolve({});
|
|
9812
|
+
|
|
10042
9813
|
// src/tool.ts
|
|
10043
9814
|
var metadata = {
|
|
10044
9815
|
name: "flow-tool",
|
|
@@ -10047,8 +9818,9 @@ var metadata = {
|
|
|
10047
9818
|
commandPrefix: "flow"
|
|
10048
9819
|
};
|
|
10049
9820
|
var registerCommands = async (program) => {
|
|
9821
|
+
setAgentProjectMetadataReader(agentProjectMetadataReader);
|
|
10050
9822
|
if (isPreviewBuild()) {
|
|
10051
|
-
const { registerFlowAuthoringCommands } = await import("./authoring-
|
|
9823
|
+
const { registerFlowAuthoringCommands } = await import("./authoring-7r6g06c7.js");
|
|
10052
9824
|
registerFlowAuthoringCommands(program);
|
|
10053
9825
|
}
|
|
10054
9826
|
registerInitCommand(program);
|
|
@@ -10075,4 +9847,4 @@ var registerCommands = async (program) => {
|
|
|
10075
9847
|
|
|
10076
9848
|
export { metadata, registerCommands };
|
|
10077
9849
|
|
|
10078
|
-
//# debugId=
|
|
9850
|
+
//# debugId=F3EA07DA9BDB131D64756E2164756E21
|