@uipath/flow-tool 1.204.0-preview.255 → 1.205.0-preview.256
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/README.md +9 -9
- package/dist/THIRD-PARTY-NOTICES.md +36 -12
- package/dist/{authoring-bppe07p0.js → authoring-e1k40hyw.js} +6 -5
- package/dist/{binding-service-fw3rzae4.js → binding-service-yw91615m.js} +38 -30
- package/dist/{connector-service-2z7s7qtd.js → connector-service-ttm75a4n.js} +224 -47
- package/dist/de-UZI7FJDO-awjpqfz0.js +200 -0
- package/dist/{de-MUJPA4EB-dpg7t2rw.js → de-UZI7FJDO-mwvc4cxe.js} +29 -2
- package/dist/{de-FGHEJRCI-rv513mfh.js → de-WLW6KWOJ-2qnsqdtw.js} +238 -31
- package/dist/debug-conversation-trigger-xsm3ycqx.js +30 -0
- package/dist/{debug-http-client-p4kf38yt.js → debug-http-client-yqjzsnhw.js} +5 -4
- package/dist/{debug-service-893erynq.js → debug-service-nra3n02y.js} +6 -5
- package/dist/{edge-service-6zr5f09c.js → edge-service-8fv0m681.js} +16 -12
- package/dist/{embedded-file-reader-v8c2yj2a.js → embedded-file-reader-r66242ey.js} +2 -2
- package/dist/en-EJCBA3LK-0wb3b1xy.js +146 -0
- package/dist/{en-FBPVNKFN-dqt573xn.js → en-EJCBA3LK-dtpdghgj.js} +12 -4
- package/dist/{en-BWGKA5OE-1qkvb9rn.js → en-M7GQYBV2-5nfmpnfz.js} +88 -6
- package/dist/{es-7SE7HX2X-8yh1aj2y.js → es-4UBUTCQA-m1ytpyx2.js} +29 -2
- package/dist/es-4UBUTCQA-t7hsackg.js +200 -0
- package/dist/{es-KR3ZSNMP-84zphx0x.js → es-5THCNRFN-tqwyrdgy.js} +235 -28
- package/dist/{es-MX-2MYFZU7X-3rek4r73.js → es-MX-5RELIXKI-9jhqtddc.js} +29 -2
- package/dist/es-MX-5RELIXKI-jtjbcxbb.js +200 -0
- package/dist/{es-MX-XXZJGC4R-2mr8jtgm.js → es-MX-TWZBRAXK-gqd9swzw.js} +237 -30
- package/dist/filter-engine-7ep90g7f.js +11 -0
- package/dist/{flow-api-kjvpsxhw.js → flow-api-sat010z1.js} +16 -10
- package/dist/{flow-debug-service-9q9k756w.js → flow-debug-service-cgawm96k.js} +96 -58
- package/dist/{flow-eval-node-target-zvk7fcb2.js → flow-eval-node-target-dah1gmmh.js} +17 -17
- package/dist/flow-eval-run-api-xdygjzfv.js +13 -0
- package/dist/{flow-eval-run-service-2hfqyadh.js → flow-eval-run-service-03j1szf6.js} +73 -80
- package/dist/{flow-eval-service-m5n2svke.js → flow-eval-service-9j46ta9k.js} +167 -415
- package/dist/{flow-init-sdk-source-z9qx1zkt.js → flow-init-sdk-source-xvdvkq7d.js} +6 -5
- package/dist/{flow-init-service-8y8b76zm.js → flow-init-service-0a4y3a46.js} +19 -15
- package/dist/{flow-io-w11yspjx.js → flow-io-1wabd32s.js} +15 -11
- package/dist/{flow-migrate-service-v7ch4t3h.js → flow-migrate-service-mkqpbwtv.js} +16 -12
- package/dist/{flow-pack-service-xs8v5mba.js → flow-pack-service-7dj2hhyz.js} +47 -38
- package/dist/flow-validate-service-1ktjayjv.js +70 -0
- package/dist/{fr-Y6NPVODW-8vr1ja4b.js → fr-CERONSRC-edpxhbmb.js} +237 -30
- package/dist/{fr-MDFKNZ4C-h4a122k9.js → fr-VBM5WRC2-63z7w4mh.js} +29 -2
- package/dist/fr-VBM5WRC2-707ha692.js +200 -0
- package/dist/{governance-fetcher-18pk0mgv.js → governance-fetcher-76hxssjm.js} +7 -6
- package/dist/{hitl-service-ehnfkwhp.js → hitl-service-vcbhd4cb.js} +15 -11
- package/dist/{index-aaq9rwfv.js → index-1b2je9n2.js} +1088 -233
- package/dist/index-d090f35d.js +66 -0
- package/dist/{index-yj4xk2aw.js → index-dgdnbb2g.js} +7 -5
- package/dist/{index-ng2f77my.js → index-fyc0k5dd.js} +985 -617
- package/dist/{index-9hqj0ee4.js → index-hz008fep.js} +6 -5
- package/dist/{index-vrhcbxnk.js → index-nsn889vf.js} +6 -5
- package/dist/{index-2s8rmmw6.js → index-sqhbn7ew.js} +4 -4
- package/dist/{index-tnz5ks4t.js → index-wycgq0ff.js} +65 -2230
- package/dist/index.js +17 -14
- package/dist/init.js +19 -15
- package/dist/inline-entity-resolver-64pqwk86.js +45 -0
- package/dist/input-reader-n7kzdrev.js +12 -0
- package/dist/{ja-UTQEAP34-8e0q6swp.js → ja-43QL7CGO-c3q8gre9.js} +29 -2
- package/dist/ja-43QL7CGO-h6qfxfay.js +200 -0
- package/dist/{ja-Q5PXKJ2V-p4msxzjd.js → ja-U2MCNHGT-gz0ap1jk.js} +235 -28
- package/dist/{known-types-q6fcyq2e.js → known-types-3025scz1.js} +5 -5
- package/dist/ko-TLL6Z6CD-ag6gjynr.js +200 -0
- package/dist/{ko-AXCHW2OK-askct7f6.js → ko-TLL6Z6CD-wrt3n8a9.js} +29 -2
- package/dist/{ko-AYBDSRZG-41mdmsg1.js → ko-XAUYQWDR-zp81gjp4.js} +237 -30
- package/dist/{maestro-automate-entry-qak46eg0.js → maestro-automate-entry-6f9act3w.js} +2 -2
- package/dist/{node-cvwqsgg0.js → node-hz6cvp9d.js} +29 -15
- package/dist/{node-service-544fv7as.js → node-service-7wz8gx7h.js} +41 -30
- package/dist/{node-strategy-fdnkvq4a.js → node-strategy-1dmmhvf3.js} +1 -1
- package/dist/node-sync-service-yvyf7chw.js +61 -0
- package/dist/packager-tool-10vc8pq4.js +2 -0
- package/dist/{packager-tool-29b6r6eg.js → packager-tool-2h15x2kb.js} +6 -6
- package/dist/{packager-tool-h7cjs093.js → packager-tool-2z0r1f32.js} +668 -57
- package/dist/packager-tool-4kr6g0zw.js +16 -0
- package/dist/packager-tool-4x7tzvv0.js +1176 -0
- package/dist/{packager-tool-d88rqwk8.js → packager-tool-6z1hsm2h.js} +13 -5
- package/dist/packager-tool-7hw344bt.js +107 -0
- package/dist/{packager-tool-pb7wzsn4.js → packager-tool-7wnxyvf9.js} +519 -437
- package/dist/{packager-tool-m8xtf5ej.js → packager-tool-8g5931fz.js} +7 -4
- package/dist/{packager-tool-h9tzz0qd.js → packager-tool-961vsbsc.js} +15 -10
- package/dist/packager-tool-9era57c0.js +28 -0
- package/dist/packager-tool-9gprvfcy.js +23 -0
- package/dist/packager-tool-9jxzgsxc.js +14 -0
- package/dist/{packager-tool-zxp4hya4.js → packager-tool-a5afh1dc.js} +34 -13
- package/dist/{packager-tool-02f63a08.js → packager-tool-apawc11t.js} +88 -762
- package/dist/{packager-tool-tf3d2y8z.js → packager-tool-aw9v0raw.js} +2 -2
- package/dist/packager-tool-cqtsj6yh.js +2 -0
- package/dist/{packager-tool-5nqhxb9e.js → packager-tool-dwd6cc01.js} +16110 -13031
- package/dist/{packager-tool-t605qewm.js → packager-tool-dxgrhfq5.js} +2 -2
- package/dist/{packager-tool-awkq26v0.js → packager-tool-e7kvq8hf.js} +5 -3
- package/dist/{packager-tool-2y2mmdnq.js → packager-tool-fjqpf1y6.js} +6 -24
- package/dist/{packager-tool-3dc9gz35.js → packager-tool-frjt46rb.js} +1 -1
- package/dist/{packager-tool-y8egb0fa.js → packager-tool-gqq3vkgh.js} +2573 -535
- package/dist/{packager-tool-w5a1hhyj.js → packager-tool-hxyjn885.js} +13 -2
- package/dist/packager-tool-j3228zs9.js +35 -0
- package/dist/{packager-tool-hhy1gr2k.js → packager-tool-jgfzfqjm.js} +1 -1
- package/dist/{packager-tool-5csvkk54.js → packager-tool-kb520rm5.js} +172 -71
- package/dist/{packager-tool-k04k2rnq.js → packager-tool-kmv2p8z4.js} +20 -8
- package/dist/{packager-tool-6h69pd2a.js → packager-tool-kn86394c.js} +127 -61
- package/dist/packager-tool-mgcz986r.js +143 -0
- package/dist/{packager-tool-3h2ktz6q.js → packager-tool-myhbp761.js} +11 -1
- package/dist/{packager-tool-5tk1eg46.js → packager-tool-ns9xn7zq.js} +13 -13
- package/dist/{packager-tool-vbfz8k7w.js → packager-tool-p8gab24q.js} +52 -32
- package/dist/{packager-tool-stq8800d.js → packager-tool-pacrqxv2.js} +17 -4
- package/dist/{packager-tool-7q6z6npd.js → packager-tool-pcvhcn2k.js} +93 -11
- package/dist/packager-tool-phw8ydjx.js +331 -0
- package/dist/{packager-tool-mx0gg6yh.js → packager-tool-q8akejne.js} +6 -4
- package/dist/packager-tool-qcqb9hf8.js +26 -0
- package/dist/{packager-tool-n89vrpex.js → packager-tool-skcjythd.js} +10907 -25608
- package/dist/{packager-tool-v37kemg5.js → packager-tool-sphnextf.js} +5 -6
- package/dist/{packager-tool-1ca047de.js → packager-tool-sqpesv2e.js} +12 -56
- package/dist/packager-tool-t7ahhaer.js +877 -0
- package/dist/{packager-tool-zgm9mqrh.js → packager-tool-thnkpqwc.js} +1802 -378
- package/dist/{packager-tool-peawy22c.js → packager-tool-tqjfdpda.js} +53 -8
- package/dist/{packager-tool-gb4sm499.js → packager-tool-vd3rn4fj.js} +463 -327
- package/dist/{packager-tool-5tjzg56t.js → packager-tool-wh660fny.js} +1 -1
- package/dist/{packager-tool-tyg399d6.js → packager-tool-wze74wyk.js} +74 -47
- package/dist/{packager-tool-zbhqrk3p.js → packager-tool-x20684x5.js} +1 -1
- package/dist/packager-tool-xj0agqpk.js +11 -0
- package/dist/packager-tool-xk78j7dz.js +1256 -0
- package/dist/{packager-tool-py93409h.js → packager-tool-ymma2s85.js} +2 -2
- package/dist/packager-tool-z0yxfhdj.js +40 -0
- package/dist/packager-tool.js +13 -10
- package/dist/{pt-BR-TKHNHMET-sn91xyq0.js → pt-BR-GNQNAAZ2-xadharv4.js} +237 -30
- package/dist/{pt-BR-Y6K6XHXK-mp3hwhw1.js → pt-BR-USP2T7GD-pedn77m1.js} +29 -2
- package/dist/pt-BR-USP2T7GD-rppy42ym.js +200 -0
- package/dist/{pt-3DIO5QWG-59b3f4bc.js → pt-RMIAKZB4-67enhx3m.js} +29 -2
- package/dist/pt-RMIAKZB4-t80exmp7.js +200 -0
- package/dist/{pt-ROXU257Y-2f6bxev4.js → pt-TO2DARY2-ftcce1bv.js} +237 -30
- package/dist/ro-GHOBYW2S-4zevc9dy.js +200 -0
- package/dist/{ro-BWR3ONRR-vzx3hy8a.js → ro-GHOBYW2S-mhnqsgaa.js} +29 -2
- package/dist/{ro-AVAWPKOO-b89pw79r.js → ro-WUYJV6OW-a8d9qy1n.js} +235 -28
- package/dist/ru-WBLQ5B2U-dpqvtfwr.js +10 -0
- package/dist/services/connector-request-buckets.d.ts +1 -0
- package/dist/services/flow-eval-file-store.d.ts +1 -11
- package/dist/services/flow-eval-utils.d.ts +1 -32
- package/dist/services/flow-validate-service.d.ts +51 -0
- package/dist/services/inline-entity-resolver.d.ts +22 -0
- package/dist/services/node-service.d.ts +21 -1
- package/dist/services/packaging-utils.d.ts +15 -2
- package/dist/{shared-utils-pnbvyyb2.js → shared-utils-tqnx96mg.js} +4 -3
- package/dist/solution-auth-8qz5pw7z.js +14 -0
- package/dist/solution-discovery-vqravtkh.js +44 -0
- package/dist/{tidy-service-j70ccg27.js → tidy-service-tqjea6g2.js} +143 -39
- package/dist/tool.js +17 -14
- package/dist/{tr-5IIHSFW5-hw4cewew.js → tr-GDTLECMM-k5fhmq13.js} +29 -2
- package/dist/tr-GDTLECMM-kngksm3r.js +200 -0
- package/dist/{tr-JMIP7ZSL-c39b6pe4.js → tr-M3F5A6AU-bb0tg39m.js} +235 -28
- package/dist/utils/flow-io.d.ts +2 -1
- package/dist/validation.js +39 -33
- package/dist/{variable-service-86t2r5m9.js → variable-service-kqnqxmx2.js} +16 -12
- package/dist/{wait-for-flow-job-d8m6mqb4.js → wait-for-flow-job-b0vj8828.js} +15 -12
- package/dist/{zh-CN-IFFXSEJS-9wm9gmrv.js → zh-CN-C5G4PC7C-ds9gkptg.js} +235 -28
- package/dist/zh-CN-I5D7WHBD-ge92tbx9.js +200 -0
- package/dist/{zh-CN-R2KU4U5L-tc1hat59.js → zh-CN-I5D7WHBD-sr5h0a98.js} +29 -2
- package/dist/{zh-TW-GNKMELBF-j674515r.js → zh-TW-2AVLM723-288pkc1z.js} +29 -2
- package/dist/zh-TW-2AVLM723-xsmap3gk.js +200 -0
- package/dist/{zh-TW-IYBNYAMG-8727c7v2.js → zh-TW-62HZIG6O-787kdwex.js} +234 -27
- package/package.json +2 -2
- package/dist/debug-conversation-trigger-hgszjdhx.js +0 -44
- package/dist/flow-eval-run-api-byx3cacw.js +0 -13
- package/dist/flow-validate-service-12v3bz1b.js +0 -64
- package/dist/input-reader-vhar4g0k.js +0 -11
- package/dist/node-sync-service-ccwgtyte.js +0 -40
- package/dist/packager-tool-4g5hk66k.js +0 -454
- package/dist/packager-tool-kg35b9s6.js +0 -15
- package/dist/packager-tool-pz5nqg0s.js +0 -64
- package/dist/packager-tool-t3ysatjd.js +0 -521
- package/dist/packager-tool-vd6jt4n8.js +0 -208
- package/dist/packager-tool-vscvjrhn.js +0 -265
- package/dist/services/flow-debug-service.d.ts +0 -320
- package/dist/services/flow-eval-schema/deterministic-evaluators.d.ts +0 -110
- package/dist/services/flow-eval-schema/evaluator-fields.d.ts +0 -66
- package/dist/services/flow-eval-schema/helpers.d.ts +0 -9
- package/dist/services/flow-eval-schema/index.d.ts +0 -4
- package/dist/services/flow-eval-schema/llm-judge-evaluators.d.ts +0 -174
- package/dist/services/flow-eval-schema/prompts.d.ts +0 -2
- package/dist/services/flow-eval-schema/registry.d.ts +0 -375
- package/dist/services/flow-eval-schema/tool-call-evaluators.d.ts +0 -93
- package/dist/services/flow-eval-schema/types.d.ts +0 -95
- package/dist/services/flow-eval-types.d.ts +0 -6
- package/dist/utils/write-resolved-flow.d.ts +0 -7
- /package/dist/{headless-45dypanh.js → headless-fw8pwyzm.js} +0 -0
- /package/dist/{localization-xecwjpe2.js → localization-d6gjmrsw.js} +0 -0
|
@@ -3,13 +3,16 @@ import {
|
|
|
3
3
|
DEFAULT_TIMEOUT_MS,
|
|
4
4
|
pendingSecondsFor,
|
|
5
5
|
pendingStallInstructions
|
|
6
|
-
} from "./packager-tool-
|
|
6
|
+
} from "./packager-tool-aw9v0raw.js";
|
|
7
7
|
import {
|
|
8
8
|
package_default
|
|
9
|
-
} from "./packager-tool-
|
|
9
|
+
} from "./packager-tool-q8akejne.js";
|
|
10
10
|
import {
|
|
11
11
|
VALID_RESOURCE_TYPES
|
|
12
12
|
} from "./packager-tool-27avrkyk.js";
|
|
13
|
+
import {
|
|
14
|
+
UnknownEntryPointError
|
|
15
|
+
} from "./packager-tool-4kr6g0zw.js";
|
|
13
16
|
import {
|
|
14
17
|
registerRegistryCommand,
|
|
15
18
|
registerSharedDebugInstanceCommands,
|
|
@@ -17,11 +20,18 @@ import {
|
|
|
17
20
|
registerSharedInstanceCommands,
|
|
18
21
|
registerSharedProcessCommands,
|
|
19
22
|
registerSharedProcessesCommands
|
|
20
|
-
} from "./packager-tool-
|
|
23
|
+
} from "./packager-tool-2z0r1f32.js";
|
|
21
24
|
import {
|
|
22
25
|
evaluatorTypeAliases,
|
|
26
|
+
formatDuration,
|
|
27
|
+
formatEvalSetRunRow,
|
|
28
|
+
formatEvaluatorScores,
|
|
29
|
+
formatRemoteEvalRunRow,
|
|
30
|
+
isFailedRemoteRun,
|
|
31
|
+
isTerminalRemoteStatus,
|
|
32
|
+
remoteRunScore,
|
|
23
33
|
resolveLoginConfig
|
|
24
|
-
} from "./packager-tool-
|
|
34
|
+
} from "./packager-tool-xk78j7dz.js";
|
|
25
35
|
import {
|
|
26
36
|
setAgentProjectMetadataReader
|
|
27
37
|
} from "./packager-tool-8qp60s20.js";
|
|
@@ -30,11 +40,11 @@ import {
|
|
|
30
40
|
ATTACHMENT_UPLOAD_INSTRUCTIONS,
|
|
31
41
|
CommandDimensions,
|
|
32
42
|
OutputFormatter,
|
|
43
|
+
Pagination,
|
|
33
44
|
RESULTS,
|
|
34
45
|
ScreenLogger,
|
|
35
46
|
ShipDimensions,
|
|
36
47
|
appendOption,
|
|
37
|
-
catchError,
|
|
38
48
|
createHiddenDeprecatedTenantOption,
|
|
39
49
|
extractErrorMessage,
|
|
40
50
|
extractErrorMessageSync,
|
|
@@ -42,25 +52,62 @@ import {
|
|
|
42
52
|
logger,
|
|
43
53
|
mapPackageMetadataOptions,
|
|
44
54
|
parseAttachmentSpec,
|
|
55
|
+
parseLimit,
|
|
56
|
+
parseOffset,
|
|
45
57
|
processContext,
|
|
46
58
|
registerPackageMetadataOptions,
|
|
47
59
|
resolveAttachmentInputs,
|
|
48
60
|
splitPackagedName,
|
|
49
61
|
summarizePlatformBody,
|
|
50
62
|
trackShipSucceeded
|
|
51
|
-
} from "./packager-tool-
|
|
63
|
+
} from "./packager-tool-apawc11t.js";
|
|
64
|
+
import {
|
|
65
|
+
catchError
|
|
66
|
+
} from "./packager-tool-t7ahhaer.js";
|
|
52
67
|
import {
|
|
53
68
|
getFileSystem
|
|
54
|
-
} from "./packager-tool-
|
|
69
|
+
} from "./packager-tool-myhbp761.js";
|
|
55
70
|
import {
|
|
56
71
|
__require
|
|
57
72
|
} from "./packager-tool-1yh8g550.js";
|
|
58
73
|
|
|
74
|
+
// src/utils/row-window.ts
|
|
75
|
+
function addRowWindowOptions(command) {
|
|
76
|
+
return command.option("-l, --limit <number>", "Number of items to return (1-10000)", parseLimit).option("--offset <number>", "Number of items to skip (0-1000000)", parseOffset, 0);
|
|
77
|
+
}
|
|
78
|
+
function rowWindow(rows, options) {
|
|
79
|
+
const { limit, offset } = options;
|
|
80
|
+
if (limit === undefined && offset === 0) {
|
|
81
|
+
return { rows };
|
|
82
|
+
}
|
|
83
|
+
const window = rows.slice(offset, limit === undefined ? undefined : offset + limit);
|
|
84
|
+
return {
|
|
85
|
+
rows: window,
|
|
86
|
+
pagination: new Pagination({
|
|
87
|
+
returned: window.length,
|
|
88
|
+
limit: limit ?? Math.max(window.length, 1),
|
|
89
|
+
offset,
|
|
90
|
+
total: rows.length
|
|
91
|
+
})
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
function apiPagination(returned, options) {
|
|
95
|
+
const { limit, offset } = options;
|
|
96
|
+
if (limit === undefined && offset === 0) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
return new Pagination({
|
|
100
|
+
returned,
|
|
101
|
+
limit: limit ?? Math.max(returned, 1),
|
|
102
|
+
offset
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
|
|
59
106
|
// src/commands/binding.ts
|
|
60
107
|
var BINDING_LIST_EXAMPLES = [
|
|
61
108
|
{
|
|
62
109
|
Description: "List all bindings in a flow file",
|
|
63
|
-
Command: "uip maestro flow
|
|
110
|
+
Command: "uip maestro flow bindings list flow.json",
|
|
64
111
|
Output: {
|
|
65
112
|
Code: "BindingListSuccess",
|
|
66
113
|
Data: {
|
|
@@ -80,7 +127,7 @@ var BINDING_LIST_EXAMPLES = [
|
|
|
80
127
|
var BINDING_ADD_EXAMPLES = [
|
|
81
128
|
{
|
|
82
129
|
Description: "Add a process binding to a flow",
|
|
83
|
-
Command: 'uip maestro flow
|
|
130
|
+
Command: 'uip maestro flow bindings create flow.json "Invoice" process "InvoiceProcess" --property-attribute name',
|
|
84
131
|
Output: {
|
|
85
132
|
Code: "BindingAddSuccess",
|
|
86
133
|
Data: {
|
|
@@ -98,7 +145,7 @@ var BINDING_ADD_EXAMPLES = [
|
|
|
98
145
|
var BINDING_DELETE_EXAMPLES = [
|
|
99
146
|
{
|
|
100
147
|
Description: "Remove all bindings by resource key",
|
|
101
|
-
Command: "uip maestro flow
|
|
148
|
+
Command: "uip maestro flow bindings delete flow.json a1b2c3d4-0000-0000-0000-000000000001",
|
|
102
149
|
Output: {
|
|
103
150
|
Code: "BindingRemoveSuccess",
|
|
104
151
|
Data: {
|
|
@@ -114,9 +161,9 @@ var BINDING_DELETE_EXAMPLES = [
|
|
|
114
161
|
}
|
|
115
162
|
];
|
|
116
163
|
var registerBindingCommand = (program) => {
|
|
117
|
-
const binding = program.command("binding").description("Manage bindings in a Flow file");
|
|
118
|
-
binding.command("list").description("List all bindings in a Flow file").argument("<file>", "Path to the .flow file").examples(BINDING_LIST_EXAMPLES).trackedAction(processContext, async (file) => {
|
|
119
|
-
const { listBindingsInFlow } = await import("./binding-service-
|
|
164
|
+
const binding = program.command("bindings").alias("binding").description("Manage bindings in a Flow file");
|
|
165
|
+
addRowWindowOptions(binding.command("list")).description("List all bindings in a Flow file").argument("<file>", "Path to the .flow file").examples(BINDING_LIST_EXAMPLES).trackedAction(processContext, async (file, options) => {
|
|
166
|
+
const { listBindingsInFlow } = await import("./binding-service-yw91615m.js");
|
|
120
167
|
const [error, result] = await catchError(listBindingsInFlow(file));
|
|
121
168
|
if (error) {
|
|
122
169
|
OutputFormatter.error({
|
|
@@ -127,18 +174,20 @@ var registerBindingCommand = (program) => {
|
|
|
127
174
|
processContext.exit(1);
|
|
128
175
|
return;
|
|
129
176
|
}
|
|
177
|
+
const window = rowWindow(result.bindings, options);
|
|
130
178
|
OutputFormatter.success({
|
|
131
179
|
Result: RESULTS.Success,
|
|
132
180
|
Code: "BindingListSuccess",
|
|
133
181
|
Data: {
|
|
134
|
-
Bindings:
|
|
135
|
-
Count:
|
|
136
|
-
}
|
|
182
|
+
Bindings: window.rows,
|
|
183
|
+
Count: window.rows.length
|
|
184
|
+
},
|
|
185
|
+
Pagination: window.pagination
|
|
137
186
|
});
|
|
138
187
|
});
|
|
139
|
-
binding.command("add").description(`Add a binding to a Flow file.
|
|
188
|
+
binding.command("create").alias("add").description(`Add a binding to a Flow file.
|
|
140
189
|
` + `Valid resource types: ${VALID_RESOURCE_TYPES.join(", ")}`).argument("<file>", "Path to the .flow file").argument("<name>", "Binding display name").argument("<resource>", "Resource type").argument("<default-value>", "Default value for the binding").option("--resource-key <key>", "Resource catalog identifier").option("--property-attribute <attr>", "Target node property (e.g., name, folderPath, connection)").option("--resource-sub-type <type>", "Resource sub-classification (e.g., Agent, Process)").examples(BINDING_ADD_EXAMPLES).trackedAction(processContext, async (file, name, resource, defaultValue, options) => {
|
|
141
|
-
const { addBindingToFlow } = await import("./binding-service-
|
|
190
|
+
const { addBindingToFlow } = await import("./binding-service-yw91615m.js");
|
|
142
191
|
const [error, result] = await catchError(addBindingToFlow(file, name, resource, defaultValue, {
|
|
143
192
|
resourceKey: options.resourceKey,
|
|
144
193
|
propertyAttribute: options.propertyAttribute,
|
|
@@ -161,8 +210,8 @@ var registerBindingCommand = (program) => {
|
|
|
161
210
|
}
|
|
162
211
|
});
|
|
163
212
|
});
|
|
164
|
-
binding.command("remove").description("Remove all bindings with a given resource key from a Flow file").argument("<file>", "Path to the .flow file").argument("<resource-key>", "Resource key of the bindings to remove").examples(BINDING_DELETE_EXAMPLES).trackedAction(processContext, async (file, resourceKey) => {
|
|
165
|
-
const { deleteBindingFromFlow } = await import("./binding-service-
|
|
213
|
+
binding.command("delete").alias("remove").description("Remove all bindings with a given resource key from a Flow file").argument("<file>", "Path to the .flow file").argument("<resource-key>", "Resource key of the bindings to remove").examples(BINDING_DELETE_EXAMPLES).trackedAction(processContext, async (file, resourceKey) => {
|
|
214
|
+
const { deleteBindingFromFlow } = await import("./binding-service-yw91615m.js");
|
|
166
215
|
const [error, result] = await catchError(deleteBindingFromFlow(file, resourceKey));
|
|
167
216
|
if (error) {
|
|
168
217
|
OutputFormatter.error({
|
|
@@ -184,6 +233,55 @@ var registerBindingCommand = (program) => {
|
|
|
184
233
|
});
|
|
185
234
|
};
|
|
186
235
|
|
|
236
|
+
// src/commands/debug-summary.ts
|
|
237
|
+
function buildDebugSummary(result) {
|
|
238
|
+
const summary = {
|
|
239
|
+
finalStatus: result.finalStatus,
|
|
240
|
+
instanceId: result.instanceId,
|
|
241
|
+
studioWebUrl: result.studioWebUrl,
|
|
242
|
+
solutionId: result.solutionId,
|
|
243
|
+
failed: (result.elementExecutions ?? []).filter((execution) => execution.status !== "Completed").map(({ elementId, status }) => ({ elementId, status }))
|
|
244
|
+
};
|
|
245
|
+
if (result.variables) {
|
|
246
|
+
const globals = result.variables.globals ?? {};
|
|
247
|
+
const outputs = {};
|
|
248
|
+
const missing = [];
|
|
249
|
+
for (const id of result.declaredOutputIds ?? []) {
|
|
250
|
+
if (Object.hasOwn(globals, id)) {
|
|
251
|
+
outputs[id] = globals[id];
|
|
252
|
+
} else {
|
|
253
|
+
missing.push(id);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
summary.outputs = outputs;
|
|
257
|
+
if (missing.length > 0)
|
|
258
|
+
summary.missingOutputs = missing;
|
|
259
|
+
}
|
|
260
|
+
if (result.variablesError)
|
|
261
|
+
summary.variablesError = result.variablesError;
|
|
262
|
+
if (result.incidents && result.incidents.length > 0) {
|
|
263
|
+
summary.incidents = result.incidents;
|
|
264
|
+
}
|
|
265
|
+
return summary;
|
|
266
|
+
}
|
|
267
|
+
var FULL_DEBUG_OUTPUT_DIR = ".flow-debug";
|
|
268
|
+
var FULL_DEBUG_OUTPUT_GITIGNORE = "# Written by `uip maestro flow debug --summary`: local debug records with tenant data.\n*\n";
|
|
269
|
+
async function writeFullDebugOutput(fs, projectPath, envelope) {
|
|
270
|
+
const { findNearestParentUipxFile } = await import("./index-hz008fep.js");
|
|
271
|
+
const projectDir = fs.path.resolve(projectPath);
|
|
272
|
+
const discovery = await findNearestParentUipxFile(fs, projectDir);
|
|
273
|
+
const solutionDir = discovery.status === "found" ? fs.path.dirname(discovery.solutionFile) : fs.path.resolve(projectDir, "..");
|
|
274
|
+
const dir = fs.path.join(solutionDir, FULL_DEBUG_OUTPUT_DIR);
|
|
275
|
+
const relative = fs.path.relative(solutionDir, projectDir);
|
|
276
|
+
const key = relative && !relative.startsWith("..") && !fs.path.isAbsolute(relative) ? relative : fs.path.basename(projectDir);
|
|
277
|
+
const file = fs.path.join(dir, `${key}.json`);
|
|
278
|
+
await fs.mkdir(fs.path.dirname(file));
|
|
279
|
+
await fs.writeFile(fs.path.join(dir, ".gitignore"), FULL_DEBUG_OUTPUT_GITIGNORE);
|
|
280
|
+
await fs.writeFile(file, `${JSON.stringify(envelope, null, 2)}
|
|
281
|
+
`);
|
|
282
|
+
return file;
|
|
283
|
+
}
|
|
284
|
+
|
|
187
285
|
// src/commands/debug.ts
|
|
188
286
|
function buildHttpFailureOutput(err) {
|
|
189
287
|
const stageLabel = err.stage ?? "request";
|
|
@@ -273,22 +371,26 @@ function buildIncidentInstructions(incidents, instanceId) {
|
|
|
273
371
|
- `)}
|
|
274
372
|
${detailHint}${traceHint}`;
|
|
275
373
|
}
|
|
374
|
+
function variablesRetryCommand(instanceId, error) {
|
|
375
|
+
const ids = error.expectedGlobals?.length ? error.expectedGlobals : error.missingGlobals;
|
|
376
|
+
const expect = ids?.length ? ` --expected-outputs ${ids.join(" ")}` : "";
|
|
377
|
+
return `'uip maestro flow debug-instance variables ${instanceId}${expect}'`;
|
|
378
|
+
}
|
|
276
379
|
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:
|
|
277
380
|
` + " 1. Studio Web — open the debug URL printed once the solution uploads " + `(also 'Data.studioWebUrl' in the result).
|
|
278
381
|
` + " 2. UiPath Maestro VS Code extension — open the flow and hit Debug.";
|
|
279
|
-
async function
|
|
280
|
-
const [error,
|
|
281
|
-
const { readFlowWorkflow, resolveProjectFlowFile } = await import("./flow-io-
|
|
282
|
-
const { startsOnConversationTrigger } = await import("./debug-conversation-trigger-hgszjdhx.js");
|
|
382
|
+
async function readProjectFlowNodes(projectPath) {
|
|
383
|
+
const [error, nodes] = await catchError((async () => {
|
|
384
|
+
const { readFlowWorkflow, resolveProjectFlowFile } = await import("./flow-io-1wabd32s.js");
|
|
283
385
|
const flowFilePath = await resolveProjectFlowFile(projectPath);
|
|
284
386
|
const { workflow } = await readFlowWorkflow(flowFilePath);
|
|
285
|
-
return
|
|
387
|
+
return workflow.nodes ?? [];
|
|
286
388
|
})());
|
|
287
389
|
if (error) {
|
|
288
|
-
logger.info(`Skipped the
|
|
289
|
-
return
|
|
390
|
+
logger.info(`Skipped the debug pre-flight scan: ${error.message}`);
|
|
391
|
+
return;
|
|
290
392
|
}
|
|
291
|
-
return
|
|
393
|
+
return nodes;
|
|
292
394
|
}
|
|
293
395
|
var FLOW_DEBUG_EXAMPLES = [
|
|
294
396
|
{
|
|
@@ -309,6 +411,21 @@ var FLOW_DEBUG_EXAMPLES = [
|
|
|
309
411
|
}
|
|
310
412
|
}
|
|
311
413
|
},
|
|
414
|
+
{
|
|
415
|
+
Description: "Read only the verdict: status, the elements that did not complete, and the flow's declared outputs — not every node's raw output (HTTP bodies and headers included)",
|
|
416
|
+
Command: "uip maestro flow debug ./my-flow-project --summary",
|
|
417
|
+
Output: {
|
|
418
|
+
Code: "FlowDebug",
|
|
419
|
+
Data: {
|
|
420
|
+
finalStatus: "Completed",
|
|
421
|
+
instanceId: "c3d4e5f6-0000-0000-0000-000000000001",
|
|
422
|
+
studioWebUrl: "https://cloud.uipath.com/org/tenant/studio_/debug/e5f6a7b8",
|
|
423
|
+
solutionId: "e5f6a7b8-0000-0000-0000-000000000001",
|
|
424
|
+
failed: [],
|
|
425
|
+
outputs: { weatherVerdict: "warm office today" }
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
},
|
|
312
429
|
{
|
|
313
430
|
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",
|
|
314
431
|
Command: "uip maestro flow debug ./my-chat-flow --open-in-browser",
|
|
@@ -394,9 +511,24 @@ function parsePositiveIntegerOption(value, optionName) {
|
|
|
394
511
|
return { ok: true, value: parsed };
|
|
395
512
|
}
|
|
396
513
|
function registerDebugCommand(program) {
|
|
397
|
-
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) => {
|
|
398
|
-
const { getLoginStatusAsync } = await import("./index-
|
|
399
|
-
const
|
|
514
|
+
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("--entry-point <id>", "Entry point node id — a trigger node id from the .flow file. Defaults to the trigger marked isDefaultEntryPoint, else the first trigger").option("--attachment <name=path>", "Upload a file as a file-typed workflow input variable (repeatable). " + "Example: --attachment file1=./resume.pdf", appendOption, []).option("--summary", "Return only the run's status, its failed elements and the flow's declared outputs, " + "instead of every node's raw output. The full result, tenant data included, is written to " + "<solution>/.flow-debug/<project>.json (<project> relative to the solution; the folder's own " + ".gitignore ignores it; never packed or uploaded) and named in Data.fullOutputPath.").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) => {
|
|
515
|
+
const { getLoginStatusAsync } = await import("./index-sqhbn7ew.js");
|
|
516
|
+
const nodes = await readProjectFlowNodes(projectPath);
|
|
517
|
+
let isConversational = false;
|
|
518
|
+
if (nodes !== undefined) {
|
|
519
|
+
const { startsOnConversationTrigger } = await import("./debug-conversation-trigger-xsm3ycqx.js");
|
|
520
|
+
const [entryPointError, conversational] = catchError(() => startsOnConversationTrigger({ nodes }, options.entryPoint));
|
|
521
|
+
if (entryPointError instanceof UnknownEntryPointError) {
|
|
522
|
+
OutputFormatter.error({
|
|
523
|
+
Result: RESULTS.ValidationError,
|
|
524
|
+
Message: entryPointError.message,
|
|
525
|
+
Instructions: entryPointError.instructions
|
|
526
|
+
});
|
|
527
|
+
processContext.exit(3);
|
|
528
|
+
return;
|
|
529
|
+
}
|
|
530
|
+
isConversational = conversational === true;
|
|
531
|
+
}
|
|
400
532
|
if (isConversational) {
|
|
401
533
|
OutputFormatter.log({
|
|
402
534
|
Warning: CONVERSATIONAL_DEBUG_WARNING
|
|
@@ -512,7 +644,7 @@ function registerDebugCommand(program) {
|
|
|
512
644
|
}
|
|
513
645
|
userProvidedFolderId = parsed.value;
|
|
514
646
|
} else if (options.folderKey !== undefined || options.folderPath !== undefined) {
|
|
515
|
-
const { resolveFolder } = await import("./index-
|
|
647
|
+
const { resolveFolder } = await import("./index-wycgq0ff.js");
|
|
516
648
|
const [folderError, folder] = await catchError(resolveFolder({
|
|
517
649
|
folderKey: options.folderKey,
|
|
518
650
|
folderPath: options.folderPath
|
|
@@ -551,17 +683,18 @@ function registerDebugCommand(program) {
|
|
|
551
683
|
InboundVoiceDebugError,
|
|
552
684
|
MissingSolutionWrapperError,
|
|
553
685
|
UnregisteredProjectError
|
|
554
|
-
} = await import("./flow-debug-service-
|
|
555
|
-
const {
|
|
686
|
+
} = await import("./flow-debug-service-cgawm96k.js");
|
|
687
|
+
const { UnboundInlineEntityError } = await import("./inline-entity-resolver-64pqwk86.js");
|
|
688
|
+
const { MaestroHttpError } = await import("./debug-http-client-yqjzsnhw.js");
|
|
556
689
|
const {
|
|
557
690
|
buildPollTimeoutFailureOutput,
|
|
558
691
|
DebugPollTimeoutError,
|
|
559
692
|
isSuccessfulDebugStatus
|
|
560
|
-
} = await import("./debug-service-
|
|
693
|
+
} = await import("./debug-service-nra3n02y.js");
|
|
561
694
|
const {
|
|
562
695
|
buildSolutionUploadFailureOutput,
|
|
563
696
|
isSolutionUploadHttpError
|
|
564
|
-
} = await import("./index-
|
|
697
|
+
} = await import("./index-hz008fep.js");
|
|
565
698
|
const service = new FlowDebugService;
|
|
566
699
|
const parsedPollInterval = parsePositiveNumberOption(options.pollInterval || "2000", "--poll-interval");
|
|
567
700
|
if (!parsedPollInterval.ok) {
|
|
@@ -590,7 +723,7 @@ function registerDebugCommand(program) {
|
|
|
590
723
|
}
|
|
591
724
|
let inputs;
|
|
592
725
|
if (options.inputs) {
|
|
593
|
-
const { parseFlowInputs } = await import("./flow-api-
|
|
726
|
+
const { parseFlowInputs } = await import("./flow-api-sat010z1.js");
|
|
594
727
|
const [parseError, parsed] = await catchError(parseFlowInputs(options.inputs));
|
|
595
728
|
if (parseError) {
|
|
596
729
|
OutputFormatter.error({
|
|
@@ -615,7 +748,7 @@ function registerDebugCommand(program) {
|
|
|
615
748
|
processContext.exit(1);
|
|
616
749
|
return;
|
|
617
750
|
}
|
|
618
|
-
const { uploadJobAttachment } = await import("./index-
|
|
751
|
+
const { uploadJobAttachment } = await import("./index-wycgq0ff.js");
|
|
619
752
|
const [uploadError, resolved] = await catchError(resolveAttachmentInputs(specs, (bytes, fileName) => uploadJobAttachment(bytes, fileName, {
|
|
620
753
|
tenant: tenantName
|
|
621
754
|
})));
|
|
@@ -642,6 +775,7 @@ function registerDebugCommand(program) {
|
|
|
642
775
|
}
|
|
643
776
|
const debugOptions = {
|
|
644
777
|
inputs,
|
|
778
|
+
...options.entryPoint === undefined ? {} : { entryPoint: options.entryPoint },
|
|
645
779
|
...maxPolls === undefined ? {} : { maxPolls },
|
|
646
780
|
...isConversational ? { uploadOnly: true } : {}
|
|
647
781
|
};
|
|
@@ -681,7 +815,7 @@ function registerDebugCommand(program) {
|
|
|
681
815
|
processContext.exit(3);
|
|
682
816
|
return;
|
|
683
817
|
}
|
|
684
|
-
if (executeError instanceof InboundVoiceDebugError) {
|
|
818
|
+
if (executeError instanceof InboundVoiceDebugError || executeError instanceof UnknownEntryPointError) {
|
|
685
819
|
OutputFormatter.error({
|
|
686
820
|
Result: RESULTS.ValidationError,
|
|
687
821
|
Message: executeError.message,
|
|
@@ -699,6 +833,15 @@ function registerDebugCommand(program) {
|
|
|
699
833
|
processContext.exit(3);
|
|
700
834
|
return;
|
|
701
835
|
}
|
|
836
|
+
if (executeError instanceof UnboundInlineEntityError) {
|
|
837
|
+
OutputFormatter.error({
|
|
838
|
+
Result: RESULTS.ValidationError,
|
|
839
|
+
Message: executeError.message,
|
|
840
|
+
Instructions: executeError.instructions
|
|
841
|
+
});
|
|
842
|
+
processContext.exit(3);
|
|
843
|
+
return;
|
|
844
|
+
}
|
|
702
845
|
if (executeError instanceof DebugProvisioningMissingResourcesError) {
|
|
703
846
|
OutputFormatter.error({
|
|
704
847
|
Result: RESULTS.Failure,
|
|
@@ -748,21 +891,39 @@ function registerDebugCommand(program) {
|
|
|
748
891
|
return;
|
|
749
892
|
}
|
|
750
893
|
const success = isSuccessfulDebugStatus(result.finalStatus);
|
|
751
|
-
const
|
|
894
|
+
const fullData = {
|
|
752
895
|
jobKey: result.jobKey,
|
|
753
896
|
instanceId: result.instanceId,
|
|
754
897
|
runId: result.runId,
|
|
755
898
|
folderKey: result.folderKey,
|
|
756
899
|
finalStatus: result.finalStatus,
|
|
900
|
+
entryPoint: result.entryPoint,
|
|
757
901
|
solutionId: result.solutionId,
|
|
758
902
|
studioWebUrl: result.studioWebUrl,
|
|
759
903
|
elementExecutions: result.elementExecutions,
|
|
760
904
|
variables: result.variables,
|
|
761
905
|
variablesError: result.variablesError,
|
|
906
|
+
variablesFetch: result.variablesFetch,
|
|
762
907
|
incidents: result.incidents
|
|
763
908
|
};
|
|
909
|
+
let data = fullData;
|
|
910
|
+
if (options.summary) {
|
|
911
|
+
const summary2 = buildDebugSummary(result);
|
|
912
|
+
const [writeError, fullOutputPath] = await catchError(writeFullDebugOutput(getFileSystem(), projectPath, {
|
|
913
|
+
Result: success ? RESULTS.Success : RESULTS.Failure,
|
|
914
|
+
Code: "FlowDebug",
|
|
915
|
+
Data: fullData
|
|
916
|
+
}));
|
|
917
|
+
if (writeError) {
|
|
918
|
+
logger.warn(`Could not write the full debug output: ${writeError.message}`);
|
|
919
|
+
summary2.fullOutputError = writeError.message;
|
|
920
|
+
} else {
|
|
921
|
+
summary2.fullOutputPath = fullOutputPath;
|
|
922
|
+
}
|
|
923
|
+
data = summary2;
|
|
924
|
+
}
|
|
764
925
|
if (success) {
|
|
765
|
-
const instructions = result.variablesError ? `Debug completed with status: ${result.finalStatus}, but the output variables could not be read after ${result.variablesError.attempts} attempt(s): ${result.variablesError.message}.
|
|
926
|
+
const instructions = result.variablesError ? `Debug completed with status: ${result.finalStatus}, but the output variables could not be read after ${result.variablesError.attempts} attempt(s): ${result.variablesError.message}. Data.${options.summary ? "outputs" : "variables"} is absent and Data.variablesError explains why — treat the outputs as UNKNOWN, not empty. ` + `Retry with ${variablesRetryCommand(result.instanceId, result.variablesError)}.` : `Debug completed with status: ${result.finalStatus}`;
|
|
766
927
|
OutputFormatter.success({
|
|
767
928
|
Result: RESULTS.Success,
|
|
768
929
|
Code: "FlowDebug",
|
|
@@ -805,7 +966,7 @@ var registerDebugInstancesCommand = (program) => {
|
|
|
805
966
|
var EDGE_LIST_EXAMPLES = [
|
|
806
967
|
{
|
|
807
968
|
Description: "List all edges in a flow file",
|
|
808
|
-
Command: "uip maestro flow
|
|
969
|
+
Command: "uip maestro flow edges list flow.json",
|
|
809
970
|
Output: {
|
|
810
971
|
Code: "EdgeListSuccess",
|
|
811
972
|
Data: {
|
|
@@ -824,7 +985,7 @@ var EDGE_LIST_EXAMPLES = [
|
|
|
824
985
|
var EDGE_ADD_EXAMPLES = [
|
|
825
986
|
{
|
|
826
987
|
Description: "Add an edge between two nodes in a flow",
|
|
827
|
-
Command: "uip maestro flow
|
|
988
|
+
Command: "uip maestro flow edges create flow.json Node_1 Node_2",
|
|
828
989
|
Output: {
|
|
829
990
|
Code: "EdgeAddSuccess",
|
|
830
991
|
Data: {
|
|
@@ -840,7 +1001,7 @@ var EDGE_ADD_EXAMPLES = [
|
|
|
840
1001
|
},
|
|
841
1002
|
{
|
|
842
1003
|
Description: "Re-running with the same arguments is idempotent: returns the existing edge id with code EdgeAlreadyExists and a stderr warning.",
|
|
843
|
-
Command: "uip maestro flow
|
|
1004
|
+
Command: "uip maestro flow edges create flow.json Node_1 Node_2",
|
|
844
1005
|
Output: {
|
|
845
1006
|
Code: "EdgeAlreadyExists",
|
|
846
1007
|
Data: {
|
|
@@ -858,7 +1019,7 @@ var EDGE_ADD_EXAMPLES = [
|
|
|
858
1019
|
var EDGE_DELETE_EXAMPLES = [
|
|
859
1020
|
{
|
|
860
1021
|
Description: "Delete an edge by ID",
|
|
861
|
-
Command: "uip maestro flow
|
|
1022
|
+
Command: "uip maestro flow edges delete flow.json edge_a1b2c3d4",
|
|
862
1023
|
Output: {
|
|
863
1024
|
Code: "EdgeDeleteSuccess",
|
|
864
1025
|
Data: {
|
|
@@ -874,7 +1035,7 @@ var EDGE_DELETE_EXAMPLES = [
|
|
|
874
1035
|
var EDGE_REMOVE_EXAMPLES = [
|
|
875
1036
|
{
|
|
876
1037
|
Description: "Remove an edge by ID",
|
|
877
|
-
Command: "uip maestro flow
|
|
1038
|
+
Command: "uip maestro flow edges remove flow.json edge_a1b2c3d4",
|
|
878
1039
|
Output: {
|
|
879
1040
|
Code: "EdgeRemoveSuccess",
|
|
880
1041
|
Data: {
|
|
@@ -888,10 +1049,10 @@ var EDGE_REMOVE_EXAMPLES = [
|
|
|
888
1049
|
}
|
|
889
1050
|
];
|
|
890
1051
|
function getDeleteEdgeInstructions(file) {
|
|
891
|
-
return `Check that "${file}" exists and run 'uip maestro flow
|
|
1052
|
+
return `Check that "${file}" exists and run 'uip maestro flow edges list ${file}' to find a valid edge ID, then retry.`;
|
|
892
1053
|
}
|
|
893
1054
|
async function runDeleteEdge(file, edgeId, code) {
|
|
894
|
-
const { deleteEdgeFromFlow } = await import("./edge-service-
|
|
1055
|
+
const { deleteEdgeFromFlow } = await import("./edge-service-8fv0m681.js");
|
|
895
1056
|
const normalizedEdgeId = edgeId.trim();
|
|
896
1057
|
const [error, result] = await catchError(deleteEdgeFromFlow(file, normalizedEdgeId));
|
|
897
1058
|
if (error) {
|
|
@@ -912,9 +1073,9 @@ async function runDeleteEdge(file, edgeId, code) {
|
|
|
912
1073
|
});
|
|
913
1074
|
}
|
|
914
1075
|
var registerEdgeCommand = (program) => {
|
|
915
|
-
const edge = program.command("edge").description("Manage edges in a Flow file");
|
|
916
|
-
edge.command("list").description("List all edges in a Flow file").argument("<file>", "Path to the .flow file").examples(EDGE_LIST_EXAMPLES).trackedAction(processContext, async (file) => {
|
|
917
|
-
const { listEdgesInFlow } = await import("./edge-service-
|
|
1076
|
+
const edge = program.command("edges").alias("edge").description("Manage edges in a Flow file");
|
|
1077
|
+
addRowWindowOptions(edge.command("list")).description("List all edges in a Flow file").argument("<file>", "Path to the .flow file").examples(EDGE_LIST_EXAMPLES).trackedAction(processContext, async (file, options) => {
|
|
1078
|
+
const { listEdgesInFlow } = await import("./edge-service-8fv0m681.js");
|
|
918
1079
|
const [error, result] = await catchError(listEdgesInFlow(file));
|
|
919
1080
|
if (error) {
|
|
920
1081
|
OutputFormatter.error({
|
|
@@ -925,17 +1086,19 @@ var registerEdgeCommand = (program) => {
|
|
|
925
1086
|
processContext.exit(1);
|
|
926
1087
|
return;
|
|
927
1088
|
}
|
|
1089
|
+
const window = rowWindow(result.edges, options);
|
|
928
1090
|
OutputFormatter.success({
|
|
929
1091
|
Result: RESULTS.Success,
|
|
930
1092
|
Code: "EdgeListSuccess",
|
|
931
1093
|
Data: {
|
|
932
|
-
Edges:
|
|
933
|
-
Count:
|
|
934
|
-
}
|
|
1094
|
+
Edges: window.rows,
|
|
1095
|
+
Count: window.rows.length
|
|
1096
|
+
},
|
|
1097
|
+
Pagination: window.pagination
|
|
935
1098
|
});
|
|
936
1099
|
});
|
|
937
|
-
edge.command("add").description("Add an edge between two nodes in a Flow file").argument("<file>", "Path to the .flow file").argument("<source-id>", "ID of the source node").argument("<target-id>", "ID of the target node").option("--source-port <port>", 'Source port name (defaults to "output")').option("--target-port <port>", 'Target port name (defaults to "input")').examples(EDGE_ADD_EXAMPLES).trackedAction(processContext, async (file, sourceId, targetId, options) => {
|
|
938
|
-
const { addEdgeToFlow } = await import("./edge-service-
|
|
1100
|
+
edge.command("create").alias("add").description("Add an edge between two nodes in a Flow file").argument("<file>", "Path to the .flow file").argument("<source-id>", "ID of the source node").argument("<target-id>", "ID of the target node").option("--source-port <port>", 'Source port name (defaults to "output")').option("--target-port <port>", 'Target port name (defaults to "input")').examples(EDGE_ADD_EXAMPLES).trackedAction(processContext, async (file, sourceId, targetId, options) => {
|
|
1101
|
+
const { addEdgeToFlow } = await import("./edge-service-8fv0m681.js");
|
|
939
1102
|
const [error, result] = await catchError(addEdgeToFlow(file, sourceId, targetId, {
|
|
940
1103
|
sourcePort: options.sourcePort,
|
|
941
1104
|
targetPort: options.targetPort
|
|
@@ -971,108 +1134,10 @@ var registerEdgeCommand = (program) => {
|
|
|
971
1134
|
});
|
|
972
1135
|
});
|
|
973
1136
|
edge.command("delete").description(`Delete an edge from a Flow file.
|
|
974
|
-
Use 'uip maestro flow
|
|
975
|
-
edge.command("remove").description(`Remove an edge from a Flow file.
|
|
976
|
-
Alias for '
|
|
1137
|
+
Use 'uip maestro flow edges list' to find the edge ID.`).argument("<file>", "Path to the .flow file").argument("<edge-id>", "ID of the edge to delete").examples(EDGE_DELETE_EXAMPLES).trackedAction(processContext, async (file, edgeId) => runDeleteEdge(file, edgeId, "EdgeDeleteSuccess"));
|
|
1138
|
+
edge.command("remove", { hidden: true }).description(`Remove an edge from a Flow file.
|
|
1139
|
+
Alias for 'edges delete'. Use 'uip maestro flow edges list' to find the edge ID.`).argument("<file>", "Path to the .flow file").argument("<edge-id>", "ID of the edge to remove").examples(EDGE_REMOVE_EXAMPLES).trackedAction(processContext, async (file, edgeId) => runDeleteEdge(file, edgeId, "EdgeRemoveSuccess"));
|
|
977
1140
|
};
|
|
978
|
-
|
|
979
|
-
// src/services/flow-eval-run-format.ts
|
|
980
|
-
function formatDuration(durationMs) {
|
|
981
|
-
if (durationMs === null || durationMs === undefined) {
|
|
982
|
-
return "-";
|
|
983
|
-
}
|
|
984
|
-
return `${(durationMs / 1000).toFixed(1)}s`;
|
|
985
|
-
}
|
|
986
|
-
function formatEvaluatorScores(scores, evaluators) {
|
|
987
|
-
if (!scores || scores.length === 0) {
|
|
988
|
-
return "-";
|
|
989
|
-
}
|
|
990
|
-
return scores.map((score) => {
|
|
991
|
-
const evaluator = evaluators.find((item) => item.id === score.evaluatorId);
|
|
992
|
-
return `${evaluator?.name ?? score.evaluatorId}: ${score.value}`;
|
|
993
|
-
}).join(", ");
|
|
994
|
-
}
|
|
995
|
-
function evaluatorSnapshotName(snapshot) {
|
|
996
|
-
if (typeof snapshot === "object" && snapshot !== null && !Array.isArray(snapshot) && typeof snapshot.name === "string") {
|
|
997
|
-
return snapshot.name;
|
|
998
|
-
}
|
|
999
|
-
return;
|
|
1000
|
-
}
|
|
1001
|
-
function remoteEvaluatorName(evaluatorId, evaluatorSnapshot, evaluators) {
|
|
1002
|
-
return evaluators.find((item) => item.id === evaluatorId)?.name ?? evaluatorSnapshotName(evaluatorSnapshot) ?? evaluatorId;
|
|
1003
|
-
}
|
|
1004
|
-
function remoteRunScore(run) {
|
|
1005
|
-
if (run.result?.scores && run.result.scores.length > 0) {
|
|
1006
|
-
const sum = run.result.scores.reduce((total, score) => total + score.value, 0);
|
|
1007
|
-
return Number((sum / run.result.scores.length).toFixed(4));
|
|
1008
|
-
}
|
|
1009
|
-
const value = run.result?.score?.value;
|
|
1010
|
-
return typeof value === "number" || typeof value === "boolean" ? value : "-";
|
|
1011
|
-
}
|
|
1012
|
-
function formatRemoteEvalRunRow(run, evaluators, verbose = false) {
|
|
1013
|
-
let evaluatorScores = "-";
|
|
1014
|
-
let justifications = "-";
|
|
1015
|
-
if (run.evaluatorRuns && run.evaluatorRuns.length > 0) {
|
|
1016
|
-
evaluatorScores = run.evaluatorRuns.map((evaluatorRun) => {
|
|
1017
|
-
const name = remoteEvaluatorName(evaluatorRun.evaluatorId, evaluatorRun.evaluatorSnapshot, evaluators);
|
|
1018
|
-
const score = evaluatorRun.result?.score;
|
|
1019
|
-
if (score?.type === "error") {
|
|
1020
|
-
return `${name}: Error`;
|
|
1021
|
-
}
|
|
1022
|
-
return `${name}: ${score?.value ?? "-"}`;
|
|
1023
|
-
}).join(", ");
|
|
1024
|
-
const justificationParts = run.evaluatorRuns.filter((evaluatorRun) => evaluatorRun.result?.score?.justification).map((evaluatorRun) => {
|
|
1025
|
-
const name = remoteEvaluatorName(evaluatorRun.evaluatorId, evaluatorRun.evaluatorSnapshot, evaluators);
|
|
1026
|
-
return `[${name}] ${evaluatorRun.result?.score?.justification}`;
|
|
1027
|
-
});
|
|
1028
|
-
if (justificationParts.length > 0) {
|
|
1029
|
-
justifications = justificationParts.join(" | ");
|
|
1030
|
-
}
|
|
1031
|
-
} else if (run.result?.scores && run.result.scores.length > 0) {
|
|
1032
|
-
evaluatorScores = formatEvaluatorScores(run.result.scores, evaluators);
|
|
1033
|
-
}
|
|
1034
|
-
const tokens = run.completionMetrics?.tokens;
|
|
1035
|
-
const duration = run.completionMetrics?.duration;
|
|
1036
|
-
const error = run.errorMessage ?? (typeof run.error === "string" ? run.error : run.error?.message) ?? "-";
|
|
1037
|
-
const row = {
|
|
1038
|
-
DataPoint: run.evalSnapshot?.name ?? run.id,
|
|
1039
|
-
Status: run.status,
|
|
1040
|
-
Score: remoteRunScore(run),
|
|
1041
|
-
EvaluatorScores: evaluatorScores,
|
|
1042
|
-
Tokens: typeof tokens === "number" && tokens > 0 ? tokens : "-",
|
|
1043
|
-
Duration: typeof duration === "number" ? formatDuration(duration) : "-",
|
|
1044
|
-
Error: error
|
|
1045
|
-
};
|
|
1046
|
-
if (verbose) {
|
|
1047
|
-
row.Justifications = justifications;
|
|
1048
|
-
}
|
|
1049
|
-
return row;
|
|
1050
|
-
}
|
|
1051
|
-
function isFailedRemoteRun(run) {
|
|
1052
|
-
const status = run.status.toLowerCase();
|
|
1053
|
-
if (status === "failed" || status === "workloadfailed" || run.errorMessage || run.error) {
|
|
1054
|
-
return true;
|
|
1055
|
-
}
|
|
1056
|
-
if (run.result?.score?.type === "error") {
|
|
1057
|
-
return true;
|
|
1058
|
-
}
|
|
1059
|
-
return run.evaluatorRuns?.some((evaluatorRun) => evaluatorRun.result?.score?.type === "error" || evaluatorRun.result?.score?.value === false) ?? false;
|
|
1060
|
-
}
|
|
1061
|
-
function isTerminalRemoteStatus(status) {
|
|
1062
|
-
return ["completed", "partiallycompleted", "failed"].includes(status.toLowerCase());
|
|
1063
|
-
}
|
|
1064
|
-
function formatEvalSetRunRow(run, evaluators) {
|
|
1065
|
-
return {
|
|
1066
|
-
EvalSetRunId: run.id,
|
|
1067
|
-
Status: run.status,
|
|
1068
|
-
Score: run.score ?? "-",
|
|
1069
|
-
DataPoints: run.numberOfEvalsExecuted ?? "-",
|
|
1070
|
-
Duration: formatDuration(run.durationMilliseconds),
|
|
1071
|
-
EvaluatorScores: formatEvaluatorScores(run.evaluatorScores, evaluators),
|
|
1072
|
-
CreatedAt: run.createdAt
|
|
1073
|
-
};
|
|
1074
|
-
}
|
|
1075
|
-
|
|
1076
1141
|
// src/commands/eval-run.ts
|
|
1077
1142
|
var FLOW_EVAL_PATH_OPTION_DESCRIPTION = "Path to a Flow project directory, or a solution directory with exactly one Flow project";
|
|
1078
1143
|
var POLL_INTERVAL_MS = 5000;
|
|
@@ -1080,7 +1145,7 @@ var POLL_TIMEOUT_MS = 600000;
|
|
|
1080
1145
|
var FLOW_EVAL_RUN_START_EXAMPLES = [
|
|
1081
1146
|
{
|
|
1082
1147
|
Description: "Start a Studio Web Flow evaluation run",
|
|
1083
|
-
Command: 'uip maestro flow eval
|
|
1148
|
+
Command: 'uip maestro flow eval runs start --set "Default Evaluation Set" --path ./my-solution/Flow',
|
|
1084
1149
|
Output: {
|
|
1085
1150
|
Code: "FlowEvalRunStarted",
|
|
1086
1151
|
Data: {
|
|
@@ -1095,7 +1160,7 @@ var FLOW_EVAL_RUN_START_EXAMPLES = [
|
|
|
1095
1160
|
var FLOW_EVAL_RUN_STATUS_EXAMPLES = [
|
|
1096
1161
|
{
|
|
1097
1162
|
Description: "Check the status of a Studio Web Flow evaluation run",
|
|
1098
|
-
Command: 'uip maestro flow eval
|
|
1163
|
+
Command: 'uip maestro flow eval runs status a1b2c3d4-0000-0000-0000-000000000101 --set "Default Evaluation Set" --path ./my-solution/Flow',
|
|
1099
1164
|
Output: {
|
|
1100
1165
|
Code: "FlowEvalRunStatus",
|
|
1101
1166
|
Data: {
|
|
@@ -1110,7 +1175,7 @@ var FLOW_EVAL_RUN_STATUS_EXAMPLES = [
|
|
|
1110
1175
|
var FLOW_EVAL_RUN_RESULTS_EXAMPLES = [
|
|
1111
1176
|
{
|
|
1112
1177
|
Description: "Show detailed per-data-point results for a Flow run",
|
|
1113
|
-
Command: 'uip maestro flow eval
|
|
1178
|
+
Command: 'uip maestro flow eval runs results a1b2c3d4-0000-0000-0000-000000000101 --set "Default Evaluation Set" --path ./my-solution/Flow',
|
|
1114
1179
|
Output: {
|
|
1115
1180
|
Code: "FlowEvalRunResults",
|
|
1116
1181
|
Data: [
|
|
@@ -1128,7 +1193,7 @@ var FLOW_EVAL_RUN_RESULTS_EXAMPLES = [
|
|
|
1128
1193
|
var FLOW_EVAL_RUN_LIST_EXAMPLES = [
|
|
1129
1194
|
{
|
|
1130
1195
|
Description: "List Studio Web evaluation runs for a Flow eval set",
|
|
1131
|
-
Command: 'uip maestro flow eval
|
|
1196
|
+
Command: 'uip maestro flow eval runs list --set "Default Evaluation Set" --path ./my-solution/Flow',
|
|
1132
1197
|
Output: {
|
|
1133
1198
|
Code: "FlowEvalRunList",
|
|
1134
1199
|
Data: [
|
|
@@ -1147,7 +1212,7 @@ var FLOW_EVAL_RUN_LIST_EXAMPLES = [
|
|
|
1147
1212
|
var FLOW_EVAL_RUN_COMPARE_EXAMPLES = [
|
|
1148
1213
|
{
|
|
1149
1214
|
Description: "Compare two Studio Web Flow evaluation runs",
|
|
1150
|
-
Command: 'uip maestro flow eval
|
|
1215
|
+
Command: 'uip maestro flow eval runs compare a1b2c3d4-0000-0000-0000-000000000101 --compare-to a1b2c3d4-0000-0000-0000-000000000102 --set "Default Evaluation Set" --path ./my-solution/Flow',
|
|
1151
1216
|
Output: {
|
|
1152
1217
|
Code: "FlowEvalRunComparison",
|
|
1153
1218
|
Data: {
|
|
@@ -1271,11 +1336,11 @@ async function resolveRemoteTarget(service, options, config, requireSolutionId =
|
|
|
1271
1336
|
}, requireSolutionId, config);
|
|
1272
1337
|
}
|
|
1273
1338
|
function registerEvalRunCommand(evalCmd) {
|
|
1274
|
-
const runCmd = evalCmd.command("run").description("Run Flow evaluation sets in Studio Web");
|
|
1339
|
+
const runCmd = evalCmd.command("runs").alias("run").description("Run Flow evaluation sets in Studio Web");
|
|
1275
1340
|
addStartOptions(runCmd.command("start").description("Start a Studio Web evaluation run (Flow solution must be available in Studio Web)")).option("--wait", "Wait for the evaluation to complete and show results").option("--timeout <seconds>", "Timeout in seconds for --wait polling", (value) => Number.parseInt(value, 10)).examples(FLOW_EVAL_RUN_START_EXAMPLES).trackedAction(processContext, async (options) => {
|
|
1276
1341
|
const [error] = await catchError((async () => {
|
|
1277
1342
|
const config = await resolveStudioWebConfig();
|
|
1278
|
-
const { FlowEvalRunService } = await import("./flow-eval-run-service-
|
|
1343
|
+
const { FlowEvalRunService } = await import("./flow-eval-run-service-03j1szf6.js");
|
|
1279
1344
|
const service = new FlowEvalRunService;
|
|
1280
1345
|
const result = await service.startRemoteEvalRun(options.path, options.set, config, {
|
|
1281
1346
|
solutionId: options.solutionId,
|
|
@@ -1294,7 +1359,7 @@ function registerEvalRunCommand(evalCmd) {
|
|
|
1294
1359
|
Evaluators: result.evaluators,
|
|
1295
1360
|
Status: result.status
|
|
1296
1361
|
},
|
|
1297
|
-
Instructions: options.wait ? "Waiting for completion..." : `Monitor with: uip maestro flow eval
|
|
1362
|
+
Instructions: options.wait ? "Waiting for completion..." : `Monitor with: uip maestro flow eval runs status ${result.evalSetRunId} --set "${options.set}" --path ${options.path}`
|
|
1298
1363
|
});
|
|
1299
1364
|
if (options.wait) {
|
|
1300
1365
|
await outputCompletedRemoteRun(service, config, options.path, result, options.timeout);
|
|
@@ -1304,10 +1369,10 @@ function registerEvalRunCommand(evalCmd) {
|
|
|
1304
1369
|
outputError("Failed to start flow evaluation run", error);
|
|
1305
1370
|
}
|
|
1306
1371
|
});
|
|
1307
|
-
addTargetOptions(runCmd.command("status").description("Check the status of a Studio Web Flow evaluation run").argument("<
|
|
1372
|
+
addTargetOptions(runCmd.command("status").description("Check the status of a Studio Web Flow evaluation run").argument("<eval-set-run-id>", "Evaluation set run ID")).examples(FLOW_EVAL_RUN_STATUS_EXAMPLES).trackedAction(processContext, async (evalSetRunId, options) => {
|
|
1308
1373
|
const [error] = await catchError((async () => {
|
|
1309
1374
|
const config = await resolveStudioWebConfig();
|
|
1310
|
-
const { FlowEvalRunService } = await import("./flow-eval-run-service-
|
|
1375
|
+
const { FlowEvalRunService } = await import("./flow-eval-run-service-03j1szf6.js");
|
|
1311
1376
|
const service = new FlowEvalRunService;
|
|
1312
1377
|
const target = await resolveRemoteTarget(service, options, config);
|
|
1313
1378
|
const [run, evaluators] = await Promise.all([
|
|
@@ -1330,10 +1395,10 @@ function registerEvalRunCommand(evalCmd) {
|
|
|
1330
1395
|
outputError("Failed to get flow evaluation run status", error);
|
|
1331
1396
|
}
|
|
1332
1397
|
});
|
|
1333
|
-
addTargetOptions(runCmd.command("results").description("Get detailed results for a Studio Web Flow evaluation run").argument("<
|
|
1398
|
+
addTargetOptions(runCmd.command("results").description("Get detailed results for a Studio Web Flow evaluation run").argument("<eval-set-run-id>", "Evaluation set run ID")).option("--only-failed", "Show only failed or errored data points").option("--verbose", "Include evaluator justifications in output").option("--export-format <json|csv>", "Export results to file (json or csv)").examples(FLOW_EVAL_RUN_RESULTS_EXAMPLES).trackedAction(processContext, async (evalSetRunId, options) => {
|
|
1334
1399
|
const [error] = await catchError((async () => {
|
|
1335
1400
|
const config = await resolveStudioWebConfig();
|
|
1336
|
-
const { FlowEvalRunService } = await import("./flow-eval-run-service-
|
|
1401
|
+
const { FlowEvalRunService } = await import("./flow-eval-run-service-03j1szf6.js");
|
|
1337
1402
|
const service = new FlowEvalRunService;
|
|
1338
1403
|
const target = await resolveRemoteTarget(service, options, config);
|
|
1339
1404
|
let evalRuns = await service.getRemoteEvalRuns(config, target.workloadId, evalSetRunId);
|
|
@@ -1364,17 +1429,19 @@ function registerEvalRunCommand(evalCmd) {
|
|
|
1364
1429
|
outputError("Failed to get flow evaluation results", error);
|
|
1365
1430
|
}
|
|
1366
1431
|
});
|
|
1367
|
-
addTargetOptions(runCmd.command("list").description("List Studio Web evaluation runs for a Flow eval set")).examples(FLOW_EVAL_RUN_LIST_EXAMPLES).trackedAction(processContext, async (options) => {
|
|
1432
|
+
addTargetOptions(addRowWindowOptions(runCmd.command("list")).description("List Studio Web evaluation runs for a Flow eval set")).examples(FLOW_EVAL_RUN_LIST_EXAMPLES).trackedAction(processContext, async (options) => {
|
|
1368
1433
|
const [error] = await catchError((async () => {
|
|
1369
1434
|
const config = await resolveStudioWebConfig();
|
|
1370
|
-
const { FlowEvalRunService } = await import("./flow-eval-run-service-
|
|
1435
|
+
const { FlowEvalRunService } = await import("./flow-eval-run-service-03j1szf6.js");
|
|
1371
1436
|
const service = new FlowEvalRunService;
|
|
1372
1437
|
const target = await resolveRemoteTarget(service, options, config);
|
|
1373
|
-
const
|
|
1438
|
+
const allRuns = await service.listRemoteEvalSetRuns(config, target.workloadId, target.evalSet.id);
|
|
1439
|
+
const { rows: runs, pagination } = rowWindow(allRuns, options);
|
|
1374
1440
|
if (runs.length === 0) {
|
|
1375
1441
|
OutputFormatter.success({
|
|
1376
1442
|
Result: RESULTS.Success,
|
|
1377
1443
|
Code: "FlowEvalRunList",
|
|
1444
|
+
Pagination: pagination,
|
|
1378
1445
|
Data: []
|
|
1379
1446
|
});
|
|
1380
1447
|
return;
|
|
@@ -1383,6 +1450,7 @@ function registerEvalRunCommand(evalCmd) {
|
|
|
1383
1450
|
OutputFormatter.success({
|
|
1384
1451
|
Result: RESULTS.Success,
|
|
1385
1452
|
Code: "FlowEvalRunList",
|
|
1453
|
+
Pagination: pagination,
|
|
1386
1454
|
Data: runs.map((run) => formatEvalSetRunRow(run, evaluators))
|
|
1387
1455
|
});
|
|
1388
1456
|
})());
|
|
@@ -1390,10 +1458,10 @@ function registerEvalRunCommand(evalCmd) {
|
|
|
1390
1458
|
outputError("Failed to list flow evaluation runs", error);
|
|
1391
1459
|
}
|
|
1392
1460
|
});
|
|
1393
|
-
addTargetOptions(runCmd.command("compare").description("Compare results of two Studio Web Flow evaluation runs").argument("<
|
|
1461
|
+
addTargetOptions(runCmd.command("compare").description("Compare results of two Studio Web Flow evaluation runs").argument("<eval-set-run-id>", "First evaluation set run ID").requiredOption("--compare-to <id>", "Second evaluation set run ID to compare against")).examples(FLOW_EVAL_RUN_COMPARE_EXAMPLES).trackedAction(processContext, async (evalSetRunId, options) => {
|
|
1394
1462
|
const [error] = await catchError((async () => {
|
|
1395
1463
|
const config = await resolveStudioWebConfig();
|
|
1396
|
-
const { FlowEvalRunService } = await import("./flow-eval-run-service-
|
|
1464
|
+
const { FlowEvalRunService } = await import("./flow-eval-run-service-03j1szf6.js");
|
|
1397
1465
|
const service = new FlowEvalRunService;
|
|
1398
1466
|
const target = await resolveRemoteTarget(service, options, config);
|
|
1399
1467
|
const [runsA, runsB, runMetaA, runMetaB] = await Promise.all([
|
|
@@ -1523,10 +1591,10 @@ function registerEvalCommand(program) {
|
|
|
1523
1591
|
registerEvalRunCommand(evalCmd);
|
|
1524
1592
|
}
|
|
1525
1593
|
function registerEvaluatorCommands(evalCmd) {
|
|
1526
|
-
const evaluator = evalCmd.command("evaluator").description("Manage Flow evaluators");
|
|
1527
|
-
evaluator.command("add").description("Add an evaluator to the flow project").argument("<name>", "Evaluator name").requiredOption("--type <type>", `Evaluator type: ${evaluatorTypeAliases().join(", ")}`).option("--description <text>", "Evaluator description").option("--target-key <key>", "Target output key", "*").option("--model <model>", "LLM model for LLM judge evaluators").option("--prompt <prompt>", "Custom LLM judge prompt").option("--path <path>", FLOW_EVAL_PATH_OPTION_DESCRIPTION2, ".").trackedAction(processContext, async (name, options) => {
|
|
1594
|
+
const evaluator = evalCmd.command("evaluators").alias("evaluator").description("Manage Flow evaluators");
|
|
1595
|
+
evaluator.command("create").alias("add").description("Add an evaluator to the flow project").argument("<name>", "Evaluator name").requiredOption("--type <type>", `Evaluator type: ${evaluatorTypeAliases().join(", ")}`).option("--description <text>", "Evaluator description").option("--target-key <key>", "Target output key", "*").option("--model <model>", "LLM model for LLM judge evaluators").option("--prompt <prompt>", "Custom LLM judge prompt").option("--path <path>", FLOW_EVAL_PATH_OPTION_DESCRIPTION2, ".").trackedAction(processContext, async (name, options) => {
|
|
1528
1596
|
const [error] = await catchError((async () => {
|
|
1529
|
-
const { FlowEvalService } = await import("./flow-eval-service-
|
|
1597
|
+
const { FlowEvalService } = await import("./flow-eval-service-9j46ta9k.js");
|
|
1530
1598
|
const service = new FlowEvalService;
|
|
1531
1599
|
const created = await service.addEvaluator(options.path, {
|
|
1532
1600
|
name,
|
|
@@ -1551,15 +1619,17 @@ function registerEvaluatorCommands(evalCmd) {
|
|
|
1551
1619
|
outputError2("Failed to add evaluator", error);
|
|
1552
1620
|
}
|
|
1553
1621
|
});
|
|
1554
|
-
evaluator.command("list").description("List evaluators in a flow project").option("--path <path>", FLOW_EVAL_PATH_OPTION_DESCRIPTION2, ".").trackedAction(processContext, async (options) => {
|
|
1622
|
+
addRowWindowOptions(evaluator.command("list")).description("List evaluators in a flow project").option("--path <path>", FLOW_EVAL_PATH_OPTION_DESCRIPTION2, ".").trackedAction(processContext, async (options) => {
|
|
1555
1623
|
const [error] = await catchError((async () => {
|
|
1556
|
-
const { FlowEvalService } = await import("./flow-eval-service-
|
|
1624
|
+
const { FlowEvalService } = await import("./flow-eval-service-9j46ta9k.js");
|
|
1557
1625
|
const service = new FlowEvalService;
|
|
1558
1626
|
const evaluators = await service.listEvaluators(options.path);
|
|
1627
|
+
const window = rowWindow(evaluators, options);
|
|
1559
1628
|
OutputFormatter.success({
|
|
1560
1629
|
Result: RESULTS.Success,
|
|
1561
1630
|
Code: "FlowEvalEvaluatorList",
|
|
1562
|
-
|
|
1631
|
+
Pagination: window.pagination,
|
|
1632
|
+
Data: window.rows.map((item) => ({
|
|
1563
1633
|
Name: item.name ?? String(item.evaluatorConfig.name ?? ""),
|
|
1564
1634
|
Id: item.id,
|
|
1565
1635
|
Type: item.evaluatorTypeId,
|
|
@@ -1572,9 +1642,9 @@ function registerEvaluatorCommands(evalCmd) {
|
|
|
1572
1642
|
outputError2("Failed to list evaluators", error);
|
|
1573
1643
|
}
|
|
1574
1644
|
});
|
|
1575
|
-
evaluator.command("remove").description("Remove an evaluator from a flow project").argument("<id>", "Evaluator ID, name, or file base name").option("--path <path>", FLOW_EVAL_PATH_OPTION_DESCRIPTION2, ".").trackedAction(processContext, async (id, options) => {
|
|
1645
|
+
evaluator.command("delete").alias("remove").description("Remove an evaluator from a flow project").argument("<id>", "Evaluator ID, name, or file base name").option("--path <path>", FLOW_EVAL_PATH_OPTION_DESCRIPTION2, ".").trackedAction(processContext, async (id, options) => {
|
|
1576
1646
|
const [error] = await catchError((async () => {
|
|
1577
|
-
const { FlowEvalService } = await import("./flow-eval-service-
|
|
1647
|
+
const { FlowEvalService } = await import("./flow-eval-service-9j46ta9k.js");
|
|
1578
1648
|
const service = new FlowEvalService;
|
|
1579
1649
|
const removed = await service.removeEvaluator(options.path, id);
|
|
1580
1650
|
if (!removed) {
|
|
@@ -1592,11 +1662,11 @@ function registerEvaluatorCommands(evalCmd) {
|
|
|
1592
1662
|
});
|
|
1593
1663
|
}
|
|
1594
1664
|
function registerEvalSetCommands(evalCmd) {
|
|
1595
|
-
const set = evalCmd.command("set").description("Manage evaluation sets");
|
|
1596
|
-
set.command("add").description("Create an evaluation set").argument("<name>", "Evaluation set name").option("--evaluators <refs>", "Comma-separated evaluator IDs or file base names (default: all)").option("--entry-point <id>", "Entry point node id — a trigger node id from the .flow file (not a BPMN path), stored as the eval set's selectedEntrypoint; defaults to the flow's trigger. An agent node id creates a node-scoped eval set (evaluates that node in isolation)").option("--path <path>", FLOW_EVAL_PATH_OPTION_DESCRIPTION2, ".").trackedAction(processContext, async (name, options) => {
|
|
1665
|
+
const set = evalCmd.command("sets").alias("set").description("Manage evaluation sets");
|
|
1666
|
+
set.command("create").alias("add").description("Create an evaluation set").argument("<name>", "Evaluation set name").option("--evaluators <refs>", "Comma-separated evaluator IDs or file base names (default: all)").option("--entry-point <id>", "Entry point node id — a trigger node id from the .flow file (not a BPMN path), stored as the eval set's selectedEntrypoint; defaults to the flow's trigger. An agent node id creates a node-scoped eval set (evaluates that node in isolation)").option("--path <path>", FLOW_EVAL_PATH_OPTION_DESCRIPTION2, ".").trackedAction(processContext, async (name, options) => {
|
|
1597
1667
|
const [error] = await catchError((async () => {
|
|
1598
|
-
const { FlowEvalService } = await import("./flow-eval-service-
|
|
1599
|
-
const { readEvalSetScope, readNodeTargetId } = await import("./flow-eval-node-target-
|
|
1668
|
+
const { FlowEvalService } = await import("./flow-eval-service-9j46ta9k.js");
|
|
1669
|
+
const { readEvalSetScope, readNodeTargetId } = await import("./flow-eval-node-target-dah1gmmh.js");
|
|
1600
1670
|
const service = new FlowEvalService;
|
|
1601
1671
|
const created = await service.addEvalSet(options.path, {
|
|
1602
1672
|
name,
|
|
@@ -1621,16 +1691,18 @@ function registerEvalSetCommands(evalCmd) {
|
|
|
1621
1691
|
outputError2("Failed to create evaluation set", error);
|
|
1622
1692
|
}
|
|
1623
1693
|
});
|
|
1624
|
-
set.command("list").description("List evaluation sets").option("--path <path>", FLOW_EVAL_PATH_OPTION_DESCRIPTION2, ".").trackedAction(processContext, async (options) => {
|
|
1694
|
+
addRowWindowOptions(set.command("list")).description("List evaluation sets").option("--path <path>", FLOW_EVAL_PATH_OPTION_DESCRIPTION2, ".").trackedAction(processContext, async (options) => {
|
|
1625
1695
|
const [error] = await catchError((async () => {
|
|
1626
|
-
const { FlowEvalService } = await import("./flow-eval-service-
|
|
1627
|
-
const { readEvalSetScope, readNodeTargetId } = await import("./flow-eval-node-target-
|
|
1696
|
+
const { FlowEvalService } = await import("./flow-eval-service-9j46ta9k.js");
|
|
1697
|
+
const { readEvalSetScope, readNodeTargetId } = await import("./flow-eval-node-target-dah1gmmh.js");
|
|
1628
1698
|
const service = new FlowEvalService;
|
|
1629
1699
|
const sets = await service.listEvalSets(options.path);
|
|
1700
|
+
const window = rowWindow(sets, options);
|
|
1630
1701
|
OutputFormatter.success({
|
|
1631
1702
|
Result: RESULTS.Success,
|
|
1632
1703
|
Code: "FlowEvalSetList",
|
|
1633
|
-
|
|
1704
|
+
Pagination: window.pagination,
|
|
1705
|
+
Data: window.rows.map((item) => {
|
|
1634
1706
|
const targetNode = readNodeTargetId(item);
|
|
1635
1707
|
return {
|
|
1636
1708
|
Name: item.name,
|
|
@@ -1648,9 +1720,9 @@ function registerEvalSetCommands(evalCmd) {
|
|
|
1648
1720
|
outputError2("Failed to list evaluation sets", error);
|
|
1649
1721
|
}
|
|
1650
1722
|
});
|
|
1651
|
-
set.command("remove").description("Remove an evaluation set").argument("<id>", "Evaluation set ID, name, or file base name").option("--path <path>", FLOW_EVAL_PATH_OPTION_DESCRIPTION2, ".").trackedAction(processContext, async (id, options) => {
|
|
1723
|
+
set.command("delete").alias("remove").description("Remove an evaluation set").argument("<id>", "Evaluation set ID, name, or file base name").option("--path <path>", FLOW_EVAL_PATH_OPTION_DESCRIPTION2, ".").trackedAction(processContext, async (id, options) => {
|
|
1652
1724
|
const [error] = await catchError((async () => {
|
|
1653
|
-
const { FlowEvalService } = await import("./flow-eval-service-
|
|
1725
|
+
const { FlowEvalService } = await import("./flow-eval-service-9j46ta9k.js");
|
|
1654
1726
|
const service = new FlowEvalService;
|
|
1655
1727
|
const removed = await service.removeEvalSet(options.path, id);
|
|
1656
1728
|
if (!removed) {
|
|
@@ -1668,13 +1740,13 @@ function registerEvalSetCommands(evalCmd) {
|
|
|
1668
1740
|
});
|
|
1669
1741
|
}
|
|
1670
1742
|
function registerEvaluationCommands(evalCmd) {
|
|
1671
|
-
evalCmd.command("add").description("Add a data point to an evaluation set").argument("<name>", "Data point name").requiredOption("--set <name>", "Evaluation set name or ID").option("--inputs <json>", "Input values as a JSON object").option("--input-file <key=path>", "Attach a file as input <key>; repeatable", collectInputFile, []).option("--expected <json>", "Expected output as a JSON object").option("--criteria <json>", "Per-evaluator criteria JSON object keyed by evaluator id").option("--search-text <text>", "Search text for contains evaluators").option("--path <path>", FLOW_EVAL_PATH_OPTION_DESCRIPTION2, ".").trackedAction(processContext, async (name, options) => {
|
|
1743
|
+
evalCmd.command("create").alias("add").description("Add a data point to an evaluation set").argument("<name>", "Data point name").requiredOption("--set <name>", "Evaluation set name or ID").option("--inputs <json>", "Input values as a JSON object").option("--input-file <key=path>", "Attach a file as input <key>; repeatable", collectInputFile, []).option("--expected <json>", "Expected output as a JSON object").option("--criteria <json>", "Per-evaluator criteria JSON object keyed by evaluator id").option("--search-text <text>", "Search text for contains evaluators").option("--path <path>", FLOW_EVAL_PATH_OPTION_DESCRIPTION2, ".").trackedAction(processContext, async (name, options) => {
|
|
1672
1744
|
const [error] = await catchError((async () => {
|
|
1673
1745
|
const inputs = options.inputs === undefined ? {} : parseJsonObject(options.inputs, "--inputs");
|
|
1674
1746
|
const inputFiles = parseInputFiles(options.inputFile);
|
|
1675
1747
|
const expectedOutput = options.expected ? parseJsonObject(options.expected, "--expected") : undefined;
|
|
1676
1748
|
const criteria = options.criteria ? parseCriteriaOption(options.criteria) : undefined;
|
|
1677
|
-
const { FlowEvalService } = await import("./flow-eval-service-
|
|
1749
|
+
const { FlowEvalService } = await import("./flow-eval-service-9j46ta9k.js");
|
|
1678
1750
|
const service = new FlowEvalService;
|
|
1679
1751
|
const evaluation = await service.addEvaluation(options.path, options.set, {
|
|
1680
1752
|
name,
|
|
@@ -1699,15 +1771,17 @@ function registerEvaluationCommands(evalCmd) {
|
|
|
1699
1771
|
outputError2("Failed to add evaluation data point", error);
|
|
1700
1772
|
}
|
|
1701
1773
|
});
|
|
1702
|
-
evalCmd.command("list").description("List data points in an evaluation set").requiredOption("--set <name>", "Evaluation set name or ID").option("--path <path>", FLOW_EVAL_PATH_OPTION_DESCRIPTION2, ".").trackedAction(processContext, async (options) => {
|
|
1774
|
+
addRowWindowOptions(evalCmd.command("list")).description("List data points in an evaluation set").requiredOption("--set <name>", "Evaluation set name or ID").option("--path <path>", FLOW_EVAL_PATH_OPTION_DESCRIPTION2, ".").trackedAction(processContext, async (options) => {
|
|
1703
1775
|
const [error] = await catchError((async () => {
|
|
1704
|
-
const { FlowEvalService } = await import("./flow-eval-service-
|
|
1776
|
+
const { FlowEvalService } = await import("./flow-eval-service-9j46ta9k.js");
|
|
1705
1777
|
const service = new FlowEvalService;
|
|
1706
1778
|
const evaluations = await service.listEvaluations(options.path, options.set);
|
|
1779
|
+
const window = rowWindow(evaluations, options);
|
|
1707
1780
|
OutputFormatter.success({
|
|
1708
1781
|
Result: RESULTS.Success,
|
|
1709
1782
|
Code: "FlowEvalList",
|
|
1710
|
-
|
|
1783
|
+
Pagination: window.pagination,
|
|
1784
|
+
Data: window.rows.map((item) => ({
|
|
1711
1785
|
Name: item.name,
|
|
1712
1786
|
Id: item.id,
|
|
1713
1787
|
Inputs: JSON.stringify(item.inputs),
|
|
@@ -1720,9 +1794,9 @@ function registerEvaluationCommands(evalCmd) {
|
|
|
1720
1794
|
outputError2("Failed to list evaluation data points", error);
|
|
1721
1795
|
}
|
|
1722
1796
|
});
|
|
1723
|
-
evalCmd.command("remove").description("Remove a data point from an evaluation set").argument("<id>", "Data point ID or name").requiredOption("--set <name>", "Evaluation set name or ID").option("--path <path>", FLOW_EVAL_PATH_OPTION_DESCRIPTION2, ".").trackedAction(processContext, async (id, options) => {
|
|
1797
|
+
evalCmd.command("delete").alias("remove").description("Remove a data point from an evaluation set").argument("<id>", "Data point ID or name").requiredOption("--set <name>", "Evaluation set name or ID").option("--path <path>", FLOW_EVAL_PATH_OPTION_DESCRIPTION2, ".").trackedAction(processContext, async (id, options) => {
|
|
1724
1798
|
const [error] = await catchError((async () => {
|
|
1725
|
-
const { FlowEvalService } = await import("./flow-eval-service-
|
|
1799
|
+
const { FlowEvalService } = await import("./flow-eval-service-9j46ta9k.js");
|
|
1726
1800
|
const service = new FlowEvalService;
|
|
1727
1801
|
const removed = await service.removeEvaluation(options.path, options.set, id);
|
|
1728
1802
|
if (!removed) {
|
|
@@ -1740,8 +1814,8 @@ function registerEvaluationCommands(evalCmd) {
|
|
|
1740
1814
|
});
|
|
1741
1815
|
}
|
|
1742
1816
|
function registerSimulationCommands(evalCmd) {
|
|
1743
|
-
const simulation = evalCmd.command("simulation").description("Manage simulations on eval data points");
|
|
1744
|
-
simulation.command("add").description("Add or update a simulation on a data point").argument("<component-id>", "Component ID to simulate").requiredOption("--set <name>", "Evaluation set name or ID").requiredOption("--data-point <id>", "Data point name or ID").requiredOption("--strategy <strategy>", "Simulation strategy: Static or Llm").option("--component-type <type>", "Component type (defaults to Node when --parent is used)").option("--component-description <text>", "Component description").option("--simulation-instructions <text>", "Simulation instructions (for Llm strategy)").option("--mock-value <json>", "Mock output value as JSON (for Static strategy)").option("--parent <component-id>", "Parent agent component ID. When set, the simulation is added as a child tool simulation on the parent agent node.").option("--path <path>", FLOW_EVAL_PATH_OPTION_DESCRIPTION2, ".").trackedAction(processContext, async (componentId, options) => {
|
|
1817
|
+
const simulation = evalCmd.command("simulations").alias("simulation").description("Manage simulations on eval data points");
|
|
1818
|
+
simulation.command("create").alias("add").description("Add or update a simulation on a data point").argument("<component-id>", "Component ID to simulate").requiredOption("--set <name>", "Evaluation set name or ID").requiredOption("--data-point <id>", "Data point name or ID").requiredOption("--strategy <strategy>", "Simulation strategy: Static or Llm").option("--component-type <type>", "Component type (defaults to Node when --parent is used)").option("--component-description <text>", "Component description").option("--simulation-instructions <text>", "Simulation instructions (for Llm strategy)").option("--mock-value <json>", "Mock output value as JSON (for Static strategy)").option("--parent <component-id>", "Parent agent component ID. When set, the simulation is added as a child tool simulation on the parent agent node.").option("--path <path>", FLOW_EVAL_PATH_OPTION_DESCRIPTION2, ".").trackedAction(processContext, async (componentId, options) => {
|
|
1745
1819
|
const [error] = await catchError((async () => {
|
|
1746
1820
|
const strategy = options.strategy;
|
|
1747
1821
|
if (strategy !== "Static" && strategy !== "Llm") {
|
|
@@ -1766,7 +1840,7 @@ function registerSimulationCommands(evalCmd) {
|
|
|
1766
1840
|
simulationInstruction: options.simulationInstructions,
|
|
1767
1841
|
mockValue
|
|
1768
1842
|
};
|
|
1769
|
-
const { FlowEvalService } = await import("./flow-eval-service-
|
|
1843
|
+
const { FlowEvalService } = await import("./flow-eval-service-9j46ta9k.js");
|
|
1770
1844
|
const service = new FlowEvalService;
|
|
1771
1845
|
if (options.parent !== undefined) {
|
|
1772
1846
|
const { simulation: created, warning } = await service.addChildSimulation(options.path, options.set, options.dataPoint, options.parent, simulation2);
|
|
@@ -1806,15 +1880,17 @@ function registerSimulationCommands(evalCmd) {
|
|
|
1806
1880
|
outputError2("Failed to add simulation", error);
|
|
1807
1881
|
}
|
|
1808
1882
|
});
|
|
1809
|
-
simulation.command("list").description("List simulations on a data point").requiredOption("--set <name>", "Evaluation set name or ID").requiredOption("--data-point <id>", "Data point name or ID").option("--parent <component-id>", "Parent agent component ID. When set, lists child tool simulations on the parent agent node.").option("--path <path>", FLOW_EVAL_PATH_OPTION_DESCRIPTION2, ".").trackedAction(processContext, async (options) => {
|
|
1883
|
+
addRowWindowOptions(simulation.command("list")).description("List simulations on a data point").requiredOption("--set <name>", "Evaluation set name or ID").requiredOption("--data-point <id>", "Data point name or ID").option("--parent <component-id>", "Parent agent component ID. When set, lists child tool simulations on the parent agent node.").option("--path <path>", FLOW_EVAL_PATH_OPTION_DESCRIPTION2, ".").trackedAction(processContext, async (options) => {
|
|
1810
1884
|
const [error] = await catchError((async () => {
|
|
1811
|
-
const { FlowEvalService } = await import("./flow-eval-service-
|
|
1885
|
+
const { FlowEvalService } = await import("./flow-eval-service-9j46ta9k.js");
|
|
1812
1886
|
const service = new FlowEvalService;
|
|
1813
1887
|
const simulations = options.parent !== undefined ? await service.listChildSimulations(options.path, options.set, options.dataPoint, options.parent) : await service.listSimulations(options.path, options.set, options.dataPoint);
|
|
1888
|
+
const window = rowWindow(simulations, options);
|
|
1814
1889
|
OutputFormatter.success({
|
|
1815
1890
|
Result: RESULTS.Success,
|
|
1816
1891
|
Code: options.parent !== undefined ? "FlowEvalChildSimulationList" : "FlowEvalSimulationList",
|
|
1817
|
-
|
|
1892
|
+
Pagination: window.pagination,
|
|
1893
|
+
Data: window.rows.map((s) => ({
|
|
1818
1894
|
ComponentId: s.componentId,
|
|
1819
1895
|
ComponentType: s.componentType,
|
|
1820
1896
|
ComponentDescription: s.componentDescription ?? "-",
|
|
@@ -1828,9 +1904,9 @@ function registerSimulationCommands(evalCmd) {
|
|
|
1828
1904
|
outputError2("Failed to list simulations", error);
|
|
1829
1905
|
}
|
|
1830
1906
|
});
|
|
1831
|
-
simulation.command("remove").description("Remove a simulation from a data point").argument("<component-id>", "Component ID to remove").requiredOption("--set <name>", "Evaluation set name or ID").requiredOption("--data-point <id>", "Data point name or ID").option("--parent <component-id>", "Parent agent component ID. When set, removes a child tool simulation from the parent agent node.").option("--path <path>", FLOW_EVAL_PATH_OPTION_DESCRIPTION2, ".").trackedAction(processContext, async (componentId, options) => {
|
|
1907
|
+
simulation.command("delete").alias("remove").description("Remove a simulation from a data point").argument("<component-id>", "Component ID to remove").requiredOption("--set <name>", "Evaluation set name or ID").requiredOption("--data-point <id>", "Data point name or ID").option("--parent <component-id>", "Parent agent component ID. When set, removes a child tool simulation from the parent agent node.").option("--path <path>", FLOW_EVAL_PATH_OPTION_DESCRIPTION2, ".").trackedAction(processContext, async (componentId, options) => {
|
|
1832
1908
|
const [error] = await catchError((async () => {
|
|
1833
|
-
const { FlowEvalService } = await import("./flow-eval-service-
|
|
1909
|
+
const { FlowEvalService } = await import("./flow-eval-service-9j46ta9k.js");
|
|
1834
1910
|
const service = new FlowEvalService;
|
|
1835
1911
|
const removed = options.parent !== undefined ? await service.removeChildSimulation(options.path, options.set, options.dataPoint, options.parent, componentId) : await service.removeSimulation(options.path, options.set, options.dataPoint, componentId);
|
|
1836
1912
|
if (!removed) {
|
|
@@ -1897,7 +1973,7 @@ function parseSchemaOption(raw) {
|
|
|
1897
1973
|
var FLOW_HITL_ADD_EXAMPLES = [
|
|
1898
1974
|
{
|
|
1899
1975
|
Description: "Add a bare HITL node with no schema fields",
|
|
1900
|
-
Command: "uip maestro flow hitl
|
|
1976
|
+
Command: "uip maestro flow hitl create workflow.flow",
|
|
1901
1977
|
Output: {
|
|
1902
1978
|
Code: "HitlNodeAdded",
|
|
1903
1979
|
Data: {
|
|
@@ -1910,7 +1986,7 @@ var FLOW_HITL_ADD_EXAMPLES = [
|
|
|
1910
1986
|
},
|
|
1911
1987
|
{
|
|
1912
1988
|
Description: "Add a HITL node with label, priority, and group assignee",
|
|
1913
|
-
Command: 'uip maestro flow hitl
|
|
1989
|
+
Command: 'uip maestro flow hitl create workflow.flow --label "Invoice Review" --priority High --assignee finance-approvers',
|
|
1914
1990
|
Output: {
|
|
1915
1991
|
Code: "HitlNodeAdded",
|
|
1916
1992
|
Data: {
|
|
@@ -1923,7 +1999,7 @@ var FLOW_HITL_ADD_EXAMPLES = [
|
|
|
1923
1999
|
},
|
|
1924
2000
|
{
|
|
1925
2001
|
Description: "Add a HITL node with full schema (inputs, outputs, and outcomes)",
|
|
1926
|
-
Command: `uip maestro flow hitl
|
|
2002
|
+
Command: `uip maestro flow hitl create workflow.flow --label "Approval" --schema '{"inputs":[{"name":"invoiceId","binding":"fetchInvoice1.result.invoiceId"}],"outputs":[{"name":"decision","required":true}],"outcomes":[{"name":"Approve"},{"name":"Reject"}]}'`,
|
|
1927
2003
|
Output: {
|
|
1928
2004
|
Code: "HitlNodeAdded",
|
|
1929
2005
|
Data: {
|
|
@@ -1937,7 +2013,7 @@ var FLOW_HITL_ADD_EXAMPLES = [
|
|
|
1937
2013
|
];
|
|
1938
2014
|
var registerHitlCommand = (program) => {
|
|
1939
2015
|
const hitl = program.command("hitl").description("Add HITL (Human-in-the-Loop) nodes to a Flow file");
|
|
1940
|
-
hitl.command("add").description("Add a Human-in-the-Loop node to a .flow file. Pauses flow execution and waits for a human to complete a task in Action Center.").argument("<file>", "Path to the .flow file").option("--schema <json>", 'Task schema. inputs pre-fill from flow variables (add "binding":"varName"), outputs write back (add "variable":"varName"). ' + `e.g. '{"title":"Invoice Approval","inputs":[{"name":"invoiceId"}],"outputs":[{"name":"decision","variable":"approvalDecision","required":true}],"outcomes":[{"name":"Approve"},{"name":"Reject"}]}'`).option("--priority <level>", "Task priority: Low, Medium, High (default: Low)").option("--position <x,y>", "Canvas position for the node (e.g. 250,300)").option("--label <label>", "Display label for the node").option("--assignee <email-or-group>", "Assignment criteria: user email (e.g. reviewer@company.com) or group name (e.g. finance-approvers)").examples(FLOW_HITL_ADD_EXAMPLES).trackedAction(processContext, async (file, options) => {
|
|
2016
|
+
hitl.command("create").alias("add").description("Add a Human-in-the-Loop node to a .flow file. Pauses flow execution and waits for a human to complete a task in Action Center.").argument("<file>", "Path to the .flow file").option("--schema <json>", 'Task schema. inputs pre-fill from flow variables (add "binding":"varName"), outputs write back (add "variable":"varName"). ' + `e.g. '{"title":"Invoice Approval","inputs":[{"name":"invoiceId"}],"outputs":[{"name":"decision","variable":"approvalDecision","required":true}],"outcomes":[{"name":"Approve"},{"name":"Reject"}]}'`).option("--priority <level>", "Task priority: Low, Medium, High (default: Low)").option("--position <x,y>", "Canvas position for the node (e.g. 250,300)").option("--label <label>", "Display label for the node").option("--assignee <email-or-group>", "Assignment criteria: user email (e.g. reviewer@company.com) or group name (e.g. finance-approvers)").examples(FLOW_HITL_ADD_EXAMPLES).trackedAction(processContext, async (file, options) => {
|
|
1941
2017
|
if (options.priority !== undefined && !VALID_PRIORITIES.includes(options.priority)) {
|
|
1942
2018
|
OutputFormatter.error({
|
|
1943
2019
|
Result: RESULTS.Failure,
|
|
@@ -1975,7 +2051,7 @@ var registerHitlCommand = (program) => {
|
|
|
1975
2051
|
}
|
|
1976
2052
|
schema = parsed;
|
|
1977
2053
|
}
|
|
1978
|
-
const { addHitlNode } = await import("./hitl-service-
|
|
2054
|
+
const { addHitlNode } = await import("./hitl-service-vcbhd4cb.js");
|
|
1979
2055
|
const [error, result] = await catchError(addHitlNode(file, {
|
|
1980
2056
|
schema,
|
|
1981
2057
|
priority: options.priority,
|
|
@@ -2068,8 +2144,8 @@ Packing or uploading the solution will sync solution resources automatically.`
|
|
|
2068
2144
|
];
|
|
2069
2145
|
var registerInitCommand = (program) => {
|
|
2070
2146
|
program.command("init").description("Create a new Flow project with boilerplate files. If run outside an existing solution, a parent '<name>Solution' is scaffolded automatically and the flow project is created inside it. If run inside an existing solution, the project is added to that solution.").argument("<name>", "Flow project name").option("--force", "Force initialization even if target directory exists and is not empty").option("--skip-solution-registration", "Do not auto-register this project in the surrounding solution").option("--automate", "Create a Maestro Automate project. Same Flow project and the same commands — it only changes the runtime profile written into operate.json.").option("--sdk-source [file]", "Also write the builder-SDK source: decompile the new .flow into <project>/.flow-sdk/<name>.flow.ts, or into [file] (relative to the current directory), creating its folder. Same as running 'uip maestro flow decompile <name>.flow -o <file> --no-pipeline' after init. Requires @uipath/maestro-builder-sdk.").examples(FLOW_INIT_EXAMPLES).trackedAction(processContext, async (name, options) => {
|
|
2071
|
-
const { flowInitAsync, FlowInitSdkSourceError } = await import("./flow-init-service-
|
|
2072
|
-
const { RuntimeProfile } = await import("./maestro-automate-entry-
|
|
2147
|
+
const { flowInitAsync, FlowInitSdkSourceError } = await import("./flow-init-service-0a4y3a46.js");
|
|
2148
|
+
const { RuntimeProfile } = await import("./maestro-automate-entry-6f9act3w.js");
|
|
2073
2149
|
const [error, result] = await catchError(flowInitAsync(name, {
|
|
2074
2150
|
force: options.force,
|
|
2075
2151
|
skipRegistration: options.skipSolutionRegistration === true,
|
|
@@ -2144,7 +2220,7 @@ var DEFAULT_JOB_LIST_ORDER_BY = "Id desc";
|
|
|
2144
2220
|
var FLOW_JOB_LIST_EXAMPLES = [
|
|
2145
2221
|
{
|
|
2146
2222
|
Description: "List recent Flow jobs in a folder",
|
|
2147
|
-
Command: "uip maestro flow
|
|
2223
|
+
Command: "uip maestro flow jobs list --folder-key c3d4e5f6-0000-0000-0000-000000000001 --limit 2",
|
|
2148
2224
|
Output: {
|
|
2149
2225
|
Code: "FlowJobList",
|
|
2150
2226
|
Data: [
|
|
@@ -2163,7 +2239,7 @@ var FLOW_JOB_LIST_EXAMPLES = [
|
|
|
2163
2239
|
var FLOW_JOB_STATUS_EXAMPLES = [
|
|
2164
2240
|
{
|
|
2165
2241
|
Description: "Get detailed status of a flow job",
|
|
2166
|
-
Command: "uip maestro flow
|
|
2242
|
+
Command: "uip maestro flow jobs status b2c3d4e5-0000-0000-0000-000000000001",
|
|
2167
2243
|
Output: {
|
|
2168
2244
|
Code: "FlowJobStatus",
|
|
2169
2245
|
Data: {
|
|
@@ -2225,9 +2301,9 @@ function formatFlowJob(job) {
|
|
|
2225
2301
|
};
|
|
2226
2302
|
}
|
|
2227
2303
|
function registerJobCommand(program) {
|
|
2228
|
-
const jobCmd = program.command("job").description("Manage Flow jobs");
|
|
2304
|
+
const jobCmd = program.command("jobs").alias("job").description("Manage Flow jobs");
|
|
2229
2305
|
jobCmd.command("list").description("List Flow jobs in a folder").addOption(createHiddenDeprecatedTenantOption("-t, --tenant <tenant-name>")).option("--folder-key <key>", "Folder key (GUID, defaults to authenticated folder)").option("--state <state>", `Filter by job state (${VALID_JOB_STATES.join(", ")})`).option("--process-name <name>", "Filter by Flow process name (contains match)").option("-l, --limit <number>", "Number of items to return", DEFAULT_JOB_LIST_LIMIT).option("--offset <number>", "Number of items to skip", DEFAULT_JOB_LIST_OFFSET).option("--sort-by <field>", "Sort results by field (e.g., 'Id desc')", DEFAULT_JOB_LIST_ORDER_BY).option("--all-fields", "Return all fields from the API response instead of a curated summary").option("--login-validity <minutes>", "Minimum minutes before token expiration to trigger a refresh (default: 10)", (value) => Number.parseInt(value, 10), 10).examples(FLOW_JOB_LIST_EXAMPLES).trackedAction(processContext, async (options) => {
|
|
2230
|
-
const { getLoginStatusAsync } = await import("./index-
|
|
2306
|
+
const { getLoginStatusAsync } = await import("./index-sqhbn7ew.js");
|
|
2231
2307
|
const [loginError, loginStatus] = await catchError(getLoginStatusAsync({
|
|
2232
2308
|
ensureTokenValidityMinutes: options.loginValidity
|
|
2233
2309
|
}));
|
|
@@ -2300,7 +2376,7 @@ function registerJobCommand(program) {
|
|
|
2300
2376
|
tenantId: loginStatus.tenantId,
|
|
2301
2377
|
baseUrl: loginStatus.baseUrl
|
|
2302
2378
|
};
|
|
2303
|
-
const { listFlowJobs } = await import("./flow-api-
|
|
2379
|
+
const { listFlowJobs } = await import("./flow-api-sat010z1.js");
|
|
2304
2380
|
const [listError, jobs] = await catchError(listFlowJobs(config, {
|
|
2305
2381
|
state,
|
|
2306
2382
|
processName: normalizedOptions.processName,
|
|
@@ -2331,7 +2407,7 @@ function registerJobCommand(program) {
|
|
|
2331
2407
|
});
|
|
2332
2408
|
});
|
|
2333
2409
|
jobCmd.command("traces").description("Stream traces for a running job").argument("<job-key>", "Job key (GUID from run command)").addOption(createHiddenDeprecatedTenantOption("-t, --tenant <tenant-name>")).option("--poll-interval <ms>", "Polling interval in milliseconds", "2000").option("--traces-service <name>", "Traces service name (default: llmopstenant_)", "llmopstenant_").option("--pretty", "Show traces in human-readable format instead of raw JSON").option("--login-validity <minutes>", "Minimum minutes before token expiration to trigger a refresh (default: 10)", parseInt, 10).trackedAction(processContext, async (jobKey, options) => {
|
|
2334
|
-
const { getLoginStatusAsync } = await import("./index-
|
|
2410
|
+
const { getLoginStatusAsync } = await import("./index-sqhbn7ew.js");
|
|
2335
2411
|
const [loginError, loginStatus] = await catchError(getLoginStatusAsync({
|
|
2336
2412
|
ensureTokenValidityMinutes: options.loginValidity
|
|
2337
2413
|
}));
|
|
@@ -2387,8 +2463,8 @@ function registerJobCommand(program) {
|
|
|
2387
2463
|
const pollSeconds = pollIntervalMs / 1000;
|
|
2388
2464
|
logger.info(`Streaming traces for job: ${jobKey}
|
|
2389
2465
|
Polling every ${pollSeconds}s...`);
|
|
2390
|
-
const { formatTraceLine } = await import("./shared-utils-
|
|
2391
|
-
const { streamJobTraces } = await import("./flow-api-
|
|
2466
|
+
const { formatTraceLine } = await import("./shared-utils-tqnx96mg.js");
|
|
2467
|
+
const { streamJobTraces } = await import("./flow-api-sat010z1.js");
|
|
2392
2468
|
const [tracesError, result] = await catchError(streamJobTraces(config, jobKey, {
|
|
2393
2469
|
onTrace: (trace) => {
|
|
2394
2470
|
if (options.pretty) {
|
|
@@ -2426,7 +2502,7 @@ function registerJobCommand(program) {
|
|
|
2426
2502
|
processContext.exit(result.success ? 0 : 1);
|
|
2427
2503
|
});
|
|
2428
2504
|
jobCmd.command("status").description("Get detailed status of a Flow job").argument("<job-key>", "Job key (GUID from run command)").addOption(createHiddenDeprecatedTenantOption("-t, --tenant <tenant-name>")).option("--folder-key <key>", "Folder key (GUID from list command, defaults to authenticated folder)").option("--detailed", "Show full response with all fields").option("--login-validity <minutes>", "Minimum minutes before token expiration to trigger a refresh (default: 10)", parseInt, 10).examples(FLOW_JOB_STATUS_EXAMPLES).trackedAction(processContext, async (jobKey, options) => {
|
|
2429
|
-
const { getLoginStatusAsync } = await import("./index-
|
|
2505
|
+
const { getLoginStatusAsync } = await import("./index-sqhbn7ew.js");
|
|
2430
2506
|
const [loginError, loginStatus] = await catchError(getLoginStatusAsync({
|
|
2431
2507
|
ensureTokenValidityMinutes: options.loginValidity
|
|
2432
2508
|
}));
|
|
@@ -2468,7 +2544,7 @@ function registerJobCommand(program) {
|
|
|
2468
2544
|
tenantId: loginStatus.tenantId,
|
|
2469
2545
|
baseUrl: loginStatus.baseUrl
|
|
2470
2546
|
};
|
|
2471
|
-
const { getJobStatusDetailed } = await import("./flow-api-
|
|
2547
|
+
const { getJobStatusDetailed } = await import("./flow-api-sat010z1.js");
|
|
2472
2548
|
const [statusError, status] = await catchError(getJobStatusDetailed(config, jobKey));
|
|
2473
2549
|
if (statusError) {
|
|
2474
2550
|
OutputFormatter.error({
|
|
@@ -2552,7 +2628,7 @@ var FLOW_MIGRATE_EXAMPLES = [
|
|
|
2552
2628
|
];
|
|
2553
2629
|
var registerMigrateCommand = (program) => {
|
|
2554
2630
|
program.command("migrate").description("Migrate a .flow file to the current workflow and node schema versions").argument("<file>", "Path to the .flow file").option("--dry-run", "Show what would change without writing the file").option("--no-include-optional", "Skip optional node migrations (e.g. typeVersion normalization). Default: optional migrations are applied.").examples(FLOW_MIGRATE_EXAMPLES).trackedAction(processContext, async (file, options) => {
|
|
2555
|
-
const { migrateFlow } = await import("./flow-migrate-service-
|
|
2631
|
+
const { migrateFlow } = await import("./flow-migrate-service-mkqpbwtv.js");
|
|
2556
2632
|
const [error, result] = await catchError(migrateFlow(file, {
|
|
2557
2633
|
dryRun: options.dryRun,
|
|
2558
2634
|
includeOptional: options.includeOptional
|
|
@@ -2593,7 +2669,7 @@ var registerMigrateCommand = (program) => {
|
|
|
2593
2669
|
var NODE_ADD_EXAMPLES = [
|
|
2594
2670
|
{
|
|
2595
2671
|
Description: "Add a manual trigger node to a flow",
|
|
2596
|
-
Command: 'uip maestro flow
|
|
2672
|
+
Command: 'uip maestro flow nodes create flow.json core.trigger.manual --label "Start"',
|
|
2597
2673
|
Output: {
|
|
2598
2674
|
Code: "NodeAddSuccess",
|
|
2599
2675
|
Data: {
|
|
@@ -2611,7 +2687,7 @@ var NODE_ADD_EXAMPLES = [
|
|
|
2611
2687
|
var NODE_CONFIGURE_EXAMPLES = [
|
|
2612
2688
|
{
|
|
2613
2689
|
Description: "Configure a connector node with connection details",
|
|
2614
|
-
Command: `uip maestro flow
|
|
2690
|
+
Command: `uip maestro flow nodes configure flow.json node_a1b2c3d4 --detail '{"connectionId":"b2c3d4e5-0000-0000-0000-000000000001","folderKey":"c3d4e5f6-0000-0000-0000-000000000001","method":"POST","endpoint":"/issues"}'`,
|
|
2615
2691
|
Output: {
|
|
2616
2692
|
Code: "NodeConfigureSuccess",
|
|
2617
2693
|
Data: {
|
|
@@ -2623,7 +2699,7 @@ var NODE_CONFIGURE_EXAMPLES = [
|
|
|
2623
2699
|
},
|
|
2624
2700
|
{
|
|
2625
2701
|
Description: "Configure a generic connector activity (e.g. SFDC InsertRecord) — requires objectName",
|
|
2626
|
-
Command: `uip maestro flow
|
|
2702
|
+
Command: `uip maestro flow nodes configure flow.json node_a1b2c3d4 --detail '{"connectionId":"b2c3d4e5-0000-0000-0000-000000000001","folderKey":"c3d4e5f6-0000-0000-0000-000000000001","method":"POST","endpoint":"/Account","objectName":"Account","bodyParameters":{"Name":"Acme Corp"}}'`,
|
|
2627
2703
|
Output: {
|
|
2628
2704
|
Code: "NodeConfigureSuccess",
|
|
2629
2705
|
Data: {
|
|
@@ -2635,7 +2711,7 @@ var NODE_CONFIGURE_EXAMPLES = [
|
|
|
2635
2711
|
},
|
|
2636
2712
|
{
|
|
2637
2713
|
Description: "Configure a param bound to another node's output — must use $vars., not the bare node id",
|
|
2638
|
-
Command: `uip maestro flow
|
|
2714
|
+
Command: `uip maestro flow nodes configure flow.json node_a1b2c3d4 --detail '{"connectionId":"b2c3d4e5-0000-0000-0000-000000000001","folderKey":"c3d4e5f6-0000-0000-0000-000000000001","method":"POST","endpoint":"/Account","bodyParameters":{"recordId":"=js:$vars.createEntityRecord1.output.Id"}}'`,
|
|
2639
2715
|
Output: {
|
|
2640
2716
|
Code: "NodeConfigureSuccess",
|
|
2641
2717
|
Data: {
|
|
@@ -2649,7 +2725,7 @@ var NODE_CONFIGURE_EXAMPLES = [
|
|
|
2649
2725
|
var NODE_LIST_EXAMPLES = [
|
|
2650
2726
|
{
|
|
2651
2727
|
Description: "List all nodes in a flow file",
|
|
2652
|
-
Command: "uip maestro flow
|
|
2728
|
+
Command: "uip maestro flow nodes list flow.json",
|
|
2653
2729
|
Output: {
|
|
2654
2730
|
Code: "NodeListSuccess",
|
|
2655
2731
|
Data: {
|
|
@@ -2665,7 +2741,7 @@ var NODE_LIST_EXAMPLES = [
|
|
|
2665
2741
|
var NODE_DELETE_EXAMPLES = [
|
|
2666
2742
|
{
|
|
2667
2743
|
Description: "Delete a node and its connections from a flow",
|
|
2668
|
-
Command: "uip maestro flow
|
|
2744
|
+
Command: "uip maestro flow nodes delete flow.json node_a1b2c3d4",
|
|
2669
2745
|
Output: {
|
|
2670
2746
|
Code: "NodeDeleteSuccess",
|
|
2671
2747
|
Data: {
|
|
@@ -2685,7 +2761,7 @@ var NODE_DELETE_EXAMPLES = [
|
|
|
2685
2761
|
var NODE_REMOVE_EXAMPLES = [
|
|
2686
2762
|
{
|
|
2687
2763
|
Description: "Remove a node and its connections from a flow",
|
|
2688
|
-
Command: "uip maestro flow
|
|
2764
|
+
Command: "uip maestro flow nodes remove flow.json node_a1b2c3d4",
|
|
2689
2765
|
Output: {
|
|
2690
2766
|
Code: "NodeRemoveSuccess",
|
|
2691
2767
|
Data: {
|
|
@@ -2715,10 +2791,10 @@ function parsePosition2(value) {
|
|
|
2715
2791
|
return { x, y };
|
|
2716
2792
|
}
|
|
2717
2793
|
function getDeleteNodeInstructions(file) {
|
|
2718
|
-
return `Check that "${file}" exists and run 'uip maestro flow
|
|
2794
|
+
return `Check that "${file}" exists and run 'uip maestro flow nodes list ${file}' to find a valid node ID, then retry.`;
|
|
2719
2795
|
}
|
|
2720
2796
|
async function runDeleteNode(file, nodeId, code) {
|
|
2721
|
-
const { deleteNodeFromFlow } = await import("./node-service-
|
|
2797
|
+
const { deleteNodeFromFlow } = await import("./node-service-7wz8gx7h.js");
|
|
2722
2798
|
const normalizedNodeId = nodeId.trim();
|
|
2723
2799
|
const [error, result] = await catchError(deleteNodeFromFlow(file, normalizedNodeId));
|
|
2724
2800
|
if (error) {
|
|
@@ -2744,10 +2820,10 @@ async function runDeleteNode(file, nodeId, code) {
|
|
|
2744
2820
|
});
|
|
2745
2821
|
}
|
|
2746
2822
|
var registerNodeCommand = (program) => {
|
|
2747
|
-
const node = program.command("node").description("Manage nodes in a Flow file");
|
|
2748
|
-
node.command("add").description(`Add a node to a Flow file.
|
|
2749
|
-
` + "For connector nodes (type uipath.connector), do NOT pass --input here — " + `run '
|
|
2750
|
-
Example: uip maestro flow
|
|
2823
|
+
const node = program.command("nodes").alias("node").description("Manage nodes in a Flow file");
|
|
2824
|
+
node.command("create").alias("add").description(`Add a node to a Flow file.
|
|
2825
|
+
` + "For connector nodes (type uipath.connector), do NOT pass --input here — " + `run 'nodes configure' afterwards to supply connection and endpoint details.
|
|
2826
|
+
Example: uip maestro flow nodes create flow.flow uipath.connector.jira.createIssue --label 'Create Jira Issue'`).argument("<file>", "Path to the .flow file").argument("<node-type>", "Node type identifier (e.g. core.trigger.manual)").option("-i, --input <json>", `JSON object of input values to set on the node (e.g. '{"script": "..."}')`).option("--position <x,y>", "Node position in the canvas (e.g. 250,150)").option("--label <label>", "Display label for the node").option("--source <uuid>", "Source UUID for nodes whose manifest declares a source dependency. Use the agent's ProjectId (inline agent nodes) or the resource id from the parent inline agent's resources[] (agent-tool resource nodes). Populates inputs.source.").option("--parent <node-id>", "Id of the existing node that should contain this node. Set when authoring a loop body whose containment cannot be " + "inferred from edges alone — typically the id of a " + "core.logic.loop node.").option("--metadata <file>", "Non-catalog activity only: the generated activity metadata (<Name>.json from 'uip is activities metadata generate'). The node definition is built from it instead of the registry; the node type must be uipath.connector.custom.<connector-key>.<slug>. Requires --scripts.").option("--scripts <dir>", "Non-catalog activity only: directory holding <scriptRef>.js for the action and every lookup the metadata references; the sources are embedded in the node. Requires --metadata.").examples(NODE_ADD_EXAMPLES).trackedAction(processContext, async (file, nodeType, options) => {
|
|
2751
2827
|
if (options.metadata === undefined !== (options.scripts === undefined)) {
|
|
2752
2828
|
OutputFormatter.error({
|
|
2753
2829
|
Result: RESULTS.Failure,
|
|
@@ -2804,7 +2880,7 @@ Example: uip maestro flow node add flow.flow uipath.connector.jira.createIssue -
|
|
|
2804
2880
|
NodeTypeNotEnabledError,
|
|
2805
2881
|
NodeTypeNotFoundError,
|
|
2806
2882
|
SourceRequiredError
|
|
2807
|
-
} = await import("./node-service-
|
|
2883
|
+
} = await import("./node-service-7wz8gx7h.js");
|
|
2808
2884
|
const [error, result] = await catchError(addNodeToFlow(file, nodeType, {
|
|
2809
2885
|
position,
|
|
2810
2886
|
label: options.label,
|
|
@@ -2849,8 +2925,8 @@ Example: uip maestro flow node add flow.flow uipath.connector.jira.createIssue -
|
|
|
2849
2925
|
});
|
|
2850
2926
|
});
|
|
2851
2927
|
node.command("configure").description(`Configure a connector or managed HTTP node with connection and method details.
|
|
2852
|
-
` + `Run this after '
|
|
2853
|
-
` + `Use '
|
|
2928
|
+
` + `Run this after 'nodes create' — populates inputs.detail and creates workflow bindings.
|
|
2929
|
+
` + `Use 'nodes list' to find the node ID.
|
|
2854
2930
|
|
|
2855
2931
|
CONNECTOR ACTIVITIES (type uipath.connector.*, NOT *.trigger.*)
|
|
2856
2932
|
Required: connectionId, folderKey, method, endpoint.
|
|
@@ -2931,7 +3007,7 @@ MANAGED HTTP NODES (type core.action.http.v2)
|
|
|
2931
3007
|
processContext.exit(1);
|
|
2932
3008
|
return;
|
|
2933
3009
|
}
|
|
2934
|
-
const { configureConnectorNode, InvalidDetailError } = await import("./connector-service-
|
|
3010
|
+
const { configureConnectorNode, InvalidDetailError } = await import("./connector-service-ttm75a4n.js");
|
|
2935
3011
|
const [error, result] = await catchError(configureConnectorNode(file, nodeId, parsed));
|
|
2936
3012
|
if (error) {
|
|
2937
3013
|
const message = error instanceof InvalidDetailError ? "Invalid --detail" : "Error configuring node";
|
|
@@ -2956,8 +3032,8 @@ MANAGED HTTP NODES (type core.action.http.v2)
|
|
|
2956
3032
|
}
|
|
2957
3033
|
});
|
|
2958
3034
|
});
|
|
2959
|
-
node.command("list").description("List all nodes in a Flow file").argument("<file>", "Path to the .flow file").examples(NODE_LIST_EXAMPLES).trackedAction(processContext, async (file) => {
|
|
2960
|
-
const { listNodesInFlow } = await import("./node-service-
|
|
3035
|
+
addRowWindowOptions(node.command("list")).description("List all nodes in a Flow file").argument("<file>", "Path to the .flow file").examples(NODE_LIST_EXAMPLES).trackedAction(processContext, async (file, options) => {
|
|
3036
|
+
const { listNodesInFlow } = await import("./node-service-7wz8gx7h.js");
|
|
2961
3037
|
const [error, result] = await catchError(listNodesInFlow(file));
|
|
2962
3038
|
if (error) {
|
|
2963
3039
|
OutputFormatter.error({
|
|
@@ -2968,21 +3044,23 @@ MANAGED HTTP NODES (type core.action.http.v2)
|
|
|
2968
3044
|
processContext.exit(1);
|
|
2969
3045
|
return;
|
|
2970
3046
|
}
|
|
3047
|
+
const window = rowWindow(result.nodes, options);
|
|
2971
3048
|
OutputFormatter.success({
|
|
2972
3049
|
Result: RESULTS.Success,
|
|
2973
3050
|
Code: "NodeListSuccess",
|
|
2974
3051
|
Data: {
|
|
2975
|
-
Nodes:
|
|
2976
|
-
Count:
|
|
2977
|
-
}
|
|
3052
|
+
Nodes: window.rows,
|
|
3053
|
+
Count: window.rows.length
|
|
3054
|
+
},
|
|
3055
|
+
Pagination: window.pagination
|
|
2978
3056
|
});
|
|
2979
3057
|
});
|
|
2980
3058
|
node.command("delete").description(`Delete a node from a Flow file.
|
|
2981
3059
|
Automatically removes connected edges, orphaned bindings, orphaned definitions, and node variables owned by the deleted node.
|
|
2982
|
-
Use '
|
|
2983
|
-
node.command("remove").description(`Remove a node from a Flow file.
|
|
2984
|
-
Alias for '
|
|
2985
|
-
Use '
|
|
3060
|
+
Use 'nodes list' to find the node ID.`).argument("<file>", "Path to the .flow file").argument("<node-id>", "ID of the node to delete").examples(NODE_DELETE_EXAMPLES).trackedAction(processContext, async (file, nodeId) => runDeleteNode(file, nodeId, "NodeDeleteSuccess"));
|
|
3061
|
+
node.command("remove", { hidden: true }).description(`Remove a node from a Flow file.
|
|
3062
|
+
Alias for 'nodes delete'. Automatically removes connected edges, orphaned bindings, orphaned definitions, and node variables owned by the removed node.
|
|
3063
|
+
Use 'nodes list' to find the node ID.`).argument("<file>", "Path to the .flow file").argument("<node-id>", "ID of the node to remove").examples(NODE_REMOVE_EXAMPLES).trackedAction(processContext, async (file, nodeId) => runDeleteNode(file, nodeId, "NodeRemoveSuccess"));
|
|
2986
3064
|
};
|
|
2987
3065
|
|
|
2988
3066
|
// src/commands/pack.ts
|
|
@@ -3002,7 +3080,7 @@ var FLOW_PACK_EXAMPLES = [
|
|
|
3002
3080
|
var registerPackCommand = (program) => {
|
|
3003
3081
|
const command = program.command("pack").description("Pack a Flow project into a .nupkg file").argument("<project-path>", "Path to the Flow project directory").argument("<output-path>", "Output directory where the .nupkg will be saved").option("-n, --name <name>", "Package name (default: project folder name)").option("-v, --version <version>", "Package version (default: 1.0.0)", "1.0.0");
|
|
3004
3082
|
registerPackageMetadataOptions(command).examples(FLOW_PACK_EXAMPLES).trackedAction(processContext, async (projectPath, outputPath, options) => {
|
|
3005
|
-
const { FlowPackService } = await import("./flow-pack-service-
|
|
3083
|
+
const { FlowPackService } = await import("./flow-pack-service-7dj2hhyz.js");
|
|
3006
3084
|
const service = new FlowPackService;
|
|
3007
3085
|
const exitCode = await service.execute(projectPath, {
|
|
3008
3086
|
output: outputPath,
|
|
@@ -3106,24 +3184,25 @@ var FLOW_PROCESS_RUN_EXAMPLES = [
|
|
|
3106
3184
|
function flowProcessRunErrorCode(error) {
|
|
3107
3185
|
return error.message.toLowerCase().includes("release key is required") ? "FlowReleaseKeyRequired" : undefined;
|
|
3108
3186
|
}
|
|
3109
|
-
async function
|
|
3187
|
+
async function resolveRelease(config, processKey) {
|
|
3110
3188
|
const separator = processKey.lastIndexOf(":");
|
|
3111
3189
|
const key = separator === -1 ? processKey : processKey.slice(0, separator);
|
|
3112
3190
|
const version = separator === -1 ? undefined : processKey.slice(separator + 1);
|
|
3113
|
-
const
|
|
3114
|
-
const
|
|
3115
|
-
const
|
|
3116
|
-
const
|
|
3117
|
-
|
|
3118
|
-
|
|
3191
|
+
const byReleaseKey = config.releaseKey !== undefined;
|
|
3192
|
+
const { escapeODataStringLiteral: esc, listFlowProcesses } = await import("./flow-api-sat010z1.js");
|
|
3193
|
+
const processes = await listFlowProcesses(config, byReleaseKey ? `Key eq '${esc(config.releaseKey)}'` : `ProcessKey eq '${esc(key)}'`);
|
|
3194
|
+
const matches = processes.filter((candidate) => Boolean(candidate.key) && (byReleaseKey ? candidate.key === config.releaseKey : candidate.processKey === key && (version === undefined || candidate.processVersion === version)));
|
|
3195
|
+
const [release, ...extra] = matches;
|
|
3196
|
+
if (release === undefined) {
|
|
3197
|
+
throw new Error(byReleaseKey ? `No Flow release with key '${config.releaseKey}' in folder ${config.folderKey}.` : `No Flow release matches process key '${processKey}' in folder ${config.folderKey}.`);
|
|
3119
3198
|
}
|
|
3120
3199
|
if (extra.length > 0) {
|
|
3121
3200
|
throw new Error(`${matches.length} Flow releases match process key '${processKey}' in folder ${config.folderKey}: ${matches.map((match) => `${match.processVersion} (${match.key})`).join(", ")}.`);
|
|
3122
3201
|
}
|
|
3123
|
-
return
|
|
3202
|
+
return release;
|
|
3124
3203
|
}
|
|
3125
3204
|
async function resolveFolderForList(options) {
|
|
3126
|
-
const { resolveFolder } = await import("./index-
|
|
3205
|
+
const { resolveFolder } = await import("./index-wycgq0ff.js");
|
|
3127
3206
|
if (options.folderKey && options.folderPath) {
|
|
3128
3207
|
const [pathError, pathFolder] = await catchError(resolveFolder({ folderPath: options.folderPath }, {
|
|
3129
3208
|
tenant: options.tenant,
|
|
@@ -3155,8 +3234,8 @@ async function resolveFolderForList(options) {
|
|
|
3155
3234
|
function registerProcessCommand(program) {
|
|
3156
3235
|
const processCmd = program.command("process").description("Manage Flow processes");
|
|
3157
3236
|
registerSharedProcessCommands(processCmd, { toolLabel: "Flow" });
|
|
3158
|
-
processCmd.command("list").description("List available Flow projects. The releaseActive and releaseLatest fields reflect Orchestrator release-level state (whether the release is marked active or the highest version on the manifest) and do not indicate whether the process is deployed or runnable.").addOption(createHiddenDeprecatedTenantOption("-t, --tenant <tenant-name>")).option("--filter <odata>", "Additional OData filter").option("-f, --folder-key <key>", "Folder key (GUID)").option("--folder-path <path>", "Folder path (e.g. 'Shared/Invoices'). Alternative to --folder-key.").option("--login-validity <minutes>", "Minimum minutes before token expiration to trigger a refresh (default: 10)", parseInt, 10).examples(FLOW_PROCESS_LIST_EXAMPLES).trackedAction(processContext, async (options) => {
|
|
3159
|
-
const { getLoginStatusAsync } = await import("./index-
|
|
3237
|
+
addRowWindowOptions(processCmd.command("list")).description("List available Flow projects. The releaseActive and releaseLatest fields reflect Orchestrator release-level state (whether the release is marked active or the highest version on the manifest) and do not indicate whether the process is deployed or runnable.").addOption(createHiddenDeprecatedTenantOption("-t, --tenant <tenant-name>")).option("--filter <odata>", "Additional OData filter").option("-f, --folder-key <key>", "Folder key (GUID)").option("--folder-path <path>", "Folder path (e.g. 'Shared/Invoices'). Alternative to --folder-key.").option("--login-validity <minutes>", "Minimum minutes before token expiration to trigger a refresh (default: 10)", parseInt, 10).examples(FLOW_PROCESS_LIST_EXAMPLES).trackedAction(processContext, async (options) => {
|
|
3238
|
+
const { getLoginStatusAsync } = await import("./index-sqhbn7ew.js");
|
|
3160
3239
|
if (options.folderKey === undefined && options.folderPath === undefined) {
|
|
3161
3240
|
OutputFormatter.error({
|
|
3162
3241
|
Result: RESULTS.ValidationError,
|
|
@@ -3225,8 +3304,11 @@ function registerProcessCommand(program) {
|
|
|
3225
3304
|
tenantName,
|
|
3226
3305
|
baseUrl: loginStatus.baseUrl
|
|
3227
3306
|
};
|
|
3228
|
-
const { listFlowProcesses } = await import("./flow-api-
|
|
3229
|
-
const [listError, processes] = await catchError(listFlowProcesses(config, options.filter
|
|
3307
|
+
const { listFlowProcesses } = await import("./flow-api-sat010z1.js");
|
|
3308
|
+
const [listError, processes] = await catchError(listFlowProcesses(config, options.filter, {
|
|
3309
|
+
limit: options.limit,
|
|
3310
|
+
offset: options.offset
|
|
3311
|
+
}));
|
|
3230
3312
|
if (listError) {
|
|
3231
3313
|
OutputFormatter.error({
|
|
3232
3314
|
Result: RESULTS.Failure,
|
|
@@ -3247,11 +3329,12 @@ function registerProcessCommand(program) {
|
|
|
3247
3329
|
releaseLatest: p.isLatestVersion ? "Yes" : "No"
|
|
3248
3330
|
}));
|
|
3249
3331
|
OutputFormatter.emitList("FlowProjectList", formattedData, {
|
|
3250
|
-
emptyInstructions: "No Flow projects found. Check folder permissions or try a different folder."
|
|
3332
|
+
emptyInstructions: options.offset === 0 ? "No Flow projects found. Check folder permissions or try a different folder." : undefined,
|
|
3333
|
+
pagination: apiPagination(formattedData.length, options)
|
|
3251
3334
|
});
|
|
3252
3335
|
});
|
|
3253
3336
|
processCmd.command("get").description("Get Flow project schema and details").argument("<process-key>", "Process key (e.g., MyFlow.flow.Flow:1.0.0)").argument("<feed-id>", "Feed ID (from 'flow project list')").addOption(createHiddenDeprecatedTenantOption("-t, --tenant <tenant-name>")).requiredOption("-f, --folder-key <key>", "Folder key (GUID)").option("--login-validity <minutes>", "Minimum minutes before token expiration to trigger a refresh (default: 10)", parseInt, 10).examples(FLOW_PROCESS_GET_EXAMPLES).trackedAction(processContext, async (processKey, feedId, options) => {
|
|
3254
|
-
const { getLoginStatusAsync } = await import("./index-
|
|
3337
|
+
const { getLoginStatusAsync } = await import("./index-sqhbn7ew.js");
|
|
3255
3338
|
const [loginError, loginStatus] = await catchError(getLoginStatusAsync({
|
|
3256
3339
|
ensureTokenValidityMinutes: options.loginValidity
|
|
3257
3340
|
}));
|
|
@@ -3302,7 +3385,7 @@ function registerProcessCommand(program) {
|
|
|
3302
3385
|
baseUrl: loginStatus.baseUrl,
|
|
3303
3386
|
feedId
|
|
3304
3387
|
};
|
|
3305
|
-
const { getFlowEntryPoints } = await import("./flow-api-
|
|
3388
|
+
const { getFlowEntryPoints } = await import("./flow-api-sat010z1.js");
|
|
3306
3389
|
const [entryPointsError, entryPoints] = await catchError(getFlowEntryPoints(config));
|
|
3307
3390
|
if (entryPointsError) {
|
|
3308
3391
|
OutputFormatter.error({
|
|
@@ -3340,13 +3423,14 @@ function registerProcessCommand(program) {
|
|
|
3340
3423
|
Instructions: `Found ${entryPoints.length} entry point(s) for ${processKey}`
|
|
3341
3424
|
});
|
|
3342
3425
|
});
|
|
3343
|
-
processCmd.command("run").description("Run a Flow project with inputs").argument("<process-key>", "Process key (e.g., MyFlow.flow.Flow:1.0.0)").argument("<folder-key>", "Folder key (GUID)").option("-i, --inputs <json>", "Input parameters as JSON string or @file.json").option("--attachment <name=path>", "Upload a local file as a file-typed workflow input variable (repeatable). Example: --attachment file1=./resume.pdf", appendOption, []).addOption(createHiddenDeprecatedTenantOption("-t, --tenant <tenant-name>")).option("--release-key <key>", "Release key (GUID, from list command)").option("--feed-id <id>", "Feed ID for package lookup (optional)").option("--robot-ids <ids>", "Comma-separated robot IDs (optional)").option("--validate", "Validate inputs against project schema (basic: required fields + primitive types)").option("--login-validity <minutes>", "Minimum minutes before token expiration to trigger a refresh (default: 10)", parseInt, 10).option("--wait", "Block until the job reaches a terminal state (Successful, Faulted, Stopped)").option("--timeout <seconds>", "Maximum seconds to wait (0 = no timeout). Requires --wait.", String(DEFAULT_TIMEOUT_MS / 1000)).option("--poll-interval <seconds>", "Seconds between status checks. Requires --wait.", String(DEFAULT_INTERVAL_MS / 1000)).examples(FLOW_PROCESS_RUN_EXAMPLES).trackedAction(processContext, async (processKey, folderKey, options) => {
|
|
3344
|
-
const { getLoginStatusAsync } = await import("./index-
|
|
3426
|
+
processCmd.command("run").description("Run a Flow project with inputs").argument("<process-key>", "Process key (e.g., MyFlow.flow.Flow:1.0.0)").argument("<folder-key>", "Folder key (GUID)").option("-i, --inputs <json>", "Input parameters as JSON string or @file.json").option("--attachment <name=path>", "Upload a local file as a file-typed workflow input variable (repeatable). Example: --attachment file1=./resume.pdf", appendOption, []).addOption(createHiddenDeprecatedTenantOption("-t, --tenant <tenant-name>")).option("--release-key <key>", "Release key (GUID, from list command)").option("--feed-id <id>", "Feed ID for package lookup (optional)").option("--robot-ids <ids>", "Comma-separated robot IDs (optional)").option("--entry-point <id>", "Entry point node id — a trigger node id from the .flow file. Defaults to the release's default entry point").option("--validate", "Validate inputs against project schema (basic: required fields + primitive types)").option("--login-validity <minutes>", "Minimum minutes before token expiration to trigger a refresh (default: 10)", parseInt, 10).option("--wait", "Block until the job reaches a terminal state (Successful, Faulted, Stopped)").option("--timeout <seconds>", "Maximum seconds to wait (0 = no timeout). Requires --wait.", String(DEFAULT_TIMEOUT_MS / 1000)).option("--poll-interval <seconds>", "Seconds between status checks. Requires --wait.", String(DEFAULT_INTERVAL_MS / 1000)).examples(FLOW_PROCESS_RUN_EXAMPLES).trackedAction(processContext, async (processKey, folderKey, options) => {
|
|
3427
|
+
const { getLoginStatusAsync } = await import("./index-sqhbn7ew.js");
|
|
3345
3428
|
const {
|
|
3346
3429
|
parseFlowInputs,
|
|
3430
|
+
resolveEntryPoint,
|
|
3347
3431
|
startFlowProjectJob,
|
|
3348
3432
|
validateFlowInputs
|
|
3349
|
-
} = await import("./flow-api-
|
|
3433
|
+
} = await import("./flow-api-sat010z1.js");
|
|
3350
3434
|
const [loginError, loginStatus] = await catchError(getLoginStatusAsync({
|
|
3351
3435
|
ensureTokenValidityMinutes: options.loginValidity
|
|
3352
3436
|
}));
|
|
@@ -3401,7 +3485,7 @@ function registerProcessCommand(program) {
|
|
|
3401
3485
|
}
|
|
3402
3486
|
inputs = parsed;
|
|
3403
3487
|
} else {
|
|
3404
|
-
const { readStdin } = await import("./input-reader-
|
|
3488
|
+
const { readStdin } = await import("./input-reader-n7kzdrev.js");
|
|
3405
3489
|
const [stdinError, stdinData] = await catchError(readStdin());
|
|
3406
3490
|
if (stdinError) {
|
|
3407
3491
|
OutputFormatter.error({
|
|
@@ -3426,6 +3510,68 @@ function registerProcessCommand(program) {
|
|
|
3426
3510
|
inputs = parsed;
|
|
3427
3511
|
}
|
|
3428
3512
|
}
|
|
3513
|
+
const config = {
|
|
3514
|
+
processKey,
|
|
3515
|
+
folderKey,
|
|
3516
|
+
inputs,
|
|
3517
|
+
authToken: loginStatus.accessToken || "",
|
|
3518
|
+
organizationId: loginStatus.organizationId,
|
|
3519
|
+
tenantName,
|
|
3520
|
+
tenantId: loginStatus.tenantId,
|
|
3521
|
+
baseUrl: loginStatus.baseUrl,
|
|
3522
|
+
releaseKey: options.releaseKey,
|
|
3523
|
+
feedId: options.feedId
|
|
3524
|
+
};
|
|
3525
|
+
let mainEntryPointId;
|
|
3526
|
+
const fillRelease = async () => {
|
|
3527
|
+
const [resolveError, release] = await catchError(resolveRelease(config, processKey));
|
|
3528
|
+
if (resolveError) {
|
|
3529
|
+
OutputFormatter.error({
|
|
3530
|
+
Result: RESULTS.Failure,
|
|
3531
|
+
Code: "FlowReleaseKeyRequired",
|
|
3532
|
+
Message: resolveError.message,
|
|
3533
|
+
Instructions: `Run 'uip maestro flow process list --folder-key ${folderKey}' and pass the matching releaseKey as --release-key.`
|
|
3534
|
+
});
|
|
3535
|
+
processContext.exit(1);
|
|
3536
|
+
return false;
|
|
3537
|
+
}
|
|
3538
|
+
if (config.releaseKey === undefined) {
|
|
3539
|
+
logger.info(`Resolved --release-key ${release.key} for process ${processKey}.`);
|
|
3540
|
+
}
|
|
3541
|
+
config.releaseKey = release.key;
|
|
3542
|
+
config.feedId ??= release.feedId;
|
|
3543
|
+
mainEntryPointId = release.entryPointId;
|
|
3544
|
+
return true;
|
|
3545
|
+
};
|
|
3546
|
+
const needsFeed = config.feedId === undefined && (options.entryPoint !== undefined || options.validate);
|
|
3547
|
+
const needsMainEntryPoint = options.validate && options.entryPoint === undefined;
|
|
3548
|
+
if ((needsFeed || needsMainEntryPoint) && !await fillRelease()) {
|
|
3549
|
+
return;
|
|
3550
|
+
}
|
|
3551
|
+
let entryPoint;
|
|
3552
|
+
if (options.entryPoint !== undefined) {
|
|
3553
|
+
const [entryPointError, resolved] = await catchError(resolveEntryPoint(config, options.entryPoint));
|
|
3554
|
+
if (entryPointError instanceof UnknownEntryPointError) {
|
|
3555
|
+
OutputFormatter.error({
|
|
3556
|
+
Result: RESULTS.ValidationError,
|
|
3557
|
+
Message: entryPointError.message,
|
|
3558
|
+
Instructions: entryPointError.instructions
|
|
3559
|
+
});
|
|
3560
|
+
processContext.exit(3);
|
|
3561
|
+
return;
|
|
3562
|
+
}
|
|
3563
|
+
if (entryPointError) {
|
|
3564
|
+
OutputFormatter.error({
|
|
3565
|
+
Result: RESULTS.Failure,
|
|
3566
|
+
Message: entryPointError.message,
|
|
3567
|
+
Instructions: instructionsFor("backend", entryPointError)
|
|
3568
|
+
});
|
|
3569
|
+
processContext.exit(1);
|
|
3570
|
+
return;
|
|
3571
|
+
}
|
|
3572
|
+
entryPoint = resolved;
|
|
3573
|
+
config.entryPointPath = resolved.Path;
|
|
3574
|
+
}
|
|
3429
3575
|
const attachmentSpecs = options.attachment ?? [];
|
|
3430
3576
|
if (attachmentSpecs.length > 0) {
|
|
3431
3577
|
const [parseError, specs] = catchError(() => attachmentSpecs.map(parseAttachmentSpec));
|
|
@@ -3438,7 +3584,7 @@ function registerProcessCommand(program) {
|
|
|
3438
3584
|
processContext.exit(1);
|
|
3439
3585
|
return;
|
|
3440
3586
|
}
|
|
3441
|
-
const { uploadJobAttachment } = await import("./index-
|
|
3587
|
+
const { uploadJobAttachment } = await import("./index-wycgq0ff.js");
|
|
3442
3588
|
const [uploadError, resolved] = await catchError(resolveAttachmentInputs(specs, (bytes, fileName) => uploadJobAttachment(bytes, fileName, {
|
|
3443
3589
|
tenant: tenantName
|
|
3444
3590
|
})));
|
|
@@ -3459,18 +3605,6 @@ function registerProcessCommand(program) {
|
|
|
3459
3605
|
logger.info(`Uploaded '${path}' as attachment ${reference.ID} (variable '${name}').`);
|
|
3460
3606
|
}
|
|
3461
3607
|
}
|
|
3462
|
-
const config = {
|
|
3463
|
-
processKey,
|
|
3464
|
-
folderKey,
|
|
3465
|
-
inputs,
|
|
3466
|
-
authToken: loginStatus.accessToken || "",
|
|
3467
|
-
organizationId: loginStatus.organizationId,
|
|
3468
|
-
tenantName,
|
|
3469
|
-
tenantId: loginStatus.tenantId,
|
|
3470
|
-
baseUrl: loginStatus.baseUrl,
|
|
3471
|
-
releaseKey: options.releaseKey,
|
|
3472
|
-
feedId: options.feedId
|
|
3473
|
-
};
|
|
3474
3608
|
if (options.robotIds) {
|
|
3475
3609
|
config.robotIds = options.robotIds.split(",").map((id) => parseInt(id.trim(), 10));
|
|
3476
3610
|
if (config.robotIds.some((id) => Number.isNaN(id))) {
|
|
@@ -3484,7 +3618,7 @@ function registerProcessCommand(program) {
|
|
|
3484
3618
|
}
|
|
3485
3619
|
}
|
|
3486
3620
|
if (options.validate) {
|
|
3487
|
-
const [valError, validation] = await catchError(validateFlowInputs(config, inputs));
|
|
3621
|
+
const [valError, validation] = await catchError(validateFlowInputs(config, inputs, entryPoint, mainEntryPointId));
|
|
3488
3622
|
if (valError) {
|
|
3489
3623
|
const code = flowProcessRunErrorCode(valError);
|
|
3490
3624
|
OutputFormatter.error({
|
|
@@ -3537,20 +3671,8 @@ ${errorList}`,
|
|
|
3537
3671
|
timeoutMs = timeoutS * 1000;
|
|
3538
3672
|
intervalMs = intervalS * 1000;
|
|
3539
3673
|
}
|
|
3540
|
-
if (config.releaseKey === undefined) {
|
|
3541
|
-
|
|
3542
|
-
if (resolveError) {
|
|
3543
|
-
OutputFormatter.error({
|
|
3544
|
-
Result: RESULTS.Failure,
|
|
3545
|
-
Code: "FlowReleaseKeyRequired",
|
|
3546
|
-
Message: resolveError.message,
|
|
3547
|
-
Instructions: `Run 'uip maestro flow process list --folder-key ${folderKey}' and pass the matching releaseKey as --release-key.`
|
|
3548
|
-
});
|
|
3549
|
-
processContext.exit(1);
|
|
3550
|
-
return;
|
|
3551
|
-
}
|
|
3552
|
-
config.releaseKey = resolvedReleaseKey;
|
|
3553
|
-
logger.info(`Resolved --release-key ${resolvedReleaseKey} for process ${processKey}.`);
|
|
3674
|
+
if (config.releaseKey === undefined && !await fillRelease()) {
|
|
3675
|
+
return;
|
|
3554
3676
|
}
|
|
3555
3677
|
const [jobError, job] = await catchError(startFlowProjectJob(config));
|
|
3556
3678
|
if (jobError) {
|
|
@@ -3573,7 +3695,7 @@ ${errorList}`,
|
|
|
3573
3695
|
traceId: job.traceId,
|
|
3574
3696
|
folderKey
|
|
3575
3697
|
},
|
|
3576
|
-
Instructions: `Watch traces: uip maestro flow
|
|
3698
|
+
Instructions: `Watch traces: uip maestro flow jobs traces ${job.key} --folder-key ${folderKey}`
|
|
3577
3699
|
});
|
|
3578
3700
|
if (!options.wait) {
|
|
3579
3701
|
processContext.exit(0);
|
|
@@ -3588,7 +3710,7 @@ ${errorList}`,
|
|
|
3588
3710
|
processContext.exit(1);
|
|
3589
3711
|
return;
|
|
3590
3712
|
}
|
|
3591
|
-
const { handleFlowJobWait } = await import("./wait-for-flow-job-
|
|
3713
|
+
const { handleFlowJobWait } = await import("./wait-for-flow-job-b0vj8828.js");
|
|
3592
3714
|
await handleFlowJobWait(job.key, {
|
|
3593
3715
|
config,
|
|
3594
3716
|
timeoutMs,
|
|
@@ -3630,13 +3752,13 @@ function getDefaultOutputPath(fs = getFileSystem()) {
|
|
|
3630
3752
|
}
|
|
3631
3753
|
var registerPublishCommand = (program) => {
|
|
3632
3754
|
program.command("publish").description("Pack a Flow project and upload the resulting .nupkg to Orchestrator packages").argument("<project-path>", "Path to the Flow project directory").argument("[output-path]", "Output directory where the generated .nupkg will be saved").option("-n, --name <name>", "Package name (default: project folder name)").option("-v, --version <version>", "Package version (default: 1.0.0)", "1.0.0").addOption(createHiddenDeprecatedTenantOption("-t, --tenant <tenant-name>")).option("--feed-id <feedId>", "Feed ID (optional, defaults to tenant feed). Mutually exclusive with --folder-key/--folder-path.").option("--folder-key <key>", "Folder key (GUID) of an Orchestrator folder hierarchy feed. The CLI resolves the folder's feed ID automatically. Mutually exclusive with --feed-id and --folder-path.").option("--folder-path <path>", "Folder path (e.g. 'Shared/Sub') of an Orchestrator folder hierarchy feed. The CLI resolves the folder's feed ID automatically. Mutually exclusive with --feed-id and --folder-key.").examples(FLOW_PUBLISH_EXAMPLES).trackedAction(processContext, async (projectPath, outputPath, options) => {
|
|
3633
|
-
const { getLoginStatusAsync } = await import("./index-
|
|
3755
|
+
const { getLoginStatusAsync } = await import("./index-sqhbn7ew.js");
|
|
3634
3756
|
const {
|
|
3635
3757
|
createApiClient,
|
|
3636
3758
|
PackageFeedsApi,
|
|
3637
3759
|
ProcessesApi,
|
|
3638
3760
|
resolveFolder
|
|
3639
|
-
} = await import("./index-
|
|
3761
|
+
} = await import("./index-wycgq0ff.js");
|
|
3640
3762
|
const fs = getFileSystem();
|
|
3641
3763
|
const shouldCleanupOutput = outputPath === undefined;
|
|
3642
3764
|
const packageOutputPath = outputPath ?? getDefaultOutputPath(fs);
|
|
@@ -3722,7 +3844,7 @@ var registerPublishCommand = (program) => {
|
|
|
3722
3844
|
}
|
|
3723
3845
|
resolvedFeedId = folderFeedId;
|
|
3724
3846
|
}
|
|
3725
|
-
const { FlowPackService } = await import("./flow-pack-service-
|
|
3847
|
+
const { FlowPackService } = await import("./flow-pack-service-7dj2hhyz.js");
|
|
3726
3848
|
const service = new FlowPackService;
|
|
3727
3849
|
const [packError, packResult] = await catchError(service.executeAsync(projectPath, {
|
|
3728
3850
|
output: packageOutputPath,
|
|
@@ -3823,7 +3945,7 @@ var registerRegistryCommand2 = (program) => {
|
|
|
3823
3945
|
// src/commands/tidy.ts
|
|
3824
3946
|
var registerTidyCommand = (program) => {
|
|
3825
3947
|
program.command("format").description("Format a .flow file by auto-laying out nodes to prevent overlaps and arrange in a clean flow").argument("<file>", "Path to the .flow file").trackedAction(processContext, async (file) => {
|
|
3826
|
-
const { tidyFlow } = await import("./tidy-service-
|
|
3948
|
+
const { tidyFlow } = await import("./tidy-service-tqjea6g2.js");
|
|
3827
3949
|
const [error, result] = await catchError(tidyFlow(file));
|
|
3828
3950
|
if (error) {
|
|
3829
3951
|
OutputFormatter.error({
|
|
@@ -3908,6 +4030,17 @@ var FLOW_VALIDATE_EXAMPLES = [
|
|
|
3908
4030
|
}
|
|
3909
4031
|
}
|
|
3910
4032
|
},
|
|
4033
|
+
{
|
|
4034
|
+
Description: "Validate against freshly fetched node manifests, bypassing the 30-minute manifest cache",
|
|
4035
|
+
Command: "uip maestro flow validate flow.json --force",
|
|
4036
|
+
Output: {
|
|
4037
|
+
Code: "FlowValidate",
|
|
4038
|
+
Data: {
|
|
4039
|
+
File: "flow.json",
|
|
4040
|
+
Status: "Valid"
|
|
4041
|
+
}
|
|
4042
|
+
}
|
|
4043
|
+
},
|
|
3911
4044
|
{
|
|
3912
4045
|
Description: "Fail validation on expression and script type errors (they are warnings by default)",
|
|
3913
4046
|
Command: "uip maestro flow validate flow.json --strict-expressions",
|
|
@@ -3921,11 +4054,11 @@ var FLOW_VALIDATE_EXAMPLES = [
|
|
|
3921
4054
|
}
|
|
3922
4055
|
];
|
|
3923
4056
|
var registerValidateCommand = (program) => {
|
|
3924
|
-
program.command("validate").description("Validate a .flow file (or a project directory containing one) against the Flow schema").argument("<
|
|
4057
|
+
program.command("validate").description("Validate a .flow file (or a project directory containing one) against the Flow schema").argument("<flow-file>", "Path to the .flow file (or a project directory containing one) to validate").option("--governance", "Validate agent nodes against organization governance policies (requires login)").option("--strict-bindings", "Fail validation when a Managed HTTP node (core.action.http.v2) carries a connector-shaped label but no Integration Service binding. Default: warn only.").option("--strict-expressions", "Fail validation when an expression or script body has a type error. The check always runs, using the shared Flow expression checker (the same engine the canvas runs); its findings are warnings by default. Default: warn only.").option("--force", "Refetch the current node manifests used by the stale-handle check instead of reading the cached copy (the cache `registry pull` writes, kept 30 minutes per tenant). The refetched manifests replace the cache, as `registry pull --force` does.").examples(FLOW_VALIDATE_EXAMPLES).trackedAction(processContext, async (flowFile, options) => {
|
|
3925
4058
|
let governanceEnforcements;
|
|
3926
4059
|
let availableModelNames;
|
|
3927
4060
|
if (options.governance) {
|
|
3928
|
-
const { fetchGovernanceData } = await import("./governance-fetcher-
|
|
4061
|
+
const { fetchGovernanceData } = await import("./governance-fetcher-76hxssjm.js");
|
|
3929
4062
|
const [error, data] = await catchError(fetchGovernanceData());
|
|
3930
4063
|
if (error) {
|
|
3931
4064
|
OutputFormatter.error({
|
|
@@ -3939,11 +4072,12 @@ var registerValidateCommand = (program) => {
|
|
|
3939
4072
|
governanceEnforcements = data.enforcements;
|
|
3940
4073
|
availableModelNames = data.modelNames;
|
|
3941
4074
|
}
|
|
3942
|
-
const { FlowValidateService } = await import("./flow-validate-service-
|
|
4075
|
+
const { FlowValidateService } = await import("./flow-validate-service-1ktjayjv.js");
|
|
3943
4076
|
const service = new FlowValidateService({
|
|
3944
4077
|
governanceEnforcements,
|
|
3945
4078
|
availableModelNames,
|
|
3946
4079
|
validateCurrentManifests: true,
|
|
4080
|
+
manifestCache: options.force !== true,
|
|
3947
4081
|
strictBindings: options.strictBindings === true,
|
|
3948
4082
|
strictExpressions: options.strictExpressions ?? STRICT_EXPRESSIONS_DEFAULT
|
|
3949
4083
|
});
|
|
@@ -3958,7 +4092,7 @@ var registerValidateCommand = (program) => {
|
|
|
3958
4092
|
var VARIABLE_ADD_EXAMPLES = [
|
|
3959
4093
|
{
|
|
3960
4094
|
Description: "Add a string input variable to a flow (auto-bound to the flow's trigger node, making it an entry-point input)",
|
|
3961
|
-
Command: "uip maestro flow
|
|
4095
|
+
Command: "uip maestro flow variables create flow.json myInput --direction in --type string",
|
|
3962
4096
|
Output: {
|
|
3963
4097
|
Code: "VariableAddSuccess",
|
|
3964
4098
|
Data: {
|
|
@@ -3973,7 +4107,7 @@ var VARIABLE_ADD_EXAMPLES = [
|
|
|
3973
4107
|
},
|
|
3974
4108
|
{
|
|
3975
4109
|
Description: "Bind an input to a specific trigger when the flow has several entry points",
|
|
3976
|
-
Command: "uip maestro flow
|
|
4110
|
+
Command: "uip maestro flow variables create flow.json myInput --direction in --type string --trigger-node-id timerTrigger1",
|
|
3977
4111
|
Output: {
|
|
3978
4112
|
Code: "VariableAddSuccess",
|
|
3979
4113
|
Data: {
|
|
@@ -3990,7 +4124,7 @@ var VARIABLE_ADD_EXAMPLES = [
|
|
|
3990
4124
|
var VARIABLE_DELETE_EXAMPLES = [
|
|
3991
4125
|
{
|
|
3992
4126
|
Description: "Remove a variable from a flow",
|
|
3993
|
-
Command: "uip maestro flow
|
|
4127
|
+
Command: "uip maestro flow variables delete flow.json myInput",
|
|
3994
4128
|
Output: {
|
|
3995
4129
|
Code: "VariableRemoveSuccess",
|
|
3996
4130
|
Data: {
|
|
@@ -4006,7 +4140,7 @@ var VARIABLE_DELETE_EXAMPLES = [
|
|
|
4006
4140
|
var VARIABLE_LIST_EXAMPLES = [
|
|
4007
4141
|
{
|
|
4008
4142
|
Description: "List all variables in a flow file",
|
|
4009
|
-
Command: "uip maestro flow
|
|
4143
|
+
Command: "uip maestro flow variables list flow.json",
|
|
4010
4144
|
Output: {
|
|
4011
4145
|
Code: "VariableListSuccess",
|
|
4012
4146
|
Data: {
|
|
@@ -4067,9 +4201,9 @@ function parseDefaultValue(value, type) {
|
|
|
4067
4201
|
}
|
|
4068
4202
|
}
|
|
4069
4203
|
var registerVariableCommand = (program) => {
|
|
4070
|
-
const variable = program.command("variable").description("Manage variables in a Flow file");
|
|
4071
|
-
variable.command("add").description("Add a variable to a Flow file").argument("<file>", "Path to the .flow file").argument("<variable-id>", "Variable identifier (e.g. myInputVar)").requiredOption("-d, --direction <direction>", `Variable direction (${VALID_DIRECTIONS.join(", ")})`).option("-t, --type <type>", `Data type (${VALID_TYPES.join(", ")})`, "string").option("--default-value <value>", "Default value (parsed based on --type)").option("--description <text>", "Human-readable description").option("--schema <json>", "JSON schema for object/array types").option("--sub-type <subType>", "Sub-type for complex types").option("--trigger-node-id <nodeId>", "Trigger node an input variable belongs to (defaults to the flow's only trigger node; required when the flow has several)").examples(VARIABLE_ADD_EXAMPLES).trackedAction(processContext, async (file, variableId, options) => {
|
|
4072
|
-
const { validateIdentifier } = await import("./index-
|
|
4204
|
+
const variable = program.command("variables").alias("variable").description("Manage variables in a Flow file");
|
|
4205
|
+
variable.command("create").alias("add").description("Add a variable to a Flow file").argument("<file>", "Path to the .flow file").argument("<variable-id>", "Variable identifier (e.g. myInputVar)").requiredOption("-d, --direction <direction>", `Variable direction (${VALID_DIRECTIONS.join(", ")})`).option("-t, --type <type>", `Data type (${VALID_TYPES.join(", ")})`, "string").option("--default-value <value>", "Default value (parsed based on --type)").option("--description <text>", "Human-readable description").option("--schema <json>", "JSON schema for object/array types").option("--sub-type <subType>", "Sub-type for complex types").option("--trigger-node-id <nodeId>", "Trigger node an input variable belongs to (defaults to the flow's only trigger node; required when the flow has several)").examples(VARIABLE_ADD_EXAMPLES).trackedAction(processContext, async (file, variableId, options) => {
|
|
4206
|
+
const { validateIdentifier } = await import("./index-dgdnbb2g.js");
|
|
4073
4207
|
const identifierError = validateIdentifier(variableId, []);
|
|
4074
4208
|
if (identifierError) {
|
|
4075
4209
|
OutputFormatter.error({
|
|
@@ -4135,7 +4269,7 @@ var registerVariableCommand = (program) => {
|
|
|
4135
4269
|
}
|
|
4136
4270
|
schema = parsed;
|
|
4137
4271
|
}
|
|
4138
|
-
const { addVariableToFlow } = await import("./variable-service-
|
|
4272
|
+
const { addVariableToFlow } = await import("./variable-service-kqnqxmx2.js");
|
|
4139
4273
|
const [error, variable2] = await catchError(addVariableToFlow(file, {
|
|
4140
4274
|
id: variableId,
|
|
4141
4275
|
direction: options.direction,
|
|
@@ -4163,8 +4297,8 @@ var registerVariableCommand = (program) => {
|
|
|
4163
4297
|
}
|
|
4164
4298
|
});
|
|
4165
4299
|
});
|
|
4166
|
-
variable.command("remove").description("Remove a variable from a Flow file").argument("<file>", "Path to the .flow file").argument("<variable-id>", "Variable identifier to remove").examples(VARIABLE_DELETE_EXAMPLES).trackedAction(processContext, async (file, variableId) => {
|
|
4167
|
-
const { validateIdentifier } = await import("./index-
|
|
4300
|
+
variable.command("delete").alias("remove").description("Remove a variable from a Flow file").argument("<file>", "Path to the .flow file").argument("<variable-id>", "Variable identifier to remove").examples(VARIABLE_DELETE_EXAMPLES).trackedAction(processContext, async (file, variableId) => {
|
|
4301
|
+
const { validateIdentifier } = await import("./index-dgdnbb2g.js");
|
|
4168
4302
|
const identifierError = validateIdentifier(variableId, []);
|
|
4169
4303
|
if (identifierError) {
|
|
4170
4304
|
OutputFormatter.error({
|
|
@@ -4175,7 +4309,7 @@ var registerVariableCommand = (program) => {
|
|
|
4175
4309
|
processContext.exit(1);
|
|
4176
4310
|
return;
|
|
4177
4311
|
}
|
|
4178
|
-
const { deleteVariableFromFlow } = await import("./variable-service-
|
|
4312
|
+
const { deleteVariableFromFlow } = await import("./variable-service-kqnqxmx2.js");
|
|
4179
4313
|
const [error, deletedVariable] = await catchError(deleteVariableFromFlow(file, variableId));
|
|
4180
4314
|
if (error) {
|
|
4181
4315
|
OutputFormatter.error({
|
|
@@ -4194,8 +4328,8 @@ var registerVariableCommand = (program) => {
|
|
|
4194
4328
|
}
|
|
4195
4329
|
});
|
|
4196
4330
|
});
|
|
4197
|
-
variable.command("list").description("List all variables in a Flow file").argument("<file>", "Path to the .flow file").examples(VARIABLE_LIST_EXAMPLES).trackedAction(processContext, async (file) => {
|
|
4198
|
-
const { listVariablesInFlow } = await import("./variable-service-
|
|
4331
|
+
addRowWindowOptions(variable.command("list")).description("List all variables in a Flow file").argument("<file>", "Path to the .flow file").examples(VARIABLE_LIST_EXAMPLES).trackedAction(processContext, async (file, options) => {
|
|
4332
|
+
const { listVariablesInFlow } = await import("./variable-service-kqnqxmx2.js");
|
|
4199
4333
|
const [error, result] = await catchError(listVariablesInFlow(file));
|
|
4200
4334
|
if (error) {
|
|
4201
4335
|
OutputFormatter.error({
|
|
@@ -4206,13 +4340,15 @@ var registerVariableCommand = (program) => {
|
|
|
4206
4340
|
processContext.exit(1);
|
|
4207
4341
|
return;
|
|
4208
4342
|
}
|
|
4343
|
+
const window = rowWindow(result.variables, options);
|
|
4209
4344
|
OutputFormatter.success({
|
|
4210
4345
|
Result: RESULTS.Success,
|
|
4211
4346
|
Code: "VariableListSuccess",
|
|
4212
4347
|
Data: {
|
|
4213
|
-
Variables:
|
|
4214
|
-
Count:
|
|
4215
|
-
}
|
|
4348
|
+
Variables: window.rows,
|
|
4349
|
+
Count: window.rows.length
|
|
4350
|
+
},
|
|
4351
|
+
Pagination: window.pagination
|
|
4216
4352
|
});
|
|
4217
4353
|
});
|
|
4218
4354
|
};
|
|
@@ -4252,7 +4388,7 @@ var metadata = {
|
|
|
4252
4388
|
};
|
|
4253
4389
|
var registerCommands = async (program) => {
|
|
4254
4390
|
setAgentProjectMetadataReader(agentProjectMetadataReader);
|
|
4255
|
-
const { registerFlowAuthoringCommands } = await import("./authoring-
|
|
4391
|
+
const { registerFlowAuthoringCommands } = await import("./authoring-e1k40hyw.js");
|
|
4256
4392
|
registerFlowAuthoringCommands(program);
|
|
4257
4393
|
registerInitCommand(program);
|
|
4258
4394
|
registerPackCommand(program);
|
|
@@ -4278,4 +4414,4 @@ var registerCommands = async (program) => {
|
|
|
4278
4414
|
|
|
4279
4415
|
export { metadata, registerCommands };
|
|
4280
4416
|
|
|
4281
|
-
//# debugId=
|
|
4417
|
+
//# debugId=02B0582EB3A6477164756E2164756E21
|