@uipath/flow-tool 1.203.0-preview.205 → 1.204.0-preview.206

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 (117) hide show
  1. package/README.md +4 -0
  2. package/dist/THIRD-PARTY-NOTICES.md +237 -2
  3. package/dist/authoring-4kyzh1tf.js +23 -0
  4. package/dist/{binding-service-ft8mabkr.js → binding-service-815skxfx.js} +28 -30
  5. package/dist/{connector-service-qnpnwzpv.js → connector-service-xw4f8a7v.js} +34 -31
  6. package/dist/{conversion-FQTRFHRX-xh98wp2q.js → conversion-FQTRFHRX-1q7rk0te.js} +5 -5
  7. package/dist/{debug-conversation-trigger-fy19ygsm.js → debug-conversation-trigger-qdgvrekh.js} +14 -16
  8. package/dist/{debug-http-client-53qk6pc5.js → debug-http-client-s78gbtbn.js} +3 -3
  9. package/dist/{debug-service-nyk0s6mc.js → debug-service-0ppdzgzv.js} +4 -4
  10. package/dist/{edge-service-an71q4ry.js → edge-service-ttzfnxkf.js} +13 -14
  11. package/dist/{embedded-file-reader-0sjt4nkj.js → embedded-file-reader-v8c2yj2a.js} +2 -2
  12. package/dist/{flow-api-2phdajnk.js → flow-api-b7k5dtpm.js} +8 -8
  13. package/dist/{flow-debug-service-bnzgj53b.js → flow-debug-service-4we602jx.js} +38 -35
  14. package/dist/{flow-eval-node-target-2mjben3g.js → flow-eval-node-target-331vzbkw.js} +14 -15
  15. package/dist/{flow-eval-run-api-1bw5e0k4.js → flow-eval-run-api-yq18x5rb.js} +4 -4
  16. package/dist/{flow-eval-run-service-qv8j8fd1.js → flow-eval-run-service-36h1bnm8.js} +40 -37
  17. package/dist/{flow-eval-service-amd02ctw.js → flow-eval-service-ndtk9f9j.js} +19 -20
  18. package/dist/flow-init-sdk-source-9fy9p8ap.js +58 -0
  19. package/dist/{flow-init-service-rnygj5f8.js → flow-init-service-kwhbdtpc.js} +19 -18
  20. package/dist/{flow-io-hddhkve5.js → flow-io-pt392xct.js} +13 -14
  21. package/dist/{flow-migrate-service-e3hm99gp.js → flow-migrate-service-xvz8pbmp.js} +14 -15
  22. package/dist/{flow-pack-service-g8jebcts.js → flow-pack-service-wg1kt2bt.js} +72 -39
  23. package/dist/flow-validate-service-xbhrj47n.js +64 -0
  24. package/dist/{governance-fetcher-cswx2cw7.js → governance-fetcher-5yy89pfd.js} +6 -5
  25. package/dist/{headless-mmnrkzve.js → headless-1pdmae01.js} +2 -2
  26. package/dist/{hitl-service-a4fmjrzh.js → hitl-service-q2d39v5s.js} +13 -14
  27. package/dist/{index-3ts7y9d3.js → index-2s8rmmw6.js} +5 -3
  28. package/dist/index-3jpjaq1g.js +26 -0
  29. package/dist/{index-t5zedby6.js → index-41vyzws2.js} +59 -27
  30. package/dist/{index-b46bavh7.js → index-5yw15y73.js} +2 -2
  31. package/dist/{index-212q16sv.js → index-7qw3ttge.js} +416 -87
  32. package/dist/{index-t8e0ft8r.js → index-c1q6mnw1.js} +3 -3
  33. package/dist/{index-xa7gm52r.js → index-dqqg54v6.js} +601 -61
  34. package/dist/index.js +10 -10
  35. package/dist/init.d.ts +1 -1
  36. package/dist/init.js +19 -18
  37. package/dist/{input-reader-tw0j373f.js → input-reader-bv7kt19c.js} +2 -2
  38. package/dist/{known-types-b64as10y.js → known-types-jhyhnkt6.js} +4 -4
  39. package/dist/{maestro-automate-entry-pqy9xqm3.js → maestro-automate-entry-qak46eg0.js} +2 -2
  40. package/dist/node-2whm5wkf.js +4823 -0
  41. package/dist/{node-service-qnny15cm.js → node-service-js01ft95.js} +31 -30
  42. package/dist/{node-strategy-gc4sg6a2.js → node-strategy-fdnkvq4a.js} +1 -1
  43. package/dist/{node-sync-service-f1x1ak6q.js → node-sync-service-pb3m4dp2.js} +9 -9
  44. package/dist/{packager-tool-et7wj8kr.js → packager-tool-0w4es6rz.js} +2 -2
  45. package/dist/{packager-tool-dph5p2f5.js → packager-tool-1mnq1c97.js} +1 -1
  46. package/dist/packager-tool-225z77w9.js +52 -0
  47. package/dist/{packager-tool-de2txaxx.js → packager-tool-2hzsf1rc.js} +5 -5
  48. package/dist/{packager-tool-vbser1d9.js → packager-tool-2qr8z5ke.js} +4 -4
  49. package/dist/{packager-tool-0egkaa38.js → packager-tool-32czz9mq.js} +2 -2
  50. package/dist/{packager-tool-0v3s8r01.js → packager-tool-3h2ktz6q.js} +2 -2
  51. package/dist/{packager-tool-h9d8c9rf.js → packager-tool-4zdhy0c3.js} +2 -2
  52. package/dist/{packager-tool-afd1wwf2.js → packager-tool-53c81nnr.js} +440 -29
  53. package/dist/{packager-tool-2c688mdj.js → packager-tool-57fak54h.js} +4 -4
  54. package/dist/{packager-tool-qa2xzxez.js → packager-tool-59s95scr.js} +1 -1
  55. package/dist/{packager-tool-n8p9cay6.js → packager-tool-6azk3rex.js} +1 -1
  56. package/dist/{packager-tool-26ydwf12.js → packager-tool-6h69pd2a.js} +23 -8
  57. package/dist/{packager-tool-mnrbdn6a.js → packager-tool-6scjsgh6.js} +55 -17
  58. package/dist/{packager-tool-xzf4xc65.js → packager-tool-70cta0be.js} +4 -4
  59. package/dist/{packager-tool-tw3j5h3z.js → packager-tool-8hj7w7em.js} +5 -5
  60. package/dist/{packager-tool-795gzq9k.js → packager-tool-8pmgk4f6.js} +1 -1
  61. package/dist/{packager-tool-321a1806.js → packager-tool-8vmx4j2w.js} +1 -1
  62. package/dist/{packager-tool-cnftzx4c.js → packager-tool-a6ph7149.js} +40 -11
  63. package/dist/{packager-tool-s0mzv3sx.js → packager-tool-aw60v0et.js} +1 -1
  64. package/dist/{packager-tool-e89k4pjj.js → packager-tool-c0rtxezv.js} +1 -1
  65. package/dist/{packager-tool-1w4f09cq.js → packager-tool-d0ny3x3b.js} +141 -96
  66. package/dist/{packager-tool-gzpvdcnw.js → packager-tool-da1cmt0q.js} +2 -2
  67. package/dist/{packager-tool-p8j4zvrq.js → packager-tool-dp8vjby4.js} +4829 -1364
  68. package/dist/packager-tool-e5hj89zm.js +6 -0
  69. package/dist/{packager-tool-fwp34rqp.js → packager-tool-ev80vk13.js} +8 -8
  70. package/dist/{packager-tool-gctpkdzs.js → packager-tool-hhy1gr2k.js} +1 -1
  71. package/dist/{packager-tool-sf9f6jft.js → packager-tool-hygq2wy6.js} +1 -1
  72. package/dist/{packager-tool-0v3tzseq.js → packager-tool-jeb6xmgw.js} +2 -2
  73. package/dist/packager-tool-krzxg3ga.js +804 -0
  74. package/dist/{packager-tool-1r5dnt9q.js → packager-tool-mv4jav1h.js} +1 -1
  75. package/dist/{packager-tool-pppzgwfw.js → packager-tool-n4vdjmjx.js} +18079 -18079
  76. package/dist/{packager-tool-t9c77psy.js → packager-tool-p1tb6d4f.js} +955 -150
  77. package/dist/{packager-tool-gs28y1eq.js → packager-tool-qhhrq12s.js} +2 -2
  78. package/dist/{packager-tool-6k8s7pt9.js → packager-tool-r7xy9sew.js} +1090 -545
  79. package/dist/{packager-tool-b1xs6aty.js → packager-tool-stq8800d.js} +902 -897
  80. package/dist/{packager-tool-61r38k4d.js → packager-tool-t57d6pzz.js} +320 -200
  81. package/dist/{packager-tool-a7t9v5ss.js → packager-tool-v9v9ch04.js} +2 -2
  82. package/dist/{packager-tool-cdn59g60.js → packager-tool-ve5t7317.js} +2 -2
  83. package/dist/{packager-tool-yxv9mm8s.js → packager-tool-vtaqtf7f.js} +10 -10
  84. package/dist/{packager-tool-t39edv0g.js → packager-tool-w3dy6vnj.js} +184 -193
  85. package/dist/{packager-tool-9kx94sj5.js → packager-tool-x5qafkb7.js} +2 -2
  86. package/dist/{packager-tool-s841bbkr.js → packager-tool-yednpbbw.js} +2 -2
  87. package/dist/{packager-tool-yxnepq2j.js → packager-tool-ysbskrta.js} +1 -1
  88. package/dist/packager-tool-zgsvggdr.js +50 -0
  89. package/dist/packager-tool.js +12 -13
  90. package/dist/{serialization-BXU6AKAN-rhgmwp06.js → serialization-BXU6AKAN-c2ge8yvb.js} +5 -5
  91. package/dist/services/flow-init-sdk-source.d.ts +28 -0
  92. package/dist/services/flow-init-service.d.ts +25 -0
  93. package/dist/services/inline-activity-service.d.ts +135 -0
  94. package/dist/services/node-service.d.ts +14 -0
  95. package/dist/services/node-validators/index.d.ts +2 -0
  96. package/dist/services/node-validators/inline-activity-validator.d.ts +18 -0
  97. package/dist/services/node-validators/types.d.ts +6 -0
  98. package/dist/services/node-validators/unresolved-binding-placeholder-validator.d.ts +2 -0
  99. package/dist/services/preview-id-rule.d.ts +33 -0
  100. package/dist/services/ui-only-node-types.d.ts +1 -0
  101. package/dist/{shared-utils-wv356cvj.js → shared-utils-9vfmrxtx.js} +2 -2
  102. package/dist/{packager-tool-es0a755k.js → tidy-service-q2wwwans.js} +33 -7
  103. package/dist/tool.js +10 -10
  104. package/dist/utils/flow-io.d.ts +3 -16
  105. package/dist/validation.js +35 -36
  106. package/dist/{variable-service-bc7920kx.js → variable-service-nm9fdwsw.js} +13 -14
  107. package/dist/{wait-for-flow-job-v0njb0dk.js → wait-for-flow-job-yzyamptd.js} +8 -8
  108. package/package.json +2 -2
  109. package/dist/authoring-tv4dh80p.js +0 -360
  110. package/dist/flow-validate-service-x9dtdrc7.js +0 -65
  111. package/dist/node-xdgxafqs.js +0 -15600
  112. package/dist/packager-tool-2513jrxr.js +0 -898
  113. package/dist/packager-tool-5kt8tsq4.js +0 -85
  114. package/dist/packager-tool-w0kr4mbc.js +0 -996
  115. package/dist/services/tidy-service.d.ts +0 -26
  116. package/dist/tidy-service-8y2tjmb5.js +0 -39
  117. /package/dist/{localization-y790z9vm.js → localization-xecwjpe2.js} +0 -0
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  inMemoryWorkflowToFileFormat
3
- } from "./packager-tool-yxnepq2j.js";
3
+ } from "./packager-tool-ysbskrta.js";
4
4
  import {
5
5
  logger
6
- } from "./packager-tool-6k8s7pt9.js";
6
+ } from "./packager-tool-r7xy9sew.js";
7
7
 
8
8
  // src/utils/write-resolved-flow.ts
9
9
  async function writeResolvedFlow(fs, dir, name, workflow) {
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  validateIntSvcNode
3
- } from "./packager-tool-fwp34rqp.js";
3
+ } from "./packager-tool-ev80vk13.js";
4
4
  import {
5
5
  catchError
6
- } from "./packager-tool-6k8s7pt9.js";
6
+ } from "./packager-tool-r7xy9sew.js";
7
7
 
8
8
  // src/services/connector-node-types.ts
9
9
  function isConnectorTriggerType(nodeType) {
@@ -1,23 +1,23 @@
1
1
  import {
2
2
  resolveJsonInput
3
- } from "./packager-tool-h9d8c9rf.js";
3
+ } from "./packager-tool-4zdhy0c3.js";
4
4
  import {
5
5
  DEBUG_MODE_MAP,
6
6
  SIMULATION_MODE_MAP,
7
7
  beginDebugSession,
8
8
  createDebugInstance,
9
9
  getPersonalFolderKey
10
- } from "./packager-tool-9kx94sj5.js";
10
+ } from "./packager-tool-x5qafkb7.js";
11
11
  import {
12
12
  debugPimsGet,
13
13
  debugPimsPatch,
14
14
  debugPimsPost,
15
15
  debugPimsPut
16
- } from "./packager-tool-s0mzv3sx.js";
16
+ } from "./packager-tool-aw60v0et.js";
17
17
  import {
18
18
  getAuthContext,
19
19
  getLoginStatusAsync
20
- } from "./packager-tool-26ydwf12.js";
20
+ } from "./packager-tool-6h69pd2a.js";
21
21
  import {
22
22
  DEFAULT_PAGE_SIZE,
23
23
  EXIT_CODES,
@@ -33,7 +33,7 @@ import {
33
33
  parseLimit,
34
34
  parseOffset,
35
35
  processContext
36
- } from "./packager-tool-6k8s7pt9.js";
36
+ } from "./packager-tool-r7xy9sew.js";
37
37
  import {
38
38
  __require
39
39
  } from "./packager-tool-1yh8g550.js";
@@ -308,7 +308,7 @@ function flattenNodeWithAvailability(n, availableOnTenant) {
308
308
  };
309
309
  }
310
310
  async function mergeWithKnownSdkNodes(tenantNodes) {
311
- const { listKnownSdkNodes } = await import("./known-types-b64as10y.js");
311
+ const { listKnownSdkNodes } = await import("./known-types-jhyhnkt6.js");
312
312
  const tenantTypes = new Set(tenantNodes.map((n) => n.nodeType?.toLowerCase()).filter((t) => typeof t === "string"));
313
313
  const merged = tenantNodes.map((node) => ({ node, availableOnTenant: true }));
314
314
  for (const known of listKnownSdkNodes()) {
@@ -429,7 +429,7 @@ Subcommands:
429
429
  }
430
430
  ];
431
431
  registry.command("pull").description(`Pull and sync node data from ${commandPrefix} registry (login first for full registry)`).option("-f, --force", "Force refresh, ignore cache").examples(pullExamples).trackedAction(processContext, async (options) => {
432
- const { pullNodes } = await import("./node-sync-service-f1x1ak6q.js");
432
+ const { pullNodes } = await import("./node-sync-service-pb3m4dp2.js");
433
433
  const [error, result] = await catchError(pullNodes({
434
434
  force: options.force
435
435
  }));
@@ -475,7 +475,7 @@ In-solution (--local):
475
475
  processContext.exit(1);
476
476
  return;
477
477
  }
478
- const { listNodes } = await import("./node-sync-service-f1x1ak6q.js");
478
+ const { listNodes } = await import("./node-sync-service-pb3m4dp2.js");
479
479
  const [error, tenantNodes] = await catchError(listNodes({ local: options.local }));
480
480
  if (error) {
481
481
  OutputFormatter.error({
@@ -583,7 +583,7 @@ In-solution (--local):
583
583
  searchNodeSummariesWithAvailability,
584
584
  searchNodes,
585
585
  searchNodesWithFilters
586
- } = await import("./node-sync-service-f1x1ak6q.js");
586
+ } = await import("./node-sync-service-pb3m4dp2.js");
587
587
  if (options.local) {
588
588
  const [searchError2, results2] = await catchError(parsedFilters ? searchNodesWithFilters(keyword, parsedFilters, {
589
589
  local: true
@@ -643,7 +643,7 @@ Examples:
643
643
 
644
644
  In-solution (--local):
645
645
  cd MySolution/MyFlow && ${cmd} get <node-type> --local`).argument("<node-type>", `Node type identifier — get it from '${cmd} search'`).option("--connection-id <id>", "Connection ID for Integration Service connector node enrichment. Required for connector trigger nodes; optional for connector activity nodes.").option("--local", "Get node from in-solution projects only (requires .uipx in CWD, parent, or grandparent)").examples(getExamples).trackedAction(processContext, async (nodeType, options) => {
646
- const { getNodeEnriched } = await import("./node-sync-service-f1x1ak6q.js");
646
+ const { getNodeEnriched } = await import("./node-sync-service-pb3m4dp2.js");
647
647
  const [error, result] = await catchError(getNodeEnriched(nodeType, options.connectionId, {
648
648
  local: options.local
649
649
  }));
@@ -1,9 +1,3 @@
1
- import {
2
- UI_ONLY_NODE_TYPES
3
- } from "./packager-tool-es0a755k.js";
4
- import {
5
- checkForwardMigration
6
- } from "./packager-tool-s841bbkr.js";
7
1
  import {
8
2
  connectorNodeValidator,
9
3
  crossNodeBindingValidator,
@@ -11,7 +5,10 @@ import {
11
5
  isConnectorWaitForEventType,
12
6
  isEventDrivenConnectorType,
13
7
  readEssentialConfiguration
14
- } from "./packager-tool-cdn59g60.js";
8
+ } from "./packager-tool-ve5t7317.js";
9
+ import {
10
+ checkForwardMigration
11
+ } from "./packager-tool-yednpbbw.js";
15
12
  import {
16
13
  ERROR_SOURCE_PORT,
17
14
  deriveHandleCustomizationSourceOverride,
@@ -22,73 +19,78 @@ import {
22
19
  parseVisibleInputKey,
23
20
  portMatchesTemplate
24
21
  } from "./packager-tool-1frs4sr4.js";
22
+ import {
23
+ previewIdIssues
24
+ } from "./packager-tool-zgsvggdr.js";
25
+ import {
26
+ UI_ONLY_NODE_TYPES
27
+ } from "./packager-tool-e5hj89zm.js";
25
28
  import {
26
29
  collectNodeBindingResourceKeys,
27
30
  isProcessNode,
28
31
  resolveProcessTarget
29
- } from "./packager-tool-mnrbdn6a.js";
32
+ } from "./packager-tool-6scjsgh6.js";
30
33
  import {
34
+ INLINE_ACTIVITY_SOURCE,
35
+ INLINE_ACTIVITY_TYPE_PREFIX,
36
+ collectScriptRefs,
37
+ getInlineActivityConfiguration,
31
38
  loadRegistry,
32
39
  parse
33
- } from "./packager-tool-t9c77psy.js";
40
+ } from "./packager-tool-p1tb6d4f.js";
34
41
  import {
35
42
  isRecord
36
- } from "./packager-tool-gzpvdcnw.js";
43
+ } from "./packager-tool-da1cmt0q.js";
37
44
  import {
38
45
  findNodeDefinition
39
46
  } from "./packager-tool-w5a1hhyj.js";
40
47
  import {
41
48
  getLoginStatusAsync
42
- } from "./packager-tool-26ydwf12.js";
49
+ } from "./packager-tool-6h69pd2a.js";
43
50
  import {
44
51
  findNearestParentUipxFile,
45
52
  readSolutionManifest
46
- } from "./packager-tool-321a1806.js";
53
+ } from "./packager-tool-8vmx4j2w.js";
47
54
  import {
48
55
  ManifestClient,
49
56
  buildErrorHandle
50
- } from "./packager-tool-gs28y1eq.js";
57
+ } from "./packager-tool-qhhrq12s.js";
51
58
  import {
52
59
  resolveProjectFlowFile
53
- } from "./packager-tool-5kt8tsq4.js";
60
+ } from "./packager-tool-225z77w9.js";
54
61
  import {
55
62
  canonicalAgentInputPath,
56
63
  collectAgentInputLeaves,
57
64
  createFlowRefResolver,
58
- resolveWorkflowRefs
59
- } from "./packager-tool-afd1wwf2.js";
65
+ hydrateAgentNodeInputs,
66
+ inlineFlowRefs,
67
+ parseFlowSource,
68
+ resolveWorkflowRefs,
69
+ runDesignerRules
70
+ } from "./packager-tool-53c81nnr.js";
60
71
  import {
61
72
  AGENT_NODE_TYPES,
62
73
  DECISION_NODE_TYPE,
63
74
  SYNTHETIC_GATEWAY_OUTPUT_KEYS,
64
- cliRules,
65
- conditionExpressionRule,
66
75
  decodeLiteral,
67
76
  getJsExpressionBody,
68
- isBlockingSeverity,
69
77
  isExpressionValue,
70
78
  isStartEventNode,
71
- isVoiceAgentNodeType,
72
- parseWorkflowJson,
73
- runRules,
74
- toSerializedNodes
75
- } from "./packager-tool-yxnepq2j.js";
76
- import {
77
- registerFlowSchemaI18n
78
- } from "./packager-tool-p79yh9ww.js";
79
+ isVoiceAgentNodeType
80
+ } from "./packager-tool-ysbskrta.js";
79
81
  import {
80
82
  instance
81
- } from "./packager-tool-pppzgwfw.js";
83
+ } from "./packager-tool-n4vdjmjx.js";
82
84
  import {
83
85
  OutputFormatter,
84
86
  RESULTS,
85
87
  catchError,
86
88
  extractErrorMessageSync,
87
89
  logger
88
- } from "./packager-tool-6k8s7pt9.js";
90
+ } from "./packager-tool-r7xy9sew.js";
89
91
  import {
90
92
  getFileSystem
91
- } from "./packager-tool-0v3s8r01.js";
93
+ } from "./packager-tool-3h2ktz6q.js";
92
94
  import {
93
95
  __require
94
96
  } from "./packager-tool-1yh8g550.js";
@@ -390,7 +392,7 @@ async function ensureCatalogRegistered() {
390
392
  if (catalogRegistered || !instance.isInitialized)
391
393
  return;
392
394
  try {
393
- const { registerFlowExpressionModelI18n } = await import("./localization-y790z9vm.js");
395
+ const { registerFlowExpressionModelI18n } = await import("./localization-xecwjpe2.js");
394
396
  registerFlowExpressionModelI18n(instance);
395
397
  } catch (error) {
396
398
  logger.warn(`Expression type checking localization unavailable, falling back to English: ${extractErrorMessageSync(error)}`);
@@ -399,7 +401,7 @@ async function ensureCatalogRegistered() {
399
401
  }
400
402
  var headlessModule;
401
403
  function loadHeadless() {
402
- headlessModule ??= import("./headless-mmnrkzve.js").then((mod) => {
404
+ headlessModule ??= import("./headless-1pdmae01.js").then((mod) => {
403
405
  logger.info(`Expression type checking: @uipath/flow-expression-model (TypeScript ${mod.HEADLESS_TYPESCRIPT_VERSION})`);
404
406
  return mod;
405
407
  }).catch((error) => {
@@ -825,6 +827,68 @@ function scanForUnprefixedExpressions(obj, path, issues) {
825
827
  }
826
828
  }
827
829
 
830
+ // src/services/node-validators/inline-activity-validator.ts
831
+ var inlineActivityValidator = {
832
+ id: "inline-activity",
833
+ appliesTo: (node) => node.type.startsWith(INLINE_ACTIVITY_TYPE_PREFIX) || getInlineActivityConfiguration(node) !== undefined,
834
+ validate: (node) => {
835
+ const issue = (path, message) => ({
836
+ path: `nodes[${node.id}].${path}`,
837
+ severity: "error",
838
+ message
839
+ });
840
+ const isInlineType = node.type.startsWith(INLINE_ACTIVITY_TYPE_PREFIX);
841
+ const config = getInlineActivityConfiguration(node);
842
+ if (!config) {
843
+ return [
844
+ issue("inputs.inlineActivityConfiguration", `Non-catalog activity node (\`${node.type}\`) has no \`inputs.inlineActivityConfiguration\` — the runtime has no activity to run. ` + "Fix: remove the node and re-add it with `uip maestro flow node add <file> <type> --metadata <Name>.json --scripts <dir>`.")
845
+ ];
846
+ }
847
+ if (!isInlineType) {
848
+ return [
849
+ issue("type", `Node \`${node.id}\` carries \`inputs.inlineActivityConfiguration\` but its type \`${node.type}\` is not a non-catalog activity type (\`${INLINE_ACTIVITY_TYPE_PREFIX}<connector-key>.<slug>\`).`)
850
+ ];
851
+ }
852
+ const issues = [];
853
+ const scripts = config.scripts && typeof config.scripts === "object" ? config.scripts : {};
854
+ const hasScript = (ref) => typeof scripts[ref] === "string" && scripts[ref].length > 0;
855
+ const scriptRef = typeof config.scriptRef === "string" ? config.scriptRef : "";
856
+ if (!scriptRef) {
857
+ issues.push(issue("inputs.inlineActivityConfiguration.scriptRef", "`scriptRef` is missing — it must name the main action script."));
858
+ } else if (!hasScript(scriptRef)) {
859
+ issues.push(issue(`inputs.inlineActivityConfiguration.scripts.${scriptRef}`, `The main action script \`${scriptRef}\` has no source under \`scripts\`.`));
860
+ }
861
+ const missingLookups = collectLookupRefs(config.metadata).filter((ref) => !hasScript(ref));
862
+ if (missingLookups.length > 0) {
863
+ issues.push(issue("inputs.inlineActivityConfiguration.scripts", `Lookup script(s) referenced by the metadata have no source under \`scripts\`: ${missingLookups.join(", ")}. ` + "Re-add the node with a --scripts directory that holds every <scriptRef>.js."));
864
+ }
865
+ const detail = node.inputs?.detail;
866
+ const context = detail && typeof detail === "object" ? detail.activityContext : undefined;
867
+ if (context && typeof context === "object") {
868
+ const ac = context;
869
+ if (ac.source !== INLINE_ACTIVITY_SOURCE) {
870
+ issues.push(issue("inputs.detail.activityContext.source", `\`activityContext.source\` must be "${INLINE_ACTIVITY_SOURCE}" for a non-catalog activity (got ${JSON.stringify(ac.source)}). Re-run \`uip maestro flow node configure\`.`));
871
+ }
872
+ if (scriptRef && ac.scriptRef !== scriptRef) {
873
+ issues.push(issue("inputs.detail.activityContext.scriptRef", `\`activityContext.scriptRef\` (${JSON.stringify(ac.scriptRef)}) does not match the embedded activity's \`scriptRef\` ("${scriptRef}"). Re-run \`uip maestro flow node configure\`.`));
874
+ }
875
+ }
876
+ return issues;
877
+ }
878
+ };
879
+ function collectLookupRefs(metadata) {
880
+ if (!metadata || typeof metadata !== "object")
881
+ return [];
882
+ const slots = metadata.metadata?.method;
883
+ if (!slots || typeof slots !== "object")
884
+ return [];
885
+ try {
886
+ return collectScriptRefs(metadata).lookups;
887
+ } catch {
888
+ return [];
889
+ }
890
+ }
891
+
828
892
  // src/services/node-validators/ixp-node-validator.ts
829
893
  var FORBIDDEN_INPUT_FIELDS = [
830
894
  "digitizationMode",
@@ -1049,6 +1113,73 @@ function readLegacyModelSource(node) {
1049
1113
  return;
1050
1114
  }
1051
1115
 
1116
+ // src/services/node-validators/unresolved-binding-placeholder-validator.ts
1117
+ var PLACEHOLDER_RE = /^<bindings\.(.+)>$/;
1118
+ var asKey = (value) => typeof value === "string" && value ? value : undefined;
1119
+ var isConnection = (resource) => resource === undefined || resource.toLowerCase() === "connection";
1120
+ function instanceKey(resource, inputs) {
1121
+ if (isConnection(resource)) {
1122
+ const detail = inputs?.detail;
1123
+ return asKey(detail?.connectionResourceId) ?? asKey(inputs?.connectionId);
1124
+ }
1125
+ if (resource === "queue") {
1126
+ const queue = inputs?.queue;
1127
+ if (!queue || typeof queue !== "object")
1128
+ return;
1129
+ return asKey(queue.folderPath ? queue.key : queue.name);
1130
+ }
1131
+ if (resource === "ixpDeployment") {
1132
+ const model = inputs?.model;
1133
+ return model && typeof model === "object" ? asKey(model.id) : undefined;
1134
+ }
1135
+ return;
1136
+ }
1137
+ function matches(name, rows, scope, resource, sameResource) {
1138
+ const candidates = resource ? rows.filter((b) => sameResource(b.resource, resource)) : rows;
1139
+ return candidates.some((b) => b.name === name && (!scope || b.resourceKey === scope));
1140
+ }
1141
+ var exact = (a, b) => a === b;
1142
+ var folded = (a, b) => (a ?? "").toLowerCase() === (b ?? "").toLowerCase();
1143
+ var unresolvedBindingPlaceholderValidator = {
1144
+ id: "unresolved-binding-placeholder",
1145
+ appliesTo: () => true,
1146
+ validate: (node, context) => {
1147
+ const definition = findNodeDefinition(context.definitions, node);
1148
+ const model = definition?.model;
1149
+ if (!Array.isArray(model?.context))
1150
+ return [];
1151
+ const rows = context.bindings ?? [];
1152
+ const resource = model.bindings?.resource;
1153
+ const scope = instanceKey(resource, node.inputs) ?? asKey(model.bindings?.resourceKey);
1154
+ const severity = context.strictBindings ? "error" : "warning";
1155
+ const issues = [];
1156
+ for (const entry of model.context) {
1157
+ const name = typeof entry.value === "string" ? PLACEHOLDER_RE.exec(entry.value)?.[1] : undefined;
1158
+ if (!name)
1159
+ continue;
1160
+ if (matches(name, rows, scope, resource, exact))
1161
+ continue;
1162
+ const casingOnly = resource !== undefined && matches(name, rows, scope, resource, folded);
1163
+ let message;
1164
+ if (casingOnly) {
1165
+ const rowCasings = [
1166
+ ...new Set(rows.filter((b) => b.name === name && b.resource !== resource && folded(b.resource, resource)).map((b) => `"${b.resource}"`))
1167
+ ].join(", ");
1168
+ const canonical = isConnection(resource) ? ' Canonical casing is "connection" — correct whichever side differs.' : " Align the two casings.";
1169
+ message = `[UNRESOLVED_BINDING] Node "${node.id}": placeholder "<bindings.${name}>" matches a binding only case-insensitively — the definition "${node.type}" declares model.bindings.resource "${resource}" but the matching bindings[] rows declare ${rowCasings}. Studio Web compares these exactly and refuses to publish ("${name}" is not configured).${canonical}`;
1170
+ } else {
1171
+ message = `[UNRESOLVED_BINDING] Node "${node.id}": placeholder "<bindings.${name}>" has no matching entry in the flow's bindings[] (need name "${name}"${resource ? `, resource "${resource}"` : ""}${scope ? `, resourceKey "${scope}"` : ""}). Studio Web refuses to publish ("${name}" is not configured) and the runtime would receive the literal placeholder. Re-bind the node's connection/resource so its bindings[] rows are written.`;
1172
+ }
1173
+ issues.push({
1174
+ path: `nodes[${node.id}].model.context`,
1175
+ message,
1176
+ severity
1177
+ });
1178
+ }
1179
+ return issues;
1180
+ }
1181
+ };
1182
+
1052
1183
  // src/services/node-validators/index.ts
1053
1184
  var defaultNodeValidators = [
1054
1185
  activityTypeIdValidator,
@@ -1056,9 +1187,11 @@ var defaultNodeValidators = [
1056
1187
  connectorNodeValidator,
1057
1188
  crossNodeBindingValidator,
1058
1189
  expressionPrefixValidator,
1190
+ inlineActivityValidator,
1059
1191
  jsExpressionSyntaxValidator,
1060
1192
  ixpNodeValidator,
1061
- modelSourceValidator
1193
+ modelSourceValidator,
1194
+ unresolvedBindingPlaceholderValidator
1062
1195
  ];
1063
1196
 
1064
1197
  // src/services/vars-reference-rule.ts
@@ -1799,16 +1932,6 @@ function validateVarsReferences(flow, options = {}) {
1799
1932
  }
1800
1933
 
1801
1934
  // src/services/flow-validate-service.ts
1802
- if (!instance.isInitialized) {
1803
- instance.init({
1804
- lng: "en",
1805
- fallbackLng: "en",
1806
- defaultNS: "validation",
1807
- resources: {},
1808
- interpolation: { escapeValue: false }
1809
- });
1810
- }
1811
- registerFlowSchemaI18n(instance);
1812
1935
  function extractPromptVariables(content) {
1813
1936
  const vars = new Set;
1814
1937
  const re = /\{\{([^}]*)\}\}/g;
@@ -1913,29 +2036,6 @@ function collectNodeExpressionStrings(nodes) {
1913
2036
  }
1914
2037
  return expressions;
1915
2038
  }
1916
- function extractSupportsErrorHandling(content) {
1917
- const map = new Map;
1918
- let raw;
1919
- try {
1920
- raw = JSON.parse(content);
1921
- } catch {
1922
- return map;
1923
- }
1924
- if (!raw || typeof raw !== "object")
1925
- return map;
1926
- const defs = raw.definitions;
1927
- if (!Array.isArray(defs))
1928
- return map;
1929
- for (const def of defs) {
1930
- if (!def || typeof def !== "object")
1931
- continue;
1932
- const d = def;
1933
- if (typeof d.nodeType === "string" && typeof d.version === "string" && d.supportsErrorHandling === true) {
1934
- map.set(`${d.nodeType}:${d.version}`, true);
1935
- }
1936
- }
1937
- return map;
1938
- }
1939
2039
  function normalizeManifestVersion(version) {
1940
2040
  const raw = version ?? "1.0.0";
1941
2041
  const parts = raw.split(".");
@@ -1957,77 +2057,6 @@ function formatHandleList(concrete, templates) {
1957
2057
  ];
1958
2058
  return ports.length > 0 ? ports.join(", ") : "(none)";
1959
2059
  }
1960
- function validationErrorToIssue(error) {
1961
- let path;
1962
- if (error.nodeId) {
1963
- path = error.fieldPath ? `nodes[${error.nodeId}].${error.fieldPath}` : `nodes[${error.nodeId}]`;
1964
- } else {
1965
- path = error.fieldPath ?? "(workflow)";
1966
- }
1967
- return {
1968
- path,
1969
- message: `[${error.code}] ${error.message}`,
1970
- severity: isBlockingSeverity(error.severity) ? "error" : "warning"
1971
- };
1972
- }
1973
- function buildValidationContext(flow) {
1974
- const nodes = toSerializedNodes(flow.nodes);
1975
- const edges = flow.edges.map((e) => ({
1976
- id: e.id,
1977
- source: e.sourceNodeId,
1978
- sourceHandle: e.sourcePort ?? null,
1979
- target: e.targetNodeId,
1980
- targetHandle: e.targetPort ?? null
1981
- }));
1982
- const manifests = new Map;
1983
- for (const def of flow.definitions) {
1984
- manifests.set(`${def.nodeType}:${def.version}`, {
1985
- nodeType: def.nodeType,
1986
- version: def.version,
1987
- category: def.category,
1988
- display: def.display,
1989
- handleConfiguration: def.handleConfiguration,
1990
- inputDefinition: def.inputDefinition,
1991
- outputDefinition: def.outputDefinition,
1992
- tags: def.tags
1993
- });
1994
- }
1995
- const outputVariableIds = [];
1996
- const variables = flow.variables;
1997
- if (variables?.globals) {
1998
- for (const v of variables.globals) {
1999
- if (v.direction === "out" || v.direction === "inout") {
2000
- outputVariableIds.push(v.id);
2001
- }
2002
- }
2003
- }
2004
- return {
2005
- nodes,
2006
- edges,
2007
- manifests,
2008
- outputVariableIds
2009
- };
2010
- }
2011
- function splitSchemaParseError(parseError) {
2012
- const header = "Schema validation failed:";
2013
- if (!parseError.startsWith(header)) {
2014
- return null;
2015
- }
2016
- const body = parseError.slice(header.length);
2017
- const lines = body.split(`
2018
- `);
2019
- const issues = [];
2020
- for (const rawLine of lines) {
2021
- const match = /^\s*-\s+(.+?):\s(.*)$/.exec(rawLine);
2022
- if (!match)
2023
- continue;
2024
- const [, path, message] = match;
2025
- if (!path || !message)
2026
- continue;
2027
- issues.push({ path, message });
2028
- }
2029
- return issues.length > 0 ? issues : null;
2030
- }
2031
2060
 
2032
2061
  class FlowValidateService {
2033
2062
  fs;
@@ -2151,28 +2180,16 @@ Validating: ${absolutePath}
2151
2180
  throw new Error(`Could not read file: ${absolutePath}`);
2152
2181
  }
2153
2182
  const issues = [];
2154
- const parsed = parseWorkflowJson(content);
2155
- const { workflow, parseError, parseIssues } = parsed;
2156
- if (parseError || !workflow) {
2157
- const recoveredIssues = parseIssues && parseIssues.length > 0 ? parseIssues : parseError ? splitSchemaParseError(parseError) : null;
2158
- const fallback = [
2159
- {
2160
- path: "(root)",
2161
- message: parseError ?? "File is not valid JSON",
2162
- severity: "error"
2163
- }
2164
- ];
2183
+ const [, source] = await catchError(inlineFlowRefs(this.fs, content, absolutePath, logger));
2184
+ const parsed = parseFlowSource(source ?? content);
2185
+ if (!parsed.ok) {
2165
2186
  return {
2166
2187
  success: false,
2167
2188
  filePath: absolutePath,
2168
- issues: recoveredIssues && recoveredIssues.length > 0 ? recoveredIssues.map((pi) => ({
2169
- path: pi.path,
2170
- message: pi.message,
2171
- severity: "error"
2172
- })) : fallback
2189
+ issues: parsed.issues
2173
2190
  };
2174
2191
  }
2175
- const rawDefErrorHandling = extractSupportsErrorHandling(content);
2192
+ const { workflow, rawDefErrorHandling } = parsed;
2176
2193
  const currentManifests = this.validateCurrentManifests ? await this.loadCurrentManifestMap() : new Map;
2177
2194
  const flowDir = this.fs.path.dirname(absolutePath);
2178
2195
  const hydrationDiagnoses = await this.resolveAgentPrompts(workflow.nodes, flowDir);
@@ -2202,7 +2219,8 @@ Validating: ${absolutePath}
2202
2219
  nodes: subNodes,
2203
2220
  edges: entry.edges,
2204
2221
  definitions: workflow.definitions,
2205
- variables: entry.variables
2222
+ variables: entry.variables,
2223
+ bindings: workflow.bindings
2206
2224
  };
2207
2225
  const prefix = `subflows[${subflowId}].`;
2208
2226
  issues.push(...this.validateGraph(subGraph, prefix, rawDefErrorHandling, currentManifests, (workflow.variables?.globals ?? []).map((g) => g.id).filter((id) => typeof id === "string")));
@@ -2284,7 +2302,6 @@ Validating: ${absolutePath}
2284
2302
  }
2285
2303
  if (!node.inputs)
2286
2304
  node.inputs = {};
2287
- const inputs = node.inputs;
2288
2305
  const diag = {
2289
2306
  sourceLocation,
2290
2307
  sourceId: source,
@@ -2312,13 +2329,11 @@ Validating: ${absolutePath}
2312
2329
  diag.agentJsonUnparseable = true;
2313
2330
  continue;
2314
2331
  }
2332
+ hydrateAgentNodeInputs(node, agent);
2315
2333
  const settings = agent.settings;
2316
2334
  if (isVoiceAgentNodeType(node.type)) {
2317
2335
  const voiceSettings = isRecord(settings) ? settings.voice : undefined;
2318
2336
  diag.voiceSettingsPresent = isRecord(voiceSettings);
2319
- if (diag.voiceSettingsPresent && inputs.voice === undefined) {
2320
- inputs.voice = voiceSettings;
2321
- }
2322
2337
  diag.isConversationalAgent = isRecord(agent.metadata) && agent.metadata.isConversational === true;
2323
2338
  }
2324
2339
  const messages = agent.messages;
@@ -2338,12 +2353,10 @@ Validating: ${absolutePath}
2338
2353
  }
2339
2354
  }
2340
2355
  if (m.role === "system" && typeof m.content === "string") {
2341
- inputs.systemPrompt ??= m.content;
2342
2356
  if (m.content.length > 0)
2343
2357
  diag.systemPromptPopulated = true;
2344
2358
  }
2345
2359
  if (m.role === "user" && typeof m.content === "string") {
2346
- inputs.userPrompt ??= m.content;
2347
2360
  if (m.content.length > 0)
2348
2361
  diag.userPromptPopulated = true;
2349
2362
  }
@@ -2356,18 +2369,6 @@ Validating: ${absolutePath}
2356
2369
  if (Object.keys(byField).length > 0) {
2357
2370
  diag.promptVariablesByField = byField;
2358
2371
  }
2359
- if (settings && typeof settings === "object") {
2360
- const s = settings;
2361
- if (typeof s.temperature === "number" && inputs.temperature === undefined) {
2362
- inputs.temperature = s.temperature;
2363
- }
2364
- if (typeof s.maxTokens === "number" && inputs.maxTokenPerResponse === undefined) {
2365
- inputs.maxTokenPerResponse = s.maxTokens;
2366
- }
2367
- if (typeof s.model === "string" && inputs.model === undefined) {
2368
- inputs.model = s.model;
2369
- }
2370
- }
2371
2372
  const inputSchema = agent.inputSchema;
2372
2373
  if (inputSchema && typeof inputSchema === "object") {
2373
2374
  const props = inputSchema.properties;
@@ -2680,28 +2681,17 @@ Validating: ${absolutePath}
2680
2681
  const issues = [];
2681
2682
  issues.push(...this.validateEdgeReferences(graph));
2682
2683
  issues.push(...this.validateNodeTypeDefinitions(graph));
2683
- issues.push(...this.validateUniqueIds(graph), ...this.validateExclusiveBranchJoins(graph), ...validateVarsReferences(graph, {
2684
+ issues.push(...this.validateUniqueIds(graph), ...previewIdIssues(graph), ...this.validateExclusiveBranchJoins(graph), ...validateVarsReferences(graph, {
2684
2685
  extraKnownRoots: parentVariableIds
2685
2686
  }));
2686
2687
  issues.push(...this.validateEdgeHandles(graph, rawDefErrorHandling));
2687
2688
  issues.push(...this.validateEdgeHandlesAgainstCurrentManifests(graph, currentManifests));
2688
- const ctx = buildValidationContext(graph);
2689
- if (this.governanceEnforcements) {
2690
- ctx.governanceEnforcements = this.governanceEnforcements;
2691
- }
2692
- if (this.availableModelNames) {
2693
- ctx.availableModelNames = this.availableModelNames;
2694
- }
2695
- const dropped = new Set(["expression-ref"]);
2696
- if (pathPrefix)
2697
- dropped.add("trigger-required");
2698
- const rules = cliRules.filter((r) => !dropped.has(r.id));
2699
- const ruleErrors = runRules([
2700
- ...rules,
2701
- conditionExpressionRule,
2702
- ...this.extraRules
2703
- ], ctx);
2704
- issues.push(...ruleErrors.map(validationErrorToIssue));
2689
+ issues.push(...runDesignerRules(graph, {
2690
+ isSubflow: Boolean(pathPrefix),
2691
+ governanceEnforcements: this.governanceEnforcements,
2692
+ availableModelNames: this.availableModelNames,
2693
+ extraRules: this.extraRules
2694
+ }));
2705
2695
  issues.push(...this.runNodeValidators(graph));
2706
2696
  return pathPrefix ? issues.map((i) => ({ ...i, path: `${pathPrefix}${i.path}` })) : issues;
2707
2697
  }
@@ -3424,7 +3414,8 @@ Validating: ${absolutePath}
3424
3414
  const context = {
3425
3415
  definitions: flow.definitions,
3426
3416
  nodeIds: new Set(flow.nodes.map((n) => n.id)),
3427
- strictBindings: this.strictBindings
3417
+ strictBindings: this.strictBindings,
3418
+ bindings: flow.bindings
3428
3419
  };
3429
3420
  for (const node of flow.nodes) {
3430
3421
  for (const validator of this.nodeValidators) {
@@ -3510,4 +3501,4 @@ function describeUnsatisfiableJoin(node, finding, graph) {
3510
3501
 
3511
3502
  export { FlowValidateService };
3512
3503
 
3513
- //# debugId=5C2363C2B00F4DAB64756E2164756E21
3504
+ //# debugId=A2D8B7CDA2B08E8464756E2164756E21
@@ -6,12 +6,12 @@ import {
6
6
  orchestratorGet,
7
7
  orchestratorPost,
8
8
  studioWebPost
9
- } from "./packager-tool-s0mzv3sx.js";
9
+ } from "./packager-tool-aw60v0et.js";
10
10
  import {
11
11
  RESULTS,
12
12
  catchError,
13
13
  logger
14
- } from "./packager-tool-6k8s7pt9.js";
14
+ } from "./packager-tool-r7xy9sew.js";
15
15
 
16
16
  // ../maestro-sdk/src/debug-service.ts
17
17
  import { randomUUID } from "node:crypto";