@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.
Files changed (178) hide show
  1. package/README.md +9 -9
  2. package/dist/THIRD-PARTY-NOTICES.md +36 -12
  3. package/dist/{authoring-bppe07p0.js → authoring-e1k40hyw.js} +6 -5
  4. package/dist/{binding-service-fw3rzae4.js → binding-service-yw91615m.js} +38 -30
  5. package/dist/{connector-service-2z7s7qtd.js → connector-service-ttm75a4n.js} +224 -47
  6. package/dist/de-UZI7FJDO-awjpqfz0.js +200 -0
  7. package/dist/{de-MUJPA4EB-dpg7t2rw.js → de-UZI7FJDO-mwvc4cxe.js} +29 -2
  8. package/dist/{de-FGHEJRCI-rv513mfh.js → de-WLW6KWOJ-2qnsqdtw.js} +238 -31
  9. package/dist/debug-conversation-trigger-xsm3ycqx.js +30 -0
  10. package/dist/{debug-http-client-p4kf38yt.js → debug-http-client-yqjzsnhw.js} +5 -4
  11. package/dist/{debug-service-893erynq.js → debug-service-nra3n02y.js} +6 -5
  12. package/dist/{edge-service-6zr5f09c.js → edge-service-8fv0m681.js} +16 -12
  13. package/dist/{embedded-file-reader-v8c2yj2a.js → embedded-file-reader-r66242ey.js} +2 -2
  14. package/dist/en-EJCBA3LK-0wb3b1xy.js +146 -0
  15. package/dist/{en-FBPVNKFN-dqt573xn.js → en-EJCBA3LK-dtpdghgj.js} +12 -4
  16. package/dist/{en-BWGKA5OE-1qkvb9rn.js → en-M7GQYBV2-5nfmpnfz.js} +88 -6
  17. package/dist/{es-7SE7HX2X-8yh1aj2y.js → es-4UBUTCQA-m1ytpyx2.js} +29 -2
  18. package/dist/es-4UBUTCQA-t7hsackg.js +200 -0
  19. package/dist/{es-KR3ZSNMP-84zphx0x.js → es-5THCNRFN-tqwyrdgy.js} +235 -28
  20. package/dist/{es-MX-2MYFZU7X-3rek4r73.js → es-MX-5RELIXKI-9jhqtddc.js} +29 -2
  21. package/dist/es-MX-5RELIXKI-jtjbcxbb.js +200 -0
  22. package/dist/{es-MX-XXZJGC4R-2mr8jtgm.js → es-MX-TWZBRAXK-gqd9swzw.js} +237 -30
  23. package/dist/filter-engine-7ep90g7f.js +11 -0
  24. package/dist/{flow-api-kjvpsxhw.js → flow-api-sat010z1.js} +16 -10
  25. package/dist/{flow-debug-service-9q9k756w.js → flow-debug-service-cgawm96k.js} +96 -58
  26. package/dist/{flow-eval-node-target-zvk7fcb2.js → flow-eval-node-target-dah1gmmh.js} +17 -17
  27. package/dist/flow-eval-run-api-xdygjzfv.js +13 -0
  28. package/dist/{flow-eval-run-service-2hfqyadh.js → flow-eval-run-service-03j1szf6.js} +73 -80
  29. package/dist/{flow-eval-service-m5n2svke.js → flow-eval-service-9j46ta9k.js} +167 -415
  30. package/dist/{flow-init-sdk-source-z9qx1zkt.js → flow-init-sdk-source-xvdvkq7d.js} +6 -5
  31. package/dist/{flow-init-service-8y8b76zm.js → flow-init-service-0a4y3a46.js} +19 -15
  32. package/dist/{flow-io-w11yspjx.js → flow-io-1wabd32s.js} +15 -11
  33. package/dist/{flow-migrate-service-v7ch4t3h.js → flow-migrate-service-mkqpbwtv.js} +16 -12
  34. package/dist/{flow-pack-service-xs8v5mba.js → flow-pack-service-7dj2hhyz.js} +47 -38
  35. package/dist/flow-validate-service-1ktjayjv.js +70 -0
  36. package/dist/{fr-Y6NPVODW-8vr1ja4b.js → fr-CERONSRC-edpxhbmb.js} +237 -30
  37. package/dist/{fr-MDFKNZ4C-h4a122k9.js → fr-VBM5WRC2-63z7w4mh.js} +29 -2
  38. package/dist/fr-VBM5WRC2-707ha692.js +200 -0
  39. package/dist/{governance-fetcher-18pk0mgv.js → governance-fetcher-76hxssjm.js} +7 -6
  40. package/dist/{hitl-service-ehnfkwhp.js → hitl-service-vcbhd4cb.js} +15 -11
  41. package/dist/{index-aaq9rwfv.js → index-1b2je9n2.js} +1088 -233
  42. package/dist/index-d090f35d.js +66 -0
  43. package/dist/{index-yj4xk2aw.js → index-dgdnbb2g.js} +7 -5
  44. package/dist/{index-ng2f77my.js → index-fyc0k5dd.js} +985 -617
  45. package/dist/{index-9hqj0ee4.js → index-hz008fep.js} +6 -5
  46. package/dist/{index-vrhcbxnk.js → index-nsn889vf.js} +6 -5
  47. package/dist/{index-2s8rmmw6.js → index-sqhbn7ew.js} +4 -4
  48. package/dist/{index-tnz5ks4t.js → index-wycgq0ff.js} +65 -2230
  49. package/dist/index.js +17 -14
  50. package/dist/init.js +19 -15
  51. package/dist/inline-entity-resolver-64pqwk86.js +45 -0
  52. package/dist/input-reader-n7kzdrev.js +12 -0
  53. package/dist/{ja-UTQEAP34-8e0q6swp.js → ja-43QL7CGO-c3q8gre9.js} +29 -2
  54. package/dist/ja-43QL7CGO-h6qfxfay.js +200 -0
  55. package/dist/{ja-Q5PXKJ2V-p4msxzjd.js → ja-U2MCNHGT-gz0ap1jk.js} +235 -28
  56. package/dist/{known-types-q6fcyq2e.js → known-types-3025scz1.js} +5 -5
  57. package/dist/ko-TLL6Z6CD-ag6gjynr.js +200 -0
  58. package/dist/{ko-AXCHW2OK-askct7f6.js → ko-TLL6Z6CD-wrt3n8a9.js} +29 -2
  59. package/dist/{ko-AYBDSRZG-41mdmsg1.js → ko-XAUYQWDR-zp81gjp4.js} +237 -30
  60. package/dist/{maestro-automate-entry-qak46eg0.js → maestro-automate-entry-6f9act3w.js} +2 -2
  61. package/dist/{node-cvwqsgg0.js → node-hz6cvp9d.js} +29 -15
  62. package/dist/{node-service-544fv7as.js → node-service-7wz8gx7h.js} +41 -30
  63. package/dist/{node-strategy-fdnkvq4a.js → node-strategy-1dmmhvf3.js} +1 -1
  64. package/dist/node-sync-service-yvyf7chw.js +61 -0
  65. package/dist/packager-tool-10vc8pq4.js +2 -0
  66. package/dist/{packager-tool-29b6r6eg.js → packager-tool-2h15x2kb.js} +6 -6
  67. package/dist/{packager-tool-h7cjs093.js → packager-tool-2z0r1f32.js} +668 -57
  68. package/dist/packager-tool-4kr6g0zw.js +16 -0
  69. package/dist/packager-tool-4x7tzvv0.js +1176 -0
  70. package/dist/{packager-tool-d88rqwk8.js → packager-tool-6z1hsm2h.js} +13 -5
  71. package/dist/packager-tool-7hw344bt.js +107 -0
  72. package/dist/{packager-tool-pb7wzsn4.js → packager-tool-7wnxyvf9.js} +519 -437
  73. package/dist/{packager-tool-m8xtf5ej.js → packager-tool-8g5931fz.js} +7 -4
  74. package/dist/{packager-tool-h9tzz0qd.js → packager-tool-961vsbsc.js} +15 -10
  75. package/dist/packager-tool-9era57c0.js +28 -0
  76. package/dist/packager-tool-9gprvfcy.js +23 -0
  77. package/dist/packager-tool-9jxzgsxc.js +14 -0
  78. package/dist/{packager-tool-zxp4hya4.js → packager-tool-a5afh1dc.js} +34 -13
  79. package/dist/{packager-tool-02f63a08.js → packager-tool-apawc11t.js} +88 -762
  80. package/dist/{packager-tool-tf3d2y8z.js → packager-tool-aw9v0raw.js} +2 -2
  81. package/dist/packager-tool-cqtsj6yh.js +2 -0
  82. package/dist/{packager-tool-5nqhxb9e.js → packager-tool-dwd6cc01.js} +16110 -13031
  83. package/dist/{packager-tool-t605qewm.js → packager-tool-dxgrhfq5.js} +2 -2
  84. package/dist/{packager-tool-awkq26v0.js → packager-tool-e7kvq8hf.js} +5 -3
  85. package/dist/{packager-tool-2y2mmdnq.js → packager-tool-fjqpf1y6.js} +6 -24
  86. package/dist/{packager-tool-3dc9gz35.js → packager-tool-frjt46rb.js} +1 -1
  87. package/dist/{packager-tool-y8egb0fa.js → packager-tool-gqq3vkgh.js} +2573 -535
  88. package/dist/{packager-tool-w5a1hhyj.js → packager-tool-hxyjn885.js} +13 -2
  89. package/dist/packager-tool-j3228zs9.js +35 -0
  90. package/dist/{packager-tool-hhy1gr2k.js → packager-tool-jgfzfqjm.js} +1 -1
  91. package/dist/{packager-tool-5csvkk54.js → packager-tool-kb520rm5.js} +172 -71
  92. package/dist/{packager-tool-k04k2rnq.js → packager-tool-kmv2p8z4.js} +20 -8
  93. package/dist/{packager-tool-6h69pd2a.js → packager-tool-kn86394c.js} +127 -61
  94. package/dist/packager-tool-mgcz986r.js +143 -0
  95. package/dist/{packager-tool-3h2ktz6q.js → packager-tool-myhbp761.js} +11 -1
  96. package/dist/{packager-tool-5tk1eg46.js → packager-tool-ns9xn7zq.js} +13 -13
  97. package/dist/{packager-tool-vbfz8k7w.js → packager-tool-p8gab24q.js} +52 -32
  98. package/dist/{packager-tool-stq8800d.js → packager-tool-pacrqxv2.js} +17 -4
  99. package/dist/{packager-tool-7q6z6npd.js → packager-tool-pcvhcn2k.js} +93 -11
  100. package/dist/packager-tool-phw8ydjx.js +331 -0
  101. package/dist/{packager-tool-mx0gg6yh.js → packager-tool-q8akejne.js} +6 -4
  102. package/dist/packager-tool-qcqb9hf8.js +26 -0
  103. package/dist/{packager-tool-n89vrpex.js → packager-tool-skcjythd.js} +10907 -25608
  104. package/dist/{packager-tool-v37kemg5.js → packager-tool-sphnextf.js} +5 -6
  105. package/dist/{packager-tool-1ca047de.js → packager-tool-sqpesv2e.js} +12 -56
  106. package/dist/packager-tool-t7ahhaer.js +877 -0
  107. package/dist/{packager-tool-zgm9mqrh.js → packager-tool-thnkpqwc.js} +1802 -378
  108. package/dist/{packager-tool-peawy22c.js → packager-tool-tqjfdpda.js} +53 -8
  109. package/dist/{packager-tool-gb4sm499.js → packager-tool-vd3rn4fj.js} +463 -327
  110. package/dist/{packager-tool-5tjzg56t.js → packager-tool-wh660fny.js} +1 -1
  111. package/dist/{packager-tool-tyg399d6.js → packager-tool-wze74wyk.js} +74 -47
  112. package/dist/{packager-tool-zbhqrk3p.js → packager-tool-x20684x5.js} +1 -1
  113. package/dist/packager-tool-xj0agqpk.js +11 -0
  114. package/dist/packager-tool-xk78j7dz.js +1256 -0
  115. package/dist/{packager-tool-py93409h.js → packager-tool-ymma2s85.js} +2 -2
  116. package/dist/packager-tool-z0yxfhdj.js +40 -0
  117. package/dist/packager-tool.js +13 -10
  118. package/dist/{pt-BR-TKHNHMET-sn91xyq0.js → pt-BR-GNQNAAZ2-xadharv4.js} +237 -30
  119. package/dist/{pt-BR-Y6K6XHXK-mp3hwhw1.js → pt-BR-USP2T7GD-pedn77m1.js} +29 -2
  120. package/dist/pt-BR-USP2T7GD-rppy42ym.js +200 -0
  121. package/dist/{pt-3DIO5QWG-59b3f4bc.js → pt-RMIAKZB4-67enhx3m.js} +29 -2
  122. package/dist/pt-RMIAKZB4-t80exmp7.js +200 -0
  123. package/dist/{pt-ROXU257Y-2f6bxev4.js → pt-TO2DARY2-ftcce1bv.js} +237 -30
  124. package/dist/ro-GHOBYW2S-4zevc9dy.js +200 -0
  125. package/dist/{ro-BWR3ONRR-vzx3hy8a.js → ro-GHOBYW2S-mhnqsgaa.js} +29 -2
  126. package/dist/{ro-AVAWPKOO-b89pw79r.js → ro-WUYJV6OW-a8d9qy1n.js} +235 -28
  127. package/dist/ru-WBLQ5B2U-dpqvtfwr.js +10 -0
  128. package/dist/services/connector-request-buckets.d.ts +1 -0
  129. package/dist/services/flow-eval-file-store.d.ts +1 -11
  130. package/dist/services/flow-eval-utils.d.ts +1 -32
  131. package/dist/services/flow-validate-service.d.ts +51 -0
  132. package/dist/services/inline-entity-resolver.d.ts +22 -0
  133. package/dist/services/node-service.d.ts +21 -1
  134. package/dist/services/packaging-utils.d.ts +15 -2
  135. package/dist/{shared-utils-pnbvyyb2.js → shared-utils-tqnx96mg.js} +4 -3
  136. package/dist/solution-auth-8qz5pw7z.js +14 -0
  137. package/dist/solution-discovery-vqravtkh.js +44 -0
  138. package/dist/{tidy-service-j70ccg27.js → tidy-service-tqjea6g2.js} +143 -39
  139. package/dist/tool.js +17 -14
  140. package/dist/{tr-5IIHSFW5-hw4cewew.js → tr-GDTLECMM-k5fhmq13.js} +29 -2
  141. package/dist/tr-GDTLECMM-kngksm3r.js +200 -0
  142. package/dist/{tr-JMIP7ZSL-c39b6pe4.js → tr-M3F5A6AU-bb0tg39m.js} +235 -28
  143. package/dist/utils/flow-io.d.ts +2 -1
  144. package/dist/validation.js +39 -33
  145. package/dist/{variable-service-86t2r5m9.js → variable-service-kqnqxmx2.js} +16 -12
  146. package/dist/{wait-for-flow-job-d8m6mqb4.js → wait-for-flow-job-b0vj8828.js} +15 -12
  147. package/dist/{zh-CN-IFFXSEJS-9wm9gmrv.js → zh-CN-C5G4PC7C-ds9gkptg.js} +235 -28
  148. package/dist/zh-CN-I5D7WHBD-ge92tbx9.js +200 -0
  149. package/dist/{zh-CN-R2KU4U5L-tc1hat59.js → zh-CN-I5D7WHBD-sr5h0a98.js} +29 -2
  150. package/dist/{zh-TW-GNKMELBF-j674515r.js → zh-TW-2AVLM723-288pkc1z.js} +29 -2
  151. package/dist/zh-TW-2AVLM723-xsmap3gk.js +200 -0
  152. package/dist/{zh-TW-IYBNYAMG-8727c7v2.js → zh-TW-62HZIG6O-787kdwex.js} +234 -27
  153. package/package.json +2 -2
  154. package/dist/debug-conversation-trigger-hgszjdhx.js +0 -44
  155. package/dist/flow-eval-run-api-byx3cacw.js +0 -13
  156. package/dist/flow-validate-service-12v3bz1b.js +0 -64
  157. package/dist/input-reader-vhar4g0k.js +0 -11
  158. package/dist/node-sync-service-ccwgtyte.js +0 -40
  159. package/dist/packager-tool-4g5hk66k.js +0 -454
  160. package/dist/packager-tool-kg35b9s6.js +0 -15
  161. package/dist/packager-tool-pz5nqg0s.js +0 -64
  162. package/dist/packager-tool-t3ysatjd.js +0 -521
  163. package/dist/packager-tool-vd6jt4n8.js +0 -208
  164. package/dist/packager-tool-vscvjrhn.js +0 -265
  165. package/dist/services/flow-debug-service.d.ts +0 -320
  166. package/dist/services/flow-eval-schema/deterministic-evaluators.d.ts +0 -110
  167. package/dist/services/flow-eval-schema/evaluator-fields.d.ts +0 -66
  168. package/dist/services/flow-eval-schema/helpers.d.ts +0 -9
  169. package/dist/services/flow-eval-schema/index.d.ts +0 -4
  170. package/dist/services/flow-eval-schema/llm-judge-evaluators.d.ts +0 -174
  171. package/dist/services/flow-eval-schema/prompts.d.ts +0 -2
  172. package/dist/services/flow-eval-schema/registry.d.ts +0 -375
  173. package/dist/services/flow-eval-schema/tool-call-evaluators.d.ts +0 -93
  174. package/dist/services/flow-eval-schema/types.d.ts +0 -95
  175. package/dist/services/flow-eval-types.d.ts +0 -6
  176. package/dist/utils/write-resolved-flow.d.ts +0 -7
  177. /package/dist/{headless-45dypanh.js → headless-fw8pwyzm.js} +0 -0
  178. /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-tf3d2y8z.js";
6
+ } from "./packager-tool-aw9v0raw.js";
7
7
  import {
8
8
  package_default
9
- } from "./packager-tool-mx0gg6yh.js";
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-h7cjs093.js";
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-t3ysatjd.js";
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-02f63a08.js";
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-3h2ktz6q.js";
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 binding list flow.json",
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 binding add flow.json "Invoice" process "InvoiceProcess" --property-attribute name',
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 binding remove flow.json a1b2c3d4-0000-0000-0000-000000000001",
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-fw3rzae4.js");
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: result.bindings,
135
- Count: result.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-fw3rzae4.js");
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-fw3rzae4.js");
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 projectStartsOnConversationTrigger(projectPath) {
280
- const [error, found] = await catchError((async () => {
281
- const { readFlowWorkflow, resolveProjectFlowFile } = await import("./flow-io-w11yspjx.js");
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 startsOnConversationTrigger(workflow);
387
+ return workflow.nodes ?? [];
286
388
  })());
287
389
  if (error) {
288
- logger.info(`Skipped the conversational pre-flight scan: ${error.message}`);
289
- return false;
390
+ logger.info(`Skipped the debug pre-flight scan: ${error.message}`);
391
+ return;
290
392
  }
291
- return found === true;
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-2s8rmmw6.js");
399
- const isConversational = await projectStartsOnConversationTrigger(projectPath);
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-tnz5ks4t.js");
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-9q9k756w.js");
555
- const { MaestroHttpError } = await import("./debug-http-client-p4kf38yt.js");
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-893erynq.js");
693
+ } = await import("./debug-service-nra3n02y.js");
561
694
  const {
562
695
  buildSolutionUploadFailureOutput,
563
696
  isSolutionUploadHttpError
564
- } = await import("./index-9hqj0ee4.js");
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-kjvpsxhw.js");
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-tnz5ks4t.js");
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 data = {
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}. ` + `Data.variables is absent and Data.variablesError explains why — treat the outputs as UNKNOWN, not empty. ` + `Retry with 'uip maestro flow debug-instance variables ${result.instanceId}'.` : `Debug completed with status: ${result.finalStatus}`;
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 edge list flow.json",
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 edge add flow.json Node_1 Node_2",
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 edge add flow.json Node_1 Node_2",
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 edge delete flow.json edge_a1b2c3d4",
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 edge remove flow.json edge_a1b2c3d4",
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 edge list ${file}' to find a valid edge ID, then retry.`;
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-6zr5f09c.js");
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-6zr5f09c.js");
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: result.edges,
933
- Count: result.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-6zr5f09c.js");
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 edge 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"));
975
- edge.command("remove").description(`Remove an edge from a Flow file.
976
- Alias for 'edge delete'. Use 'uip maestro flow edge 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"));
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 run start --set "Default Evaluation Set" --path ./my-solution/Flow',
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 run status a1b2c3d4-0000-0000-0000-000000000101 --set "Default Evaluation Set" --path ./my-solution/Flow',
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 run results a1b2c3d4-0000-0000-0000-000000000101 --set "Default Evaluation Set" --path ./my-solution/Flow',
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 run list --set "Default Evaluation Set" --path ./my-solution/Flow',
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 run compare a1b2c3d4-0000-0000-0000-000000000101 --compare-to a1b2c3d4-0000-0000-0000-000000000102 --set "Default Evaluation Set" --path ./my-solution/Flow',
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-2hfqyadh.js");
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 run status ${result.evalSetRunId} --set "${options.set}" --path ${options.path}`
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("<evalSetRunId>", "Evaluation set run ID")).examples(FLOW_EVAL_RUN_STATUS_EXAMPLES).trackedAction(processContext, async (evalSetRunId, options) => {
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-2hfqyadh.js");
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("<evalSetRunId>", "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) => {
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-2hfqyadh.js");
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-2hfqyadh.js");
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 runs = await service.listRemoteEvalSetRuns(config, target.workloadId, target.evalSet.id);
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("<evalSetRunId>", "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) => {
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-2hfqyadh.js");
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-m5n2svke.js");
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-m5n2svke.js");
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
- Data: evaluators.map((item) => ({
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-m5n2svke.js");
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-m5n2svke.js");
1599
- const { readEvalSetScope, readNodeTargetId } = await import("./flow-eval-node-target-zvk7fcb2.js");
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-m5n2svke.js");
1627
- const { readEvalSetScope, readNodeTargetId } = await import("./flow-eval-node-target-zvk7fcb2.js");
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
- Data: sets.map((item) => {
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-m5n2svke.js");
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-m5n2svke.js");
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-m5n2svke.js");
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
- Data: evaluations.map((item) => ({
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-m5n2svke.js");
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-m5n2svke.js");
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-m5n2svke.js");
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
- Data: simulations.map((s) => ({
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-m5n2svke.js");
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 add workflow.flow",
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 add workflow.flow --label "Invoice Review" --priority High --assignee finance-approvers',
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 add workflow.flow --label "Approval" --schema '{"inputs":[{"name":"invoiceId","binding":"fetchInvoice1.result.invoiceId"}],"outputs":[{"name":"decision","required":true}],"outcomes":[{"name":"Approve"},{"name":"Reject"}]}'`,
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-ehnfkwhp.js");
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-8y8b76zm.js");
2072
- const { RuntimeProfile } = await import("./maestro-automate-entry-qak46eg0.js");
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 job list --folder-key c3d4e5f6-0000-0000-0000-000000000001 --limit 2",
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 job status b2c3d4e5-0000-0000-0000-000000000001",
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-2s8rmmw6.js");
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-kjvpsxhw.js");
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-2s8rmmw6.js");
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-pnbvyyb2.js");
2391
- const { streamJobTraces } = await import("./flow-api-kjvpsxhw.js");
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-2s8rmmw6.js");
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-kjvpsxhw.js");
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-v7ch4t3h.js");
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 node add flow.json core.trigger.manual --label "Start"',
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 node configure flow.json node_a1b2c3d4 --detail '{"connectionId":"b2c3d4e5-0000-0000-0000-000000000001","folderKey":"c3d4e5f6-0000-0000-0000-000000000001","method":"POST","endpoint":"/issues"}'`,
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 node 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"}}'`,
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 node 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"}}'`,
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 node list flow.json",
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 node delete flow.json node_a1b2c3d4",
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 node remove flow.json node_a1b2c3d4",
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 node list ${file}' to find a valid node ID, then retry.`;
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-544fv7as.js");
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 'node configure' afterwards to supply connection and endpoint details.
2750
- Example: uip maestro flow node add 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) => {
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-544fv7as.js");
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 'node add' — populates inputs.detail and creates workflow bindings.
2853
- ` + `Use 'node list' to find the node ID.
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-2z7s7qtd.js");
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-544fv7as.js");
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: result.nodes,
2976
- Count: result.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 'node 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"));
2983
- node.command("remove").description(`Remove a node from a Flow file.
2984
- Alias for 'node delete'. Automatically removes connected edges, orphaned bindings, orphaned definitions, and node variables owned by the removed node.
2985
- Use 'node 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"));
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-xs8v5mba.js");
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 resolveReleaseKey(config, processKey) {
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 { listFlowProcesses } = await import("./flow-api-kjvpsxhw.js");
3114
- const processes = await listFlowProcesses(config);
3115
- const matches = processes.filter((candidate) => candidate.processKey === key && (version === undefined || candidate.processVersion === version));
3116
- const [releaseKey, ...extra] = matches.map((match) => match.key).filter((candidate) => Boolean(candidate));
3117
- if (releaseKey === undefined) {
3118
- throw new Error(`No Flow release matches process key '${processKey}' in folder ${config.folderKey}.`);
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 releaseKey;
3202
+ return release;
3124
3203
  }
3125
3204
  async function resolveFolderForList(options) {
3126
- const { resolveFolder } = await import("./index-tnz5ks4t.js");
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-2s8rmmw6.js");
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-kjvpsxhw.js");
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-2s8rmmw6.js");
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-kjvpsxhw.js");
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-2s8rmmw6.js");
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-kjvpsxhw.js");
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-vhar4g0k.js");
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-tnz5ks4t.js");
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
- const [resolveError, resolvedReleaseKey] = await catchError(resolveReleaseKey(config, processKey));
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 job traces ${job.key} --folder-key ${folderKey}`
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-d8m6mqb4.js");
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-2s8rmmw6.js");
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-tnz5ks4t.js");
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-xs8v5mba.js");
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-j70ccg27.js");
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("<flowFile>", "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.").examples(FLOW_VALIDATE_EXAMPLES).trackedAction(processContext, async (flowFile, options) => {
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-18pk0mgv.js");
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-12v3bz1b.js");
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 variable add flow.json myInput --direction in --type string",
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 variable add flow.json myInput --direction in --type string --trigger-node-id timerTrigger1",
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 variable remove flow.json myInput",
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 variable list flow.json",
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-yj4xk2aw.js");
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-86t2r5m9.js");
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-yj4xk2aw.js");
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-86t2r5m9.js");
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-86t2r5m9.js");
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: result.variables,
4214
- Count: result.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-bppe07p0.js");
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=48B9028B68928BEB64756E2164756E21
4417
+ //# debugId=02B0582EB3A6477164756E2164756E21