@uipath/skills 1.201.0-preview.621 → 1.202.0-preview.635

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 (415) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.cursor-plugin/plugin.json +1 -1
  4. package/CODEOWNERS +41 -29
  5. package/README.md +1 -0
  6. package/assets/skill-status.json +13 -2
  7. package/assets/uip-catalog-snapshot.json +95 -46
  8. package/package.json +2 -1
  9. package/skills/uipath-admin/SKILL.md +107 -197
  10. package/skills/uipath-admin/references/audit-commands.md +69 -120
  11. package/skills/uipath-admin/references/audit-workflow-guide.md +101 -152
  12. package/skills/uipath-admin/references/authorization/authorization-commands.md +121 -210
  13. package/skills/uipath-admin/references/authorization/check-access.md +39 -63
  14. package/skills/uipath-admin/references/authorization/grant-permissions.md +38 -49
  15. package/skills/uipath-admin/references/authorization/permission-catalog.md +32 -34
  16. package/skills/uipath-admin/references/authorization/role-assignment-management.md +96 -99
  17. package/skills/uipath-admin/references/authorization/role-management.md +113 -142
  18. package/skills/uipath-admin/references/diagnose/CAPABILITY.md +13 -14
  19. package/skills/uipath-admin/references/diagnose/{references/failure-modes.md → failure-modes.md} +90 -46
  20. package/skills/uipath-admin/references/diagnose/{references/troubleshooting-guide.md → troubleshooting-guide.md} +21 -14
  21. package/skills/uipath-admin/references/external-app-management.md +42 -39
  22. package/skills/uipath-admin/references/identity-commands.md +72 -625
  23. package/skills/uipath-admin/references/identity-troubleshoot-guide.md +73 -95
  24. package/skills/uipath-admin/references/ip-restriction/bypass-rule-management.md +25 -54
  25. package/skills/uipath-admin/references/ip-restriction/enforcement-management.md +19 -31
  26. package/skills/uipath-admin/references/ip-restriction/ip-range-management.md +48 -45
  27. package/skills/uipath-admin/references/ip-restriction/ip-restriction-commands.md +89 -146
  28. package/skills/uipath-admin/references/key-concepts.md +24 -0
  29. package/skills/uipath-admin/references/organization-management.md +49 -70
  30. package/skills/uipath-admin/references/organizations-commands.md +39 -74
  31. package/skills/uipath-admin/references/pat-management.md +25 -38
  32. package/skills/uipath-admin/references/robot-account-management.md +16 -14
  33. package/skills/uipath-admin/references/smtp-management.md +19 -14
  34. package/skills/uipath-admin/references/tenant-management.md +1 -1
  35. package/skills/uipath-admin/references/tenants-commands.md +82 -148
  36. package/skills/uipath-admin/references/user-management.md +70 -56
  37. package/skills/uipath-agents/SKILL.md +4 -3
  38. package/skills/uipath-agents/references/authentication.md +4 -3
  39. package/skills/uipath-agents/references/coded/capabilities/datafabric.md +465 -0
  40. package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails-recommend.md +5 -0
  41. package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails.md +2 -0
  42. package/skills/uipath-agents/references/coded/capabilities/human-in-the-loop.md +12 -6
  43. package/skills/uipath-agents/references/coded/flow-integration.md +2 -2
  44. package/skills/uipath-agents/references/coded/frameworks/langgraph-integration.md +48 -16
  45. package/skills/uipath-agents/references/coded/frameworks/openai-agents-integration.md +1 -1
  46. package/skills/uipath-agents/references/coded/lifecycle/deployment.md +11 -1
  47. package/skills/uipath-agents/references/coded/quickstart.md +11 -8
  48. package/skills/uipath-agents/references/lowcode/capabilities/inline-in-flow/inline-in-flow.md +3 -3
  49. package/skills/uipath-agents/references/lowcode/capabilities/memory/memory.md +19 -2
  50. package/skills/uipath-agents/references/lowcode/evaluations/evaluate.md +2 -2
  51. package/skills/uipath-agents/references/lowcode/evaluations/orchestrator-eval-run.md +409 -155
  52. package/skills/uipath-agents/references/lowcode/evaluations/running-evaluations.md +2 -2
  53. package/skills/uipath-agents/references/lowcode/prompting/autonomous-agent-prompting-guide.md +1 -1
  54. package/skills/uipath-aops/SKILL.md +313 -0
  55. package/skills/uipath-aops/assets/templates/pipeline-dto-template.json +15 -0
  56. package/skills/uipath-aops/references/discovery-flow.md +312 -0
  57. package/skills/uipath-aops/references/migration-guide.md +146 -0
  58. package/skills/uipath-aops/references/pipeline-dto-guide.md +276 -0
  59. package/skills/uipath-aops/references/save-and-run-guide.md +156 -0
  60. package/skills/uipath-api-workflow/SKILL.md +48 -6
  61. package/skills/uipath-api-workflow/assets/templates/file-base64-roundtrip-example.json +154 -0
  62. package/skills/uipath-api-workflow/assets/templates/nested-control-flow-example.json +0 -1
  63. package/skills/uipath-api-workflow/references/cli-reference.md +20 -1
  64. package/skills/uipath-api-workflow/references/expressions-and-context.md +19 -0
  65. package/skills/uipath-api-workflow/references/files-and-base64.md +153 -0
  66. package/skills/uipath-api-workflow/references/operating-published-workflows.md +3 -2
  67. package/skills/uipath-api-workflow/references/task-types.md +89 -3
  68. package/skills/uipath-api-workflow/references/testing-and-evals.md +224 -0
  69. package/skills/uipath-api-workflow/references/troubleshooting.md +124 -4
  70. package/skills/uipath-coded-apps/SKILL.md +4 -2
  71. package/skills/uipath-coded-apps/assets/scripts/dashboards/build-dashboard.mjs +1 -1
  72. package/skills/uipath-coded-apps/references/dashboards/CAPABILITY.md +11 -1
  73. package/skills/uipath-coded-apps/references/dashboards/plugins/build/impl.md +5 -3
  74. package/skills/uipath-coded-apps/references/dashboards/plugins/deploy/impl.md +1 -0
  75. package/skills/uipath-coded-apps/references/oauth-client-setup.md +2 -0
  76. package/skills/uipath-coded-apps/references/pack-publish-deploy.md +18 -0
  77. package/skills/uipath-coded-apps/references/sdk/orchestrator.md +4 -0
  78. package/skills/uipath-connector-builder/SKILL.md +7 -5
  79. package/skills/uipath-connector-builder/references/debugging.md +5 -1
  80. package/skills/uipath-connector-builder/references/element-json.md +3 -1
  81. package/skills/uipath-connector-builder/references/standard-resources.md +37 -6
  82. package/skills/uipath-functions/SKILL.md +134 -222
  83. package/skills/uipath-functions/references/js/authoring-guide.md +141 -0
  84. package/skills/uipath-functions/references/js/bindings-guide.md +120 -0
  85. package/skills/uipath-functions/references/js/calling-uipath-apis-guide.md +112 -0
  86. package/skills/uipath-functions/references/js/coded-app-wiring-guide.md +103 -0
  87. package/skills/uipath-functions/references/js/deployment-guide.md +109 -0
  88. package/skills/uipath-functions/references/js/http-semantics-guide.md +80 -0
  89. package/skills/uipath-functions/references/js/job-mode-guide.md +114 -0
  90. package/skills/uipath-functions/references/js/local-dev-guide.md +107 -0
  91. package/skills/uipath-functions/references/python/workflow-guide.md +224 -0
  92. package/skills/uipath-governance/SKILL.md +9 -8
  93. package/skills/uipath-governance/references/compliance-pack/catalog/impl.md +36 -8
  94. package/skills/uipath-governance/references/compliance-pack/coverage/impl.md +14 -12
  95. package/skills/uipath-governance/references/compliance-pack/disable/impl.md +5 -3
  96. package/skills/uipath-governance/references/compliance-pack/full-apply/impl.md +7 -5
  97. package/skills/uipath-governance/references/compliance-pack/partial-apply/impl.md +14 -7
  98. package/skills/uipath-governance/references/compliance-pack/partial-apply/planning.md +3 -1
  99. package/skills/uipath-governance/references/compliance-pack/preview-gate.md +1 -1
  100. package/skills/uipath-governance/references/compliance-pack/query/impl.md +4 -2
  101. package/skills/uipath-governance/references/diagnose/CAPABILITY.md +12 -12
  102. package/skills/uipath-governance/references/diagnose/{references/failure-modes.md → failure-modes.md} +5 -5
  103. package/skills/uipath-governance/references/diagnose/{references/troubleshooting-guide.md → troubleshooting-guide.md} +2 -2
  104. package/skills/uipath-governance/references/disambiguation-guide.md +15 -7
  105. package/skills/uipath-human-in-the-loop/SKILL.md +107 -9
  106. package/skills/uipath-human-in-the-loop/references/hitl-casetask-action.md +413 -0
  107. package/skills/uipath-insights/SKILL.md +21 -14
  108. package/skills/uipath-insights/references/alerts-reads-guide.md +242 -0
  109. package/skills/uipath-insights/references/filter-discovery-guide.md +1 -1
  110. package/skills/uipath-insights/references/jobs-commands-guide.md +2 -2
  111. package/skills/uipath-ixp/references/cli-reference.md +1 -1
  112. package/skills/uipath-ixp/references/improve-prompts-guide.md +5 -6
  113. package/skills/uipath-maestro-bpmn/SKILL.md +87 -15
  114. package/skills/uipath-maestro-bpmn/references/diagnose/CAPABILITY.md +10 -10
  115. package/skills/uipath-maestro-bpmn/references/diagnose/{references/troubleshooting-guide.md → troubleshooting-guide.md} +1 -1
  116. package/skills/uipath-maestro-bpmn/references/expression-authoring.md +12 -2
  117. package/skills/uipath-maestro-bpmn/references/operate/CAPABILITY.md +12 -12
  118. package/skills/uipath-maestro-bpmn/references/operate/{references/run.md → run.md} +2 -2
  119. package/skills/uipath-maestro-bpmn/references/operate/{references/ship.md → ship.md} +3 -3
  120. package/skills/uipath-maestro-bpmn/references/patterns/ai-decision-review-guide.md +138 -0
  121. package/skills/uipath-maestro-bpmn/references/patterns/approval-chain-guide.md +136 -0
  122. package/skills/uipath-maestro-bpmn/references/patterns/composing-guide.md +113 -0
  123. package/skills/uipath-maestro-bpmn/references/patterns/external-wait-guide.md +145 -0
  124. package/skills/uipath-maestro-bpmn/references/patterns/failure-escalation-guide.md +103 -0
  125. package/skills/uipath-maestro-bpmn/references/patterns/high-volume-batch-guide.md +107 -0
  126. package/skills/uipath-maestro-bpmn/references/patterns/queue-distribution-guide.md +129 -0
  127. package/skills/uipath-maestro-bpmn/references/patterns/smart-triage-guide.md +129 -0
  128. package/skills/uipath-maestro-bpmn/references/registry-workflow.md +15 -0
  129. package/skills/uipath-maestro-bpmn/references/shared/local-metadata-regeneration-guide.md +67 -36
  130. package/skills/uipath-maestro-bpmn/references/shared/project-layout.md +6 -5
  131. package/skills/uipath-maestro-bpmn/references/structural-bpmn.md +23 -5
  132. package/skills/uipath-maestro-bpmn/validator/bpmn-spec.json +101 -53
  133. package/skills/uipath-maestro-case/SKILL.md +23 -24
  134. package/skills/uipath-maestro-case/references/bindings-and-expressions.md +30 -17
  135. package/skills/uipath-maestro-case/references/bindings-v2-sync.md +5 -5
  136. package/skills/uipath-maestro-case/references/brownfield.md +3 -3
  137. package/skills/uipath-maestro-case/references/case-commands.md +8 -4
  138. package/skills/uipath-maestro-case/references/case-editing-operations.md +19 -19
  139. package/skills/uipath-maestro-case/references/case-schema.md +17 -3
  140. package/skills/uipath-maestro-case/references/connector-integration.md +25 -16
  141. package/skills/uipath-maestro-case/references/connector-trigger-impl.md +15 -15
  142. package/skills/uipath-maestro-case/references/connector-trigger-planning.md +32 -29
  143. package/skills/uipath-maestro-case/references/entry-points-sync.md +2 -1
  144. package/skills/uipath-maestro-case/references/evals/evals.json +11 -11
  145. package/skills/uipath-maestro-case/references/implementation.md +74 -44
  146. package/skills/uipath-maestro-case/references/phased-execution.md +23 -21
  147. package/skills/uipath-maestro-case/references/placeholder-tasks.md +28 -23
  148. package/skills/uipath-maestro-case/references/planning.md +37 -252
  149. package/skills/uipath-maestro-case/references/plugins/case/impl-json.md +3 -3
  150. package/skills/uipath-maestro-case/references/plugins/case/planning.md +8 -6
  151. package/skills/uipath-maestro-case/references/plugins/conditions/case-exit-conditions/impl-json.md +3 -3
  152. package/skills/uipath-maestro-case/references/plugins/conditions/case-exit-conditions/planning.md +11 -10
  153. package/skills/uipath-maestro-case/references/plugins/conditions/stage-entry-conditions/impl-json.md +6 -6
  154. package/skills/uipath-maestro-case/references/plugins/conditions/stage-entry-conditions/planning.md +12 -12
  155. package/skills/uipath-maestro-case/references/plugins/conditions/stage-exit-conditions/impl-json.md +4 -4
  156. package/skills/uipath-maestro-case/references/plugins/conditions/stage-exit-conditions/planning.md +10 -9
  157. package/skills/uipath-maestro-case/references/plugins/conditions/task-entry-conditions/impl-json.md +5 -5
  158. package/skills/uipath-maestro-case/references/plugins/conditions/task-entry-conditions/planning.md +16 -14
  159. package/skills/uipath-maestro-case/references/plugins/logging/impl-json.md +3 -3
  160. package/skills/uipath-maestro-case/references/plugins/sla/impl-json.md +15 -15
  161. package/skills/uipath-maestro-case/references/plugins/sla/planning.md +20 -21
  162. package/skills/uipath-maestro-case/references/plugins/stages/impl-json.md +6 -6
  163. package/skills/uipath-maestro-case/references/plugins/stages/planning.md +9 -9
  164. package/skills/uipath-maestro-case/references/plugins/tasks/action/impl-json.md +9 -9
  165. package/skills/uipath-maestro-case/references/plugins/tasks/action/planning.md +38 -38
  166. package/skills/uipath-maestro-case/references/plugins/tasks/agent/impl-json.md +3 -3
  167. package/skills/uipath-maestro-case/references/plugins/tasks/agent/planning.md +24 -20
  168. package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/impl-json.md +3 -3
  169. package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/planning.md +24 -20
  170. package/skills/uipath-maestro-case/references/plugins/tasks/case-management/impl-json.md +4 -4
  171. package/skills/uipath-maestro-case/references/plugins/tasks/case-management/planning.md +25 -21
  172. package/skills/uipath-maestro-case/references/plugins/tasks/connector-activity/impl-json.md +30 -22
  173. package/skills/uipath-maestro-case/references/plugins/tasks/connector-activity/planning.md +44 -28
  174. package/skills/uipath-maestro-case/references/plugins/tasks/connector-trigger/impl-json.md +10 -10
  175. package/skills/uipath-maestro-case/references/plugins/tasks/connector-trigger/planning.md +27 -23
  176. package/skills/uipath-maestro-case/references/plugins/tasks/create-inline-common.md +3 -3
  177. package/skills/uipath-maestro-case/references/plugins/tasks/process/impl-json.md +3 -3
  178. package/skills/uipath-maestro-case/references/plugins/tasks/process/planning.md +25 -22
  179. package/skills/uipath-maestro-case/references/plugins/tasks/rpa/impl-json.md +3 -3
  180. package/skills/uipath-maestro-case/references/plugins/tasks/rpa/planning.md +25 -21
  181. package/skills/uipath-maestro-case/references/plugins/tasks/wait-for-timer/impl-json.md +4 -4
  182. package/skills/uipath-maestro-case/references/plugins/tasks/wait-for-timer/planning.md +5 -4
  183. package/skills/uipath-maestro-case/references/plugins/triggers/event/impl-json.md +9 -9
  184. package/skills/uipath-maestro-case/references/plugins/triggers/event/planning.md +30 -19
  185. package/skills/uipath-maestro-case/references/plugins/triggers/manual/impl-json.md +4 -4
  186. package/skills/uipath-maestro-case/references/plugins/triggers/manual/planning.md +8 -7
  187. package/skills/uipath-maestro-case/references/plugins/triggers/timer/impl-json.md +3 -3
  188. package/skills/uipath-maestro-case/references/plugins/triggers/timer/planning.md +5 -4
  189. package/skills/uipath-maestro-case/references/plugins/variables/bindings/impl-json.md +5 -5
  190. package/skills/uipath-maestro-case/references/plugins/variables/global-vars/impl-json.md +7 -7
  191. package/skills/uipath-maestro-case/references/plugins/variables/global-vars/planning.md +21 -17
  192. package/skills/uipath-maestro-case/references/plugins/variables/io-binding/impl-json.md +29 -21
  193. package/skills/uipath-maestro-case/references/plugins/variables/io-binding/planning.md +23 -21
  194. package/skills/uipath-maestro-case/references/registry-discovery.md +5 -5
  195. package/skills/uipath-maestro-flow/.maintenance/README.md +35 -28
  196. package/skills/uipath-maestro-flow/.maintenance/check-anchors.sh +19 -1
  197. package/skills/uipath-maestro-flow/.maintenance/check-links.sh +3 -0
  198. package/skills/uipath-maestro-flow/.maintenance/check-plugin-pairs.sh +2 -2
  199. package/skills/uipath-maestro-flow/SKILL.md +66 -76
  200. package/skills/uipath-maestro-flow/references/author/CAPABILITY.md +75 -72
  201. package/skills/uipath-maestro-flow/references/author/brownfield.md +90 -0
  202. package/skills/uipath-maestro-flow/references/author/{references/editing-operations-cli.md → editing-operations-cli.md} +9 -4
  203. package/skills/uipath-maestro-flow/references/author/editing-operations-json.md +373 -0
  204. package/skills/uipath-maestro-flow/references/author/editing-operations.md +103 -0
  205. package/skills/uipath-maestro-flow/references/author/{references/greenfield.md → greenfield.md} +32 -20
  206. package/skills/uipath-maestro-flow/references/author/planning-arch.md +342 -0
  207. package/skills/uipath-maestro-flow/references/author/planning-impl.md +283 -0
  208. package/skills/uipath-maestro-flow/references/author/plugins/agent/impl.md +227 -0
  209. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/agent/planning.md +2 -2
  210. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/agentic-process/impl.md +2 -2
  211. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/agentic-process/planning.md +1 -1
  212. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/api-workflow/impl.md +2 -2
  213. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/api-workflow/planning.md +1 -1
  214. package/skills/uipath-maestro-flow/references/author/plugins/batch-transform/impl.md +171 -0
  215. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/batch-transform/planning.md +1 -1
  216. package/skills/uipath-maestro-flow/references/author/plugins/connector/impl.md +449 -0
  217. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/connector/planning.md +3 -3
  218. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/connector-trigger/impl.md +20 -18
  219. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/connector-trigger/planning.md +2 -2
  220. package/skills/uipath-maestro-flow/references/author/plugins/data-fabric/impl.md +427 -0
  221. package/skills/uipath-maestro-flow/references/author/plugins/data-fabric/planning.md +185 -0
  222. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/decision/impl.md +5 -0
  223. package/skills/uipath-maestro-flow/references/author/plugins/delay/impl.md +38 -0
  224. package/skills/uipath-maestro-flow/references/author/plugins/end/impl.md +56 -0
  225. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/flow/impl.md +2 -2
  226. package/skills/uipath-maestro-flow/references/author/plugins/hitl/impl.md +178 -0
  227. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/hitl/planning.md +14 -1
  228. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/http/impl-connector.md +4 -4
  229. package/skills/uipath-maestro-flow/references/author/plugins/http/impl-manual.md +68 -0
  230. package/skills/uipath-maestro-flow/references/author/plugins/http/impl.md +173 -0
  231. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/http/planning.md +3 -3
  232. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/inline-agent/impl.md +6 -6
  233. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/inline-agent/planning.md +1 -1
  234. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/inline-voice-agent/impl.md +4 -4
  235. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/inline-voice-agent/planning.md +1 -1
  236. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/ixp/impl.md +8 -8
  237. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/loop/impl.md +1 -1
  238. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/loop/planning.md +1 -1
  239. package/skills/uipath-maestro-flow/references/author/plugins/merge/impl.md +43 -0
  240. package/skills/uipath-maestro-flow/references/author/plugins/merge/planning.md +24 -0
  241. package/skills/uipath-maestro-flow/references/author/plugins/rpa/impl.md +117 -0
  242. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/rpa/planning.md +1 -1
  243. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/scheduled-trigger/impl.md +6 -8
  244. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/script/impl.md +5 -5
  245. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/script/planning.md +1 -1
  246. package/skills/uipath-maestro-flow/references/author/plugins/subflow/impl.md +164 -0
  247. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/subflow/planning.md +1 -1
  248. package/skills/uipath-maestro-flow/references/author/plugins/summarize/impl.md +189 -0
  249. package/skills/uipath-maestro-flow/references/author/plugins/summarize/planning.md +66 -0
  250. package/skills/uipath-maestro-flow/references/author/plugins/switch/planning.md +34 -0
  251. package/skills/uipath-maestro-flow/references/author/plugins/terminate/impl.md +48 -0
  252. package/skills/uipath-maestro-flow/references/author/plugins/transform/impl.md +241 -0
  253. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/transform/planning.md +1 -1
  254. package/skills/uipath-maestro-flow/references/diagnose/CAPABILITY.md +39 -37
  255. package/skills/uipath-maestro-flow/references/diagnose/{references/failure-modes.md → failure-modes.md} +22 -22
  256. package/skills/uipath-maestro-flow/references/diagnose/{references/troubleshooting-guide.md → troubleshooting-guide.md} +60 -1
  257. package/skills/uipath-maestro-flow/references/evaluate/CAPABILITY.md +27 -25
  258. package/skills/uipath-maestro-flow/references/evaluate/{references/commands-reference.md → commands-reference.md} +58 -7
  259. package/skills/uipath-maestro-flow/references/evaluate/eval-sets-guide.md +227 -0
  260. package/skills/uipath-maestro-flow/references/evaluate/upload-safety.md +94 -0
  261. package/skills/uipath-maestro-flow/references/operate/CAPABILITY.md +21 -21
  262. package/skills/uipath-maestro-flow/references/operate/{references/manage.md → manage.md} +4 -4
  263. package/skills/uipath-maestro-flow/references/operate/run.md +121 -0
  264. package/skills/uipath-maestro-flow/references/operate/{references/ship.md → ship.md} +5 -5
  265. package/skills/uipath-maestro-flow/references/shared/action-nodes.md +30 -22
  266. package/skills/uipath-maestro-flow/references/shared/cli-commands.md +76 -184
  267. package/skills/uipath-maestro-flow/references/shared/cli-conventions.md +49 -60
  268. package/skills/uipath-maestro-flow/references/shared/file-format.md +32 -11
  269. package/skills/uipath-maestro-flow/references/shared/node-output-wiring.md +49 -104
  270. package/skills/uipath-maestro-flow/references/shared/ux-narration-and-todos.md +66 -103
  271. package/skills/uipath-maestro-flow/references/shared/variables-and-expressions.md +4 -4
  272. package/skills/uipath-planner/SKILL.md +1 -1
  273. package/skills/uipath-planner/assets/templates/case/case-sdd-template.md +5 -3
  274. package/skills/uipath-planner/references/case/case-design-lane-guide.md +1 -1
  275. package/skills/uipath-planner/references/case/case-design-layers-guide.md +2 -2
  276. package/skills/uipath-planner/references/non-pdd-lane-guide.md +2 -1
  277. package/skills/uipath-planner/references/pdd-driven-lane-guide.md +3 -2
  278. package/skills/uipath-planner/references/sdd-generation-guide.md +1 -0
  279. package/skills/uipath-planner/scripts/case/audit_sdd.py +77 -1
  280. package/skills/uipath-platform/SKILL.md +6 -4
  281. package/skills/uipath-platform/references/integration-service/activities.md +7 -4
  282. package/skills/uipath-platform/references/integration-service/reference-resolution.md +28 -0
  283. package/skills/uipath-platform/references/integration-service/resources.md +11 -0
  284. package/skills/uipath-platform/references/integration-service/triggers.md +2 -2
  285. package/skills/uipath-platform/references/licensing/diagnose/CAPABILITY.md +80 -0
  286. package/skills/uipath-platform/references/licensing/diagnose/references/failure-modes.md +147 -0
  287. package/skills/uipath-platform/references/licensing/diagnose/references/troubleshooting-guide.md +125 -0
  288. package/skills/uipath-platform/references/licensing/licensing.md +3 -0
  289. package/skills/uipath-platform/references/licensing/user-licenses-allocations.md +5 -0
  290. package/skills/uipath-platform/references/orchestrator/run-jobs.md +11 -2
  291. package/skills/uipath-platform/references/traces/feedback.md +4 -4
  292. package/skills/uipath-platform/references/traces/traces.md +1 -1
  293. package/skills/uipath-process-mining/SKILL.md +6 -6
  294. package/skills/uipath-process-mining/references/lifecycle-and-rbac.md +10 -8
  295. package/skills/uipath-process-mining/references/model-editing.md +1 -1
  296. package/skills/uipath-process-mining/references/querying.md +4 -3
  297. package/skills/uipath-review/SKILL.md +171 -541
  298. package/skills/uipath-review/references/agents/agents-lowcode-rules.md +73 -92
  299. package/skills/uipath-review/references/agents/guardrails/coded-guardrails-review.md +4 -0
  300. package/skills/uipath-review/references/agents/guardrails/guardrails-review.md +73 -180
  301. package/skills/uipath-review/references/architecture-assessment-guide.md +93 -105
  302. package/skills/uipath-review/references/review-workflow-guide.md +1 -1
  303. package/skills/uipath-review/references/rpa/modern-studio-issues.md +44 -44
  304. package/skills/uipath-review/references/rpa/rpa-common-issues.md +251 -321
  305. package/skills/uipath-review/references/rpa/rpa-review-checklist.md +1 -1
  306. package/skills/uipath-review/references/rule-catalog-workflow.md +25 -45
  307. package/skills/uipath-review/references/rule-format.md +21 -21
  308. package/skills/uipath-rpa/.maintenance/pattern-card-maintenance.md +1 -1
  309. package/skills/uipath-rpa/CLAUDE.md +4 -5
  310. package/skills/uipath-rpa/SKILL.md +40 -246
  311. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/FindText.md +2 -10
  312. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetColorAtPosition.md +2 -10
  313. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetCursorPosition.md +2 -10
  314. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetField.md +13 -13
  315. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetFieldAtPosition.md +2 -10
  316. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetScreenArea.md +27 -8
  317. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetText.md +2 -14
  318. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetTextAtPosition.md +2 -10
  319. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/MoveCursor.md +3 -11
  320. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/MoveCursorToText.md +2 -10
  321. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/SendControlKey.md +2 -8
  322. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/SendKeys.md +2 -10
  323. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/SendKeysSecure.md +2 -10
  324. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/SetField.md +14 -13
  325. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/SetFieldAtPosition.md +4 -7
  326. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/TerminalSession/_common-options.md +29 -0
  327. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/TerminalSession/authoring-paths.md +58 -0
  328. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/TerminalSession.md +197 -11
  329. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/WaitFieldText.md +2 -10
  330. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/WaitScreenReady.md +9 -10
  331. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/WaitScreenText.md +2 -14
  332. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/WaitTextAtPosition.md +2 -10
  333. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities.json +271 -0
  334. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/coded/coded-api.md +61 -3
  335. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/overview.md +76 -0
  336. package/skills/uipath-rpa/references/cli-reference.md +63 -29
  337. package/skills/uipath-rpa/references/coded/codedworkflow-reference.md +59 -1
  338. package/skills/uipath-rpa/references/coded/operations-guide.md +2 -1
  339. package/skills/uipath-rpa/references/debugging.md +29 -12
  340. package/skills/uipath-rpa/references/environment-setup.md +54 -1
  341. package/skills/uipath-rpa/references/execution-maps-guide.md +10 -9
  342. package/skills/uipath-rpa/references/legacy/activity-docs/_INVOKE-CODE.md +1 -1
  343. package/skills/uipath-rpa/references/uia-starter-guide.md +46 -8
  344. package/skills/uipath-rpa/references/xaml/common-pitfalls.md +3 -4
  345. package/skills/uipath-rpa/references/xaml/csharp-activity-binding-guide.md +7 -8
  346. package/skills/uipath-rpa/references/xaml/xaml-basics-and-rules.md +132 -42
  347. package/skills/uipath-solution/SKILL.md +9 -6
  348. package/skills/uipath-solution/references/activate-and-manage.md +11 -6
  349. package/skills/uipath-solution/references/develop-solution.md +39 -28
  350. package/skills/uipath-solution/references/pack-and-deploy.md +49 -1
  351. package/skills/uipath-solution/references/scenarios/failure-modes.md +1 -1
  352. package/skills/uipath-solution/references/scenarios/intra-solution-references.md +3 -3
  353. package/skills/uipath-solution/references/scenarios/manual-edits.md +1 -1
  354. package/skills/uipath-solution/references/scenarios.md +2 -2
  355. package/skills/uipath-solution/references/solution-overview.md +15 -6
  356. package/skills/uipath-tasks/SKILL.md +11 -6
  357. package/skills/uipath-tasks/references/task-assignment.md +5 -0
  358. package/skills/uipath-tasks/references/task-catalogs.md +7 -4
  359. package/skills/uipath-tasks/references/task-completion.md +3 -1
  360. package/skills/uipath-tasks/references/task-data.md +3 -3
  361. package/skills/uipath-tasks/references/task-lifecycle.md +11 -0
  362. package/skills/uipath-tasks/references/task-metadata.md +4 -3
  363. package/skills/uipath-test/SKILL.md +13 -28
  364. package/skills/uipath-test/references/failure-triage-guide.md +90 -0
  365. package/skills/uipath-test/references/playwright-first-mile-guide.md +2 -2
  366. package/skills/uipath-test/references/publish-and-link-guide.md +0 -1
  367. package/skills/uipath-test/references/test-result-report-guide.md +1 -2
  368. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/interpretations/healing-agent-data.md +1 -1
  369. package/skills/uipath-troubleshoot/references/presenting.md +1 -1
  370. package/skills/uipath-troubleshoot/references/products/maestro/playbooks/folder-not-accessible.md +1 -1
  371. package/skills/uipath-troubleshoot/references/products/maestro/playbooks/generic-error-400.md +4 -4
  372. package/skills/uipath-troubleshoot/references/products/maestro/playbooks/integration-service-400.md +2 -2
  373. package/skills/uipath-troubleshoot/references/products/maestro/playbooks/job-operation-timeout.md +1 -1
  374. package/skills/uipath-troubleshoot/references/products/maestro/playbooks/no-suitable-runtime-machine.md +1 -1
  375. package/version-manifest.json +2 -2
  376. package/skills/uipath-maestro-case/scripts/audit_plan.py +0 -231
  377. package/skills/uipath-maestro-flow/references/author/references/brownfield.md +0 -93
  378. package/skills/uipath-maestro-flow/references/author/references/editing-operations-json.md +0 -545
  379. package/skills/uipath-maestro-flow/references/author/references/editing-operations.md +0 -131
  380. package/skills/uipath-maestro-flow/references/author/references/planning-arch.md +0 -638
  381. package/skills/uipath-maestro-flow/references/author/references/planning-impl.md +0 -306
  382. package/skills/uipath-maestro-flow/references/author/references/plugins/agent/impl.md +0 -229
  383. package/skills/uipath-maestro-flow/references/author/references/plugins/batch-transform/impl.md +0 -174
  384. package/skills/uipath-maestro-flow/references/author/references/plugins/connector/impl.md +0 -741
  385. package/skills/uipath-maestro-flow/references/author/references/plugins/delay/impl.md +0 -75
  386. package/skills/uipath-maestro-flow/references/author/references/plugins/end/impl.md +0 -65
  387. package/skills/uipath-maestro-flow/references/author/references/plugins/hitl/impl.md +0 -204
  388. package/skills/uipath-maestro-flow/references/author/references/plugins/http/impl-manual.md +0 -65
  389. package/skills/uipath-maestro-flow/references/author/references/plugins/http/impl.md +0 -201
  390. package/skills/uipath-maestro-flow/references/author/references/plugins/merge/impl.md +0 -43
  391. package/skills/uipath-maestro-flow/references/author/references/plugins/merge/planning.md +0 -29
  392. package/skills/uipath-maestro-flow/references/author/references/plugins/rpa/impl.md +0 -121
  393. package/skills/uipath-maestro-flow/references/author/references/plugins/subflow/impl.md +0 -230
  394. package/skills/uipath-maestro-flow/references/author/references/plugins/summarize/impl.md +0 -198
  395. package/skills/uipath-maestro-flow/references/author/references/plugins/summarize/planning.md +0 -71
  396. package/skills/uipath-maestro-flow/references/author/references/plugins/switch/planning.md +0 -38
  397. package/skills/uipath-maestro-flow/references/author/references/plugins/terminate/impl.md +0 -48
  398. package/skills/uipath-maestro-flow/references/author/references/plugins/transform/impl.md +0 -287
  399. package/skills/uipath-maestro-flow/references/evaluate/references/eval-sets-guide.md +0 -226
  400. package/skills/uipath-maestro-flow/references/evaluate/references/upload-safety.md +0 -82
  401. package/skills/uipath-maestro-flow/references/operate/references/run.md +0 -99
  402. /package/skills/uipath-maestro-bpmn/references/diagnose/{references/failure-modes.md → failure-modes.md} +0 -0
  403. /package/skills/uipath-maestro-bpmn/references/operate/{references/manage.md → manage.md} +0 -0
  404. /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/decision/planning.md +0 -0
  405. /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/delay/planning.md +0 -0
  406. /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/end/planning.md +0 -0
  407. /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/flow/planning.md +0 -0
  408. /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/ixp/planning.md +0 -0
  409. /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/queue/impl.md +0 -0
  410. /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/queue/planning.md +0 -0
  411. /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/scheduled-trigger/planning.md +0 -0
  412. /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/switch/impl.md +0 -0
  413. /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/terminate/planning.md +0 -0
  414. /package/skills/uipath-maestro-flow/references/evaluate/{references/evaluators-guide.md → evaluators-guide.md} +0 -0
  415. /package/skills/uipath-maestro-flow/references/evaluate/{references/running-guide.md → running-guide.md} +0 -0
@@ -14,6 +14,8 @@ Detailed reference for the activity types supported in the API Workflow DSL —
14
14
  | TryCatch | `try` + `catch` | Error handling |
15
15
  | Wait | `wait` | Pause execution |
16
16
  | Response | `response` + `then: "end"` | Return result and end the workflow |
17
+ | File to Base64 | `run.script` calling `$helpers.file.fileToBase64` | Encode a file reference as a base64 file. See [files-and-base64.md](files-and-base64.md) |
18
+ | Base64 to File | `run.script` calling `$helpers.file.base64ToFile` | Decode a base64 file reference or string into a binary file. See [files-and-base64.md](files-and-base64.md) |
17
19
  | HTTP Request (Http kind) | `call: "UiPath.Http"` | Call an arbitrary REST API — use `uip api-workflow registry resolve` + `stub`. See [connector-activity-discovery.md](connector-activity-discovery.md) |
18
20
  | Connector activity (IntSvc kind) | `call: "UiPath.IntSvc"` | Call a vendor service (Slack, Outlook, Gmail, GitHub, …) — use `uip api-workflow registry resolve` + `stub` with a pinged connection. See [connector-activity-discovery.md](connector-activity-discovery.md) |
19
21
 
@@ -307,7 +309,12 @@ The body MUST update the condition variable, otherwise the loop runs forever.
307
309
 
308
310
  Exits a loop early. Only valid inside `For_Each_N#Body` or `Do_While_N#Body`.
309
311
 
310
- **Required fields:** `break: "true"` (string!), `then: "exit"`, `set: "${$input}"`, `metadata`
312
+ **Required fields:** `break: "true"` (string!), `then: "exit"`, `metadata`
313
+
314
+ > **Do NOT add `set` to a Break.** The schema rejects it: a Break carrying
315
+ > `set: "${$input}"` fails `validate` with **7797 errors**; removing that one key makes it
316
+ > Valid, with identical runtime output (same `Completed`/`Failed`). Break needs no `set` —
317
+ > it does not propagate context.
311
318
 
312
319
  **Minimal JSON:**
313
320
  ```json
@@ -315,7 +322,6 @@ Exits a loop early. Only valid inside `For_Each_N#Body` or `Do_While_N#Body`.
315
322
  "Break_1": {
316
323
  "break": "true",
317
324
  "then": "exit",
318
- "set": "${$input}",
319
325
  "metadata": { "activityType": "Break", "displayName": "Break", "fullName": "Break" }
320
326
  }
321
327
  }
@@ -326,7 +332,7 @@ Typically wrapped in an `If` inside the body — break only when a condition is
326
332
  **Common mistakes:**
327
333
  - Boolean `true` instead of string `"true"` (must be a JSON string)
328
334
  - Placing Break outside a loop `#Body`
329
- - Missing `set: "${$input}"` (required for context propagation)
335
+ - Adding `set` to the Break (schema rejects it — see the note above)
330
336
 
331
337
  **Scoping:**
332
338
  - Break exits **only the innermost enclosing loop**. To exit an outer loop from inside a nested loop, set a flag variable (Assign) before Break, then check the flag in the outer loop's `doWhile` (or in an `If` after the inner loop) and Break again.
@@ -480,3 +486,83 @@ The simple single-expression form is fine; the designer corruption only affects
480
486
  - Nesting `markJobAsFailed` inside `response` — it MUST be a sibling
481
487
  - Placing Response in the middle of a sequence — it should be at the end of an execution path
482
488
  - Using legacy `set: <object>` form instead of `response` + `then: "end"` — runtime accepts it but designer roundtrip breaks
489
+
490
+ ---
491
+
492
+ ## 11. File to Base64
493
+
494
+ Encodes a file reference as base64 — the result is a NEW `JobAttachment` whose blob content **is** the base64 text (`<name>.base64`, `text/plain`, `Metadata.Encoding: "base64"`). It is a `run.script` task; what makes it this activity is `metadata.activityType: "FileToBase64"` plus the `$helpers.file.fileToBase64(...)` call (Studio Web restores the property panel by parsing that call).
495
+
496
+ **Required fields:** `run.script.code` (`return { output: await $helpers.file.fileToBase64(<file ref>) }`), `run.script.language: "javascript"`, `run.script.arguments` (standard block), `export.as`, `metadata.activityType: "FileToBase64"`
497
+
498
+ **Export pattern:**
499
+ ```
500
+ { ...$context, outputs: { ...$context?.outputs, "FileToBase64_N": $output } }
501
+ ```
502
+
503
+ **Output:** `$context.outputs.FileToBase64_N.output` — a `JobAttachment`. To inline the base64 text in an HTTP body or Response: `$context.outputs.FileToBase64_N.output.serializeData()`.
504
+
505
+ **Minimal JSON:**
506
+ ```json
507
+ {
508
+ "FileToBase64_1": {
509
+ "run": {
510
+ "script": {
511
+ "code": "return { output: await $helpers.file.fileToBase64($workflow.input.document) }",
512
+ "language": "javascript",
513
+ "arguments": "${{ \"$context\": $context, \"$workflow\": $workflow, \"$input\": $input }}"
514
+ }
515
+ },
516
+ "export": { "as": "{ ...$context, outputs: { ...$context?.outputs, \"FileToBase64_1\": $output } }" },
517
+ "metadata": { "activityType": "FileToBase64", "displayName": "File to Base64", "fullName": "FileToBase64", "icon": "sw:convert-file-to-base64" }
518
+ }
519
+ }
520
+ ```
521
+
522
+ **Common mistakes:**
523
+ - `$helpers.fileToBase64(...)` (namespace dropped) — `validate` errors, runtime `is not a function`
524
+ - Anything besides the single `return` expression — a statement before/after it, or a second argument (`fileToBase64(ref, { extra: 1 })`) — Studio Web drops it on save; `validate` warns about the statements only, an extra argument passes silently
525
+ - Using the output as a string (`.length`, concatenation, `Assign` into a string variable) — it is a file reference; use `.serializeData()` inline in a body/Response
526
+ - Passing a base64 string instead of a file reference — `fileToBase64` accepts only a reference; a string input is a validation error
527
+ - Running with `--no-auth` — needs Orchestrator blob storage (see [files-and-base64.md](files-and-base64.md))
528
+
529
+ ---
530
+
531
+ ## 12. Base64 to File
532
+
533
+ Decodes base64 into a binary file reference. Input is either a base64 **file** reference (from File to Base64) or a raw base64 **string** (an API response field, a variable). `fileName` / `mimeType` are optional and used only for a string input; omitted → MIME sniffed from the bytes, unique GUID name.
534
+
535
+ **Required fields:** `run.script.code` (`return { output: await $helpers.file.base64ToFile({ base64: <ref or string>, fileName?: <expr>, mimeType?: <expr> }) }`), `run.script.language: "javascript"`, `run.script.arguments`, `export.as`, `metadata.activityType: "Base64ToFile"`
536
+
537
+ **Export pattern:**
538
+ ```
539
+ { ...$context, outputs: { ...$context?.outputs, "Base64ToFile_N": $output } }
540
+ ```
541
+
542
+ **Output:** `$context.outputs.Base64ToFile_N.output` — a binary `JobAttachment` (`Metadata.Encoding: "byte-array"`).
543
+
544
+ **Minimal JSON (string input with a name and type):**
545
+ ```json
546
+ {
547
+ "Base64ToFile_1": {
548
+ "run": {
549
+ "script": {
550
+ "code": "return { output: await $helpers.file.base64ToFile({ base64: $context.outputs.HTTP_Request_1.content.data, fileName: 'invoice.pdf', mimeType: 'application/pdf' }) }",
551
+ "language": "javascript",
552
+ "arguments": "${{ \"$context\": $context, \"$workflow\": $workflow, \"$input\": $input }}"
553
+ }
554
+ },
555
+ "export": { "as": "{ ...$context, outputs: { ...$context?.outputs, \"Base64ToFile_1\": $output } }" },
556
+ "metadata": { "activityType": "Base64ToFile", "displayName": "Base64 to File", "fullName": "Base64ToFile", "icon": "sw:convert-base64-to-file" }
557
+ }
558
+ }
559
+ ```
560
+
561
+ For a file-reference input drop `fileName` / `mimeType`: `base64ToFile({ base64: $context.outputs.FileToBase64_1.output })`. Omit the optional keys entirely when unset — a dangling `fileName: ` is a syntax error.
562
+
563
+ **Common mistakes:**
564
+ - `$helpers.base64ToFile(...)` (namespace dropped)
565
+ - Anything besides the single `return` expression — a statement before/after it, or extra keys in the options object — Studio Web drops it on save; `validate` warns about the statements only, extra keys pass silently
566
+ - Expecting `fileName` / `mimeType` to rename a reference input — they are ignored for references
567
+ - URL-safe base64 (`-` / `_`), non-base64 characters, bad padding or an empty string → `The provided value is not a valid base64 string: base64ToFile` at runtime — the suffix is the literal helper name, not the task key (a `data:…;base64,` prefix and whitespace are tolerated and stripped)
568
+ - Chaining it directly on a *binary* reference — a reference without `Encoding: "base64"` is returned unchanged (no-op), so nothing happens
@@ -0,0 +1,224 @@
1
+ # Testing API Workflows — Evals & the Test-Until-Green Loop
2
+
3
+ API Workflows have a **dataset-test / eval** capability: a set of `(inputs, expectedOutput)` rows the workflow is run against, each scored by an evaluator. The dataset is **plain JSON files inside the project** (`evals/…`), so it is shared between:
4
+
5
+ - **Studio Web's designer** — the **Evaluations** panel in the bottom dock of an API-workflow project (local *and* cloud workspaces; feature-flagged). It runs each row through the normal debug pipeline, scores it, and shows pass/fail, actual vs expected, and the run's logs. Results live in memory only — there is **no results file**.
6
+ - **This skill / an agent** — which authors the same files, runs the rows headlessly with `uip api-workflow run`, scores them the same way, and reports.
7
+
8
+ Because the tests are files, the agent can author them, run them, fix the workflow, and repeat — a **test-until-green loop**. The panel live-reloads external edits to `evals/` (local: file watcher; cloud: file-system notifications), so what you write shows up there.
9
+
10
+ ---
11
+
12
+ ## 1. The eval files (the contract)
13
+
14
+ ```
15
+ <PROJECT>/evals/<SCOPE>/eval-sets/<set>.json # datasets — one file per eval set
16
+ <PROJECT>/evals/<SCOPE>/evaluators/<evaluator>.json # scorers — one file per evaluator
17
+ <PROJECT>/evals/<SCOPE>/eval-files/ # panel-managed uploads — leave alone
18
+ ```
19
+
20
+ `<SCOPE>` is `default` unless the project already uses another one. Studio Web creates the folder when the Evaluations feature is enabled and the panel is first opened, seeding `evals/default/evaluators/exact-match-evaluator.json` and an empty `evals/default/eval-sets/evaluation-set.json`. **A project without an `evals/` folder has the feature turned off — leave it that way (SKILL.md rule 22).** When you add rows or files inside an existing folder, use the same names and shapes.
21
+
22
+ **`evals/default/eval-sets/evaluation-set.json`** — the dataset:
23
+
24
+ ```json
25
+ {
26
+ "version": "1.0",
27
+ "id": "eval-set-001",
28
+ "name": "Dataset",
29
+ "evaluatorRefs": ["exact-match-evaluator"],
30
+ "evaluations": [
31
+ {
32
+ "id": "6f1c1b4e-2c3a-4d5e-9f10-111213141516",
33
+ "name": "score 85 passes",
34
+ "inputs": { "score": 85 },
35
+ "evaluationCriterias": {
36
+ "exact-match-evaluator": { "expectedOutput": { "grade": "PASS" } }
37
+ }
38
+ }
39
+ ]
40
+ }
41
+ ```
42
+
43
+ **`evals/default/evaluators/exact-match-evaluator.json`** — how rows are scored:
44
+
45
+ ```json
46
+ {
47
+ "version": "1.0",
48
+ "id": "exact-match-eval-001",
49
+ "name": "Exact Match",
50
+ "description": "Exact Match",
51
+ "evaluatorTypeId": "uipath-exact-match",
52
+ "evaluatorConfig": {
53
+ "name": "Exact Match",
54
+ "targetOutputKey": "*",
55
+ "defaultEvaluationCriteria": { "expectedOutput": {} }
56
+ }
57
+ }
58
+ ```
59
+
60
+ **Rules.**
61
+
62
+ 1. **Refs are file base names, not ids.** Every entry of `evaluatorRefs` and every key of a row's `evaluationCriterias` is the evaluator's **file name without `.json`** (`exact-match-evaluator` above) — not its `id`. Renaming the evaluator file orphans every row ("No expected output could be matched to this evaluator" → fail). Keep one exact-match evaluator per set unless the project already has more.
63
+ 2. **Expected output goes in `evaluationCriterias["<ref>"].expectedOutput`**, never at the row top level. It is an object shaped like the workflow output (a JSON string is tolerated and parsed, but write an object).
64
+ 3. **Score with the evaluator the PROJECT declares — read `evaluatorTypeId`, don't assume.** Studio Web's panel supports exactly one type today, **`uipath-exact-match`**; if a project ever declares another, honor it instead of forcing exact-match.
65
+ 4. **`uipath-exact-match` is a strict machine deep-equal, not a "looks right" judgment.** Key order is ignored; **key names, their exact casing, value types, and object shape must all equal the workflow's RAW output**. `{ "sum": 5 }` ≠ `{ "Sum": 5 }` → fail, even though the number is right. `evaluatorConfig.targetOutputKey` picks what is compared: `"*"` (or absent) compares the whole output object with the whole `expectedOutput`; a dotted path such as `details.rawScore` compares `output.details.rawScore` with `expectedOutput.details.rawScore` (so `expectedOutput` stays a full nested object); an array compares every listed path. A path missing on both sides is a **fail**, not a vacuous pass. `ignoreCase` / `negated` are not applied by the designer — don't rely on them.
66
+ 5. **"Output" means the workflow's Response payload, raw.** Original key casing, as the `Response` expression produces it. A bare primitive or array is wrapped as `{ "result": <value> }`.
67
+ 6. **Patch the files in place.** The panel adds bookkeeping fields (`schemaVersion`, `target`, `fileName`, `createdAt`, `updatedAt`) — keep whatever is there, never reshape or regenerate a file the user may have edited in the UI. An open edit form in the panel still wins on save (last writer wins).
68
+ 7. **Results are not files.** Report verdicts in the conversation; do not write run results under `evals/` — nothing reads them.
69
+
70
+ ---
71
+
72
+ ## 2. Running a test row from the CLI
73
+
74
+ Run the workflow with the row's inputs, then read the **raw** output from the debug log:
75
+
76
+ ```bash
77
+ uip api-workflow run <PROJECT>/Workflow.json \
78
+ --input-arguments '<ROW_INPUTS_JSON>' \
79
+ --no-auth --output json --log-level debug --log-file <LOG_PATH>
80
+ ```
81
+
82
+ - `Result: "Success"` means the run completed; `Data` is the output **with every key PascalCased** (`grade` → `Grade`, `details.rawScore` → `Details.RawScore`). **Never compare against or copy from `Data`** — a row derived from it passes for you and fails in the panel (this is the `sum` vs `Sum` failure).
83
+ - The raw output is the `response` of the last `Response task evaluated successfully for "<key>": {…}` line in the log file:
84
+
85
+ ```bash
86
+ grep 'Response task evaluated successfully' <LOG_PATH> | tail -1 \
87
+ | sed 's/^.*successfully for "[^"]*": //' \
88
+ | python3 -c 'import json,sys; print(json.dumps(json.load(sys.stdin)["response"]))'
89
+ ```
90
+
91
+ - Deep-equal that object against the row's `expectedOutput` under the evaluator's `targetOutputKey` (§1 rule 4). A run whose `Result` is not `Success` is an **error** verdict — triage it, don't score it.
92
+ - **Derive `expectedOutput` from `output.schema`** (exact property names and casing) — declare the schema first if the project has none (`init` leaves `output: null`); the Response must emit exactly those keys. Mismatched keys/casing here is the usual reason "the agent said it passed" while every row fails in the panel.
93
+
94
+ **Batch comparator — score every row in one command.** Do not eyeball outputs and do not hand-roll a comparison per row: write this once to a file **outside the project** (e.g. `/tmp/score-evals.py` — never under `evals/`, the panel reads that folder) and run it after each change. It mirrors the panel: raw output from the debug log, strict deep-equal under the evaluator's `targetOutputKey`, refs matched as file base names.
95
+
96
+ ```python
97
+ #!/usr/bin/env python3
98
+ """score-evals.py <project-dir>: run every eval row with `uip api-workflow run --no-auth` and
99
+ score it like Studio Web's Evaluations panel (uipath-exact-match, strict deep-equal on the RAW
100
+ output). Exit 0 only when every row passes."""
101
+ import json, re, subprocess, sys, tempfile
102
+ from pathlib import Path
103
+
104
+ LINE = re.compile(r'Response task evaluated successfully for "[^"]*": (\{.*\})\s*$')
105
+
106
+ def run(wf, inputs):
107
+ log = tempfile.NamedTemporaryFile(suffix=".log", delete=False).name
108
+ p = subprocess.run(["uip", "api-workflow", "run", str(wf), "--input-arguments", json.dumps(inputs),
109
+ "--no-auth", "--output", "json", "--log-level", "debug", "--log-file", log],
110
+ capture_output=True, text=True, timeout=120)
111
+ try:
112
+ env = json.loads(p.stdout)
113
+ except json.JSONDecodeError:
114
+ return None, f"non-JSON CLI output: {p.stdout[:200]}"
115
+ if env.get("Result") != "Success":
116
+ return None, f"run failed: {env.get('Message')}"
117
+ raw = None
118
+ for line in Path(log).read_text(errors="replace").splitlines():
119
+ m = LINE.search(line)
120
+ if m:
121
+ raw = json.loads(m.group(1)).get("response")
122
+ return (raw if isinstance(raw, dict) else {"result": raw}), None
123
+
124
+ def eq(a, e): # lodash isEqual for JSON: bool != number, key order ignored, shapes must match
125
+ if isinstance(a, bool) or isinstance(e, bool):
126
+ return isinstance(a, bool) and isinstance(e, bool) and a == e
127
+ if isinstance(a, dict) and isinstance(e, dict):
128
+ return a.keys() == e.keys() and all(eq(a[k], e[k]) for k in a)
129
+ if isinstance(a, list) and isinstance(e, list):
130
+ return len(a) == len(e) and all(eq(x, y) for x, y in zip(a, e))
131
+ if isinstance(a, (int, float)) and isinstance(e, (int, float)):
132
+ return a == e
133
+ return type(a) is type(e) and a == e
134
+
135
+ def at(v, path):
136
+ for seg in [s for s in path.split(".") if s]:
137
+ if not isinstance(v, dict) or seg not in v:
138
+ return KeyError
139
+ v = v[seg]
140
+ return v
141
+
142
+ def match(actual, expected, target):
143
+ if isinstance(target, list):
144
+ return bool(target) and all(match(actual, expected, t) for t in target)
145
+ if isinstance(target, str) and target not in ("", "*"):
146
+ a, e = at(actual, target), at(expected, target)
147
+ return a is not KeyError and e is not KeyError and eq(a, e)
148
+ return eq(actual, expected)
149
+
150
+ project = Path(sys.argv[1] if len(sys.argv) > 1 else ".")
151
+ evaluators = {p.stem: json.loads(p.read_text()) for p in project.glob("evals/*/evaluators/*.json")}
152
+ ok_all, n = True, 0
153
+ for set_path in sorted(project.glob("evals/*/eval-sets/*.json")):
154
+ es = json.loads(set_path.read_text())
155
+ for row in es.get("evaluations", []):
156
+ actual, err = run(project / "Workflow.json", row.get("inputs") or {})
157
+ for ref in es.get("evaluatorRefs", []):
158
+ n += 1
159
+ ev, crit = evaluators.get(ref), (row.get("evaluationCriterias") or {}).get(ref)
160
+ label = f"{set_path.name} :: {row.get('name') or row.get('id')} ({ref})"
161
+ if ev is None or ev.get("evaluatorTypeId") != "uipath-exact-match":
162
+ verdict, detail = "ERROR", f"evaluator {ref!r} missing or not uipath-exact-match (refs are file base names)"
163
+ elif not isinstance(crit, dict) or "expectedOutput" not in crit:
164
+ verdict, detail = "ERROR", f"no evaluationCriterias[{ref!r}].expectedOutput"
165
+ elif err:
166
+ verdict, detail = "ERROR", err
167
+ else:
168
+ exp = crit["expectedOutput"]
169
+ exp = json.loads(exp) if isinstance(exp, str) else exp
170
+ target = (ev.get("evaluatorConfig") or {}).get("targetOutputKey", "*")
171
+ verdict = "PASS" if match(actual, exp, target) else "FAIL"
172
+ detail = f"actual={json.dumps(actual)} expected={json.dumps(exp)}"
173
+ ok_all &= verdict == "PASS"
174
+ print(f"[{verdict:5}] {label} inputs={json.dumps(row.get('inputs'))} {detail}")
175
+ sys.exit(0 if n and ok_all else 1)
176
+ ```
177
+
178
+ Run it as the whole iteration: `python3 /tmp/score-evals.py <PROJECT>` — one tool call, every row, panel-equivalent verdicts.
179
+ - **Inside Studio Web** (no local CLI): rows run through the host instead — ask the user to press **Run** in the Evaluations panel (its verdicts are authoritative), or, with explicit consent (rule 21), invoke `RunProject` once per row with that row's `inputs`; the host result is the raw output. Derive `expectedOutput` from it or from `output.schema`, exactly as above.
180
+ - `--no-auth` is fine for control-flow-only workflows and `Http` activities using `connectionId: "ImplicitConnection"`. **IntSvc (vendor connector) activities need auth** and have real side effects (emails sent, tickets created) — rules 20–21 in SKILL.md apply: never run autonomously, never with auth without an explicit "yes".
181
+
182
+ ---
183
+
184
+ ## 3. The test-until-green loop (interactive protocol)
185
+
186
+ This is SKILL.md **rule 22**, and it applies **only to projects that have an `evals/` folder** — its absence means the Evaluations feature is not enabled for the project, so steps 2–5 are skipped and the workflow is authored normally. Where it applies it is test-driven development: the questions come before any authoring, the eval set is written **before** the workflow, and the workflow is then authored to make the rows pass. The turn **ends** at step 3 — the workflow is not written or edited, and no eval file is created, until the user has answered. Ask the questions as written, one numbered list, never a vague "how do you want to verify it?". With `evals/` present, skip steps 2–3 only when the user already answered or explicitly asked not to be prompted ("don't ask for confirmation"); then keep an existing eval set as-is and add tests only if they were requested. "Don't ask" waives the questions, not the run consent (SKILL.md rule 21): run the rows only when the request itself asks for a run or a loop ("run the evaluations", "fix it until every case passes"); otherwise author once and hand over the command to run them.
187
+
188
+ 1. **Look for the `evals/` folder** (Phase 0 discovery) — `<project>/evals/`, a sibling of `Workflow.json` inside the project directory; list that directory, not the workspace or solution root. **Absent → stop here:** the feature is off for this project; no test or loop-mode question, no folder creation — author normally. Present → read `evals/<SCOPE>/eval-sets/*.json` and `evals/<SCOPE>/evaluators/*.json` (§1) and note the row count and what the rows expect.
189
+
190
+ 2. **Ask about the tests:**
191
+ - **Eval set has rows** → *"I found an existing eval set with N test case(s) [one line each: inputs → expectedOutput]. Should anything change — add, edit or remove cases — or use them as-is?"* Apply requested changes, else keep as-is.
192
+ - **Eval set is empty** (or the folder holds only the seeded evaluator) → *"There are no test cases yet — want me to add some? I'd suggest: [2–3 proposed `(inputs → expectedOutput)` cases derived from the request]."* If yes, add the rows (and the evaluator if missing) in the §1 shapes (raw output keys — §2).
193
+
194
+ 3. **Ask about loop mode — in the same turn, right after question 2:**
195
+ > "Do you want me to work in **loop mode** — run the tests and re-try (fix the workflow, re-run) until every case passes? Or author once and you verify manually?"
196
+
197
+ Then **end the turn**. Ask on the first authoring prompt, create OR edit; the workflow need not exist yet. If the user declines, author normally and don't re-ask every turn; a later "test this" / "run until it passes" re-enters here. Before the first run, make sure the workflow lives in an `init`-scaffolded project (rules 19–19a).
198
+
199
+ 4. **Author tests-first, then run the loop** once the user has answered. Order matters because `uip api-workflow init` scaffolds `input: null` / `output: null` — there is nothing to derive row keys from until you write it:
200
+ 1. **Declare `input.schema` and `output.schema` in `Workflow.json`** — the property names and their exact casing. This is the contract both the rows and the Response follow (`grade`, not `Grade`).
201
+ 2. **Write/update the eval set** (§1), deriving every `inputs` key and `expectedOutput` key from those schemas.
202
+ 3. **Author the workflow** so the Response emits exactly the `output.schema` keys.
203
+ 4. **Run** — in loop mode, which is also the consent for `--no-auth` runs (connector/authed runs still need their own "yes", §2) — iterate:
204
+ - **One iteration = one command.** Run and score every row in a single bash invocation with the comparator in §2 (`python3 score-evals.py <PROJECT>`); never one tool call per row plus one to read the output — a 5-row × 3-iteration loop is ~3 calls that way instead of ~30. Runs are cheap (≈1 s per row); tool calls are what cost.
205
+ - For each row the comparator prints `PASS` / `FAIL` / `ERROR` with the **raw** output and the expectation, scored by **the evaluator the project declares** (§1). Never substitute your own "the number looks right" judgment for its verdict.
206
+ - **All pass** → stop and report the green result (rows, inputs, actual outputs).
207
+ - **Any fail/error** → **first check for a key / casing / shape mismatch** between the raw output and `expectedOutput` (`sum` vs `Sum`, a missing wrapper object, a string where a number is expected). Decide which side is wrong: the workflow's output key must match its `output.schema` — fix the workflow; a row that contradicts the requested behavior — fix the row (§4). Otherwise triage the run (Structure > Expression > Activity Config > Logic — SKILL.md Core Principle 4), fix the workflow, re-run.
208
+ - **Report progress each iteration** — e.g. "iteration 2: 3/4 rows pass; fixing row 'unpaid invoice' (expected status `unpaid`, got `paid`)".
209
+ - **Stop conditions:** all green; OR no progress after a few iterations (cap it — see Infinite Loop Prevention in SKILL.md); OR the user interjects. Always end with a per-row summary of the final state.
210
+ - **Stay in the main thread.** The loop is seconds of compute; a background subagent only adds turns and hides progress. If a new user message changes the workflow or the intent, incorporate the change before the next iteration — never keep scoring against a workflow the user has just asked you to change.
211
+
212
+ 5. **Future edits — behavior changes can break the tests.** When a later request changes what the workflow *does* (a threshold, rounding, branch order, a new default) and an eval set exists, ask **before editing**: *"This change would make these expectations stale: [rows]. Update them to the new behavior, or keep them and flag the mismatch?"* Then edit, re-run the rows, and report which rows you updated and why (§4). A pure refactor or a schema-only rename that leaves behavior unchanged needs no question — just re-run the rows afterwards.
213
+
214
+ ---
215
+
216
+ ## 4. Notes & gotchas
217
+
218
+ - **Consent is the loop's gate.** "Yes, loop until green" authorizes repeated `--no-auth` runs. For workflows with side effects (IntSvc/vendor, authed HTTP), say so and get explicit consent before looping — each iteration re-triggers the side effect.
219
+ - **Keep the dataset in sync — with the schema AND the behavior.** Two distinct triggers:
220
+ - **Schema change** — renamed/added/removed input or output arguments: the rows' `inputs` / `expectedOutput` shapes may no longer fit. Offer to update them.
221
+ - **Logic change (easy to miss)** — a behavior change with an **unchanged** schema can still make existing `expectedOutput`s wrong: flip a threshold `>5` → `>=5`, change rounding, reorder branches, and a row that expected `pass` now correctly yields `fail`. **After any edit that changes behavior, re-derive the expected outputs — never "fix" the workflow to satisfy a now-stale test, and never silently rewrite a row the user did not ask to change.** Decide per row whether the expectation or the workflow is the source of truth, and say which rows you updated and why.
222
+ - **The project's evaluator is authoritative.** Read `evals/<SCOPE>/evaluators/*.json` and score by its `evaluatorTypeId`; today that is always `uipath-exact-match` (strict deep-equal).
223
+ - **"The agent said it passed" ≠ the panel passes.** An LLM eyeballing a run judges *meaning* (2+3=5 → looks right) and forgives key casing and shape; the evaluator does a byte-exact deep-equal and does not — and the CLI's PascalCased `Data` hides exactly that class of mismatch. When they disagree, the evaluator is right: fix the key/casing/shape.
224
+ - **Same files, two front-ends.** The user may author or run these rows in Studio Web's Evaluations panel between your turns; your CLI runs and their UI runs share `evals/…`. Re-read the files before each loop iteration rather than trusting an in-memory copy.
@@ -559,19 +559,67 @@ These are issues that surface only when a workflow is opened or run in **StudioW
559
559
  - Use optional chaining: `$context?.outputs?.Javascript_1?.items`
560
560
  - Ensure object literals have unique keys
561
561
 
562
+ ### `"Script execution failed timed out"`
563
+
564
+ - **Symptom:** A JavaScript activity that works on small inputs fails on larger ones with `Execution error: Script execution failed timed out: Script execution failed timed out`. The workflow validates; only the run fails.
565
+ - **Cause:** The activity exceeded the runner's per-script budget. In the executor the CLI actually ships — `@uipath/api-workflow-executor` **12.10.2**, exact-pinned by `packages/api-workflow-tool/package.json` on `uipcli` main — the budget is a **flat 10 seconds**, passed as a bare literal:
566
+
567
+ ```js
568
+ // dist/handlers/script-task-handler.js
569
+ await this.expressionHandler.evaluateScript(code, taskName, 10000);
570
+ ```
571
+
572
+ Measured against that build: an 8-second script passes, a 12-second script fails.
573
+
574
+ **Check the pinned executor before trusting any number here** — it is a literal, not a documented contract, and it has already changed: executor 12.23.2 (newer, NOT pinned by the CLI as of 2026-08-20) replaces it with `SCRIPT_TIMEOUT_MS = 10000` plus a second budget of ~100s for scripts whose source contains `$helpers`, selected by a literal `code.includes('$helpers')` substring test. If your CLI pins 12.23.x or later, the 10s figure applies only to scripts with no `$helpers` call.
575
+
576
+ All of the above are **local** figures. The **cloud** cap is different and is documented: *"JavaScript code execution has a timeout of 30 seconds"* — [Script activity, Known limitations](https://docs.uipath.com/studio-web/automation-cloud/latest/user-guide/script).
577
+
578
+ So the local runner is **3x stricter than cloud**, and each side misleads on its own:
579
+ - A local `timed out` failure does **not** mean the workflow fails in cloud — anything under 30s runs there.
580
+ - Passing locally does **not** prove you clear the cloud cap. Local runs use small fixtures; a script that takes 3s over 10 test rows can exceed 30s over 10,000 production rows.
581
+
582
+ - **Fix:**
583
+ - Move bulk work out of one script: page the data and process a batch per loop iteration, so each script invocation is short.
584
+ - Split one long script into several JavaScript activities chained by `export`.
585
+ - Never busy-wait inside a script (`while (Date.now() < end) {}`) — use a `Wait` activity, which is not charged against the script budget.
586
+ - If the work genuinely cannot be split, it does not belong in an API workflow; a connector call or a Coded Function is the right home.
587
+
562
588
  ### Failed cloud run after publish (job faulted in Orchestrator)
563
589
 
564
590
  - **Symptom:** The workflow passed `validate` and `run --no-auth` locally, packed, published, and deployed — but a triggered cloud run faults. Local re-runs still pass.
565
591
  - **Cause:** Faults that only surface in cloud — real vendor responses, connection auth/token state, trigger payload shape, tenant/folder scoping — none of which the local runtime exercises.
566
592
  - **Fix:** Diagnose from the deployed job, not the local file:
567
593
  ```bash
568
- uip or jobs get <jobId> --output json # status + fault summary
569
- uip or jobs logs <jobId> --output json # execution logs for the run
570
- uip traces spans get --job-key <jobKey> --output json # span-level execution trace (also accepts a <trace-id> positional)
594
+ uip or jobs get <jobId> --output json # THE diagnostic: Data.State + Data.Info
571
595
  ```
572
- (Folder scoping differs: `uip or jobs list` accepts `--folder-path`/`--folder-key`/`--all-folders`; `uip or triggers list` accepts only `--folder-path`/`--folder-key`; `uip or jobs start <process-key>` infers the folder. `uip or jobs traces` is Agent-type-process-only; use `traces spans get` for API-workflow jobs.)
596
+ `Data.State` reads `Faulted` and `Data.Info` carries the runtime message — for an API workflow that is usually the whole answer.
597
+
598
+ **Two surfaces that look useful and are not, for API-workflow jobs:**
599
+
600
+ | Command | What it actually returns |
601
+ |---------|--------------------------|
602
+ | `uip or jobs logs <jobId>` | Lifecycle lines only — `"Workflow started"` / `"Workflow completed"`, both at level `Info`. It reports **`Workflow completed` even for a Faulted job** and never carries the error. Never read "completed" here as success. |
603
+ | `uip traces spans get --job-key <jobKey>` | Returned `"Error retrieving trace ID for job"` on every API-workflow job probed. The CLI emits that same message for any trace-ID lookup failure (a malformed GUID included), so read it as "no trace resolved for this job", not as proof the surface is absent. Either way it yields no fault detail — use `jobs get`. |
604
+
605
+ **Diagnose before you tear down:** after uninstalling the deployment, `uip or jobs get` on its jobs returns `Result: Failure` with an empty `State`. Jobs themselves are immutable audit records (`uip or jobs --help`: they "cannot be deleted -- they age out per the binding process's retention period"), so the likely cause is that the folder/process context needed to resolve the job is gone, not the records. Either way, read the fault before you uninstall.
606
+
607
+ (Folder scoping differs: `uip or jobs list` accepts `--folder-path`/`--folder-key`/`--all-folders`; `uip or triggers list` accepts only `--folder-path`/`--folder-key`; `uip or jobs start <process-key>` infers the folder.)
573
608
  Map the surfaced error back to a fix with the category order below (Structure > Expression > Activity Config > Logic). If the fault is a 401 / `ConnectionNotEnabled`, `uip is connections ping <uuid>` the bound connection first. Full operate + diagnose command map: [operating-published-workflows.md](operating-published-workflows.md). For deep, multi-signal root-cause (what changed, cross-run comparison, incident correlation), hand off to **uipath-troubleshoot**.
574
609
 
610
+ ### Outbound call to a third-party API works locally, times out or is refused in cloud
611
+
612
+ - **Symptom:** An `HTTP Request` or connector call to a customer/vendor endpoint succeeds when the workflow is executed on your own machine and fails only from the deployed copy — connection refused, or a hang ending in a timeout. Same URL, same payload.
613
+ - **Cause:** Local runs egress from your machine's IP; cloud runs egress from UiPath infrastructure. If the target sits behind an IP allowlist, the cloud source addresses have to be on it — and **which** addresses depends on how the call is made.
614
+
615
+ Per [About API workflows](https://docs.uipath.com/studio-web/automation-cloud/latest/user-guide/about-api-workflows): *"Which outbound path applies depends on how the external call is made"* — an HTTP Request with manual authentication egresses via **serverless robots**, a connector-based call via **Integration Service** — and allowlisting is required *"only when API workflows communicate externally"*, covering both **Serverless static IPs** and **Integration Service IPs**.
616
+
617
+ The two are not interchangeable, and the reason is structural. Per [Configuring the firewall for Automation Cloud](https://docs.uipath.com/automation-cloud/automation-cloud/latest/admin-guide/configuring-the-firewall-for-cloud), most services now share one **unified** set of outbound ranges per region — *"a single set of IP ranges covers Automation Cloud Portal, Orchestrator, Integration Service, Apps, Automation Ops, Test Manager, AI Trust Layer, and Notification Service simultaneously"* — but four services are carved out: *"Document Understanding, Insights, IXP, and Automation Cloud Robots - Serverless"* keep their own service-specific ranges.
618
+
619
+ So **Integration Service sits in the unified regional set and serverless robots do not.** A customer who allowlisted the unified ranges has covered your connector activities and *not* your manual-auth HTTP calls. Always read the current ranges off those pages before asking anyone to change firewall rules — they are per-region and they change.
620
+ - **Fix:** Establish which path the call takes (connector activity → Integration Service; `UiPath.Http` with *connector-based* authentication → also Integration Service; `UiPath.Http` with *manual* authentication → serverless robot), then have the endpoint owner allowlist that service's published outbound ranges. This is a network-configuration fix, not a workflow fix — no edit to `Workflow.json` will resolve it, so stop editing and escalate once the symptom matches.
621
+ - **Distinguishing it from an auth fault:** a 401/403 with a response body is an auth or connection problem (`uip is connections ping <uuid>` first). A refused connection or a timeout with no HTTP response at all points at the network path.
622
+
575
623
  ---
576
624
 
577
625
  ## Packaging Errors
@@ -628,6 +676,26 @@ These are issues that surface only when a workflow is opened or run in **StudioW
628
676
  - **Cause:** Skipped re-running the validators after applying a fix
629
677
  - **Fix:** ALWAYS re-run after every edit. Two validators: `uip api-workflow validate <Workflow.json>` (offline static — schema + semantic checks, autonomous) then `uip api-workflow run --no-auth` (runtime — catches expression/connection errors static analysis can't). See SKILL.md rules 20–21.
630
678
 
679
+ ### `Unknown activityType '<Name>'`
680
+
681
+ - **Symptom:** `validate` rejects an activity — `Unknown activityType 'X'. Valid types: ...`
682
+ - **Cause:** The authorable set is closed and mirrors the Studio Web palette. It is also versioned: `CustomLog` was added 2026-08-11, so older CLIs list 13 types and newer ones 14. **Take the list from the error message — never memorise one.**
683
+ - **Fix:** Stay inside the list. Two task types the executor runs but `validate` refuses — do not author them:
684
+
685
+ | Instead of | Use |
686
+ |---|---|
687
+ | `raise` | `throw` inside a JavaScript activity, or `Response` with `markJobAsFailed: true` |
688
+ | `while` (pre-condition loop) | `DoWhile` + an `If` whose `#Else` exits via `Break` |
689
+
690
+ Both execute under `run` (verified on executor 12.10.2), so **a passing local run is not proof a workflow can ship.** `validate` is the gate.
691
+ - **Error-count tell:** a small count naming the activityType — one error per offending task — → unknown **name**, caught by the allowlist. A large avalanche starting `Missing required property 'call'` → the schema could not match the task **shape**, which has two causes and you must check both:
692
+ 1. **Unknown task key** — the schema models no such task (e.g. `raise`). Nothing about the fields will help.
693
+ 2. **An unexpected field on a KNOWN task** — one stray key makes the whole task unmatchable, and the error text still says `Missing required property 'call'`. `set` on a `Break` is the documented instance: it produced **7797 errors** in this skill's own `nested-control-flow-example.json`, and deleting that one key made it Valid.
694
+
695
+ So read the avalanche as "the schema cannot match this task", not "the task key is wrong". Diff the task against the shape in [task-types.md](task-types.md) field by field before concluding the type is unsupported.
696
+ - **Logging:** `console.log` / `console.warn` inside a JavaScript activity are captured and emitted as `[Script <TaskName>]: ...`. Whether they reach Orchestrator job logs in cloud is unverified — a probe showed the Orchestrator job-log surface carrying only lifecycle lines — so put anything you must read after a run in the `Response`. `CustomLog` is on the list but no executor ships a handler for it; do not author one yet.
697
+ - **Do not** mislabel `metadata.activityType` to slip a type past the check — the validator cross-checks the label against the task's own keys (`has activityType 'DoWhile' but must contain 'for' with 'doWhile'`).
698
+
631
699
  ### Fixing in wrong order
632
700
  - **Symptom:** Fixing one error creates more errors; thrashing
633
701
  - **Cause:** Fixing logic errors before structure errors; lower-priority fixes destabilize higher-priority structure
@@ -638,6 +706,58 @@ These are issues that surface only when a workflow is opened or run in **StudioW
638
706
  - **Cause:** Edit's `old_string` did not exactly match file content (whitespace, escaping)
639
707
  - **Fix:** Always read the file before editing. After edit, re-run the workflow.
640
708
 
709
+ ## File & Base64 Pitfalls
710
+
711
+ ### Run refused: "This workflow uses the file helpers … cannot run with --no-auth"
712
+ - **Symptom:** the local run in no-auth mode exits 1 before the engine starts, naming File to Base64 / Base64 to File
713
+ - **Cause:** `$helpers.file.*` reads and writes Orchestrator blob storage; there is no local file store
714
+ - **Fix:** run signed in (sign in first, drop `--no-auth`) — still only on the user's explicit "yes" (rule 21). Same for `--input-file` / `--output-dir`.
715
+
716
+ ### `$helpers.fileToBase64 is not a function` / validate: "does not call $helpers.file.fileToBase64("
717
+ - **Symptom:** `validate` reports one error at `…/run/script/code`; or a signed-in run fails inside the task
718
+ - **Cause:** the helper was written without the `.file.` namespace (or with another name). The activity is recognised by that exact call
719
+ - **Fix:** `return { output: await $helpers.file.fileToBase64(<ref>) }` / `$helpers.file.base64ToFile({ base64: … })`; keep `metadata.activityType` `FileToBase64` / `Base64ToFile`
720
+
721
+ ### File to Base64 / Base64 to File script lost code after a Studio Web save (validate warned "rebuilds the script … and drops the rest", or did not warn at all)
722
+ - **Symptom:** after a designer roundtrip the task's `run.script.code` is back to the bare `return { output: await $helpers.file.*(…) }` — a preceding `const`, a trailing statement, a second argument (`fileToBase64(ref, { extra: 1 })`) or an extra option key is gone; downstream logic that relied on it now fails or the wrong reference is converted
723
+ - **Cause:** Studio Web parses only the `$helpers.file.*` call and rebuilds the script from the property panel on save. `validate` warns about extra statements but passes an extra argument / option key as `Valid`
724
+ - **Fix:** keep the script to the single `return` expression with exactly one argument (see [files-and-base64.md §2](files-and-base64.md#2-the-two-activities)); move pre-processing into a JavaScript activity before the conversion and pass its output as the argument
725
+
726
+ ### File to Base64 output used as a string (`.length`, `+`, `JSON.stringify` shows an object)
727
+ - **Symptom:** downstream expression gets `[object Object]`, `undefined`, or an `{ ID, FullName, MimeType }` object where base64 text was expected
728
+ - **Cause:** the activity returns a base64 **file reference**, not the base64 string — bytes never enter `$context`
729
+ - **Fix:** inline the content where it is sent: `"${{ content: $context.outputs.FileToBase64_1.output.serializeData() }}"` in the HTTP body / Response
730
+
731
+ ### `{ "__uipathFileRead": { "ref": … } }` shows up in a variable or the output
732
+ - **Symptom:** a marker object instead of file content
733
+ - **Cause:** `serializeData()` was stored in a variable / returned from a script instead of being called inline in a body or Response field
734
+ - **Fix:** call it only inside the HTTP body or `response` expression
735
+
736
+ ### Decoded file has no extension (`hello` instead of `hello.txt`)
737
+ - **Symptom:** Base64 to File returns `FullName: "hello"`, `MimeType: application/octet-stream`
738
+ - **Cause:** for a *reference* input the engine strips `.base64` and sniffs the MIME type from the bytes; plain text has no signature, and `fileName` / `mimeType` are ignored for references
739
+ - **Fix:** acceptable for opaque payloads; when the name matters, decode a raw base64 **string** with `fileName` / `mimeType` (e.g. `{ base64: $context.variables.payload, fileName: 'notes.txt', mimeType: 'text/plain' }`)
740
+
741
+ ### `The provided value is not a valid base64 string: base64ToFile`
742
+ - **Symptom:** Base64 to File fails on a string input. The suffix is always the literal helper name `base64ToFile` — it does not name the failing task, so with several Base64 to File tasks locate the culprit by the failing task in the run output, not by the message
743
+ - **Cause:** URL-safe alphabet (`-` / `_`), non-base64 characters, bad padding, or an empty string. A `data:…;base64,` prefix and whitespace are NOT the problem — the engine strips both before decoding
744
+ - **Fix:** convert URL-safe base64 to the standard alphabet (`-`→`+`, `_`→`/`) in a JavaScript activity; make sure the field really holds the payload and is not empty
745
+
746
+ ### `Raw bytes cannot be embedded in JSON` / `A bare file reference cannot be embedded in a nested field`
747
+ - **Symptom:** an HTTP Request fails at send time with one of these messages
748
+ - **Cause:** a JSON body field holds `serializeData()` of a *binary* reference (e.g. `$workflow.input.document.serializeData()`), or a bare reference object. Only a base64 reference's marker can be inlined in a nested field
749
+ - **Fix:** run File to Base64 first and inline `$context.outputs.FileToBase64_1.output.serializeData()`; or, to send the raw bytes, make the bare reference the *whole* request body
750
+
751
+ ### File too large
752
+ - **Symptom:** the helper fails with a size error
753
+ - **Cause:** the in-memory conversion path is capped at 50 MB — it applies only to raw base64 strings and to references with a small declared `Metadata.Size`; references above 1 MB or with no declared size stream instead, with no size cap
754
+ - **Fix:** pass the file as a reference (streamed) rather than as an inline string; keep inline strings under the cap
755
+
756
+ ### Upload / download 403 or "folder" errors with `--input-file` / `--output-dir`
757
+ - **Symptom:** `Failed to upload input file … 403` or an Attachments API folder error
758
+ - **Cause:** the tenant's Attachments API requires a folder context
759
+ - **Fix:** pass `--folder-key <guid>` (the Orchestrator folder's key, visible in the folder's settings or via the platform CLI's folder listing)
760
+
641
761
  ---
642
762
 
643
763
  ## Debugging Strategy
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: uipath-coded-apps
3
- description: "UiPath Coded Apps — scaffold, build, run, and deploy Coded Web Apps and Coded Action Apps: React/TypeScript apps that call UiPath Cloud APIs via the `@uipath/uipath-typescript` SDK and ship to Automation Cloud (push/pull to Studio Web, pack, publish, deploy, OAuth-PKCE). Also generates live analytics & governance dashboards from a plain-language request, wired to tenant data via the Insights real-time API, with edit and deploy flows. For RPA→uipath-rpa, Python agents→uipath-agents, Maestro flows→uipath-maestro-flow, solution packaging→uipath-solution."
3
+ description: "UiPath Coded Apps — scaffold, build, run, and deploy Coded Web Apps and Coded Action Apps: React/TypeScript apps that call UiPath Cloud APIs via the `@uipath/uipath-typescript` SDK and ship to Automation Cloud (push/pull to Studio Web, pack, publish, deploy, OAuth-PKCE). Also generates live analytics & governance dashboards from a plain-language request, wired to tenant data via the Insights real-time API, with edit and deploy flows. For RPA→uipath-rpa, Python agents→uipath-agents, Maestro flows→uipath-maestro-flow, solution packaging→uipath-solution, JS/TS function backends (`defineFunction`, `uip function serve`)→uipath-functions."
4
4
  when_to_use: "User wants to scaffold, build, push/pull, pack, publish, or deploy a Coded Web App or Coded Action App, or use the `@uipath/uipath-typescript` SDK inside one. Also dashboard requests: 'build me a dashboard', 'show agent health / error rate / KPIs / governance violations', 'generate an analytics or observability dashboard', edit an existing one (add/remove/change a widget, change time range, deploy), or fix/diagnose a dashboard that won't build (a metric that fails to compile, a bad SDK call, a broken widget). For RPA→uipath-rpa; Python agents→uipath-agents; Maestro flows→uipath-maestro-flow."
5
5
  allowed-tools: Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion, Task
6
6
  ---
@@ -21,6 +21,8 @@ Build, debug, and deploy UiPath Coded Web Applications and Coded Action Apps usi
21
21
  - User wants to **generate an agent-monitoring / analytics dashboard** from a natural-language description — e.g. "show agent health, error rates, invocation volume, latency, active agents, KPIs, governance metrics, or consumption trends"
22
22
  - User says "build/create/generate a dashboard", describes metrics to visualize, or asks for an agent observability, operations, or cost view
23
23
 
24
+ For the app's **JS/TS function backend** — authoring the `defineFunction` endpoint the app calls, tokens, CORS, the local two-server dev loop → `uipath-functions`.
25
+
24
26
  ## App Types
25
27
 
26
28
  | Type | Description | Key Difference |
@@ -178,7 +180,7 @@ To change any of these values, edit `uipath.json`.
178
180
  2. **Build** — `npm run build`. Verify `ls dist/`.
179
181
  3. **Pack** — `uip codedapp pack dist -n <name> --version <version>`. Produces `.uipath/<name>.<version>.nupkg`. Bump version if previously published.
180
182
  4. **Publish** — `uip codedapp publish` (add `-t Action` for action apps). Verify `cat .uipath/app.config.json`.
181
- 5. **Deploy** — `uip codedapp deploy -n <name> --folder-key <GUID>`. Resolve the GUID from the chosen folder: a personal workspace (`Type == "Personal"`), a named existing folder, or a freshly `uip or folders create`d one — via `uip or folders list --output json`. Dashboards additionally choose a **deploy mode** (standalone / governance-pinned / governance) that sets `--tags`; see [dashboards deploy impl](references/dashboards/plugins/deploy/impl.md). Never let the command go interactive. Share the app URL with the user.
183
+ 5. **Deploy** — `uip codedapp deploy -n <name> --folder-key <GUID>`. Resolve the GUID from the chosen folder: a personal workspace (`Type == "Personal"`), a named existing folder, or a freshly `uip or folders create`d one — via `uip or folders list --output json`. Dashboards additionally choose a **deploy mode** (standalone / governance-pinned / governance) that sets `--tags`; see [dashboards deploy impl](references/dashboards/plugins/deploy/impl.md). Never let the command go interactive. Share the app URL with the user. **Deploy is done when the CLI reports success — do not poll or `curl` the app URL to confirm it.** Activation lags the deploy by minutes, so a fresh URL returning 404/503 is expected and proves nothing; waiting on it only burns time.
182
184
 
183
185
  ## SDK Module Imports
184
186
 
@@ -364,7 +364,7 @@ export function assertScaffoldExtracted(projectPath) {
364
364
  `Starter kit not extracted into: ${projectPath}`,
365
365
  `Extract it first with tar (built into Windows 10+, macOS, Linux).`,
366
366
  `Feed the archive on stdin (-f -) so GNU tar doesn't misread the C:\\ drive colon as a remote host:`,
367
- ` mkdir -p "${projectPath}" && tar -xz -C "${projectPath}" -f - < "${FIXTURE_ARCHIVE_PATH}"`,
367
+ ` mkdir -p "${projectPath}" && tar --no-same-owner --no-same-permissions -xz -C "${projectPath}" -f - < "${FIXTURE_ARCHIVE_PATH}"`,
368
368
  `Then re-run the build.`,
369
369
  ].join('\n'))
370
370
  }
@@ -82,11 +82,21 @@ uip login status --output json
82
82
  Derive the routing name from the user's request now (e.g. `"agent health dashboard"` → `"agent-health-x7k2"`). The project lands at `<cwd>/<ROUTING_NAME>`. Pre-warm = **extract the starter kit there, then install deps** — both in the background. Extraction uses the OS `tar` (built into Windows 10+, macOS, Linux — identical on every platform, no hand-rolled code), feeding the archive on **stdin** (`-f -`) so GNU tar doesn't misread the `C:\…` drive colon as a remote host (see `plugins/build/impl.md § The starter-kit archive`). One background call (chain with `&&`):
83
83
 
84
84
  ```bash
85
- mkdir -p "<ROUTING_NAME>" && tar -xz -C "<ROUTING_NAME>" -f - < "<SKILL_BASE_DIR>/assets/fixtures/governance-dashboard-starter-kit.tar.gz" && node "<SKILL_BASE_DIR>/assets/scripts/dashboards/build-dashboard.mjs" --prewarm "<ROUTING_NAME>"
85
+ mkdir -p "<ROUTING_NAME>" && tar --no-same-owner --no-same-permissions -xz -C "<ROUTING_NAME>" -f - < "<SKILL_BASE_DIR>/assets/fixtures/governance-dashboard-starter-kit.tar.gz" && node "<SKILL_BASE_DIR>/assets/scripts/dashboards/build-dashboard.mjs" --prewarm "<ROUTING_NAME>"
86
86
  ```
87
87
 
88
88
  The extract is fast; `--prewarm` then runs `npm ci` (the slow part) so it overlaps plan approval. ⚠️ `run_in_background: true` is a tool call parameter, not a shell flag. Without it, the call blocks before the plan appears.
89
89
 
90
+ **If that command exits non-zero — repair `<ROUTING_NAME>` in place. Never scaffold into a second folder.**
91
+
92
+ A partial extract (`Cannot mkdir`, `Cannot open: File exists`, `Permission denied`) leaves a half-populated project. Re-run the exact same command once — `tar` overwrites and the scaffold is idempotent, so a transient failure clears. If it fails again, delete and retry once:
93
+
94
+ ```bash
95
+ rm -rf "<ROUTING_NAME>" && mkdir -p "<ROUTING_NAME>" && tar --no-same-owner --no-same-permissions -xz -C "<ROUTING_NAME>" -f - < "<SKILL_BASE_DIR>/assets/fixtures/governance-dashboard-starter-kit.tar.gz" && node "<SKILL_BASE_DIR>/assets/scripts/dashboards/build-dashboard.mjs" --prewarm "<ROUTING_NAME>"
96
+ ```
97
+
98
+ If `rm -rf` itself is denied, the sandbox — not the kit — is at fault: **stop and report it.** Do NOT pick a new `<ROUTING_NAME>` to route around the error. An abandoned scaffold sitting beside the real one is indistinguishable from the real one to anything that later has to locate the project, and every downstream step then has a coin flip in it.
99
+
90
100
  > **What the user should see:** Only the plan text. Nothing else — not file reads, not login output, not pre-warm status, not bash results, and no question popup. If there is ANY output before the plan, or any tool call in the plan response, that is a bug.
91
101
 
92
102
  **After all reads:** output the plan as **pure text** and stop — zero tool calls in the plan response. The user replies with feedback or confirmation; setup questions (OAuth client ID, via the structured-choice tool) come only AFTER the plan is approved, and only for details the confirmation didn't already provide. See `plugins/build/impl.md` Phases 2–3.