@uipath/skills 1.196.0 → 1.197.0

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 (592) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +5 -2
  3. package/CODEOWNERS +22 -7
  4. package/README.md +14 -1
  5. package/assets/skill-status.json +14 -1
  6. package/assets/uip-catalog-snapshot.json +13 -2
  7. package/hooks/hooks.json +12 -0
  8. package/hooks/send-telemetry.sh +445 -0
  9. package/hooks/suggest-permissions.sh +6 -0
  10. package/package.json +1 -1
  11. package/skills/uipath-admin/SKILL.md +24 -4
  12. package/skills/uipath-admin/references/audit-commands.md +25 -21
  13. package/skills/uipath-admin/references/audit-workflow-guide.md +26 -25
  14. package/skills/uipath-admin/references/diagnose/CAPABILITY.md +74 -0
  15. package/skills/uipath-admin/references/diagnose/references/failure-modes.md +228 -0
  16. package/skills/uipath-admin/references/diagnose/references/troubleshooting-guide.md +106 -0
  17. package/skills/uipath-admin/references/identity-troubleshoot-guide.md +251 -0
  18. package/skills/uipath-agents/SKILL.md +12 -8
  19. package/skills/uipath-agents/references/coded/capabilities/context-grounding.md +2 -0
  20. package/skills/uipath-agents/references/coded/capabilities/conversational-agents.md +2 -0
  21. package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails-recommend.md +12 -7
  22. package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails.md +141 -1
  23. package/skills/uipath-agents/references/coded/capabilities/human-in-the-loop.md +2 -0
  24. package/skills/uipath-agents/references/coded/capabilities/integration-service.md +19 -33
  25. package/skills/uipath-agents/references/coded/lifecycle/bindings-reference.md +54 -22
  26. package/skills/uipath-agents/references/coded/lifecycle/build.md +1 -0
  27. package/skills/uipath-agents/references/coded/lifecycle/evaluations/evaluation-sets.md +5 -1
  28. package/skills/uipath-agents/references/coded/lifecycle/setup.md +3 -1
  29. package/skills/uipath-agents/references/coded/quickstart.md +11 -10
  30. package/skills/uipath-agents/references/coded-vs-lowcode-guide.md +1 -0
  31. package/skills/uipath-agents/references/context-grounding-patterns.md +1 -1
  32. package/skills/uipath-agents/references/lowcode/agent-definition.md +97 -12
  33. package/skills/uipath-agents/references/lowcode/capabilities/built-in-tools/analyze-attachments.md +2 -2
  34. package/skills/uipath-agents/references/lowcode/capabilities/built-in-tools/batch-transform/impl-json.md +40 -14
  35. package/skills/uipath-agents/references/lowcode/capabilities/built-in-tools/built-in-tools.md +4 -3
  36. package/skills/uipath-agents/references/lowcode/capabilities/built-in-tools/deeprag/impl-json.md +38 -6
  37. package/skills/uipath-agents/references/lowcode/capabilities/context/attachments.md +1 -1
  38. package/skills/uipath-agents/references/lowcode/capabilities/context/context.md +1 -1
  39. package/skills/uipath-agents/references/lowcode/capabilities/context/datafabric.md +1 -1
  40. package/skills/uipath-agents/references/lowcode/capabilities/context/index.md +7 -3
  41. package/skills/uipath-agents/references/lowcode/capabilities/escalation/escalation.md +49 -38
  42. package/skills/uipath-agents/references/lowcode/capabilities/guardrails/guardrails-recommend.md +3 -1
  43. package/skills/uipath-agents/references/lowcode/capabilities/guardrails/guardrails.md +49 -49
  44. package/skills/uipath-agents/references/lowcode/capabilities/inline-in-flow/inline-in-flow.md +34 -14
  45. package/skills/uipath-agents/references/lowcode/capabilities/integration-service/integration-service.md +1 -1
  46. package/skills/uipath-agents/references/lowcode/capabilities/memory/memory.md +2 -0
  47. package/skills/uipath-agents/references/lowcode/capabilities/process/process.md +2 -2
  48. package/skills/uipath-agents/references/lowcode/capabilities/process/solution-files.md +1 -1
  49. package/skills/uipath-agents/references/lowcode/critical-rules/autonomous-critical-rules.md +15 -0
  50. package/skills/uipath-agents/references/lowcode/critical-rules/conversational-critical-rules.md +19 -0
  51. package/skills/uipath-agents/references/lowcode/{critical-rules.md → critical-rules/critical-rules.md} +25 -27
  52. package/skills/uipath-agents/references/lowcode/debug.md +6 -3
  53. package/skills/uipath-agents/references/lowcode/evaluations/evaluate.md +2 -0
  54. package/skills/uipath-agents/references/lowcode/lowcode.md +29 -6
  55. package/skills/uipath-agents/references/lowcode/model-selection-guide.md +4 -1
  56. package/skills/uipath-agents/references/lowcode/project-lifecycle.md +20 -8
  57. package/skills/uipath-agents/references/lowcode/prompting/agent-prompting-guide.md +17 -0
  58. package/skills/uipath-agents/references/lowcode/{agent-prompting-guide.md → prompting/autonomous-agent-prompting-guide.md} +9 -11
  59. package/skills/uipath-agents/references/lowcode/prompting/conversational-agent-prompting-guide.md +123 -0
  60. package/skills/uipath-agents/references/lowcode/solution-resources.md +1 -1
  61. package/skills/uipath-api-workflow/SKILL.md +32 -12
  62. package/skills/uipath-api-workflow/references/cli-reference.md +110 -22
  63. package/skills/uipath-api-workflow/references/connector-activity-discovery.md +43 -4
  64. package/skills/uipath-api-workflow/references/troubleshooting.md +23 -7
  65. package/skills/uipath-api-workflow/references/workflow-file-format.md +25 -7
  66. package/skills/uipath-coded-apps/SKILL.md +55 -12
  67. package/skills/uipath-coded-apps/assets/fixtures/governance-dashboard-starter-kit.tar.gz +0 -0
  68. package/skills/uipath-coded-apps/assets/scripts/dashboards/build-dashboard.mjs +1371 -0
  69. package/skills/uipath-coded-apps/assets/scripts/dashboards/capability-registry.json +845 -0
  70. package/skills/uipath-coded-apps/assets/scripts/dashboards/flows/build.mjs +338 -0
  71. package/skills/uipath-coded-apps/assets/scripts/dashboards/flows/edit.mjs +248 -0
  72. package/skills/uipath-coded-apps/assets/scripts/dashboards/flows/template.mjs +82 -0
  73. package/skills/uipath-coded-apps/assets/scripts/dashboards/flows/upgrade.mjs +73 -0
  74. package/skills/uipath-coded-apps/assets/scripts/dashboards/lifecycle.mjs +207 -0
  75. package/skills/uipath-coded-apps/assets/scripts/dashboards/setup-admin-folder.mjs +146 -0
  76. package/skills/uipath-coded-apps/assets/scripts/dashboards/tests/regime-eject.test.mjs +124 -0
  77. package/skills/uipath-coded-apps/assets/scripts/dashboards/tests/resolution.test.mjs +1635 -0
  78. package/skills/uipath-coded-apps/assets/templates/action-app/app-template.css +9 -0
  79. package/skills/uipath-coded-apps/assets/templates/action-app/document-tab-template.css +139 -0
  80. package/skills/uipath-coded-apps/assets/templates/action-app/form-template.css +442 -0
  81. package/skills/uipath-coded-apps/assets/templates/action-app/index-template.css +111 -0
  82. package/skills/uipath-coded-apps/assets/templates/action-app-template.md +357 -152
  83. package/skills/uipath-coded-apps/assets/templates/web-app-template.md +255 -78
  84. package/skills/uipath-coded-apps/references/create-action-app.md +284 -195
  85. package/skills/uipath-coded-apps/references/create-web-app.md +64 -26
  86. package/skills/uipath-coded-apps/references/dashboards/CAPABILITY.md +179 -0
  87. package/skills/uipath-coded-apps/references/dashboards/aesthetic/charting.md +138 -0
  88. package/skills/uipath-coded-apps/references/dashboards/aesthetic/layout-patterns.md +152 -0
  89. package/skills/uipath-coded-apps/references/dashboards/plugins/build/impl.md +423 -0
  90. package/skills/uipath-coded-apps/references/dashboards/plugins/deploy/impl.md +322 -0
  91. package/skills/uipath-coded-apps/references/dashboards/primitives/customization.md +66 -0
  92. package/skills/uipath-coded-apps/references/dashboards/primitives/detail-views.md +64 -0
  93. package/skills/uipath-coded-apps/references/dashboards/primitives/incremental-editor.md +92 -0
  94. package/skills/uipath-coded-apps/references/dashboards/primitives/state-file.md +64 -0
  95. package/skills/uipath-coded-apps/references/dashboards/primitives/tier-resolution.md +474 -0
  96. package/skills/uipath-coded-apps/references/debug.md +15 -21
  97. package/skills/uipath-coded-apps/references/oauth-client-setup.md +5 -5
  98. package/skills/uipath-coded-apps/references/oauth-scopes.md +64 -2
  99. package/skills/uipath-coded-apps/references/pack-publish-deploy.md +12 -5
  100. package/skills/uipath-coded-apps/references/patterns.md +10 -5
  101. package/skills/uipath-coded-apps/references/sdk/action-center.md +32 -6
  102. package/skills/uipath-coded-apps/references/sdk/agents.md +241 -0
  103. package/skills/uipath-coded-apps/references/sdk/governance-traces.md +186 -0
  104. package/skills/uipath-coded-apps/references/sdk/governance.md +72 -0
  105. package/skills/uipath-coded-apps/references/sdk/imports.md +4 -0
  106. package/skills/uipath-coded-apps/references/sdk/maestro.md +114 -0
  107. package/skills/uipath-coded-apps/references/sdk/orchestrator.md +80 -4
  108. package/skills/uipath-coded-apps/references/sdk/pagination.md +2 -0
  109. package/skills/uipath-coded-apps/references/sdk/traces.md +89 -0
  110. package/skills/uipath-coded-apps/references/widgets/validation-station.md +308 -0
  111. package/skills/uipath-coded-apps/scripts/validate-action-schema.js +241 -0
  112. package/skills/uipath-connector-builder/SKILL.md +192 -0
  113. package/skills/uipath-connector-builder/references/auth.md +171 -0
  114. package/skills/uipath-connector-builder/references/configuration.md +130 -0
  115. package/skills/uipath-connector-builder/references/debugging.md +80 -0
  116. package/skills/uipath-connector-builder/references/element-json.md +148 -0
  117. package/skills/uipath-connector-builder/references/events.md +132 -0
  118. package/skills/uipath-connector-builder/references/hooks.md +198 -0
  119. package/skills/uipath-connector-builder/references/overview.md +78 -0
  120. package/skills/uipath-connector-builder/references/standard-resources.md +111 -0
  121. package/skills/uipath-connector-builder/references/system-resources.md +85 -0
  122. package/skills/uipath-feedback/SKILL.md +43 -29
  123. package/skills/{uipath-agents/references/coded/frameworks/coded-functions.md → uipath-functions/SKILL.md} +36 -23
  124. package/skills/uipath-governance/SKILL.md +49 -8
  125. package/skills/uipath-governance/references/aops-policy/aops-policy-commands.md +10 -10
  126. package/skills/uipath-governance/references/aops-policy/aops-policy-deploy-guide.md +7 -7
  127. package/skills/uipath-governance/references/auth-context.md +101 -0
  128. package/skills/uipath-governance/references/cli-cheatsheet.md +207 -0
  129. package/skills/uipath-governance/references/compliance-pack/catalog/impl.md +79 -0
  130. package/skills/uipath-governance/references/compliance-pack/coverage/impl.md +141 -0
  131. package/skills/uipath-governance/references/compliance-pack/disable/impl.md +39 -0
  132. package/skills/uipath-governance/references/compliance-pack/full-apply/impl.md +164 -0
  133. package/skills/uipath-governance/references/compliance-pack/partial-apply/impl.md +266 -0
  134. package/skills/uipath-governance/references/compliance-pack/partial-apply/merge-overrides-guide.md +28 -0
  135. package/skills/uipath-governance/references/compliance-pack/partial-apply/planning.md +82 -0
  136. package/skills/uipath-governance/references/compliance-pack/partial-apply/synthesize-formdata-guide.md +22 -0
  137. package/skills/uipath-governance/references/compliance-pack/preview-gate.md +43 -0
  138. package/skills/uipath-governance/references/compliance-pack/query/impl.md +75 -0
  139. package/skills/uipath-governance/references/diagnose/CAPABILITY.md +71 -0
  140. package/skills/uipath-governance/references/diagnose/references/failure-modes.md +201 -0
  141. package/skills/uipath-governance/references/diagnose/references/troubleshooting-guide.md +137 -0
  142. package/skills/uipath-governance/references/disambiguation-guide.md +15 -0
  143. package/skills/uipath-governance/scripts/merge-overrides.mjs +81 -0
  144. package/skills/uipath-governance/scripts/synthesize-formdata.mjs +86 -0
  145. package/skills/uipath-human-in-the-loop/SKILL.md +30 -25
  146. package/skills/uipath-human-in-the-loop/references/hitl-node-apptask.md +38 -4
  147. package/skills/uipath-human-in-the-loop/references/hitl-node-coded-action-app.md +2 -3
  148. package/skills/uipath-human-in-the-loop/references/hitl-node-quickform.md +92 -34
  149. package/skills/uipath-ixp/SKILL.md +120 -0
  150. package/skills/uipath-ixp/references/cli-reference.md +121 -0
  151. package/skills/uipath-ixp/references/improve-prompts-guide.md +283 -0
  152. package/skills/uipath-ixp/references/label-documents-guide.md +207 -0
  153. package/skills/uipath-ixp/references/project-setup-guide.md +90 -0
  154. package/skills/uipath-maestro-bpmn/SKILL.md +167 -68
  155. package/skills/uipath-maestro-bpmn/references/cli-conventions.md +47 -0
  156. package/skills/uipath-maestro-bpmn/references/diagnose/CAPABILITY.md +6 -6
  157. package/skills/uipath-maestro-bpmn/references/operate/CAPABILITY.md +3 -3
  158. package/skills/uipath-maestro-bpmn/references/registry-workflow.md +199 -0
  159. package/skills/uipath-maestro-bpmn/references/structural-bpmn.md +500 -0
  160. package/skills/uipath-maestro-bpmn/validator/README.md +214 -0
  161. package/skills/uipath-maestro-bpmn/validator/bpmn-spec.json +2477 -0
  162. package/skills/uipath-maestro-bpmn/validator/model.mjs +419 -0
  163. package/skills/uipath-maestro-bpmn/validator/package.json +17 -0
  164. package/skills/uipath-maestro-bpmn/validator/rules.mjs +1403 -0
  165. package/skills/uipath-maestro-bpmn/validator/samples/invalid-conditional-and-variable.bpmn +25 -0
  166. package/skills/uipath-maestro-bpmn/validator/samples/valid-baseline.bpmn +52 -0
  167. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/A.2.0.bpmn +157 -0
  168. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/A.2.1.bpmn +333 -0
  169. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/B.1.0.bpmn +598 -0
  170. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/B.2.0.bpmn +1709 -0
  171. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/C.2.0.bpmn +564 -0
  172. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/C.3.0.bpmn +671 -0
  173. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/C.4.0.bpmn +1045 -0
  174. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/C.5.0.bpmn +1176 -0
  175. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/C.6.0.bpmn +670 -0
  176. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/C.7.0.bpmn +466 -0
  177. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Can_Parse_Complex_Process_With_Task_Gateway_BoundaryEvent_etc.bpmn +74 -0
  178. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/ExclusiveGatewayDefaultFlow.bpmn +32 -0
  179. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/ExternalAgentWorkflow.bpmn +62 -0
  180. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Golden_Scenario.initial.bpmn +361 -0
  181. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/InclusiveJoinRouteAwayBranch.bpmn +62 -0
  182. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Parse_AsyncExecution_And_Create_CorrectModel.bpmn +74 -0
  183. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Parse_IXP_ExtractionValidation_And_Create_CorrectModel.bpmn +35 -0
  184. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Parse_IXP_Extraction_FileUpload_And_Create_CorrectModel.bpmn +33 -0
  185. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Parse_IXP_Extraction_JobAttachment_And_Create_CorrectModel.bpmn +35 -0
  186. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Parse_SubProcess_With_Multiple_Element_Types.bpmn +76 -0
  187. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/StartEventWithOutputs.bpmn +36 -0
  188. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/StartGatewayEnd.bpmn +44 -0
  189. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/all elements.bpmn +516 -0
  190. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/all_sequence_flow_types.bpmn +173 -0
  191. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/demo.bpmn +181 -0
  192. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/subprocess-example-001-collapsed.bpmn +126 -0
  193. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/subprocess-example-001-expanded.bpmn +122 -0
  194. package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/subprocess-example-003-collapsed_deeply-nested.bpmn +438 -0
  195. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/A.1.0.bpmn +87 -0
  196. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/A.3.0.bpmn +165 -0
  197. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ApiWorkflow.bpmn +39 -0
  198. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/BpmnNestedSubProcessTests.bpmn +102 -0
  199. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/BpmnTimerBoundaryEvents.bpmn +160 -0
  200. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/BpmnXmlWithCatchAllErrorEventSubProcess.bpmn +45 -0
  201. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/BpmnXmlWithSpecificErrorEventSubProcess.bpmn +46 -0
  202. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/CaseManagementWithConstantIdentifier.bpmn +218 -0
  203. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ErrorBoundary.bpmn +78 -0
  204. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ErrorPropagationInEventSubprocess.bpmn +340 -0
  205. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/EventBasedGatewayFirstCatcherWins.bpmn +56 -0
  206. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/Example-EventBasedGateway.bpmn +117 -0
  207. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ExclusiveGatewayConditional.bpmn +45 -0
  208. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ExclusiveGatewaySharedEndEvent.bpmn +45 -0
  209. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ExclusiveWithParallelGateway.bpmn +68 -0
  210. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/FourScriptTasks.bpmn +84 -0
  211. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/HitlTaskOnly.bpmn +55 -0
  212. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/InclusiveGatewayForkJoin.bpmn +69 -0
  213. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/Parse_BPMN_Elements_And_Create_CorrectModel.bpmn +20 -0
  214. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/Parse_HttpRequest_ServiceTask_And_Create_Correct_Model.bpmn +34 -0
  215. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/Parse_MessageBoundaryEvent_And_Create_CorrectModel.bpmn +87 -0
  216. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/Parse_Script_Task_V2_And_Create_Correct_Model.bpmn +31 -0
  217. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/Parse_Sets_Containers_Properly.bpmn +129 -0
  218. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ScriptWritesVariableThenGatewayBranches.bpmn +55 -0
  219. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/boundaryevent.bpmn +30 -0
  220. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/collapsed-subprocess.bpmn +83 -0
  221. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/connectable-types.bpmn +85 -0
  222. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/extensions-orchestrator-start-job.bpmn +80 -0
  223. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/multiparticipantpool.bpmn +77 -0
  224. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/nestedsubprocess.bpmn +36 -0
  225. package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/simple.bpmn +59 -0
  226. package/skills/uipath-maestro-bpmn/validator/test/integration.test.mjs +146 -0
  227. package/skills/uipath-maestro-bpmn/validator/test/model-helpers.mjs +42 -0
  228. package/skills/uipath-maestro-bpmn/validator/test/ported-rule-tests.mjs +983 -0
  229. package/skills/uipath-maestro-bpmn/validator/test/run-tests.mjs +530 -0
  230. package/skills/uipath-maestro-bpmn/validator/uipath-moddle.v1.json +715 -0
  231. package/skills/uipath-maestro-bpmn/validator/validate-bpmn.mjs +164 -0
  232. package/skills/uipath-maestro-case/SKILL.md +5 -1
  233. package/skills/uipath-maestro-case/assets/templates/sdd-template-examples.md +10 -0
  234. package/skills/uipath-maestro-case/assets/templates/sdd-template.md +89 -17
  235. package/skills/uipath-maestro-case/references/bindings-and-expressions.md +26 -0
  236. package/skills/uipath-maestro-case/references/case-editing-operations.md +3 -0
  237. package/skills/uipath-maestro-case/references/implementation.md +11 -4
  238. package/skills/uipath-maestro-case/references/phase-0-interview.md +8 -7
  239. package/skills/uipath-maestro-case/references/phased-execution.md +2 -1
  240. package/skills/uipath-maestro-case/references/plugins/conditions/stage-exit-conditions/impl-json.md +21 -0
  241. package/skills/uipath-maestro-case/references/plugins/conditions/stage-exit-conditions/planning.md +2 -0
  242. package/skills/uipath-maestro-case/references/plugins/variables/global-vars/impl-json.md +15 -9
  243. package/skills/uipath-maestro-case/references/plugins/variables/io-binding/impl-json.md +131 -4
  244. package/skills/uipath-maestro-case/references/sdd-generation-rules.md +94 -17
  245. package/skills/uipath-maestro-flow/references/author/CAPABILITY.md +1 -1
  246. package/skills/uipath-maestro-flow/references/author/references/planning-arch.md +2 -2
  247. package/skills/uipath-maestro-flow/references/author/references/plugins/hitl/impl.md +11 -11
  248. package/skills/uipath-maestro-flow/references/author/references/plugins/hitl/planning.md +6 -6
  249. package/skills/uipath-maestro-flow/references/author/references/plugins/http/impl-connector.md +4 -1
  250. package/skills/uipath-maestro-flow/references/author/references/plugins/inline-agent/impl.md +157 -122
  251. package/skills/uipath-maestro-flow/references/author/references/plugins/inline-agent/planning.md +16 -4
  252. package/skills/uipath-maestro-flow/references/evaluate/references/commands-reference.md +8 -8
  253. package/skills/uipath-maestro-flow/references/evaluate/references/running-guide.md +3 -3
  254. package/skills/uipath-maestro-flow/references/shared/cli-commands.md +1 -1
  255. package/skills/uipath-planner/SKILL.md +19 -8
  256. package/skills/uipath-planner/assets/templates/agent-sdd-template.md +14 -0
  257. package/skills/uipath-planner/assets/templates/api-workflow-sdd-template.md +14 -0
  258. package/skills/uipath-planner/assets/templates/case-sdd-template.md +14 -0
  259. package/skills/uipath-planner/assets/templates/coded-app-sdd-template.md +14 -0
  260. package/skills/uipath-planner/assets/templates/flow-sdd-template.md +14 -0
  261. package/skills/uipath-planner/assets/templates/rpa-sdd-template.md +40 -5
  262. package/skills/uipath-planner/references/asdd-crosswalk-guide.md +55 -0
  263. package/skills/uipath-planner/references/attended-reauth-pattern-guide.md +43 -0
  264. package/skills/uipath-planner/references/multi-skill-patterns-guide.md +4 -0
  265. package/skills/uipath-planner/references/non-pdd-lane-guide.md +2 -0
  266. package/skills/uipath-planner/references/pdd-analysis-guide.md +24 -1
  267. package/skills/uipath-planner/references/pdd-driven-lane-guide.md +6 -2
  268. package/skills/uipath-planner/references/plan-and-tasks-format.md +2 -0
  269. package/skills/uipath-planner/references/platform-availability-guide.md +43 -0
  270. package/skills/uipath-planner/references/product-selection-guide.md +20 -0
  271. package/skills/uipath-planner/references/sdd-generation-guide.md +90 -21
  272. package/skills/uipath-planner/references/tenant-library-search-guide.md +5 -1
  273. package/skills/uipath-planner/scripts/docx-extract.sh +54 -0
  274. package/skills/uipath-planner/scripts/sdd-to-docx.sh +76 -0
  275. package/skills/uipath-platform/SKILL.md +54 -7
  276. package/skills/uipath-platform/references/context-grounding/index-management.md +123 -0
  277. package/skills/uipath-platform/references/data-fabric/bulk-import.md +86 -0
  278. package/skills/{uipath-data-fabric/references → uipath-platform/references/data-fabric}/choice-sets.md +33 -12
  279. package/skills/uipath-platform/references/data-fabric/data-fabric.md +352 -0
  280. package/skills/uipath-platform/references/data-fabric/entity-schema.md +444 -0
  281. package/skills/uipath-platform/references/data-fabric/file-attachments.md +122 -0
  282. package/skills/{uipath-data-fabric/references → uipath-platform/references/data-fabric}/filter-platform-contract.md +3 -3
  283. package/skills/{uipath-data-fabric/references → uipath-platform/references/data-fabric}/records-query.md +46 -10
  284. package/skills/uipath-platform/references/integration-service/http-request.md +15 -1
  285. package/skills/uipath-platform/references/integration-service/vendor-docs-registry.json +173 -0
  286. package/skills/uipath-platform/references/uip-commands.md +12 -4
  287. package/skills/uipath-review/SKILL.md +53 -12
  288. package/skills/uipath-review/references/agents/agent-common-issues.md +1 -1
  289. package/skills/uipath-review/references/agents/agent-grading-rubric.md +133 -0
  290. package/skills/uipath-review/references/agents/agent-review-checklist.md +23 -3
  291. package/skills/uipath-review/references/agents/agents-coded-rules.md +7 -0
  292. package/skills/uipath-review/references/agents/agents-lowcode-rules.md +13 -3
  293. package/skills/uipath-review/references/agents/guardrails/guardrails-review.md +198 -0
  294. package/skills/uipath-review/references/architecture-assessment-guide.md +2 -0
  295. package/skills/uipath-review/references/review-workflow-guide.md +9 -5
  296. package/skills/uipath-review/references/rule-catalog-workflow.md +3 -3
  297. package/skills/uipath-rpa/SKILL.md +18 -6
  298. package/skills/uipath-rpa/references/cli-reference.md +57 -3
  299. package/skills/uipath-rpa/references/common-activity-card.md +1 -1
  300. package/skills/uipath-rpa/references/connector-capabilities.md +2 -0
  301. package/skills/uipath-rpa/references/data-manipulation-guide.md +311 -0
  302. package/skills/uipath-rpa/references/environment-setup.md +0 -2
  303. package/skills/uipath-rpa/references/error-handling-guide.md +381 -0
  304. package/skills/uipath-rpa/references/is-connector-xaml-guide.md +127 -11
  305. package/skills/uipath-rpa/references/reframework-guide.md +2 -0
  306. package/skills/uipath-rpa/references/testing-guide.md +19 -0
  307. package/skills/uipath-rpa/references/ui-automation-guide.md +129 -18
  308. package/skills/uipath-rpa/references/uia-configure-target-workflows.md +22 -1
  309. package/skills/uipath-rpa/references/uia-elements-interaction-guide.md +93 -0
  310. package/skills/uipath-rpa/references/xaml/canvas-layout-guide.md +41 -4
  311. package/skills/uipath-rpa/references/xaml/common-pitfalls.md +12 -3
  312. package/skills/uipath-rpa/references/xaml/flowchart-guide.md +113 -0
  313. package/skills/uipath-rpa/references/xaml/xaml-basics-and-rules.md +5 -9
  314. package/skills/uipath-solution/SKILL.md +11 -8
  315. package/skills/uipath-solution/references/pack-and-deploy.md +18 -1
  316. package/skills/uipath-solution/references/solution-overview.md +3 -0
  317. package/skills/uipath-test/SKILL.md +2 -1
  318. package/skills/uipath-troubleshoot/SKILL.md +24 -26
  319. package/skills/uipath-troubleshoot/agents/depth-verifier.md +24 -25
  320. package/skills/uipath-troubleshoot/agents/hypothesis-generator.md +8 -4
  321. package/skills/uipath-troubleshoot/agents/hypothesis-tester.md +85 -38
  322. package/skills/uipath-troubleshoot/agents/presenter.md +7 -7
  323. package/skills/uipath-troubleshoot/agents/scope-checker.md +3 -6
  324. package/skills/uipath-troubleshoot/agents/shared.md +26 -21
  325. package/skills/uipath-troubleshoot/agents/triage.md +117 -49
  326. package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/investigation_guide.md +43 -0
  327. package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/overview.md +57 -0
  328. package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/playbooks/cv-action-failed-after-find.md +100 -0
  329. package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/playbooks/cv-cell-targeting-failures.md +111 -0
  330. package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/playbooks/cv-element-not-found.md +125 -0
  331. package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/playbooks/cv-get-text-empty-or-wrong-result.md +117 -0
  332. package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/playbooks/cv-invalid-descriptor.md +102 -0
  333. package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/playbooks/cv-scope-setup-failures.md +136 -0
  334. package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/playbooks/cv-scroll-search-failures.md +114 -0
  335. package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/playbooks/cv-server-auth-throttling-network.md +95 -0
  336. package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/playbooks/cv-silent-failures-and-false-results.md +124 -0
  337. package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/presentation.md +8 -0
  338. package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/summary.md +15 -0
  339. package/skills/uipath-troubleshoot/references/activity-packages/database-activities/investigation_guide.md +42 -0
  340. package/skills/uipath-troubleshoot/references/activity-packages/database-activities/overview.md +41 -0
  341. package/skills/uipath-troubleshoot/references/activity-packages/database-activities/playbooks/connect-to-database-failures.md +104 -0
  342. package/skills/uipath-troubleshoot/references/activity-packages/database-activities/playbooks/execute-non-query-failures.md +97 -0
  343. package/skills/uipath-troubleshoot/references/activity-packages/database-activities/playbooks/execute-query-failures.md +134 -0
  344. package/skills/uipath-troubleshoot/references/activity-packages/database-activities/playbooks/start-transaction-failures.md +94 -0
  345. package/skills/uipath-troubleshoot/references/activity-packages/database-activities/presentation.md +10 -0
  346. package/skills/uipath-troubleshoot/references/activity-packages/database-activities/summary.md +10 -0
  347. package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/investigation_guide.md +27 -9
  348. package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/overview.md +51 -10
  349. package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/playbooks/append-range-failures.md +146 -0
  350. package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/playbooks/delete-range-failures.md +126 -0
  351. package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/playbooks/excel-application-card-failures.md +139 -0
  352. package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/playbooks/excel-application-scope-failures.md +118 -0
  353. package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/playbooks/execute-macro-failures.md +149 -0
  354. package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/playbooks/write-range-failures.md +145 -0
  355. package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/presentation.md +12 -7
  356. package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/summary.md +6 -0
  357. package/skills/uipath-troubleshoot/references/activity-packages/gsuite-activities/investigation_guide.md +1 -0
  358. package/skills/uipath-troubleshoot/references/activity-packages/gsuite-activities/overview.md +12 -4
  359. package/skills/uipath-troubleshoot/references/activity-packages/gsuite-activities/playbooks/connection-and-auth-failures.md +55 -0
  360. package/skills/uipath-troubleshoot/references/activity-packages/gsuite-activities/playbooks/drive-file-not-found.md +18 -10
  361. package/skills/uipath-troubleshoot/references/activity-packages/gsuite-activities/playbooks/get-newest-email-not-found.md +9 -8
  362. package/skills/uipath-troubleshoot/references/activity-packages/gsuite-activities/playbooks/invalid-or-null-input.md +68 -0
  363. package/skills/uipath-troubleshoot/references/activity-packages/gsuite-activities/playbooks/transient-and-timeout-errors.md +52 -0
  364. package/skills/uipath-troubleshoot/references/activity-packages/gsuite-activities/playbooks/upload-storage-quota-exceeded.md +1 -1
  365. package/skills/uipath-troubleshoot/references/activity-packages/gsuite-activities/summary.md +5 -2
  366. package/skills/uipath-troubleshoot/references/activity-packages/mail-activities/overview.md +28 -0
  367. package/skills/uipath-troubleshoot/references/activity-packages/mail-activities/playbooks/delete-outlook-mail-failures.md +105 -0
  368. package/skills/uipath-troubleshoot/references/activity-packages/mail-activities/playbooks/get-outlook-mail-failures.md +109 -0
  369. package/skills/uipath-troubleshoot/references/activity-packages/mail-activities/playbooks/move-outlook-mail-failures.md +97 -0
  370. package/skills/uipath-troubleshoot/references/activity-packages/mail-activities/playbooks/send-outlook-mail-failures.md +95 -0
  371. package/skills/uipath-troubleshoot/references/activity-packages/mail-activities/summary.md +8 -0
  372. package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/investigation_guide.md +23 -0
  373. package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/overview.md +9 -0
  374. package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/application-scope-misconfigured.md +49 -0
  375. package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/authentication-token-invalid.md +53 -0
  376. package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/copy-item-argument-null.md +34 -0
  377. package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/create-folder-invalid-path.md +36 -0
  378. package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/download-file-conversion-or-destination.md +40 -0
  379. package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/drive-item-not-found.md +1 -1
  380. package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/email-trigger-connection-event-failure.md +45 -0
  381. package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/insufficient-graph-scope.md +44 -0
  382. package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/legacy-mail-null-reference.md +43 -0
  383. package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/mail-folder-not-found.md +4 -3
  384. package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/mail-invalid-odata-query.md +43 -0
  385. package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/mail-message-not-found.md +45 -0
  386. package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/request-throttled.md +45 -0
  387. package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/send-mail-rejected.md +52 -0
  388. package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/transient-service-error.md +48 -0
  389. package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/upload-file-quota-or-size.md +47 -0
  390. package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/summary.md +15 -1
  391. package/skills/uipath-troubleshoot/references/activity-packages/python-activities/investigation_guide.md +32 -0
  392. package/skills/uipath-troubleshoot/references/activity-packages/python-activities/overview.md +38 -0
  393. package/skills/uipath-troubleshoot/references/activity-packages/python-activities/playbooks/invoke-method-failures.md +57 -0
  394. package/skills/uipath-troubleshoot/references/activity-packages/python-activities/playbooks/invoke-python-method-pipe-is-broken.md +44 -0
  395. package/skills/uipath-troubleshoot/references/activity-packages/python-activities/playbooks/load-script-failures.md +62 -0
  396. package/skills/uipath-troubleshoot/references/activity-packages/python-activities/playbooks/python-path-not-valid.md +39 -0
  397. package/skills/uipath-troubleshoot/references/activity-packages/python-activities/playbooks/python-scope-architecture-version-mismatch.md +41 -0
  398. package/skills/uipath-troubleshoot/references/activity-packages/python-activities/playbooks/working-folder-relative-path.md +34 -0
  399. package/skills/uipath-troubleshoot/references/activity-packages/python-activities/presentation.md +9 -0
  400. package/skills/uipath-troubleshoot/references/activity-packages/python-activities/summary.md +12 -0
  401. package/skills/uipath-troubleshoot/references/activity-packages/system-activities/playbooks/get-asset-activity-bug-silent-failure.md +1 -1
  402. package/skills/uipath-troubleshoot/references/activity-packages/system-activities/playbooks/get-asset-robot-not-authenticated.md +29 -22
  403. package/skills/uipath-troubleshoot/references/activity-packages/system-activities/summary.md +1 -1
  404. package/skills/uipath-troubleshoot/references/activity-packages/web-activities/investigation_guide.md +30 -0
  405. package/skills/uipath-troubleshoot/references/activity-packages/web-activities/overview.md +36 -0
  406. package/skills/uipath-troubleshoot/references/activity-packages/web-activities/playbooks/deserialize-malformed-input.md +36 -0
  407. package/skills/uipath-troubleshoot/references/activity-packages/web-activities/playbooks/deserialize-null-input.md +35 -0
  408. package/skills/uipath-troubleshoot/references/activity-packages/web-activities/playbooks/deserialize-type-mismatch.md +40 -0
  409. package/skills/uipath-troubleshoot/references/activity-packages/web-activities/playbooks/http-client-null-reference.md +34 -0
  410. package/skills/uipath-troubleshoot/references/activity-packages/web-activities/playbooks/http-request-connection-failure.md +48 -0
  411. package/skills/uipath-troubleshoot/references/activity-packages/web-activities/playbooks/http-request-timeout.md +40 -0
  412. package/skills/uipath-troubleshoot/references/activity-packages/web-activities/playbooks/net-http-request-aggregate-failure.md +38 -0
  413. package/skills/uipath-troubleshoot/references/activity-packages/web-activities/summary.md +13 -0
  414. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/investigation_guide.md +55 -0
  415. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/overview.md +82 -0
  416. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/add-picture-failures.md +51 -0
  417. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/append-text-missing-container.md +31 -0
  418. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/append-text-zero-byte-file.md +32 -0
  419. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/export-pdf-com-hang.md +46 -0
  420. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/export-pdf-missing-output-dir.md +32 -0
  421. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/export-pdf-output-path-format.md +35 -0
  422. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/read-text-doc-format.md +30 -0
  423. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/read-text-missing-container.md +29 -0
  424. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/read-text-protected-view.md +32 -0
  425. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/replace-text-com-busy.md +35 -0
  426. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/replace-text-file-locked.md +33 -0
  427. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/replace-text-headers-textboxes-skipped.md +30 -0
  428. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/replace-text-length-limit.md +30 -0
  429. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/replace-text-loop-template-overwrite.md +31 -0
  430. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/replace-text-multiline-formatting.md +31 -0
  431. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/replace-text-silent-no-substitution.md +32 -0
  432. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/replace-text-version-mismatch.md +30 -0
  433. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/word-com-interop-failures.md +52 -0
  434. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/word-com-start-background-session0.md +50 -0
  435. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/word-export-pdf-com-wrong-thread.md +46 -0
  436. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/word-open-sharepoint-url-com-command-failed.md +45 -0
  437. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/word-scope-cannot-create-unknown-type.md +30 -0
  438. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/word-scope-com-not-installed.md +35 -0
  439. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/word-scope-file-corrupted.md +34 -0
  440. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/word-scope-file-path-not-found.md +36 -0
  441. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/word-scope-hangs-background-prompt.md +34 -0
  442. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/presentation.md +11 -0
  443. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/summary.md +38 -0
  444. package/skills/uipath-troubleshoot/references/products/integration-service/investigation_guide.md +9 -0
  445. package/skills/uipath-troubleshoot/references/products/integration-service/overview.md +7 -0
  446. package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/connection-invalid.md +9 -0
  447. package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/connector-aggregate-exception.md +30 -0
  448. package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/connector-general-exception.md +43 -0
  449. package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/connector-null-reference.md +36 -0
  450. package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/connector-remote-exception.md +31 -0
  451. package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/connector-runtime-exception.md +40 -0
  452. package/skills/uipath-troubleshoot/references/products/integration-service/summary.md +5 -0
  453. package/skills/uipath-troubleshoot/references/products/maestro/investigation_guide.md +2 -1
  454. package/skills/uipath-troubleshoot/references/products/orchestrator/investigation_guide.md +105 -10
  455. package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/job-faulted-logon-failure.md +1 -1
  456. package/skills/uipath-troubleshoot/references/summary.md +59 -3
  457. package/skills/uipath-troubleshoot/schemas/evidence.schema.md +48 -0
  458. package/skills/uipath-troubleshoot/schemas/hypotheses.schema.md +22 -7
  459. package/skills/uipath-troubleshoot/schemas/scope-check.schema.md +1 -1
  460. package/skills/uipath-troubleshoot/schemas/state.schema.md +81 -6
  461. package/version-manifest.json +2 -2
  462. package/skills/uipath-data-fabric/SKILL.md +0 -239
  463. package/skills/uipath-data-fabric/references/bulk-import.md +0 -73
  464. package/skills/uipath-data-fabric/references/entity-schema.md +0 -391
  465. package/skills/uipath-data-fabric/references/file-attachments.md +0 -65
  466. package/skills/uipath-maestro-bpmn/.maintenance/README.md +0 -241
  467. package/skills/uipath-maestro-bpmn/.maintenance/check-all.sh +0 -41
  468. package/skills/uipath-maestro-bpmn/.maintenance/check-anchors.sh +0 -83
  469. package/skills/uipath-maestro-bpmn/.maintenance/check-depth.sh +0 -132
  470. package/skills/uipath-maestro-bpmn/.maintenance/check-link-text.sh +0 -123
  471. package/skills/uipath-maestro-bpmn/.maintenance/check-links.sh +0 -70
  472. package/skills/uipath-maestro-bpmn/.maintenance/check-orphans.sh +0 -93
  473. package/skills/uipath-maestro-bpmn/.maintenance/check-plugin-pairs.sh +0 -39
  474. package/skills/uipath-maestro-bpmn/.maintenance/check-real-pack.sh +0 -79
  475. package/skills/uipath-maestro-bpmn/.maintenance/check-template.sh +0 -42
  476. package/skills/uipath-maestro-bpmn/.maintenance/check-uip-commands.sh +0 -266
  477. package/skills/uipath-maestro-bpmn/.maintenance/check-validation-fixtures.py +0 -1255
  478. package/skills/uipath-maestro-bpmn/.maintenance/check-validation-fixtures.sh +0 -8
  479. package/skills/uipath-maestro-bpmn/fixtures/validation/README.md +0 -94
  480. package/skills/uipath-maestro-bpmn/fixtures/validation/agent-invocation/agent-invocation.bpmn +0 -62
  481. package/skills/uipath-maestro-bpmn/fixtures/validation/agent-invocation/bindings_v2.json +0 -37
  482. package/skills/uipath-maestro-bpmn/fixtures/validation/agent-invocation/entry-points.json +0 -21
  483. package/skills/uipath-maestro-bpmn/fixtures/validation/agent-invocation/operate.json +0 -9
  484. package/skills/uipath-maestro-bpmn/fixtures/validation/agent-invocation/package-descriptor.json +0 -10
  485. package/skills/uipath-maestro-bpmn/fixtures/validation/agent-invocation/project.uiproj +0 -7
  486. package/skills/uipath-maestro-bpmn/fixtures/validation/contract-variants/bindings_v2.json +0 -68
  487. package/skills/uipath-maestro-bpmn/fixtures/validation/contract-variants/contract-variants.bpmn +0 -270
  488. package/skills/uipath-maestro-bpmn/fixtures/validation/contract-variants/entry-points.json +0 -25
  489. package/skills/uipath-maestro-bpmn/fixtures/validation/contract-variants/operate.json +0 -9
  490. package/skills/uipath-maestro-bpmn/fixtures/validation/contract-variants/package-descriptor.json +0 -10
  491. package/skills/uipath-maestro-bpmn/fixtures/validation/contract-variants/project.uiproj +0 -7
  492. package/skills/uipath-maestro-bpmn/fixtures/validation/gateway-boundary-error/bindings_v2.json +0 -19
  493. package/skills/uipath-maestro-bpmn/fixtures/validation/gateway-boundary-error/entry-points.json +0 -25
  494. package/skills/uipath-maestro-bpmn/fixtures/validation/gateway-boundary-error/gateway-boundary-error.bpmn +0 -91
  495. package/skills/uipath-maestro-bpmn/fixtures/validation/gateway-boundary-error/operate.json +0 -9
  496. package/skills/uipath-maestro-bpmn/fixtures/validation/gateway-boundary-error/package-descriptor.json +0 -10
  497. package/skills/uipath-maestro-bpmn/fixtures/validation/gateway-boundary-error/project.uiproj +0 -7
  498. package/skills/uipath-maestro-bpmn/fixtures/validation/imported-brownfield-preservation/bindings_v2.json +0 -4
  499. package/skills/uipath-maestro-bpmn/fixtures/validation/imported-brownfield-preservation/entry-points.json +0 -25
  500. package/skills/uipath-maestro-bpmn/fixtures/validation/imported-brownfield-preservation/imported-brownfield-preservation.bpmn +0 -63
  501. package/skills/uipath-maestro-bpmn/fixtures/validation/imported-brownfield-preservation/operate.json +0 -9
  502. package/skills/uipath-maestro-bpmn/fixtures/validation/imported-brownfield-preservation/package-descriptor.json +0 -10
  503. package/skills/uipath-maestro-bpmn/fixtures/validation/imported-brownfield-preservation/project.uiproj +0 -7
  504. package/skills/uipath-maestro-bpmn/fixtures/validation/integration-service-enriched/bindings_v2.json +0 -52
  505. package/skills/uipath-maestro-bpmn/fixtures/validation/integration-service-enriched/entry-points.json +0 -21
  506. package/skills/uipath-maestro-bpmn/fixtures/validation/integration-service-enriched/integration-service-enriched.bpmn +0 -65
  507. package/skills/uipath-maestro-bpmn/fixtures/validation/integration-service-enriched/operate.json +0 -9
  508. package/skills/uipath-maestro-bpmn/fixtures/validation/integration-service-enriched/package-descriptor.json +0 -10
  509. package/skills/uipath-maestro-bpmn/fixtures/validation/integration-service-enriched/project.uiproj +0 -7
  510. package/skills/uipath-maestro-bpmn/fixtures/validation/linear-process/bindings_v2.json +0 -4
  511. package/skills/uipath-maestro-bpmn/fixtures/validation/linear-process/entry-points.json +0 -25
  512. package/skills/uipath-maestro-bpmn/fixtures/validation/linear-process/linear-process.bpmn +0 -55
  513. package/skills/uipath-maestro-bpmn/fixtures/validation/linear-process/operate.json +0 -9
  514. package/skills/uipath-maestro-bpmn/fixtures/validation/linear-process/package-descriptor.json +0 -10
  515. package/skills/uipath-maestro-bpmn/fixtures/validation/linear-process/project.uiproj +0 -7
  516. package/skills/uipath-maestro-bpmn/fixtures/validation/registry-coverage-matrix/bindings_v2.json +0 -20
  517. package/skills/uipath-maestro-bpmn/fixtures/validation/registry-coverage-matrix/entry-points.json +0 -17
  518. package/skills/uipath-maestro-bpmn/fixtures/validation/registry-coverage-matrix/operate.json +0 -9
  519. package/skills/uipath-maestro-bpmn/fixtures/validation/registry-coverage-matrix/package-descriptor.json +0 -10
  520. package/skills/uipath-maestro-bpmn/fixtures/validation/registry-coverage-matrix/project.uiproj +0 -7
  521. package/skills/uipath-maestro-bpmn/fixtures/validation/registry-coverage-matrix/registry-coverage-matrix.bpmn +0 -207
  522. package/skills/uipath-maestro-bpmn/fixtures/validation/subprocess-multi-instance/bindings_v2.json +0 -4
  523. package/skills/uipath-maestro-bpmn/fixtures/validation/subprocess-multi-instance/entry-points.json +0 -33
  524. package/skills/uipath-maestro-bpmn/fixtures/validation/subprocess-multi-instance/operate.json +0 -9
  525. package/skills/uipath-maestro-bpmn/fixtures/validation/subprocess-multi-instance/package-descriptor.json +0 -10
  526. package/skills/uipath-maestro-bpmn/fixtures/validation/subprocess-multi-instance/project.uiproj +0 -7
  527. package/skills/uipath-maestro-bpmn/fixtures/validation/subprocess-multi-instance/subprocess-multi-instance.bpmn +0 -94
  528. package/skills/uipath-maestro-bpmn/fixtures/validation/wrapper-family-contract/bindings_v2.json +0 -124
  529. package/skills/uipath-maestro-bpmn/fixtures/validation/wrapper-family-contract/entry-points.json +0 -25
  530. package/skills/uipath-maestro-bpmn/fixtures/validation/wrapper-family-contract/operate.json +0 -9
  531. package/skills/uipath-maestro-bpmn/fixtures/validation/wrapper-family-contract/package-descriptor.json +0 -10
  532. package/skills/uipath-maestro-bpmn/fixtures/validation/wrapper-family-contract/project.uiproj +0 -7
  533. package/skills/uipath-maestro-bpmn/fixtures/validation/wrapper-family-contract/wrapper-family-contract.bpmn +0 -151
  534. package/skills/uipath-maestro-bpmn/references/author/CAPABILITY.md +0 -141
  535. package/skills/uipath-maestro-bpmn/references/author/references/brownfield.md +0 -48
  536. package/skills/uipath-maestro-bpmn/references/author/references/editing-operations.md +0 -75
  537. package/skills/uipath-maestro-bpmn/references/author/references/greenfield.md +0 -41
  538. package/skills/uipath-maestro-bpmn/references/author/references/planning-arch.md +0 -82
  539. package/skills/uipath-maestro-bpmn/references/author/references/planning-impl.md +0 -104
  540. package/skills/uipath-maestro-bpmn/references/author/references/plugins/agents/impl.md +0 -34
  541. package/skills/uipath-maestro-bpmn/references/author/references/plugins/agents/planning.md +0 -38
  542. package/skills/uipath-maestro-bpmn/references/author/references/plugins/api-workflows/impl.md +0 -37
  543. package/skills/uipath-maestro-bpmn/references/author/references/plugins/api-workflows/planning.md +0 -28
  544. package/skills/uipath-maestro-bpmn/references/author/references/plugins/business-rules/impl.md +0 -36
  545. package/skills/uipath-maestro-bpmn/references/author/references/plugins/business-rules/planning.md +0 -29
  546. package/skills/uipath-maestro-bpmn/references/author/references/plugins/call-activity-subprocess/impl.md +0 -67
  547. package/skills/uipath-maestro-bpmn/references/author/references/plugins/call-activity-subprocess/planning.md +0 -29
  548. package/skills/uipath-maestro-bpmn/references/author/references/plugins/connectors/impl.md +0 -29
  549. package/skills/uipath-maestro-bpmn/references/author/references/plugins/connectors/planning.md +0 -33
  550. package/skills/uipath-maestro-bpmn/references/author/references/plugins/gateways/impl.md +0 -32
  551. package/skills/uipath-maestro-bpmn/references/author/references/plugins/gateways/planning.md +0 -34
  552. package/skills/uipath-maestro-bpmn/references/author/references/plugins/hitl/impl.md +0 -42
  553. package/skills/uipath-maestro-bpmn/references/author/references/plugins/hitl/planning.md +0 -30
  554. package/skills/uipath-maestro-bpmn/references/author/references/plugins/integration-service/impl.md +0 -134
  555. package/skills/uipath-maestro-bpmn/references/author/references/plugins/integration-service/planning.md +0 -67
  556. package/skills/uipath-maestro-bpmn/references/author/references/plugins/multi-instance/impl.md +0 -50
  557. package/skills/uipath-maestro-bpmn/references/author/references/plugins/multi-instance/planning.md +0 -29
  558. package/skills/uipath-maestro-bpmn/references/author/references/plugins/queues/impl.md +0 -29
  559. package/skills/uipath-maestro-bpmn/references/author/references/plugins/queues/planning.md +0 -29
  560. package/skills/uipath-maestro-bpmn/references/author/references/plugins/rpa-jobs/impl.md +0 -35
  561. package/skills/uipath-maestro-bpmn/references/author/references/plugins/rpa-jobs/planning.md +0 -29
  562. package/skills/uipath-maestro-bpmn/references/author/references/plugins/script/impl.md +0 -118
  563. package/skills/uipath-maestro-bpmn/references/author/references/plugins/script/planning.md +0 -30
  564. package/skills/uipath-maestro-bpmn/references/author/references/plugins/sequence-flows/impl.md +0 -30
  565. package/skills/uipath-maestro-bpmn/references/author/references/plugins/sequence-flows/planning.md +0 -30
  566. package/skills/uipath-maestro-bpmn/references/author/references/plugins/service-tasks/impl.md +0 -33
  567. package/skills/uipath-maestro-bpmn/references/author/references/plugins/service-tasks/planning.md +0 -31
  568. package/skills/uipath-maestro-bpmn/references/author/references/plugins/signals/impl.md +0 -33
  569. package/skills/uipath-maestro-bpmn/references/author/references/plugins/signals/planning.md +0 -46
  570. package/skills/uipath-maestro-bpmn/references/author/references/plugins/start-end-events/impl.md +0 -59
  571. package/skills/uipath-maestro-bpmn/references/author/references/plugins/start-end-events/planning.md +0 -37
  572. package/skills/uipath-maestro-bpmn/references/author/references/plugins/waits-triggers/impl.md +0 -40
  573. package/skills/uipath-maestro-bpmn/references/author/references/plugins/waits-triggers/planning.md +0 -34
  574. package/skills/uipath-maestro-bpmn/references/author/references/supported-elements.md +0 -123
  575. package/skills/uipath-maestro-bpmn/references/author/references/task-recipes/README.md +0 -29
  576. package/skills/uipath-maestro-bpmn/references/author/references/task-recipes/agent-job.md +0 -36
  577. package/skills/uipath-maestro-bpmn/references/author/references/task-recipes/api-workflow.md +0 -29
  578. package/skills/uipath-maestro-bpmn/references/author/references/task-recipes/business-rule.md +0 -18
  579. package/skills/uipath-maestro-bpmn/references/author/references/task-recipes/call-activity.md +0 -56
  580. package/skills/uipath-maestro-bpmn/references/author/references/task-recipes/hitl.md +0 -17
  581. package/skills/uipath-maestro-bpmn/references/author/references/task-recipes/http-request.md +0 -119
  582. package/skills/uipath-maestro-bpmn/references/author/references/task-recipes/queue.md +0 -21
  583. package/skills/uipath-maestro-bpmn/references/author/references/task-recipes/rpa-job.md +0 -23
  584. package/skills/uipath-maestro-bpmn/references/author/references/validation.md +0 -118
  585. package/skills/uipath-maestro-bpmn/references/shared/bpmn-xml-contract.md +0 -197
  586. package/skills/uipath-maestro-bpmn/references/shared/cli-conventions.md +0 -46
  587. package/skills/uipath-maestro-bpmn/references/shared/error-handling.md +0 -82
  588. package/skills/uipath-maestro-bpmn/references/shared/variables-bindings-expressions.md +0 -150
  589. package/skills/uipath-maestro-bpmn/references/shared/wrapper-shells.md +0 -554
  590. /package/skills/uipath-maestro-bpmn/references/{shared/expression-authoring.md → expression-authoring.md} +0 -0
  591. /package/skills/uipath-maestro-bpmn/references/{shared/public-safety.md → public-safety.md} +0 -0
  592. /package/{agents → skills/uipath-rpa/agents}/uipath-project-discovery-agent.md +0 -0
@@ -1,1255 +0,0 @@
1
- #!/usr/bin/env python3
2
- """Validate the synthetic Maestro BPMN fixture corpus.
3
-
4
- The checker intentionally stays dependency-free so contributors and CI can run
5
- it without access to PO.FrontEnd or private exported BPMN. It validates the
6
- public contract shape these fixtures are meant to preserve.
7
- """
8
-
9
- from __future__ import annotations
10
-
11
- import json
12
- import re
13
- import shutil
14
- import sys
15
- import tempfile
16
- import xml.etree.ElementTree as ET
17
- from pathlib import Path
18
-
19
- ROOT = Path(__file__).resolve().parents[1]
20
- FIXTURES = ROOT / "fixtures" / "validation"
21
- BPMN_NS = "http://www.omg.org/spec/BPMN/20100524/MODEL"
22
- BPMNDI_NS = "http://www.omg.org/spec/BPMN/20100524/DI"
23
- DI_NS = "http://www.omg.org/spec/DD/20100524/DI"
24
- UIPATH_NS = "http://uipath.org/schema/bpmn"
25
-
26
- NODE_TYPES = {
27
- "startEvent",
28
- "endEvent",
29
- "intermediateCatchEvent",
30
- "intermediateThrowEvent",
31
- "boundaryEvent",
32
- "task",
33
- "serviceTask",
34
- "sendTask",
35
- "receiveTask",
36
- "userTask",
37
- "manualTask",
38
- "businessRuleTask",
39
- "scriptTask",
40
- "callActivity",
41
- "subProcess",
42
- "adHocSubProcess",
43
- "exclusiveGateway",
44
- "inclusiveGateway",
45
- "parallelGateway",
46
- "eventBasedGateway",
47
- "complexGateway",
48
- }
49
-
50
- GENERATION_EXCLUDED_BPMN_TAGS = {
51
- "adHocSubProcess",
52
- "cancelEventDefinition",
53
- "compensateEventDefinition",
54
- "complexGateway",
55
- "conditionalEventDefinition",
56
- "escalationEventDefinition",
57
- "linkEventDefinition",
58
- "manualTask",
59
- "multipleEventDefinition",
60
- "parallelMultipleEventDefinition",
61
- "signalEventDefinition",
62
- "transaction",
63
- }
64
-
65
- ALLOWED_RETRY_ATTRS = {
66
- "version",
67
- "maxRetryCount",
68
- "retryBackoff",
69
- "retryAllErrors",
70
- "retryBackoffType",
71
- "maxDuration",
72
- "exponentialBase",
73
- }
74
-
75
- ALLOWED_ERROR_MAPPING_ATTRS = {"version"}
76
- ALLOWED_ERROR_ATTRS = {"id", "errorRef", "priority", "condition", "detail", "retryable"}
77
- SPECIAL_RUNTIME_VARS = {"error"}
78
-
79
- ALLOWED_URLS = (
80
- "http://www.omg.org/spec/BPMN/20100524/MODEL",
81
- "http://www.omg.org/spec/BPMN/20100524/DI",
82
- "http://www.omg.org/spec/DD/20100524/DC",
83
- "http://www.omg.org/spec/DD/20100524/DI",
84
- "http://www.w3.org/2001/XMLSchema-instance",
85
- "http://uipath.org/schema/bpmn",
86
- "http://uipath.com/synthetic/maestro-bpmn/",
87
- )
88
-
89
- SERVICE_TYPE_WRAPPERS = {
90
- "A2A.AgentExecution": {"wrapper": {"serviceTask"}, "extension": "activity"},
91
- "Orchestrator.ExecuteApiWorkflowAsync": {
92
- "wrapper": {"serviceTask"},
93
- "extension": "activity",
94
- },
95
- "Orchestrator.BusinessRules": {
96
- "wrapper": {"businessRuleTask"},
97
- "extension": "activity",
98
- },
99
- "Orchestrator.CreateAndWaitForQueueItem": {
100
- "wrapper": {"serviceTask"},
101
- "extension": "activity",
102
- },
103
- "Orchestrator.StartCaseMgmtProcess": {
104
- "wrapper": {"callActivity"},
105
- "extension": "activity",
106
- },
107
- "Orchestrator.StartCaseMgmtProcessAsync": {
108
- "wrapper": {"callActivity"},
109
- "extension": "activity",
110
- },
111
- "Intsvc.WaitForEvent": {
112
- "wrapper": {"receiveTask", "intermediateCatchEvent", "boundaryEvent"},
113
- "extension": "event",
114
- },
115
- }
116
-
117
-
118
- def local(tag: str) -> str:
119
- return tag.rsplit("}", 1)[-1] if "}" in tag else tag
120
-
121
-
122
- def ns(tag: str) -> str:
123
- if tag.startswith("{"):
124
- return tag[1:].split("}", 1)[0]
125
- return ""
126
-
127
-
128
- def build_parent_map(root: ET.Element) -> dict[int, ET.Element]:
129
- parents: dict[int, ET.Element] = {}
130
- for parent in root.iter():
131
- for child in parent:
132
- parents[id(child)] = parent
133
- return parents
134
-
135
-
136
- class Validator:
137
- def __init__(self) -> None:
138
- self.errors: list[str] = []
139
- self.projects = 0
140
- self.bpmn_files = 0
141
- self.contract_hits: set[str] = set()
142
-
143
- def error(self, path: Path, message: str) -> None:
144
- self.errors.append(f"{path.relative_to(ROOT)}: {message}")
145
-
146
- def validate(self) -> int:
147
- if not FIXTURES.is_dir():
148
- print(f"ERROR: fixtures directory not found: {FIXTURES}", file=sys.stderr)
149
- return 2
150
-
151
- for project in sorted(p for p in FIXTURES.iterdir() if p.is_dir()):
152
- self.projects += 1
153
- self.validate_project(project)
154
-
155
- self.validate_contract_coverage()
156
- regression_errors = self.validate_regressions()
157
- self.errors.extend(regression_errors)
158
-
159
- for err in self.errors:
160
- print(f"ERROR: {err}")
161
- print(
162
- f"validation_fixture_projects={self.projects} "
163
- f"bpmn_files={self.bpmn_files} errors={len(self.errors)}"
164
- )
165
- return 1 if self.errors else 0
166
-
167
- def validate_project(self, project: Path) -> None:
168
- expected = [
169
- "project.uiproj",
170
- "bindings_v2.json",
171
- "entry-points.json",
172
- "operate.json",
173
- "package-descriptor.json",
174
- ]
175
- for name in expected:
176
- if not (project / name).is_file():
177
- self.error(project, f"missing {name}")
178
-
179
- bpmn_files = sorted(project.glob("*.bpmn"))
180
- if len(bpmn_files) != 1:
181
- self.error(project, f"expected exactly one .bpmn file, found {len(bpmn_files)}")
182
- return
183
-
184
- bpmn = bpmn_files[0]
185
- self.bpmn_files += 1
186
- text = bpmn.read_text(encoding="utf-8")
187
- self.validate_public_safety(bpmn, text)
188
-
189
- try:
190
- tree = ET.parse(bpmn)
191
- except ET.ParseError as exc:
192
- self.error(bpmn, f"XML parse failed: {exc}")
193
- return
194
-
195
- root = tree.getroot()
196
- self.validate_bpmn_document(bpmn, root)
197
- self.validate_package_files(project, bpmn.name, root)
198
-
199
- def validate_regressions(self) -> list[str]:
200
- errors: list[str] = []
201
- errors.extend(self.validate_gateway_misnamed_repro())
202
- errors.extend(self.validate_bindings_version_repro())
203
- errors.extend(self.validate_script_result_response_repro())
204
- return errors
205
-
206
- def validate_gateway_misnamed_repro(self) -> list[str]:
207
- """Assert single-BPMN package metadata fails when the BPMN basename drifts."""
208
-
209
- fixture = FIXTURES / "gateway-boundary-error"
210
- if not fixture.is_dir():
211
- return [
212
- "regression gateway-misnamed-repro: "
213
- "source fixture gateway-boundary-error is missing"
214
- ]
215
-
216
- with tempfile.TemporaryDirectory(prefix="gateway-misnamed-repro-", dir=ROOT) as tmp:
217
- project = Path(tmp) / "gateway-boundary-error"
218
- shutil.copytree(fixture, project)
219
- original_bpmn = project / "gateway-boundary-error.bpmn"
220
- renamed_bpmn = project / "gateway-misnamed-repro.bpmn"
221
- original_bpmn.rename(renamed_bpmn)
222
-
223
- regression = Validator()
224
- regression.validate_project(project)
225
- basename_errors = [
226
- err
227
- for err in regression.errors
228
- if "main basename does not match single BPMN file basename" in err
229
- ]
230
- if basename_errors:
231
- return []
232
-
233
- details = "; ".join(regression.errors) or "no validation error"
234
- return [
235
- "regression gateway-misnamed-repro failed: expected basename validation "
236
- "error for a copied project whose single BPMN file no longer matches "
237
- "the project directory name; "
238
- f"observed: {details}"
239
- ]
240
-
241
- def validate_bindings_version_repro(self) -> list[str]:
242
- """Assert bindings_v2.json without version is rejected."""
243
-
244
- fixture = FIXTURES / "linear-process"
245
- if not fixture.is_dir():
246
- return [
247
- "regression bindings-version-repro: "
248
- "source fixture linear-process is missing"
249
- ]
250
-
251
- with tempfile.TemporaryDirectory(prefix="bindings-version-repro-", dir=ROOT) as tmp:
252
- project = Path(tmp) / "linear-process"
253
- shutil.copytree(fixture, project)
254
- bindings_path = project / "bindings_v2.json"
255
- data = json.loads(bindings_path.read_text(encoding="utf-8"))
256
- data.pop("version", None)
257
- bindings_path.write_text(json.dumps(data, indent=2) + "\n", encoding="utf-8")
258
-
259
- regression = Validator()
260
- regression.validate_project(project)
261
- if any("version must be 2.0" in err for err in regression.errors):
262
- return []
263
-
264
- details = "; ".join(regression.errors) or "no validation error"
265
- return [
266
- "regression bindings-version-repro failed: expected bindings_v2.json "
267
- f"version validation error; observed: {details}"
268
- ]
269
-
270
- def validate_script_result_response_repro(self) -> list[str]:
271
- """Assert script output mappings cannot read result fields above response."""
272
-
273
- fixture = FIXTURES / "subprocess-multi-instance"
274
- if not fixture.is_dir():
275
- return [
276
- "regression script-result-response-repro: "
277
- "source fixture subprocess-multi-instance is missing"
278
- ]
279
-
280
- with tempfile.TemporaryDirectory(prefix="script-result-response-repro-", dir=ROOT) as tmp:
281
- project = Path(tmp) / "subprocess-multi-instance"
282
- shutil.copytree(fixture, project)
283
- bpmn = project / "subprocess-multi-instance.bpmn"
284
- text = bpmn.read_text(encoding="utf-8")
285
- text = text.replace('source="=result.response"', 'source="=result.outcome"', 1)
286
- bpmn.write_text(text, encoding="utf-8")
287
-
288
- regression = Validator()
289
- regression.validate_project(project)
290
- expected = "BPMN.ScriptTask output source must read result.response"
291
- if any(expected in err for err in regression.errors):
292
- return []
293
-
294
- details = "; ".join(regression.errors) or "no validation error"
295
- return [
296
- "regression script-result-response-repro failed: expected script output "
297
- f"result.response validation error; observed: {details}"
298
- ]
299
-
300
- def validate_public_safety(self, path: Path, text: str) -> None:
301
- patterns = {
302
- "email address": r"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}",
303
- "local absolute path": r"(/Users/|/home/|C:\\\\Users\\\\)",
304
- "guid-like identifier": r"\b[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\b",
305
- }
306
- for label, pattern in patterns.items():
307
- if re.search(pattern, text):
308
- self.error(path, f"contains {label}")
309
-
310
- for match in re.finditer(r"https?://[^\s\"'>]+", text):
311
- url = match.group(0)
312
- if not any(url.startswith(allowed) for allowed in ALLOWED_URLS):
313
- self.error(path, f"contains non-allowlisted URL {url}")
314
-
315
- def validate_bpmn_document(self, path: Path, root: ET.Element) -> None:
316
- if local(root.tag) != "definitions" or ns(root.tag) != BPMN_NS:
317
- self.error(path, "root element is not bpmn:definitions")
318
-
319
- if (
320
- root.attrib.get("targetNamespace", "").startswith("http://uipath.com/synthetic/")
321
- is False
322
- ):
323
- self.error(path, "targetNamespace must be synthetic")
324
-
325
- elements_by_id = {
326
- elem.attrib["id"]: elem
327
- for elem in root.iter()
328
- if "id" in elem.attrib
329
- and ns(elem.tag) in {BPMN_NS, BPMNDI_NS}
330
- and local(elem.tag) != "BPMNShape"
331
- and local(elem.tag) != "BPMNEdge"
332
- }
333
-
334
- processes = root.findall(f"{{{BPMN_NS}}}process")
335
- executable = [p for p in processes if p.attrib.get("isExecutable") == "true"]
336
- if len(executable) != 1:
337
- self.error(path, f"expected one executable process, found {len(executable)}")
338
- return
339
- process = executable[0]
340
-
341
- bindings = self.collect_root_bindings(process)
342
- variables = self.collect_variables(process)
343
- self.validate_diagram(path, root, elements_by_id)
344
- self.validate_sequence_flows(path, root, elements_by_id)
345
- self.validate_start_events(path, process)
346
- self.validate_entry_points(path, process)
347
- self.validate_gateway_conditions(path, root, bindings, variables)
348
- self.validate_generation_exclusions(path, root)
349
- self.validate_error_events(path, root, elements_by_id)
350
- self.validate_error_handling(path, root, elements_by_id, bindings, variables)
351
- self.validate_message_events(path, root, elements_by_id)
352
- self.validate_multi_instance(path, root, variables)
353
- self.validate_uipath_extensions(path, root, bindings, variables)
354
- self.record_contract_coverage(root)
355
-
356
- def validate_generation_exclusions(self, path: Path, root: ET.Element) -> None:
357
- for elem in root.iter():
358
- if ns(elem.tag) != BPMN_NS:
359
- continue
360
- kind = local(elem.tag)
361
- if kind in GENERATION_EXCLUDED_BPMN_TAGS:
362
- self.error(path, f"uses generation-excluded BPMN tag {kind}")
363
-
364
- for loop in root.findall(f".//{{{BPMN_NS}}}standardLoopCharacteristics"):
365
- self.error(
366
- path,
367
- f"uses generation-excluded BPMN tag {local(loop.tag)}",
368
- )
369
-
370
- def record_contract_coverage(self, root: ET.Element) -> None:
371
- for version in root.findall(f".//{{{UIPATH_NS}}}migrationVersion"):
372
- value = version.attrib.get("version")
373
- if value:
374
- self.contract_hits.add(f"migration:{value}")
375
-
376
- for script_version in root.findall(f".//{{{UIPATH_NS}}}scriptVersion"):
377
- value = script_version.attrib.get("value")
378
- if value:
379
- self.contract_hits.add(f"scriptVersion:{value}")
380
-
381
- if root.findall(f".//{{{UIPATH_NS}}}caseManagement"):
382
- self.contract_hits.add("preserve:caseManagement")
383
- if root.findall(f".//{{{UIPATH_NS}}}Activity"):
384
- self.contract_hits.add("preserve:generic-uipath-Activity")
385
-
386
- for bpmn_elem in root.iter():
387
- if ns(bpmn_elem.tag) != BPMN_NS:
388
- continue
389
- wrapper = local(bpmn_elem.tag)
390
- extension = bpmn_elem.find(f"{{{BPMN_NS}}}extensionElements")
391
- if extension is None:
392
- continue
393
- for extension_kind in ("activity", "event"):
394
- for payload in extension.findall(f"{{{UIPATH_NS}}}{extension_kind}"):
395
- type_elem = payload.find(f"{{{UIPATH_NS}}}type")
396
- if type_elem is None:
397
- continue
398
- service_type = type_elem.attrib.get("value")
399
- if service_type:
400
- self.contract_hits.add(f"{wrapper}:{service_type}")
401
-
402
- def validate_contract_coverage(self) -> None:
403
- # Public-safe XML shells from the current registry surface plus
404
- # preserve-only imported payloads. CLI-owned Intsvc.* entries are
405
- # represented with synthetic binding shells only; connector-specific
406
- # schemas and generated package resources remain outside this fixture.
407
- expected = {
408
- "userTask:Actions.HITL",
409
- "serviceTask:Orchestrator.StartJob",
410
- "serviceTask:Orchestrator.StartAgentJob",
411
- "serviceTask:A2A.AgentExecution",
412
- "serviceTask:Orchestrator.ExecuteApiWorkflowAsync",
413
- "businessRuleTask:Orchestrator.BusinessRules",
414
- "sendTask:Orchestrator.CreateQueueItem",
415
- "serviceTask:Orchestrator.CreateAndWaitForQueueItem",
416
- "callActivity:Orchestrator.StartAgenticProcess",
417
- "callActivity:Orchestrator.StartAgenticProcessAsync",
418
- "callActivity:Orchestrator.StartCaseMgmtProcess",
419
- "callActivity:Orchestrator.StartCaseMgmtProcessAsync",
420
- "intermediateThrowEvent:Maestro.SendMessageEvent",
421
- "serviceTask:Maestro.CasePlanScheduler",
422
- "serviceTask:Maestro.CaseManagerGuardrails",
423
- "serviceTask:Maestro.CaseRulesEvaluator",
424
- "receiveTask:Intsvc.WaitForEvent",
425
- "startEvent:Intsvc.EventTrigger",
426
- "serviceTask:Intsvc.ActivityExecution",
427
- "serviceTask:Intsvc.AsyncExecution",
428
- "serviceTask:Intsvc.SyncAgentExecution",
429
- "serviceTask:Intsvc.AsyncAgentExecution",
430
- "serviceTask:Intsvc.SyncWorkflowExecution",
431
- "serviceTask:Intsvc.AsyncWorkflowExecution",
432
- "sendTask:Intsvc.HttpExecution",
433
- "sendTask:Intsvc.UnifiedHttpRequest",
434
- "startEvent:Intsvc.TimerTrigger",
435
- "preserve:caseManagement",
436
- "preserve:generic-uipath-Activity",
437
- "migration:5",
438
- "migration:11",
439
- "migration:11.5",
440
- "scriptVersion:v2",
441
- "scriptVersion:v3",
442
- }
443
- missing = sorted(expected - self.contract_hits)
444
- if missing:
445
- self.errors.append(
446
- "fixtures/validation: missing XML contract coverage for " + ", ".join(missing)
447
- )
448
-
449
- def collect_root_bindings(self, process: ET.Element) -> dict[str, ET.Element]:
450
- result: dict[str, ET.Element] = {}
451
- for binding in process.findall(
452
- f"./{{{BPMN_NS}}}extensionElements/{{{UIPATH_NS}}}bindings/{{{UIPATH_NS}}}binding"
453
- ):
454
- result[binding.attrib["id"]] = binding
455
- return result
456
-
457
- def collect_variables(self, root: ET.Element) -> dict[str, set[str]]:
458
- variables: dict[str, set[str]] = {
459
- "root": set(),
460
- "all": set(),
461
- "writable": set(),
462
- "names": set(),
463
- }
464
- root_variables = root.find(
465
- f"./{{{BPMN_NS}}}extensionElements/{{{UIPATH_NS}}}variables"
466
- )
467
- for vars_elem in root.findall(f".//{{{UIPATH_NS}}}variables"):
468
- for child in list(vars_elem):
469
- var_id = child.attrib.get("id")
470
- if child.attrib.get("name"):
471
- variables["names"].add(child.attrib["name"])
472
- if var_id:
473
- variables["all"].add(var_id)
474
- if vars_elem is root_variables:
475
- variables["root"].add(var_id)
476
- if local(child.tag) in {"inputOutput", "output"}:
477
- variables["writable"].add(var_id)
478
- return variables
479
-
480
- def validate_diagram(
481
- self, path: Path, root: ET.Element, elements_by_id: dict[str, ET.Element]
482
- ) -> None:
483
- planes = root.findall(f".//{{{BPMNDI_NS}}}BPMNPlane")
484
- if not planes:
485
- self.error(path, "missing BPMNPlane")
486
- return
487
- for plane in planes:
488
- ref = plane.attrib.get("bpmnElement")
489
- if ref not in elements_by_id:
490
- self.error(path, f"BPMNPlane references missing element {ref}")
491
-
492
- shape_refs = {
493
- shape.attrib.get("bpmnElement")
494
- for shape in root.findall(f".//{{{BPMNDI_NS}}}BPMNShape")
495
- }
496
- edge_refs = {
497
- edge.attrib.get("bpmnElement") for edge in root.findall(f".//{{{BPMNDI_NS}}}BPMNEdge")
498
- }
499
-
500
- for elem_id, elem in elements_by_id.items():
501
- kind = local(elem.tag)
502
- if kind in NODE_TYPES and elem_id not in shape_refs:
503
- self.error(path, f"missing BPMNShape for {elem_id}")
504
- if kind == "sequenceFlow" and elem_id not in edge_refs:
505
- self.error(path, f"missing BPMNEdge for {elem_id}")
506
-
507
- for edge in root.findall(f".//{{{BPMNDI_NS}}}BPMNEdge"):
508
- if len(edge.findall(f"{{{DI_NS}}}waypoint")) < 2:
509
- self.error(path, f"BPMNEdge {edge.attrib.get('id')} has fewer than two waypoints")
510
-
511
- def validate_sequence_flows(
512
- self, path: Path, root: ET.Element, elements_by_id: dict[str, ET.Element]
513
- ) -> None:
514
- for flow in root.findall(f".//{{{BPMN_NS}}}sequenceFlow"):
515
- source = elements_by_id.get(flow.attrib.get("sourceRef", ""))
516
- target = elements_by_id.get(flow.attrib.get("targetRef", ""))
517
- if source is None or target is None:
518
- self.error(
519
- path, f"sequenceFlow {flow.attrib.get('id')} has missing source or target"
520
- )
521
- continue
522
- if local(source.tag) == "endEvent":
523
- self.error(path, f"sequenceFlow {flow.attrib.get('id')} starts at an end event")
524
- if local(target.tag) == "startEvent":
525
- self.error(path, f"sequenceFlow {flow.attrib.get('id')} targets a start event")
526
-
527
- def validate_start_events(self, path: Path, process: ET.Element) -> None:
528
- scopes = [process] + process.findall(f".//{{{BPMN_NS}}}subProcess")
529
- for scope in scopes:
530
- starts = [c for c in list(scope) if local(c.tag) == "startEvent"]
531
- blank = [
532
- s
533
- for s in starts
534
- if not any(local(c.tag).endswith("EventDefinition") for c in list(s))
535
- ]
536
- if len(blank) > 1:
537
- self.error(path, f"scope {scope.attrib.get('id')} has multiple blank start events")
538
- if scope.attrib.get("triggeredByEvent") == "true" and len(starts) != 1:
539
- self.error(
540
- path,
541
- f"event subprocess {scope.attrib.get('id')} must have exactly one start event",
542
- )
543
-
544
- def validate_entry_points(self, path: Path, process: ET.Element) -> None:
545
- entry_ids: dict[str, str] = {}
546
- root_starts = [c for c in list(process) if local(c.tag) == "startEvent"]
547
- for start in root_starts:
548
- ep = start.find(f"./{{{BPMN_NS}}}extensionElements/{{{UIPATH_NS}}}entryPointId")
549
- if ep is None:
550
- continue
551
- value = ep.attrib.get("value")
552
- if not value:
553
- self.error(path, f"start event {start.attrib.get('id')} has empty entryPointId")
554
- elif value in entry_ids:
555
- self.error(path, f"duplicate entryPointId {value}")
556
- else:
557
- entry_ids[value] = start.attrib["id"]
558
-
559
- for var in process.findall(
560
- f"./{{{BPMN_NS}}}extensionElements/{{{UIPATH_NS}}}variables/{{{UIPATH_NS}}}input"
561
- ):
562
- element_id = var.attrib.get("elementId")
563
- if element_id and element_id not in {s.attrib["id"] for s in root_starts}:
564
- self.error(
565
- path,
566
- f"entry input variable {var.attrib.get('name')} references non-root start {element_id}",
567
- )
568
-
569
- def validate_gateway_conditions(
570
- self,
571
- path: Path,
572
- root: ET.Element,
573
- bindings: dict[str, ET.Element],
574
- variables: dict[str, set[str]],
575
- ) -> None:
576
- for gateway in root.findall(f".//{{{BPMN_NS}}}exclusiveGateway"):
577
- outgoing = [
578
- child.text for child in gateway.findall(f"{{{BPMN_NS}}}outgoing") if child.text
579
- ]
580
- if len(outgoing) < 2:
581
- continue
582
- default = gateway.attrib.get("default")
583
- if default and default not in outgoing:
584
- self.error(
585
- path, f"exclusiveGateway {gateway.attrib.get('id')} default is not outgoing"
586
- )
587
- for flow_id in outgoing:
588
- if flow_id == default:
589
- continue
590
- flow = root.find(f".//{{{BPMN_NS}}}sequenceFlow[@id='{flow_id}']")
591
- if flow is not None and flow.find(f"{{{BPMN_NS}}}conditionExpression") is None:
592
- self.error(path, f"gateway flow {flow_id} is missing conditionExpression")
593
- elif flow is not None:
594
- condition = flow.find(f"{{{BPMN_NS}}}conditionExpression")
595
- if condition is not None:
596
- self.validate_expression_value(
597
- path,
598
- condition.text or "",
599
- bindings,
600
- variables,
601
- f"conditionExpression {flow_id}",
602
- )
603
-
604
- def validate_error_events(
605
- self, path: Path, root: ET.Element, elements_by_id: dict[str, ET.Element]
606
- ) -> None:
607
- for event_def in root.findall(f".//{{{BPMN_NS}}}errorEventDefinition"):
608
- ref = event_def.attrib.get("errorRef")
609
- if ref and ref not in elements_by_id:
610
- self.error(path, f"errorEventDefinition references missing error {ref}")
611
-
612
- for boundary in root.findall(f".//{{{BPMN_NS}}}boundaryEvent"):
613
- attached = boundary.attrib.get("attachedToRef")
614
- if attached not in elements_by_id:
615
- self.error(
616
- path,
617
- f"boundaryEvent {boundary.attrib.get('id')} references missing activity {attached}",
618
- )
619
-
620
- def validate_error_handling(
621
- self,
622
- path: Path,
623
- root: ET.Element,
624
- elements_by_id: dict[str, ET.Element],
625
- bindings: dict[str, ET.Element],
626
- variables: dict[str, set[str]],
627
- ) -> None:
628
- for retry in root.findall(f".//{{{UIPATH_NS}}}retry"):
629
- for attr in retry.attrib:
630
- if attr not in ALLOWED_RETRY_ATTRS:
631
- self.error(path, f"uipath:retry uses unsupported attribute {attr}")
632
-
633
- max_retry = retry.attrib.get("maxRetryCount")
634
- if max_retry and not max_retry.isdigit():
635
- self.error(path, "uipath:retry maxRetryCount must be an integer")
636
-
637
- retry_all = retry.attrib.get("retryAllErrors")
638
- if retry_all and retry_all not in {"true", "false"}:
639
- self.error(path, "uipath:retry retryAllErrors must be true or false")
640
-
641
- for error_def in retry.findall(f"{{{UIPATH_NS}}}errorDefinition"):
642
- ref = error_def.attrib.get("errorRef")
643
- if ref and ref not in elements_by_id:
644
- self.error(path, f"uipath:retry errorDefinition references missing error {ref}")
645
-
646
- for mapping in root.findall(f".//{{{UIPATH_NS}}}errorMapping"):
647
- for attr in mapping.attrib:
648
- if attr not in ALLOWED_ERROR_MAPPING_ATTRS:
649
- self.error(path, f"uipath:errorMapping uses unsupported attribute {attr}")
650
-
651
- for error in mapping.findall(f"{{{UIPATH_NS}}}error"):
652
- for attr in error.attrib:
653
- if attr not in ALLOWED_ERROR_ATTRS:
654
- self.error(
655
- path,
656
- f"uipath:errorMapping error uses unsupported attribute {attr}",
657
- )
658
-
659
- ref = error.attrib.get("errorRef")
660
- if ref and ref not in elements_by_id:
661
- self.error(path, f"uipath:errorMapping references missing error {ref}")
662
-
663
- priority = error.attrib.get("priority")
664
- if priority is not None and not priority.isdigit():
665
- self.error(path, "uipath:errorMapping priority must be an integer")
666
-
667
- retryable = error.attrib.get("retryable")
668
- if retryable and retryable not in {"true", "false"}:
669
- self.error(path, "uipath:errorMapping retryable must be true or false")
670
-
671
- self.validate_expression_value(
672
- path,
673
- error.attrib.get("condition", ""),
674
- bindings,
675
- variables,
676
- f"errorMapping {error.attrib.get('id')}",
677
- )
678
-
679
- def validate_message_events(
680
- self, path: Path, root: ET.Element, elements_by_id: dict[str, ET.Element]
681
- ) -> None:
682
- for event_def in root.findall(f".//{{{BPMN_NS}}}messageEventDefinition"):
683
- ref = event_def.attrib.get("messageRef")
684
- if ref and ref not in elements_by_id:
685
- self.error(path, f"messageEventDefinition references missing message {ref}")
686
-
687
- def validate_multi_instance(
688
- self, path: Path, root: ET.Element, variables: dict[str, set[str]]
689
- ) -> None:
690
- parent_map = build_parent_map(root)
691
- for loop in root.findall(f".//{{{BPMN_NS}}}multiInstanceLoopCharacteristics"):
692
- marker = loop.attrib.get("isSequential")
693
- if marker not in {"true", "false"}:
694
- self.error(
695
- path,
696
- f"multiInstanceLoopCharacteristics {loop.attrib.get('id')} "
697
- "must set isSequential to true or false",
698
- )
699
-
700
- metadata = loop.find(
701
- f"./{{{BPMN_NS}}}extensionElements/{{{UIPATH_NS}}}loopCharacteristics"
702
- )
703
- if metadata is None:
704
- self.error(
705
- path,
706
- f"multiInstanceLoopCharacteristics {loop.attrib.get('id')} "
707
- "missing uipath:loopCharacteristics",
708
- )
709
- continue
710
-
711
- input_collection = metadata.attrib.get("inputCollection", "")
712
- collection_vars = self.expression_variable_ids(input_collection)
713
- has_declared_collection = any(
714
- var_id in variables["all"] for var_id in collection_vars
715
- )
716
- if not collection_vars or not has_declared_collection:
717
- self.error(
718
- path,
719
- f"multi-instance inputCollection references undeclared variable "
720
- f"{input_collection}",
721
- )
722
-
723
- input_element = metadata.attrib.get("inputElement")
724
- if not input_element:
725
- self.error(
726
- path,
727
- f"multi-instance inputElement is missing on {loop.attrib.get('id')}",
728
- )
729
- elif local(parent_map.get(id(loop), ET.Element("")).tag) == "subProcess":
730
- if input_element != "iterator[0]":
731
- self.error(
732
- path,
733
- f"multi-instance subprocess inputElement must be iterator[0], "
734
- f"found {input_element}",
735
- )
736
- elif not re.fullmatch(r"[A-Za-z_][A-Za-z0-9_]*(?:\[\d+\])?", input_element):
737
- self.error(path, f"multi-instance inputElement has invalid shape {input_element}")
738
-
739
- self.validate_expression_value(
740
- path,
741
- input_collection,
742
- {},
743
- variables,
744
- f"multi-instance inputCollection {loop.attrib.get('id')}",
745
- )
746
- self.validate_expression_value(
747
- path,
748
- metadata.attrib.get("filterCondition", ""),
749
- {},
750
- variables,
751
- f"multi-instance filterCondition {loop.attrib.get('id')}",
752
- )
753
-
754
- completion = loop.find(f"{{{BPMN_NS}}}completionCondition")
755
- if completion is not None:
756
- self.validate_expression_value(
757
- path,
758
- completion.text or "",
759
- {},
760
- variables,
761
- f"multi-instance completionCondition {loop.attrib.get('id')}",
762
- )
763
-
764
- def expression_variable_ids(self, value: str) -> set[str]:
765
- return set(re.findall(r"\bvars\.([A-Za-z_][A-Za-z0-9_]*)", value))
766
-
767
- def extract_expressions(self, value: str) -> list[str]:
768
- if not value:
769
- return []
770
- expressions: list[str] = []
771
- stripped = value.strip()
772
- if stripped.startswith("="):
773
- expressions.append(stripped)
774
- expressions.extend(match.group(1).strip() for match in re.finditer(r'"(=[^"]+)"', value))
775
- return expressions
776
-
777
- def validate_expression_value(
778
- self,
779
- path: Path,
780
- value: str,
781
- bindings: dict[str, ET.Element],
782
- variables: dict[str, set[str]],
783
- label: str,
784
- ) -> None:
785
- for expression in self.extract_expressions(value):
786
- if self.contains_assignment(expression):
787
- self.error(path, f"{label} may contain assignment: {expression}")
788
-
789
- for binding_ref in re.findall(r"\bbindings\.([A-Za-z0-9_]+)", expression):
790
- if binding_ref not in bindings:
791
- self.error(
792
- path,
793
- f"{label} references undeclared binding {binding_ref}",
794
- )
795
-
796
- for var_ref in self.expression_variable_ids(expression):
797
- if var_ref not in variables["all"] and var_ref not in SPECIAL_RUNTIME_VARS:
798
- self.error(path, f"{label} references undeclared variable id {var_ref}")
799
-
800
- for var_name in sorted(variables["names"], key=len, reverse=True):
801
- if re.search(rf"={re.escape(var_name)}(?=$|[^A-Za-z0-9_])", expression):
802
- self.error(
803
- path,
804
- f"{label} uses bare variable name {var_name}; use vars.<variableId>",
805
- )
806
-
807
- def contains_assignment(self, value: str) -> bool:
808
- return "=" in value and re.search(r"(?<![=!<>])=(?!=)", value[1:]) is not None
809
-
810
- def validate_uipath_extensions(
811
- self,
812
- path: Path,
813
- root: ET.Element,
814
- bindings: dict[str, ET.Element],
815
- variables: dict[str, set[str]],
816
- ) -> None:
817
- parent_map = build_parent_map(root)
818
- for elem in root.iter():
819
- if ns(elem.tag) != UIPATH_NS:
820
- continue
821
- if local(elem.tag) in {"activity", "event"}:
822
- self.validate_activity_or_event(path, elem, bindings, parent_map)
823
- if local(elem.tag) == "mapping":
824
- self.validate_script_mapping(path, elem, parent_map)
825
- if local(elem.tag) == "output":
826
- target = elem.attrib.get("var") or elem.attrib.get("target")
827
- if target and target not in variables["writable"]:
828
- self.error(path, f"uipath:output targets non-writable variable id {target}")
829
-
830
- for attr_name, attr_value in elem.attrib.items():
831
- self.validate_expression_value(
832
- path,
833
- attr_value,
834
- bindings,
835
- variables,
836
- f"uipath:{local(elem.tag)} @{attr_name}",
837
- )
838
- self.validate_expression_value(
839
- path,
840
- elem.text or "",
841
- bindings,
842
- variables,
843
- f"uipath:{local(elem.tag)} text",
844
- )
845
-
846
- def validate_script_mapping(
847
- self,
848
- path: Path,
849
- elem: ET.Element,
850
- parent_map: dict[int, ET.Element],
851
- ) -> None:
852
- type_elem = elem.find(f"{{{UIPATH_NS}}}type")
853
- mapping_type = type_elem.attrib.get("value") if type_elem is not None else None
854
- extension_elements = parent_map.get(id(elem))
855
- bpmn_parent = parent_map.get(id(extension_elements))
856
- is_script_parent = bpmn_parent is not None and local(bpmn_parent.tag) == "scriptTask"
857
- if mapping_type != "BPMN.ScriptTask" and not is_script_parent:
858
- return
859
-
860
- for output in elem.findall(f"{{{UIPATH_NS}}}output"):
861
- source = output.attrib.get("source", "")
862
- if source.startswith("=result.") and not source.startswith("=result.response"):
863
- self.error(
864
- path,
865
- "BPMN.ScriptTask output source must read result.response "
866
- f"or result.response.<field>, found {source}",
867
- )
868
-
869
- def validate_activity_or_event(
870
- self,
871
- path: Path,
872
- elem: ET.Element,
873
- bindings: dict[str, ET.Element],
874
- parent_map: dict[int, ET.Element],
875
- ) -> None:
876
- type_elem = elem.find(f"{{{UIPATH_NS}}}type")
877
- service_type = type_elem.attrib.get("value") if type_elem is not None else None
878
- if not service_type:
879
- self.error(path, "uipath activity/event missing type")
880
- return
881
-
882
- extension_kind = local(elem.tag)
883
- extension_elements = parent_map.get(id(elem))
884
- wrapper = local(parent_map.get(id(extension_elements), ET.Element("")).tag)
885
- expected = SERVICE_TYPE_WRAPPERS.get(service_type)
886
- if expected is not None:
887
- if extension_kind != expected["extension"]:
888
- self.error(
889
- path,
890
- f"{service_type} must use uipath:{expected['extension']}, found "
891
- f"uipath:{extension_kind}",
892
- )
893
- if wrapper not in expected["wrapper"]:
894
- self.error(
895
- path,
896
- f"{service_type} must use BPMN wrapper "
897
- f"{sorted(expected['wrapper'])}, found {wrapper or 'unknown'}",
898
- )
899
-
900
- context = elem.find(f"{{{UIPATH_NS}}}context")
901
- if context is None:
902
- self.error(path, f"{service_type} missing context")
903
- return
904
- context_inputs = {
905
- child.attrib.get("name"): child.attrib.get("value", "")
906
- for child in list(context)
907
- if local(child.tag) == "input"
908
- }
909
-
910
- if service_type.startswith("Intsvc."):
911
- connection_backed = {
912
- "Intsvc.ActivityExecution",
913
- "Intsvc.WaitForEvent",
914
- "Intsvc.EventTrigger",
915
- "Intsvc.AsyncExecution",
916
- "Intsvc.SyncAgentExecution",
917
- "Intsvc.AsyncAgentExecution",
918
- "Intsvc.SyncWorkflowExecution",
919
- "Intsvc.AsyncWorkflowExecution",
920
- }
921
- operation_backed = {
922
- "Intsvc.ActivityExecution",
923
- "Intsvc.AsyncExecution",
924
- "Intsvc.SyncAgentExecution",
925
- "Intsvc.AsyncAgentExecution",
926
- "Intsvc.SyncWorkflowExecution",
927
- "Intsvc.AsyncWorkflowExecution",
928
- }
929
- connection = context_inputs.get("connection", "")
930
- if service_type in connection_backed:
931
- match = re.fullmatch(r"=bindings\.([A-Za-z0-9_]+)", connection)
932
- if not match or match.group(1) not in bindings:
933
- self.error(path, f"{service_type} missing generated connection binding")
934
- if "connectorKey" not in context_inputs:
935
- self.error(path, f"{service_type} missing connectorKey")
936
- if service_type in operation_backed:
937
- for required in ("activity", "operation"):
938
- if required not in context_inputs:
939
- self.error(path, f"{service_type} missing {required}")
940
- if service_type in {"Intsvc.EventTrigger", "Intsvc.WaitForEvent"}:
941
- for required in ("trigger", "eventName"):
942
- if required not in context_inputs:
943
- self.error(path, f"{service_type} missing {required}")
944
-
945
- if service_type == "Orchestrator.StartAgentJob":
946
- direct_inputs = {
947
- child.attrib.get("name"): child
948
- for child in list(elem)
949
- if local(child.tag) == "input"
950
- }
951
- direct_outputs = [
952
- child for child in list(elem) if local(child.tag) == "output"
953
- ]
954
- if "JobArguments" not in direct_inputs:
955
- self.error(path, "Orchestrator.StartAgentJob missing direct JobArguments input")
956
- if not any(
957
- output.attrib.get("name") == "Process response"
958
- and output.attrib.get("type") == "Orchestrator.RunJob"
959
- and output.attrib.get("var")
960
- for output in direct_outputs
961
- ):
962
- self.error(
963
- path,
964
- "Orchestrator.StartAgentJob missing direct Process response output",
965
- )
966
-
967
- def validate_package_files(self, project: Path, bpmn_name: str, root: ET.Element) -> None:
968
- data: dict[str, object] = {}
969
- for name in (
970
- "project.uiproj",
971
- "bindings_v2.json",
972
- "entry-points.json",
973
- "operate.json",
974
- "package-descriptor.json",
975
- ):
976
- path = project / name
977
- if not path.is_file():
978
- return
979
- try:
980
- data[name] = json.loads(path.read_text(encoding="utf-8"))
981
- except json.JSONDecodeError as exc:
982
- self.error(path, f"JSON parse failed: {exc}")
983
- return
984
-
985
- if Path(str(data["project.uiproj"].get("main", ""))).name != bpmn_name: # type: ignore[union-attr]
986
- self.error(
987
- project / "project.uiproj",
988
- "main basename does not match single BPMN file basename",
989
- )
990
- if data["project.uiproj"].get("ProjectType") != "ProcessOrchestration": # type: ignore[union-attr]
991
- self.error(project / "project.uiproj", "ProjectType must be ProcessOrchestration")
992
- if "projectType" in data["project.uiproj"] or "name" in data["project.uiproj"]: # type: ignore[operator]
993
- self.error(project / "project.uiproj", "uses lowercase project metadata keys")
994
- if Path(str(data["operate.json"].get("main", ""))).name != bpmn_name: # type: ignore[union-attr]
995
- self.error(
996
- project / "operate.json",
997
- "main basename does not match single BPMN file basename",
998
- )
999
- if data["operate.json"].get("contentType") != "ProcessOrchestration": # type: ignore[union-attr]
1000
- self.error(project / "operate.json", "contentType must be ProcessOrchestration")
1001
-
1002
- bindings_file = data["bindings_v2.json"]
1003
- if not isinstance(bindings_file, dict):
1004
- self.error(project / "bindings_v2.json", "must be a JSON object")
1005
- return
1006
- if bindings_file.get("version") != "2.0":
1007
- self.error(project / "bindings_v2.json", "version must be 2.0")
1008
- if not isinstance(bindings_file.get("resources"), list):
1009
- self.error(project / "bindings_v2.json", "resources must be an array")
1010
- return
1011
-
1012
- descriptor_content = set(data["package-descriptor.json"].get("content", [])) # type: ignore[union-attr]
1013
- for required in (
1014
- f"content/{bpmn_name}",
1015
- "content/bindings_v2.json",
1016
- "content/entry-points.json",
1017
- "content/operate.json",
1018
- ):
1019
- if required not in descriptor_content:
1020
- self.error(project / "package-descriptor.json", f"missing content entry {required}")
1021
-
1022
- process = root.find(f"{{{BPMN_NS}}}process")
1023
- if process is None:
1024
- return
1025
- root_bindings = self.collect_root_bindings(process)
1026
- package_bindings = {
1027
- resource.get("id")
1028
- for resource in data["bindings_v2.json"].get("resources", []) # type: ignore[union-attr]
1029
- }
1030
- package_resources = {
1031
- resource.get("id"): resource
1032
- for resource in data["bindings_v2.json"].get("resources", []) # type: ignore[union-attr]
1033
- if isinstance(resource, dict)
1034
- }
1035
- for binding_id in root_bindings:
1036
- if binding_id not in package_bindings:
1037
- self.error(
1038
- project / "bindings_v2.json", f"missing resource for binding {binding_id}"
1039
- )
1040
- else:
1041
- self.validate_binding_resource(
1042
- project / "bindings_v2.json",
1043
- root_bindings[binding_id],
1044
- package_resources[binding_id],
1045
- )
1046
-
1047
- entry_points = data["entry-points.json"].get("entryPoints", []) # type: ignore[union-attr]
1048
- package_eps = {ep.get("id"): ep for ep in entry_points}
1049
- expected_schemas = self.expected_entry_point_schemas(process)
1050
- for start in [c for c in list(process) if local(c.tag) == "startEvent"]:
1051
- ep = start.find(f"./{{{BPMN_NS}}}extensionElements/{{{UIPATH_NS}}}entryPointId")
1052
- if ep is None:
1053
- continue
1054
- ep_id = ep.attrib.get("value")
1055
- file_path = f"/content/{bpmn_name}#{start.attrib.get('id')}"
1056
- if ep_id not in package_eps:
1057
- self.error(project / "entry-points.json", f"missing entry point {ep_id}")
1058
- elif package_eps[ep_id].get("filePath") != file_path:
1059
- self.error(project / "entry-points.json", f"entry point {ep_id} has wrong filePath")
1060
- elif ep_id in expected_schemas:
1061
- expected_input, expected_output = expected_schemas[ep_id]
1062
- actual = package_eps[ep_id]
1063
- if actual.get("inputSchema") != expected_input:
1064
- self.error(
1065
- project / "entry-points.json",
1066
- f"entry point {ep_id} inputSchema differs from BPMN variables",
1067
- )
1068
- if actual.get("outputSchema") != expected_output:
1069
- self.error(
1070
- project / "entry-points.json",
1071
- f"entry point {ep_id} outputSchema differs from BPMN variables",
1072
- )
1073
-
1074
- self.validate_intsvc_package_enrichment(
1075
- project / "bindings_v2.json", root, root_bindings, package_resources
1076
- )
1077
-
1078
- def expected_entry_point_schemas(
1079
- self, process: ET.Element
1080
- ) -> dict[str, tuple[dict[str, object], dict[str, object]]]:
1081
- root_variables = process.find(f"./{{{BPMN_NS}}}extensionElements/{{{UIPATH_NS}}}variables")
1082
- inputs_by_start: dict[str, dict[str, object]] = {}
1083
- outputs: dict[str, object] = {}
1084
- event_start_ids = {
1085
- start.attrib["id"]
1086
- for start in [c for c in list(process) if local(c.tag) == "startEvent"]
1087
- if start.find(f"./{{{BPMN_NS}}}extensionElements/{{{UIPATH_NS}}}event") is not None
1088
- and "id" in start.attrib
1089
- }
1090
- if root_variables is not None:
1091
- for variable in list(root_variables):
1092
- name = variable.attrib.get("name")
1093
- if not name:
1094
- continue
1095
- schema = self.variable_schema(variable)
1096
- element_id = variable.attrib.get("elementId")
1097
- if local(variable.tag) == "input" and element_id:
1098
- inputs_by_start.setdefault(element_id, {})[name] = schema
1099
- elif (
1100
- local(variable.tag) == "inputOutput"
1101
- and element_id
1102
- and element_id not in event_start_ids
1103
- ):
1104
- inputs_by_start.setdefault(element_id, {})[name] = schema
1105
- elif local(variable.tag) == "output":
1106
- outputs[name] = schema
1107
-
1108
- expected: dict[str, tuple[dict[str, object], dict[str, object]]] = {}
1109
- for start in [c for c in list(process) if local(c.tag) == "startEvent"]:
1110
- ep = start.find(f"./{{{BPMN_NS}}}extensionElements/{{{UIPATH_NS}}}entryPointId")
1111
- if ep is None or not ep.attrib.get("value"):
1112
- continue
1113
- expected[ep.attrib["value"]] = (
1114
- {"type": "object", "properties": inputs_by_start.get(start.attrib["id"], {})},
1115
- {"type": "object", "properties": outputs},
1116
- )
1117
- return expected
1118
-
1119
- def variable_schema(self, variable: ET.Element) -> dict[str, object]:
1120
- var_type = variable.attrib.get("type", "string")
1121
- if var_type == "jsonSchema":
1122
- try:
1123
- schema = json.loads(variable.text or "{}")
1124
- except json.JSONDecodeError:
1125
- return {"type": "object"}
1126
- if isinstance(schema, dict):
1127
- schema.pop("$schema", None)
1128
- return schema
1129
- return {"type": "object"}
1130
-
1131
- type_map = {
1132
- "boolean": "boolean",
1133
- "integer": "integer",
1134
- "number": "number",
1135
- "array": "array",
1136
- "object": "object",
1137
- "json": "object",
1138
- "string": "string",
1139
- }
1140
- return {"type": type_map.get(var_type, "string")}
1141
-
1142
- def validate_binding_resource(
1143
- self, path: Path, binding: ET.Element, resource: dict[str, object]
1144
- ) -> None:
1145
- binding_id = binding.attrib.get("id")
1146
- expected_kind = binding.attrib.get("type")
1147
- if resource.get("name") != binding.attrib.get("name"):
1148
- self.error(path, f"resource {binding_id} name differs from BPMN binding")
1149
- if expected_kind and resource.get("kind") != expected_kind:
1150
- self.error(path, f"resource {binding_id} kind differs from BPMN binding")
1151
- if binding.attrib.get("resourceKey") and resource.get("resourceKey") != binding.attrib.get(
1152
- "resourceKey"
1153
- ):
1154
- self.error(path, f"resource {binding_id} resourceKey differs from BPMN binding")
1155
- if binding.attrib.get("resource") and resource.get("resource") != binding.attrib.get(
1156
- "resource"
1157
- ):
1158
- self.error(path, f"resource {binding_id} resource differs from BPMN binding")
1159
- if binding.attrib.get("resourceSubType") and resource.get(
1160
- "resourceSubType"
1161
- ) != binding.attrib.get("resourceSubType"):
1162
- self.error(path, f"resource {binding_id} resourceSubType differs from binding")
1163
- if binding.attrib.get("propertyAttribute") and resource.get(
1164
- "propertyAttribute"
1165
- ) != binding.attrib.get("propertyAttribute"):
1166
- self.error(path, f"resource {binding_id} propertyAttribute differs from binding")
1167
-
1168
- metadata = resource.get("metadata")
1169
- if not isinstance(metadata, dict):
1170
- self.error(path, f"resource {binding_id} metadata must be an object")
1171
- return
1172
- if metadata.get("BindingsVersion") != "v1":
1173
- self.error(path, f"resource {binding_id} metadata.BindingsVersion must be v1")
1174
- if metadata.get("DisplayLabel") != binding.attrib.get("name"):
1175
- self.error(path, f"resource {binding_id} metadata.DisplayLabel differs from binding")
1176
-
1177
- expected_subtype = binding.attrib.get("resourceSubType") or binding.attrib.get("type")
1178
- if metadata.get("SubType") != expected_subtype:
1179
- self.error(path, f"resource {binding_id} metadata.SubType differs from binding")
1180
-
1181
- def validate_intsvc_package_enrichment(
1182
- self,
1183
- path: Path,
1184
- root: ET.Element,
1185
- bindings: dict[str, ET.Element],
1186
- package_resources: dict[object, dict[str, object]],
1187
- ) -> None:
1188
- for elem in root.iter():
1189
- if ns(elem.tag) != UIPATH_NS or local(elem.tag) not in {"activity", "event"}:
1190
- continue
1191
- type_elem = elem.find(f"{{{UIPATH_NS}}}type")
1192
- service_type = type_elem.attrib.get("value") if type_elem is not None else ""
1193
- if not service_type.startswith("Intsvc."):
1194
- continue
1195
-
1196
- context = elem.find(f"{{{UIPATH_NS}}}context")
1197
- if context is None:
1198
- self.error(path, f"{service_type} missing context")
1199
- continue
1200
- context_inputs = {
1201
- child.attrib.get("name"): child.attrib.get("value", "")
1202
- for child in list(context)
1203
- if local(child.tag) == "input"
1204
- }
1205
- connector_key = context_inputs.get("connectorKey")
1206
- for name, value in context_inputs.items():
1207
- binding_id = self.binding_expression_id(value)
1208
- if not binding_id:
1209
- continue
1210
- binding = bindings.get(binding_id)
1211
- resource = package_resources.get(binding_id)
1212
- if binding is None or resource is None:
1213
- continue
1214
- metadata = resource.get("metadata")
1215
- if not isinstance(metadata, dict):
1216
- continue
1217
- if name in {"connection", "trigger"} and connector_key:
1218
- if metadata.get("Connector") != connector_key:
1219
- self.error(
1220
- path,
1221
- f"{service_type} {name} resource {binding_id} connector metadata differs",
1222
- )
1223
- if metadata.get("SolutionsSupport") != "Required":
1224
- self.error(
1225
- path,
1226
- f"{service_type} {name} resource {binding_id} must require solutions support",
1227
- )
1228
- if binding.attrib.get("propertyAttribute") and name not in {
1229
- "connection",
1230
- "trigger",
1231
- }:
1232
- parent_id = self.binding_expression_id(context_inputs.get("trigger", ""))
1233
- parent = package_resources.get(parent_id)
1234
- expected_parent = (
1235
- parent.get("resourceKey") if isinstance(parent, dict) else None
1236
- )
1237
- if expected_parent and metadata.get("ParentResourceKey") != expected_parent:
1238
- self.error(
1239
- path,
1240
- f"{service_type} property resource {binding_id} has wrong parent key",
1241
- )
1242
-
1243
- if (
1244
- service_type in {"Intsvc.ActivityExecution", "Intsvc.AsyncExecution"}
1245
- and elem.find(f"{{{UIPATH_NS}}}inputSchema") is None
1246
- ):
1247
- self.error(path, f"{service_type} missing generated inputSchema")
1248
-
1249
- def binding_expression_id(self, value: str) -> str | None:
1250
- match = re.fullmatch(r"=bindings\.([A-Za-z0-9_]+)", value)
1251
- return match.group(1) if match else None
1252
-
1253
-
1254
- if __name__ == "__main__":
1255
- sys.exit(Validator().validate())