uipath 2.1.124__tar.gz → 2.1.126__tar.gz

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.

Potentially problematic release.


This version of uipath might be problematic. Click here for more details.

Files changed (454) hide show
  1. {uipath-2.1.124 → uipath-2.1.126}/.github/workflows/ci.yml +1 -1
  2. uipath-2.1.126/.pipelines/security-scans.yml +53 -0
  3. uipath-2.1.126/.pipelines/variables.yml +2 -0
  4. {uipath-2.1.124 → uipath-2.1.126}/PKG-INFO +1 -1
  5. {uipath-2.1.124 → uipath-2.1.126}/pyproject.toml +1 -1
  6. {uipath-2.1.124 → uipath-2.1.126}/scripts/update_agents_md.py +128 -8
  7. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_auth/_auth_service.py +2 -2
  8. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_auth/_url_utils.py +3 -6
  9. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_utils/_common.py +38 -1
  10. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_utils/_studio_project.py +233 -8
  11. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/cli_debug.py +18 -1
  12. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/cli_eval.py +21 -1
  13. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/cli_run.py +13 -1
  14. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_config.py +12 -0
  15. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_resources/SDK_REFERENCE.md +133 -0
  16. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_services/_base_service.py +0 -3
  17. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_services/assets_service.py +0 -2
  18. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_utils/__init__.py +1 -1
  19. uipath-2.1.126/src/uipath/_utils/_bindings.py +109 -0
  20. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/test_portal_service_refresh_token.py +15 -10
  21. uipath-2.1.126/tests/sdk/test_bindings.py +326 -0
  22. {uipath-2.1.124 → uipath-2.1.126}/uv.lock +1 -1
  23. uipath-2.1.124/src/uipath/_utils/_infer_bindings.py +0 -51
  24. uipath-2.1.124/src/uipath/_utils/_read_overwrites.py +0 -144
  25. uipath-2.1.124/tests/sdk/test_bindings_inference.py +0 -54
  26. uipath-2.1.124/tests/sdk/test_overwrites.py +0 -121
  27. {uipath-2.1.124 → uipath-2.1.126}/.claude/agents/command-tester.md +0 -0
  28. {uipath-2.1.124 → uipath-2.1.126}/.claude/agents/test-reporter.md +0 -0
  29. {uipath-2.1.124 → uipath-2.1.126}/.claude/commands/prepare-pr.md +0 -0
  30. {uipath-2.1.124 → uipath-2.1.126}/.cursorrules +0 -0
  31. {uipath-2.1.124 → uipath-2.1.126}/.editorconfig +0 -0
  32. {uipath-2.1.124 → uipath-2.1.126}/.gitattributes +0 -0
  33. {uipath-2.1.124 → uipath-2.1.126}/.github/labeler.yml +0 -0
  34. {uipath-2.1.124 → uipath-2.1.126}/.github/workflows/auto-label.yml +0 -0
  35. {uipath-2.1.124 → uipath-2.1.126}/.github/workflows/cd.yml +0 -0
  36. {uipath-2.1.124 → uipath-2.1.126}/.github/workflows/commitlint.yml +0 -0
  37. {uipath-2.1.124 → uipath-2.1.126}/.github/workflows/integration_tests.yml +0 -0
  38. {uipath-2.1.124 → uipath-2.1.126}/.github/workflows/lint.yml +0 -0
  39. {uipath-2.1.124 → uipath-2.1.126}/.github/workflows/publish-dev.yml +0 -0
  40. {uipath-2.1.124 → uipath-2.1.126}/.github/workflows/publish-docs.yml +0 -0
  41. {uipath-2.1.124 → uipath-2.1.126}/.github/workflows/slack.yml +0 -0
  42. {uipath-2.1.124 → uipath-2.1.126}/.github/workflows/test-uipath-langchain.yml +0 -0
  43. {uipath-2.1.124 → uipath-2.1.126}/.github/workflows/test-uipath-llamaindex.yml +0 -0
  44. {uipath-2.1.124 → uipath-2.1.126}/.github/workflows/test.yml +0 -0
  45. {uipath-2.1.124 → uipath-2.1.126}/.gitignore +0 -0
  46. {uipath-2.1.124 → uipath-2.1.126}/.pre-commit-config.yaml +0 -0
  47. {uipath-2.1.124 → uipath-2.1.126}/.python-version +0 -0
  48. {uipath-2.1.124 → uipath-2.1.126}/.vscode/extensions.json +0 -0
  49. {uipath-2.1.124 → uipath-2.1.126}/.vscode/launch.json +0 -0
  50. {uipath-2.1.124 → uipath-2.1.126}/.vscode/settings.json +0 -0
  51. {uipath-2.1.124 → uipath-2.1.126}/CONTRIBUTING.md +0 -0
  52. {uipath-2.1.124 → uipath-2.1.126}/LICENSE +0 -0
  53. {uipath-2.1.124 → uipath-2.1.126}/README.md +0 -0
  54. {uipath-2.1.124 → uipath-2.1.126}/docs/AutomationSuite.md +0 -0
  55. {uipath-2.1.124 → uipath-2.1.126}/docs/CONTRIBUTING.md +0 -0
  56. {uipath-2.1.124 → uipath-2.1.126}/docs/FAQ.md +0 -0
  57. {uipath-2.1.124 → uipath-2.1.126}/docs/assets/env-preparation-failed-dark.png +0 -0
  58. {uipath-2.1.124 → uipath-2.1.126}/docs/assets/env-preparation-failed-light.png +0 -0
  59. {uipath-2.1.124 → uipath-2.1.126}/docs/assets/favicon.png +0 -0
  60. {uipath-2.1.124 → uipath-2.1.126}/docs/assets/llms.txt +0 -0
  61. {uipath-2.1.124 → uipath-2.1.126}/docs/assets/logo-dark.svg +0 -0
  62. {uipath-2.1.124 → uipath-2.1.126}/docs/assets/logo-light.svg +0 -0
  63. {uipath-2.1.124 → uipath-2.1.126}/docs/cli/index.md +0 -0
  64. {uipath-2.1.124 → uipath-2.1.126}/docs/core/actions.md +0 -0
  65. {uipath-2.1.124 → uipath-2.1.126}/docs/core/assets/cloud_env_var_dark.gif +0 -0
  66. {uipath-2.1.124 → uipath-2.1.126}/docs/core/assets/cloud_env_var_light.gif +0 -0
  67. {uipath-2.1.124 → uipath-2.1.126}/docs/core/assets/cloud_env_var_secret_dark.png +0 -0
  68. {uipath-2.1.124 → uipath-2.1.126}/docs/core/assets/cloud_env_var_secret_light.png +0 -0
  69. {uipath-2.1.124 → uipath-2.1.126}/docs/core/assets/copy_path_dark.png +0 -0
  70. {uipath-2.1.124 → uipath-2.1.126}/docs/core/assets/copy_path_light.png +0 -0
  71. {uipath-2.1.124 → uipath-2.1.126}/docs/core/assets.md +0 -0
  72. {uipath-2.1.124 → uipath-2.1.126}/docs/core/attachments.md +0 -0
  73. {uipath-2.1.124 → uipath-2.1.126}/docs/core/buckets.md +0 -0
  74. {uipath-2.1.124 → uipath-2.1.126}/docs/core/connections.md +0 -0
  75. {uipath-2.1.124 → uipath-2.1.126}/docs/core/context_grounding.md +0 -0
  76. {uipath-2.1.124 → uipath-2.1.126}/docs/core/documents.md +0 -0
  77. {uipath-2.1.124 → uipath-2.1.126}/docs/core/documents_models.md +0 -0
  78. {uipath-2.1.124 → uipath-2.1.126}/docs/core/environment_variables.md +0 -0
  79. {uipath-2.1.124 → uipath-2.1.126}/docs/core/getting_started.md +0 -0
  80. {uipath-2.1.124 → uipath-2.1.126}/docs/core/jobs.md +0 -0
  81. {uipath-2.1.124 → uipath-2.1.126}/docs/core/llm_gateway.md +0 -0
  82. {uipath-2.1.124 → uipath-2.1.126}/docs/core/processes.md +0 -0
  83. {uipath-2.1.124 → uipath-2.1.126}/docs/core/queues.md +0 -0
  84. {uipath-2.1.124 → uipath-2.1.126}/docs/core/traced.md +0 -0
  85. {uipath-2.1.124 → uipath-2.1.126}/docs/hooks.py +0 -0
  86. {uipath-2.1.124 → uipath-2.1.126}/docs/index.md +0 -0
  87. {uipath-2.1.124 → uipath-2.1.126}/docs/javascripts/extra.js +0 -0
  88. {uipath-2.1.124 → uipath-2.1.126}/docs/overrides/main.html +0 -0
  89. {uipath-2.1.124 → uipath-2.1.126}/docs/overrides/partials/actions.html +0 -0
  90. {uipath-2.1.124 → uipath-2.1.126}/docs/overrides/partials/logo.html +0 -0
  91. {uipath-2.1.124 → uipath-2.1.126}/docs/release_policy.md +0 -0
  92. {uipath-2.1.124 → uipath-2.1.126}/docs/sample_images/google-ADK-agent/agent-output.png +0 -0
  93. {uipath-2.1.124 → uipath-2.1.126}/docs/stylesheets/extra.css +0 -0
  94. {uipath-2.1.124 → uipath-2.1.126}/justfile +0 -0
  95. {uipath-2.1.124 → uipath-2.1.126}/mkdocs.yml +0 -0
  96. {uipath-2.1.124 → uipath-2.1.126}/py.typed +0 -0
  97. {uipath-2.1.124 → uipath-2.1.126}/samples/asset-modifier-agent/.env.example +0 -0
  98. {uipath-2.1.124 → uipath-2.1.126}/samples/asset-modifier-agent/README.md +0 -0
  99. {uipath-2.1.124 → uipath-2.1.126}/samples/asset-modifier-agent/input.json +0 -0
  100. {uipath-2.1.124 → uipath-2.1.126}/samples/asset-modifier-agent/main.py +0 -0
  101. {uipath-2.1.124 → uipath-2.1.126}/samples/asset-modifier-agent/pyproject.toml +0 -0
  102. {uipath-2.1.124 → uipath-2.1.126}/samples/asset-modifier-agent/uv.lock +0 -0
  103. {uipath-2.1.124 → uipath-2.1.126}/samples/calculator/README.md +0 -0
  104. {uipath-2.1.124 → uipath-2.1.126}/samples/calculator/evals/eval-sets/default.json +0 -0
  105. {uipath-2.1.124 → uipath-2.1.126}/samples/calculator/evals/eval-sets/legacy.json +0 -0
  106. {uipath-2.1.124 → uipath-2.1.126}/samples/calculator/evals/evaluators/contains.json +0 -0
  107. {uipath-2.1.124 → uipath-2.1.126}/samples/calculator/evals/evaluators/correct-operator-evaluator.json +0 -0
  108. {uipath-2.1.124 → uipath-2.1.126}/samples/calculator/evals/evaluators/custom/correct_operator.py +0 -0
  109. {uipath-2.1.124 → uipath-2.1.126}/samples/calculator/evals/evaluators/custom/types/correct-operator-evaluator-types.json +0 -0
  110. {uipath-2.1.124 → uipath-2.1.126}/samples/calculator/evals/evaluators/exact-match.json +0 -0
  111. {uipath-2.1.124 → uipath-2.1.126}/samples/calculator/evals/evaluators/json-similarity.json +0 -0
  112. {uipath-2.1.124 → uipath-2.1.126}/samples/calculator/evals/evaluators/legacy-equality.json +0 -0
  113. {uipath-2.1.124 → uipath-2.1.126}/samples/calculator/evals/evaluators/legacy-json-similarity.json +0 -0
  114. {uipath-2.1.124 → uipath-2.1.126}/samples/calculator/evals/evaluators/legacy-llm-as-a-judge.json +0 -0
  115. {uipath-2.1.124 → uipath-2.1.126}/samples/calculator/evals/evaluators/legacy-trajectory.json +0 -0
  116. {uipath-2.1.124 → uipath-2.1.126}/samples/calculator/evals/evaluators/llm-judge-semantic-similarity.json +0 -0
  117. {uipath-2.1.124 → uipath-2.1.126}/samples/calculator/evals/evaluators/llm-judge-strict-json-similarity.json +0 -0
  118. {uipath-2.1.124 → uipath-2.1.126}/samples/calculator/evals/evaluators/trajectory.json +0 -0
  119. {uipath-2.1.124 → uipath-2.1.126}/samples/calculator/main.py +0 -0
  120. {uipath-2.1.124 → uipath-2.1.126}/samples/calculator/pyproject.toml +0 -0
  121. {uipath-2.1.124 → uipath-2.1.126}/samples/calculator/uipath.json +0 -0
  122. {uipath-2.1.124 → uipath-2.1.126}/samples/event-trigger/.python-version +0 -0
  123. {uipath-2.1.124 → uipath-2.1.126}/samples/event-trigger/README.md +0 -0
  124. {uipath-2.1.124 → uipath-2.1.126}/samples/event-trigger/main.py +0 -0
  125. {uipath-2.1.124 → uipath-2.1.126}/samples/event-trigger/pyproject.toml +0 -0
  126. {uipath-2.1.124 → uipath-2.1.126}/samples/google-ADK-agent/.env.example +0 -0
  127. {uipath-2.1.124 → uipath-2.1.126}/samples/google-ADK-agent/README.md +0 -0
  128. {uipath-2.1.124 → uipath-2.1.126}/samples/google-ADK-agent/input.json +0 -0
  129. {uipath-2.1.124 → uipath-2.1.126}/samples/google-ADK-agent/multi_tool_agent/__init__.py +0 -0
  130. {uipath-2.1.124 → uipath-2.1.126}/samples/google-ADK-agent/multi_tool_agent/agent.py +0 -0
  131. {uipath-2.1.124 → uipath-2.1.126}/samples/google-ADK-agent/pyproject.toml +0 -0
  132. {uipath-2.1.124 → uipath-2.1.126}/samples/google-ADK-agent/uv.lock +0 -0
  133. {uipath-2.1.124 → uipath-2.1.126}/samples/weather_tools/README.md +0 -0
  134. {uipath-2.1.124 → uipath-2.1.126}/samples/weather_tools/TOOL_EVALUATORS.md +0 -0
  135. {uipath-2.1.124 → uipath-2.1.126}/samples/weather_tools/evals/eval-sets/default.json +0 -0
  136. {uipath-2.1.124 → uipath-2.1.126}/samples/weather_tools/evals/evaluators/tool-call-args.json +0 -0
  137. {uipath-2.1.124 → uipath-2.1.126}/samples/weather_tools/evals/evaluators/tool-call-count.json +0 -0
  138. {uipath-2.1.124 → uipath-2.1.126}/samples/weather_tools/evals/evaluators/tool-call-order.json +0 -0
  139. {uipath-2.1.124 → uipath-2.1.126}/samples/weather_tools/evals/evaluators/tool-call-output.json +0 -0
  140. {uipath-2.1.124 → uipath-2.1.126}/samples/weather_tools/evals/evaluators/trajectory.json +0 -0
  141. {uipath-2.1.124 → uipath-2.1.126}/samples/weather_tools/main.py +0 -0
  142. {uipath-2.1.124 → uipath-2.1.126}/scripts/debug_test.py +0 -0
  143. {uipath-2.1.124 → uipath-2.1.126}/scripts/lint_httpx_client.py +0 -0
  144. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/__init__.py +0 -0
  145. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/README.md +0 -0
  146. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/__init__.py +0 -0
  147. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_auth/_auth_server.py +0 -0
  148. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_auth/_models.py +0 -0
  149. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_auth/_oidc_utils.py +0 -0
  150. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_auth/_portal_service.py +0 -0
  151. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_auth/_utils.py +0 -0
  152. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_auth/auth_config_25_10.json +0 -0
  153. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_auth/auth_config_cloud.json +0 -0
  154. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_auth/index.html +0 -0
  155. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_auth/localhost.crt +0 -0
  156. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_auth/localhost.key +0 -0
  157. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_debug/_bridge.py +0 -0
  158. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_debug/_runtime.py +0 -0
  159. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_dev/_terminal/__init__.py +0 -0
  160. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_dev/_terminal/_components/_chat.py +0 -0
  161. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_dev/_terminal/_components/_details.py +0 -0
  162. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_dev/_terminal/_components/_history.py +0 -0
  163. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_dev/_terminal/_components/_json_input.py +0 -0
  164. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_dev/_terminal/_components/_new.py +0 -0
  165. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_dev/_terminal/_models/_execution.py +0 -0
  166. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_dev/_terminal/_models/_messages.py +0 -0
  167. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_dev/_terminal/_styles/terminal.tcss +0 -0
  168. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_dev/_terminal/_utils/_chat.py +0 -0
  169. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_dev/_terminal/_utils/_exporter.py +0 -0
  170. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_dev/_terminal/_utils/_logger.py +0 -0
  171. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_evals/__init__.py +0 -0
  172. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_evals/_console_progress_reporter.py +0 -0
  173. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_evals/_evaluate.py +0 -0
  174. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_evals/_evaluator_factory.py +0 -0
  175. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_evals/_helpers.py +0 -0
  176. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_evals/_models/_evaluation_set.py +0 -0
  177. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_evals/_models/_evaluator.py +0 -0
  178. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_evals/_models/_evaluator_base_params.py +0 -0
  179. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_evals/_models/_exceptions.py +0 -0
  180. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_evals/_models/_mocks.py +0 -0
  181. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_evals/_models/_output.py +0 -0
  182. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_evals/_models/_sw_reporting.py +0 -0
  183. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_evals/_progress_reporter.py +0 -0
  184. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_evals/_runtime.py +0 -0
  185. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_evals/_span_collection.py +0 -0
  186. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_evals/mocks/__init__.py +0 -0
  187. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_evals/mocks/input_mocker.py +0 -0
  188. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_evals/mocks/llm_mocker.py +0 -0
  189. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_evals/mocks/mocker.py +0 -0
  190. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_evals/mocks/mocker_factory.py +0 -0
  191. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_evals/mocks/mockito_mocker.py +0 -0
  192. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_evals/mocks/mocks.py +0 -0
  193. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_push/models.py +0 -0
  194. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_push/sw_file_handler.py +0 -0
  195. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_runtime/_contracts.py +0 -0
  196. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_runtime/_escalation.py +0 -0
  197. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_runtime/_hitl.py +0 -0
  198. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_runtime/_logging.py +0 -0
  199. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_runtime/_runtime.py +0 -0
  200. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_runtime/_runtime_factory.py +0 -0
  201. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_runtime/_script_executor.py +0 -0
  202. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
  203. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_templates/.rels.template +0 -0
  204. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
  205. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_templates/custom_evaluator.py.template +0 -0
  206. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_templates/main.py.template +0 -0
  207. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
  208. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_utils/_console.py +0 -0
  209. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_utils/_constants.py +0 -0
  210. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_utils/_debug.py +0 -0
  211. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_utils/_eval_set.py +0 -0
  212. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_utils/_folders.py +0 -0
  213. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_utils/_input_args.py +0 -0
  214. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
  215. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_utils/_processes.py +0 -0
  216. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_utils/_project_files.py +0 -0
  217. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_utils/_resources.py +0 -0
  218. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_utils/_tracing.py +0 -0
  219. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/_utils/_uv_helpers.py +0 -0
  220. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/cli_add.py +0 -0
  221. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/cli_auth.py +0 -0
  222. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/cli_deploy.py +0 -0
  223. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/cli_dev.py +0 -0
  224. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/cli_init.py +0 -0
  225. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/cli_invoke.py +0 -0
  226. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/cli_new.py +0 -0
  227. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/cli_pack.py +0 -0
  228. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/cli_publish.py +0 -0
  229. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/cli_pull.py +0 -0
  230. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/cli_push.py +0 -0
  231. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/cli_register.py +0 -0
  232. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/middlewares.py +0 -0
  233. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/models/__init__.py +0 -0
  234. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/models/runtime_schema.py +0 -0
  235. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_cli/spinner.py +0 -0
  236. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_events/__init__.py +0 -0
  237. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_events/_event_bus.py +0 -0
  238. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_events/_events.py +0 -0
  239. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_execution_context.py +0 -0
  240. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_folder_context.py +0 -0
  241. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_resources/AGENTS.md +0 -0
  242. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_resources/CLAUDE.md +0 -0
  243. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_resources/CLI_REFERENCE.md +0 -0
  244. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_resources/REQUIRED_STRUCTURE.md +0 -0
  245. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_services/__init__.py +0 -0
  246. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_services/actions_service.py +0 -0
  247. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_services/api_client.py +0 -0
  248. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_services/attachments_service.py +0 -0
  249. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_services/buckets_service.py +0 -0
  250. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_services/connections_service.py +0 -0
  251. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_services/context_grounding_service.py +0 -0
  252. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_services/documents_service.py +0 -0
  253. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_services/entities_service.py +0 -0
  254. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_services/external_application_service.py +0 -0
  255. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_services/folder_service.py +0 -0
  256. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_services/guardrails_service.py +0 -0
  257. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_services/jobs_service.py +0 -0
  258. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_services/llm_gateway_service.py +0 -0
  259. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_services/processes_service.py +0 -0
  260. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_services/queues_service.py +0 -0
  261. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_uipath.py +0 -0
  262. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_utils/_auth.py +0 -0
  263. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_utils/_endpoint.py +0 -0
  264. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_utils/_logs.py +0 -0
  265. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_utils/_request_override.py +0 -0
  266. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_utils/_request_spec.py +0 -0
  267. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_utils/_ssl_context.py +0 -0
  268. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_utils/_url.py +0 -0
  269. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_utils/_user_agent.py +0 -0
  270. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/_utils/constants.py +0 -0
  271. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/agent/_utils.py +0 -0
  272. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/agent/conversation/__init__.py +0 -0
  273. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/agent/conversation/async_stream.py +0 -0
  274. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/agent/conversation/citation.py +0 -0
  275. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/agent/conversation/content.py +0 -0
  276. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/agent/conversation/conversation.py +0 -0
  277. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/agent/conversation/event.py +0 -0
  278. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/agent/conversation/exchange.py +0 -0
  279. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/agent/conversation/message.py +0 -0
  280. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/agent/conversation/meta.py +0 -0
  281. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/agent/conversation/tool.py +0 -0
  282. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/agent/models/agent.py +0 -0
  283. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/agent/models/evals.py +0 -0
  284. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/agent/react/__init__.py +0 -0
  285. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/agent/react/prompts.py +0 -0
  286. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/agent/react/tools.py +0 -0
  287. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/_helpers/__init__.py +0 -0
  288. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/_helpers/evaluators_helpers.py +0 -0
  289. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/_helpers/helpers.py +0 -0
  290. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators/__init__.py +0 -0
  291. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators/base_evaluator.py +0 -0
  292. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators/contains_evaluator.py +0 -0
  293. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators/exact_match_evaluator.py +0 -0
  294. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators/json_similarity_evaluator.py +0 -0
  295. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators/legacy_base_evaluator.py +0 -0
  296. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators/legacy_deterministic_evaluator_base.py +0 -0
  297. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators/legacy_exact_match_evaluator.py +0 -0
  298. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators/legacy_json_similarity_evaluator.py +0 -0
  299. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators/legacy_llm_as_judge_evaluator.py +0 -0
  300. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators/legacy_trajectory_evaluator.py +0 -0
  301. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators/llm_as_judge_evaluator.py +0 -0
  302. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators/llm_judge_output_evaluator.py +0 -0
  303. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators/llm_judge_trajectory_evaluator.py +0 -0
  304. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators/output_evaluator.py +0 -0
  305. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators/tool_call_args_evaluator.py +0 -0
  306. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators/tool_call_count_evaluator.py +0 -0
  307. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators/tool_call_order_evaluator.py +0 -0
  308. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators/tool_call_output_evaluator.py +0 -0
  309. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators_types/ContainsEvaluator.json +0 -0
  310. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators_types/ExactMatchEvaluator.json +0 -0
  311. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators_types/JsonSimilarityEvaluator.json +0 -0
  312. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators_types/LLMJudgeOutputEvaluator.json +0 -0
  313. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators_types/LLMJudgeSimulationTrajectoryEvaluator.json +0 -0
  314. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators_types/LLMJudgeStrictJSONSimilarityOutputEvaluator.json +0 -0
  315. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators_types/LLMJudgeTrajectoryEvaluator.json +0 -0
  316. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators_types/ToolCallArgsEvaluator.json +0 -0
  317. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators_types/ToolCallCountEvaluator.json +0 -0
  318. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators_types/ToolCallOrderEvaluator.json +0 -0
  319. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators_types/ToolCallOutputEvaluator.json +0 -0
  320. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/evaluators_types/generate_types.py +0 -0
  321. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/mocks/__init__.py +0 -0
  322. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/mocks/mockable.py +0 -0
  323. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/models/__init__.py +0 -0
  324. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/models/llm_judge_types.py +0 -0
  325. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/eval/models/models.py +0 -0
  326. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/models/__init__.py +0 -0
  327. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/models/action_schema.py +0 -0
  328. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/models/actions.py +0 -0
  329. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/models/assets.py +0 -0
  330. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/models/attachment.py +0 -0
  331. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/models/auth.py +0 -0
  332. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/models/buckets.py +0 -0
  333. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/models/connections.py +0 -0
  334. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/models/context_grounding.py +0 -0
  335. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/models/context_grounding_index.py +0 -0
  336. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/models/documents.py +0 -0
  337. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/models/entities.py +0 -0
  338. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/models/errors.py +0 -0
  339. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/models/exceptions.py +0 -0
  340. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/models/guardrails.py +0 -0
  341. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/models/interrupt_models.py +0 -0
  342. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/models/job.py +0 -0
  343. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/models/llm_gateway.py +0 -0
  344. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/models/processes.py +0 -0
  345. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/models/queues.py +0 -0
  346. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/py.typed +0 -0
  347. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/telemetry/__init__.py +0 -0
  348. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/telemetry/_constants.py +0 -0
  349. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/telemetry/_track.py +0 -0
  350. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/tracing/__init__.py +0 -0
  351. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/tracing/_otel_exporters.py +0 -0
  352. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/tracing/_traced.py +0 -0
  353. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/tracing/_utils.py +0 -0
  354. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/utils/__init__.py +0 -0
  355. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/utils/_endpoints_manager.py +0 -0
  356. {uipath-2.1.124 → uipath-2.1.126}/src/uipath/utils/dynamic_schema.py +0 -0
  357. {uipath-2.1.124 → uipath-2.1.126}/testcases/apicalls-testcase/main.py +0 -0
  358. {uipath-2.1.124 → uipath-2.1.126}/testcases/apicalls-testcase/pyproject.toml +0 -0
  359. {uipath-2.1.124 → uipath-2.1.126}/testcases/apicalls-testcase/run.sh +0 -0
  360. {uipath-2.1.124 → uipath-2.1.126}/testcases/apicalls-testcase/src/assert.py +0 -0
  361. {uipath-2.1.124 → uipath-2.1.126}/testcases/basic-testcase/main.py +0 -0
  362. {uipath-2.1.124 → uipath-2.1.126}/testcases/basic-testcase/pyproject.toml +0 -0
  363. {uipath-2.1.124 → uipath-2.1.126}/testcases/basic-testcase/run.sh +0 -0
  364. {uipath-2.1.124 → uipath-2.1.126}/testcases/basic-testcase/src/assert.py +0 -0
  365. {uipath-2.1.124 → uipath-2.1.126}/testcases/common/validate_output.sh +0 -0
  366. {uipath-2.1.124 → uipath-2.1.126}/testcases/langchain-cross/agent.mermaid +0 -0
  367. {uipath-2.1.124 → uipath-2.1.126}/testcases/langchain-cross/langgraph.json +0 -0
  368. {uipath-2.1.124 → uipath-2.1.126}/testcases/langchain-cross/pyproject.toml +0 -0
  369. {uipath-2.1.124 → uipath-2.1.126}/testcases/langchain-cross/run.sh +0 -0
  370. {uipath-2.1.124 → uipath-2.1.126}/testcases/langchain-cross/src/assert.py +0 -0
  371. {uipath-2.1.124 → uipath-2.1.126}/testcases/langchain-cross/src/main.py +0 -0
  372. {uipath-2.1.124 → uipath-2.1.126}/testcases/llamaindex-cross/agent.mermaid +0 -0
  373. {uipath-2.1.124 → uipath-2.1.126}/testcases/llamaindex-cross/llama_index.json +0 -0
  374. {uipath-2.1.124 → uipath-2.1.126}/testcases/llamaindex-cross/pyproject.toml +0 -0
  375. {uipath-2.1.124 → uipath-2.1.126}/testcases/llamaindex-cross/run.sh +0 -0
  376. {uipath-2.1.124 → uipath-2.1.126}/testcases/llamaindex-cross/src/assert.py +0 -0
  377. {uipath-2.1.124 → uipath-2.1.126}/testcases/llamaindex-cross/src/main.py +0 -0
  378. {uipath-2.1.124 → uipath-2.1.126}/testcases/tools-evals/pyproject.toml +0 -0
  379. {uipath-2.1.124 → uipath-2.1.126}/testcases/tools-evals/run.sh +0 -0
  380. {uipath-2.1.124 → uipath-2.1.126}/testcases/tools-evals/src/assert.py +0 -0
  381. {uipath-2.1.124 → uipath-2.1.126}/tests/__init__.py +0 -0
  382. {uipath-2.1.124 → uipath-2.1.126}/tests/agent/models/test_agent.py +0 -0
  383. {uipath-2.1.124 → uipath-2.1.126}/tests/agent/models/test_evals.py +0 -0
  384. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/conftest.py +0 -0
  385. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/eval/evals/eval-sets/default.json +0 -0
  386. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/eval/evals/evaluators/equality.json +0 -0
  387. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/eval/mocks/test_input_mocker.py +0 -0
  388. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/eval/mocks/test_mocks.py +0 -0
  389. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/eval/test_evaluate.py +0 -0
  390. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/eval/test_progress_reporter.py +0 -0
  391. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/evaluators/test_json_similarity_evaluator.py +0 -0
  392. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/mocks/bindings_script.py +0 -0
  393. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/mocks/pyproject.toml +0 -0
  394. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/mocks/simple_script.py +0 -0
  395. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/mocks/uipath-mock.json +0 -0
  396. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/mocks/uipath-simple-script-mock.json +0 -0
  397. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/models/test_runtime_schema.py +0 -0
  398. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/test_auth.py +0 -0
  399. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/test_hitl.py +0 -0
  400. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/test_init.py +0 -0
  401. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/test_init_agents_md.py +0 -0
  402. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/test_input_args.py +0 -0
  403. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/test_invoke.py +0 -0
  404. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/test_new.py +0 -0
  405. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/test_oidc_utils.py +0 -0
  406. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/test_pack.py +0 -0
  407. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/test_portal_service_ensure_valid_token.py +0 -0
  408. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/test_publish.py +0 -0
  409. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/test_pull.py +0 -0
  410. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/test_push.py +0 -0
  411. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/test_run.py +0 -0
  412. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/test_utils.py +0 -0
  413. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/utils/common.py +0 -0
  414. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/utils/project_details.py +0 -0
  415. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/utils/test_dynamic_schema.py +0 -0
  416. {uipath-2.1.124 → uipath-2.1.126}/tests/cli/utils/uipath_json.py +0 -0
  417. {uipath-2.1.124 → uipath-2.1.126}/tests/conftest.py +0 -0
  418. {uipath-2.1.124 → uipath-2.1.126}/tests/evaluators/__init__.py +0 -0
  419. {uipath-2.1.124 → uipath-2.1.126}/tests/evaluators/test_evaluator_aggregation.py +0 -0
  420. {uipath-2.1.124 → uipath-2.1.126}/tests/evaluators/test_evaluator_helpers.py +0 -0
  421. {uipath-2.1.124 → uipath-2.1.126}/tests/evaluators/test_evaluator_methods.py +0 -0
  422. {uipath-2.1.124 → uipath-2.1.126}/tests/evaluators/test_evaluator_schemas.py +0 -0
  423. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/services/conftest.py +0 -0
  424. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/services/test_actions_service.py +0 -0
  425. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/services/test_api_client.py +0 -0
  426. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/services/test_assets_service.py +0 -0
  427. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/services/test_attachments_service.py +0 -0
  428. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/services/test_base_service.py +0 -0
  429. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/services/test_buckets_service.py +0 -0
  430. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/services/test_connections_service.py +0 -0
  431. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/services/test_context_grounding_service.py +0 -0
  432. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/services/test_documents_service.py +0 -0
  433. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/services/test_entities_service.py +0 -0
  434. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/services/test_external_application_service.py +0 -0
  435. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/services/test_folder_service.py +0 -0
  436. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/services/test_guardrails_service.py +0 -0
  437. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/services/test_jobs_service.py +0 -0
  438. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/services/test_llm_integration.py +0 -0
  439. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/services/test_llm_schema_cleanup.py +0 -0
  440. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/services/test_llm_service.py +0 -0
  441. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/services/test_processes_service.py +0 -0
  442. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/services/test_queues_service.py +0 -0
  443. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
  444. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/services/tests_data/documents_service/classification_response.json +0 -0
  445. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/services/tests_data/documents_service/create_validation_action_response.json +0 -0
  446. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/services/tests_data/documents_service/ixp_extraction_response.json +0 -0
  447. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/services/tests_data/documents_service/modern_extraction_response.json +0 -0
  448. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/services/tests_data/documents_service/validated_result.json +0 -0
  449. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/test_config.py +0 -0
  450. {uipath-2.1.124 → uipath-2.1.126}/tests/sdk/test_uipath_caching.py +0 -0
  451. {uipath-2.1.124 → uipath-2.1.126}/tests/tracing/test_otel_exporters.py +0 -0
  452. {uipath-2.1.124 → uipath-2.1.126}/tests/tracing/test_span_utils.py +0 -0
  453. {uipath-2.1.124 → uipath-2.1.126}/tests/tracing/test_traced.py +0 -0
  454. {uipath-2.1.124 → uipath-2.1.126}/tests/tracing/test_tracing_manager.py +0 -0
@@ -19,4 +19,4 @@ jobs:
19
19
  uses: ./.github/workflows/lint.yml
20
20
 
21
21
  test:
22
- uses: ./.github/workflows/test.yml
22
+ uses: ./.github/workflows/test.yml
@@ -0,0 +1,53 @@
1
+ trigger: none
2
+ pr: none
3
+
4
+ schedules:
5
+ - cron: "0 11 * * 1"
6
+ displayName: "Every Monday at 1:00 PM"
7
+ branches:
8
+ include:
9
+ - main
10
+ always: true
11
+
12
+ resources:
13
+ repositories:
14
+ - repository: codeql
15
+ type: github
16
+ name: UiPath/AzurePipelinesTemplates
17
+ ref: refs/tags/uipath.security.codeql.1.9.5
18
+ endpoint: UiPath
19
+ - repository: fossa
20
+ type: github
21
+ name: UiPath/AzurePipelinesTemplates
22
+ ref: refs/tags/uipath.security.fossa.3.0.13
23
+ endpoint: UiPath
24
+
25
+ variables:
26
+ - template: ./variables.yml
27
+
28
+ stages:
29
+ - stage: FOSSA
30
+ dependsOn: []
31
+ jobs:
32
+ - job: FOSSA
33
+ steps:
34
+ - template: Security/fossa.steps.yml@fossa
35
+ parameters:
36
+ OS: linux
37
+ azureSubscription: $(azureInternalProductionEaConnectionName)
38
+ FOSSAFlags: '--project "Coded Agents" --branch "$(Build.SourceBranch)" --revision "$(Build.SourceVersion)-$(Build.BuildId)"'
39
+ FOSSATestFlags: '--project "Coded Agents" --revision "$(Build.SourceVersion)-$(Build.BuildId)"'
40
+ ${{ if contains(variables['Build.SourceBranch'], 'main') }}:
41
+ publishSecurityReports: true
42
+
43
+
44
+ - stage: CODEQL
45
+ dependsOn: []
46
+ jobs:
47
+ - job: CODEQL
48
+ steps:
49
+ - template: Security/codeql.interpreted.steps.yml@codeql
50
+ parameters:
51
+ os: 'linux64'
52
+ language: 'python'
53
+ azureSubscription: $(azureInternalProductionEaConnectionName)
@@ -0,0 +1,2 @@
1
+ variables:
2
+ azureInternalProductionEaConnectionName: Internal-Production-EA
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: uipath
3
- Version: 2.1.124
3
+ Version: 2.1.126
4
4
  Summary: Python SDK and CLI for UiPath Platform, enabling programmatic interaction with automation services, process management, and deployment tools.
5
5
  Project-URL: Homepage, https://uipath.com
6
6
  Project-URL: Repository, https://github.com/UiPath/uipath-python
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "uipath"
3
- version = "2.1.124"
3
+ version = "2.1.126"
4
4
  description = "Python SDK and CLI for UiPath Platform, enabling programmatic interaction with automation services, process management, and deployment tools."
5
5
  readme = { file = "README.md", content-type = "text/markdown" }
6
6
  requires-python = ">=3.10"
@@ -152,6 +152,8 @@ def generate_quick_api_docs() -> str:
152
152
  Returns:
153
153
  Markdown string with SDK API documentation
154
154
  """
155
+ from functools import cached_property
156
+
155
157
  from uipath import UiPath
156
158
 
157
159
  output = StringIO()
@@ -178,7 +180,7 @@ def generate_quick_api_docs() -> str:
178
180
  if name.startswith("_"):
179
181
  continue
180
182
  attr = getattr(UiPath, name, None)
181
- if isinstance(attr, property):
183
+ if isinstance(attr, (property, cached_property)):
182
184
  uipath_properties.append(name)
183
185
 
184
186
  uipath_properties.sort()
@@ -186,12 +188,19 @@ def generate_quick_api_docs() -> str:
186
188
  for service_name in uipath_properties:
187
189
  try:
188
190
  service_property = getattr(UiPath, service_name)
189
- if not isinstance(service_property, property):
191
+ if not isinstance(service_property, (property, cached_property)):
190
192
  continue
191
193
 
192
- service_doc = (
193
- service_property.fget.__doc__ if service_property.fget else None
194
- )
194
+ # Get the function object (property uses .fget, cached_property uses .func)
195
+ if isinstance(service_property, cached_property):
196
+ func = service_property.func
197
+ else:
198
+ func = service_property.fget # type: ignore[assignment]
199
+
200
+ if func is None:
201
+ continue
202
+
203
+ service_doc = func.__doc__
195
204
 
196
205
  description = (
197
206
  service_doc.strip().split("\n")[0]
@@ -200,9 +209,8 @@ def generate_quick_api_docs() -> str:
200
209
  )
201
210
 
202
211
  return_annotation = None
203
- if service_property.fget:
204
- property_sig = inspect.signature(service_property.fget)
205
- return_annotation = property_sig.return_annotation
212
+ property_sig = inspect.signature(func)
213
+ return_annotation = property_sig.return_annotation
206
214
 
207
215
  output.write(f"### {service_name.replace('_', ' ').title()}\n\n")
208
216
  output.write(f"{description}\n\n")
@@ -473,6 +481,115 @@ def generate_cli_docs() -> str:
473
481
  return output.getvalue()
474
482
 
475
483
 
484
+ def generate_service_cli_docs() -> str:
485
+ """Generate documentation for service CLI commands.
486
+
487
+ Returns:
488
+ Markdown string with service CLI commands documentation
489
+ """
490
+ from uipath._cli import cli
491
+
492
+ output = StringIO()
493
+ output.write("\n## Service Commands Reference\n\n")
494
+ output.write(
495
+ "The UiPath CLI provides commands for interacting with UiPath platform services. "
496
+ "These commands allow you to manage buckets, assets, jobs, and other resources.\n\n"
497
+ )
498
+
499
+ # Find all service command groups (Groups registered in CLI)
500
+ service_groups = []
501
+ for name, cmd in sorted(cli.commands.items()):
502
+ if isinstance(cmd, click.Group) and name not in [
503
+ "init",
504
+ "run",
505
+ "eval",
506
+ "new",
507
+ "pack",
508
+ "publish",
509
+ "deploy",
510
+ ]:
511
+ service_groups.append((name, cmd))
512
+
513
+ if not service_groups:
514
+ return ""
515
+
516
+ for service_name, service_group in service_groups:
517
+ output.write(f"### `uipath {service_name}`\n\n")
518
+ output.write(f"{service_group.help or 'Manage ' + service_name}\n\n")
519
+
520
+ # Document subcommands
521
+ if hasattr(service_group, "commands"):
522
+ subcommands = sorted(service_group.commands.items())
523
+ output.write("**Subcommands:**\n\n")
524
+
525
+ for subcmd_name, subcmd in subcommands:
526
+ # Handle nested groups (e.g., buckets files)
527
+ if isinstance(subcmd, click.Group):
528
+ output.write(f"#### `uipath {service_name} {subcmd_name}`\n\n")
529
+ output.write(f"{subcmd.help or f'{subcmd_name} commands'}\n\n")
530
+
531
+ if hasattr(subcmd, "commands"):
532
+ nested_cmds = sorted(subcmd.commands.items())
533
+ for nested_name, nested_cmd in nested_cmds:
534
+ cmd_info = get_command_help(
535
+ nested_cmd,
536
+ f"{service_name} {subcmd_name} {nested_name}",
537
+ )
538
+ _write_command_doc(
539
+ output, cmd_info, service_name, subcmd_name
540
+ )
541
+ else:
542
+ cmd_info = get_command_help(subcmd, f"{service_name} {subcmd_name}")
543
+ _write_command_doc(output, cmd_info, service_name)
544
+
545
+ output.write("---\n\n")
546
+
547
+ return output.getvalue()
548
+
549
+
550
+ def _write_command_doc(
551
+ output: StringIO, cmd_info: Dict[str, Any], *path_parts: str
552
+ ) -> None:
553
+ """Write command documentation to output stream.
554
+
555
+ Args:
556
+ output: StringIO buffer to write to
557
+ cmd_info: Command information dict
558
+ path_parts: Command path parts (e.g., "buckets", "files")
559
+ """
560
+ full_path = " ".join(path_parts + (cmd_info["name"].split()[-1],))
561
+
562
+ output.write(f"**`uipath {full_path}`**\n\n")
563
+ output.write(f"{cmd_info['help']}\n\n")
564
+
565
+ arguments = [p for p in cmd_info["params"] if p["type"] == "Argument"]
566
+ options = [p for p in cmd_info["params"] if p["type"] == "Option"]
567
+
568
+ if arguments:
569
+ output.write("Arguments:\n")
570
+ for arg in arguments:
571
+ required = " (required)" if arg.get("required") else ""
572
+ help_text = arg["help"] if arg["help"] else "N/A"
573
+ output.write(f"- `{arg['name']}`{required}: {help_text}\n")
574
+ output.write("\n")
575
+
576
+ if options:
577
+ output.write("Options:\n")
578
+ for opt in options:
579
+ opts_str = ", ".join(f"`{o}`" for o in opt.get("opts", []))
580
+ help_text = opt["help"] if opt["help"] else ""
581
+
582
+ if opt.get("default") is not None and not opt.get("is_flag"):
583
+ default = opt["default"]
584
+ if isinstance(default, str):
585
+ help_text += f" (default: `{default}`)"
586
+ else:
587
+ help_text += f" (default: `{default}`)"
588
+
589
+ output.write(f"- {opts_str}: {help_text}\n")
590
+ output.write("\n")
591
+
592
+
476
593
  def generate_agents_md_reference_files() -> None:
477
594
  """Generate separate reference files."""
478
595
  resources_dir = Path(__file__).parent.parent / "src" / "uipath" / "_resources"
@@ -482,12 +599,15 @@ def generate_agents_md_reference_files() -> None:
482
599
 
483
600
  api_docs = generate_quick_api_docs()
484
601
  cli_docs = generate_cli_docs()
602
+ service_cli_docs = generate_service_cli_docs()
485
603
 
486
604
  with open(sdk_reference_path, "w", encoding="utf-8") as f:
487
605
  f.write(api_docs.lstrip("\n"))
488
606
 
489
607
  with open(cli_reference_path, "w", encoding="utf-8") as f:
490
608
  f.write(cli_docs.lstrip("\n"))
609
+ if service_cli_docs:
610
+ f.write(service_cli_docs)
491
611
 
492
612
 
493
613
  def main():
@@ -19,7 +19,7 @@ from uipath.models.auth import TokenData
19
19
  class AuthService:
20
20
  def __init__(
21
21
  self,
22
- environment: str,
22
+ environment: Optional[str],
23
23
  *,
24
24
  force: bool,
25
25
  client_id: Optional[str] = None,
@@ -34,7 +34,7 @@ class AuthService:
34
34
  self._client_secret = client_secret
35
35
  self._base_url = base_url
36
36
  self._tenant = tenant
37
- self._domain = resolve_domain(self._base_url, environment, self._force)
37
+ self._domain = resolve_domain(self._base_url, environment)
38
38
  self._scope = scope
39
39
 
40
40
  def authenticate(self) -> None:
@@ -7,9 +7,7 @@ from .._utils._console import ConsoleLogger
7
7
  console = ConsoleLogger()
8
8
 
9
9
 
10
- def resolve_domain(
11
- base_url: Optional[str], environment: Optional[str], force: bool = False
12
- ) -> str:
10
+ def resolve_domain(base_url: Optional[str], environment: Optional[str]) -> str:
13
11
  """Resolve the UiPath domain, giving priority to base_url when valid.
14
12
 
15
13
  Args:
@@ -27,10 +25,9 @@ def resolve_domain(
27
25
  if domain:
28
26
  return domain
29
27
 
30
- # If base_url is not set (or force is False), check UIPATH_URL
31
- if not base_url or not force:
28
+ if environment is None:
32
29
  uipath_url = os.getenv("UIPATH_URL")
33
- if uipath_url and environment == "cloud":
30
+ if uipath_url:
34
31
  parsed = urlparse(uipath_url)
35
32
  if parsed.scheme and parsed.netloc:
36
33
  domain = f"{parsed.scheme}://{parsed.netloc}"
@@ -1,10 +1,14 @@
1
+ import json
1
2
  import os
3
+ from pathlib import Path
2
4
  from typing import Optional
3
5
  from urllib.parse import urlparse
4
6
 
5
7
  import click
6
8
  from dotenv import load_dotenv
7
9
 
10
+ from ..._config import UiPathConfig
11
+ from ..._utils._bindings import ResourceOverwrite
8
12
  from ..._utils.constants import DOTENV_FILE
9
13
  from ..spinner import Spinner
10
14
 
@@ -34,7 +38,6 @@ def environment_options(function):
34
38
  "--cloud",
35
39
  "environment",
36
40
  flag_value="cloud",
37
- default=True,
38
41
  help="Use production environment",
39
42
  )(function)
40
43
  return function
@@ -116,3 +119,37 @@ def clean_directory(directory: str) -> None:
116
119
 
117
120
  def load_environment_variables():
118
121
  load_dotenv(dotenv_path=os.path.join(os.getcwd(), DOTENV_FILE), override=True)
122
+
123
+
124
+ async def read_resource_overwrites_from_file(
125
+ directory_path: Optional[Path] = None,
126
+ ) -> dict[str, ResourceOverwrite]:
127
+ """Read resource overwrites from a JSON file."""
128
+ config_file_name = UiPathConfig.config_file_name
129
+ if directory_path is not None:
130
+ file_path = Path(f"{directory_path}/{config_file_name}")
131
+ else:
132
+ file_path = Path(f"{config_file_name}")
133
+
134
+ overwrites_dict = {}
135
+
136
+ try:
137
+ with open(file_path, "r") as f:
138
+ data = json.load(f)
139
+ resource_overwrites = (
140
+ data.get("runtime", {})
141
+ .get("internalArguments", {})
142
+ .get("resourceOverwrites", {})
143
+ )
144
+
145
+ for key, value in resource_overwrites.items():
146
+ overwrite = ResourceOverwrite.model_validate(value)
147
+ overwrites_dict[key] = overwrite
148
+
149
+ # Return empty dict if file doesn't exist or invalid json
150
+ except FileNotFoundError:
151
+ pass
152
+ except json.JSONDecodeError:
153
+ pass
154
+
155
+ return overwrites_dict
@@ -1,12 +1,18 @@
1
1
  import json
2
2
  import os
3
+ from enum import Enum
3
4
  from functools import wraps
4
5
  from pathlib import PurePath
5
6
  from typing import Any, Callable, List, Optional, Union
6
7
 
8
+ import click
7
9
  from pydantic import BaseModel, ConfigDict, Field, field_validator
8
10
 
9
- from uipath._utils.constants import HEADER_SW_LOCK_KEY
11
+ from uipath import UiPath
12
+ from uipath._cli._utils._console import ConsoleLogger
13
+ from uipath._config import UiPathConfig
14
+ from uipath._utils._bindings import ResourceOverwrite
15
+ from uipath._utils.constants import ENV_TENANT_ID, HEADER_SW_LOCK_KEY, HEADER_TENANT_ID
10
16
  from uipath.models.exceptions import EnrichedException
11
17
  from uipath.tracing import traced
12
18
 
@@ -131,6 +137,54 @@ class LockInfo(BaseModel):
131
137
  solution_lock_key: Optional[str] = Field(alias="solutionLockKey")
132
138
 
133
139
 
140
+ class Severity(str, Enum):
141
+ """Severity level for virtual resource operation results."""
142
+
143
+ SUCCESS = "success"
144
+ ATTENTION = "attention"
145
+ WARN = "warn"
146
+
147
+
148
+ class VirtualResourceRequest(BaseModel):
149
+ model_config = ConfigDict(
150
+ populate_by_name=True,
151
+ )
152
+
153
+ kind: str = Field(alias="kind")
154
+ name: str = Field(alias="name")
155
+ type: Optional[str] = Field(default=None, alias="type")
156
+ activity_name: Optional[str] = Field(default=None, alias="activityName")
157
+ api_version: Optional[str] = Field(default=None, alias="apiVersion")
158
+
159
+
160
+ class VirtualResourceResult(BaseModel):
161
+ """Result of a virtual resource creation operation.
162
+
163
+ Attributes:
164
+ severity: The severity level (log, warn or attention)
165
+ message: The result message with styling
166
+ """
167
+
168
+ severity: Severity
169
+ message: str
170
+
171
+
172
+ class ResourceOverwriteData(BaseModel):
173
+ """Represents the overwrite details from the API response.
174
+
175
+ Attributes:
176
+ name: The name of the resource being overwritten
177
+ folder_path: The folder path of the overwrite resource
178
+ """
179
+
180
+ model_config = ConfigDict(
181
+ populate_by_name=True,
182
+ )
183
+
184
+ name: str = Field(alias="name")
185
+ folder_path: str = Field(alias="folderPath")
186
+
187
+
134
188
  def get_folder_by_name(
135
189
  structure: ProjectStructure, folder_name: str
136
190
  ) -> Optional[ProjectFolder]:
@@ -232,9 +286,7 @@ def with_lock_retry(func: Callable[..., Any]) -> Callable[..., Any]:
232
286
  return await func(self, *args, **kwargs)
233
287
  except EnrichedException as e:
234
288
  if e.status_code == 423:
235
- from uipath._cli._utils._console import ConsoleLogger
236
-
237
- console = ConsoleLogger()
289
+ console = ConsoleLogger().get_instance()
238
290
  console.error(
239
291
  "The project is temporarily locked. This could be due to modifications or active processes. Please wait a moment and try again."
240
292
  )
@@ -284,16 +336,189 @@ class StudioSolutionsClient:
284
336
 
285
337
 
286
338
  class StudioClient:
287
- def __init__(self, project_id: str):
288
- from uipath import UiPath
289
-
290
- self.uipath: UiPath = UiPath()
339
+ def __init__(self, project_id: str, uipath: Optional[UiPath] = None):
340
+ self.uipath: UiPath = uipath or UiPath()
291
341
  self.file_operations_base_url: str = (
292
342
  f"/studio_/backend/api/Project/{project_id}/FileOperations"
293
343
  )
294
344
  self._lock_operations_base_url: str = (
295
345
  f"/studio_/backend/api/Project/{project_id}/Lock"
296
346
  )
347
+ self._project_id = project_id
348
+ self._solution_id_cache: Optional[str] = None
349
+ self._resources_cache: Optional[List[dict[str, Any]]] = None
350
+
351
+ async def _get_solution_id(self) -> str:
352
+ # implement property cache logic as coroutines are not supported
353
+ if self._solution_id_cache is not None:
354
+ return self._solution_id_cache
355
+ response = await self.uipath.api_client.request_async(
356
+ "GET",
357
+ url=f"/studio_/backend/api/Project/{self._project_id}",
358
+ scoped="org",
359
+ )
360
+ self._solution_id_cache = response.json()["solutionId"]
361
+ return self._solution_id_cache
362
+
363
+ async def _get_existing_resources(self) -> List[dict[str, Any]]:
364
+ if self._resources_cache is not None:
365
+ return self._resources_cache
366
+
367
+ solution_id = await self._get_solution_id()
368
+ response = await self.uipath.api_client.request_async(
369
+ "GET",
370
+ url=f"/studio_/backend/api/resourcebuilder/solutions/{solution_id}/entities",
371
+ scoped="org",
372
+ )
373
+ resources_data = response.json().get("resources", [])
374
+ self._resources_cache = [
375
+ {"name": r.get("name"), "kind": r.get("kind")} for r in resources_data
376
+ ]
377
+ return self._resources_cache
378
+
379
+ async def get_resource_overwrites(self) -> dict[str, ResourceOverwrite]:
380
+ """Get resource overwrites from the solution.
381
+
382
+ Returns:
383
+ dict[str, ResourceOverwrite]: Dict of resource overwrites
384
+ """
385
+ if not os.path.exists(UiPathConfig.bindings_file_path):
386
+ return {}
387
+
388
+ with open(UiPathConfig.bindings_file_path, "rb") as f:
389
+ file_content = f.read()
390
+
391
+ solution_id = await self._get_solution_id()
392
+ tenant_id = os.getenv(ENV_TENANT_ID, None)
393
+
394
+ files = [
395
+ (
396
+ "file",
397
+ (
398
+ os.path.basename(UiPathConfig.bindings_file_path),
399
+ file_content,
400
+ "application/json",
401
+ ),
402
+ )
403
+ ]
404
+
405
+ response = await self.uipath.api_client.request_async(
406
+ "POST",
407
+ url=f"/studio_/backend/api/resourcebuilder/{solution_id}/binding-overwrites",
408
+ scoped="org",
409
+ headers={HEADER_TENANT_ID: tenant_id},
410
+ files=files,
411
+ )
412
+ data = response.json()
413
+ overwrites = {}
414
+
415
+ for key, value in data.items():
416
+ overwrites[key] = ResourceOverwrite.model_validate(value)
417
+
418
+ return overwrites
419
+
420
+ async def create_virtual_resource(
421
+ self, virtual_resource_request: VirtualResourceRequest
422
+ ) -> VirtualResourceResult:
423
+ """Create a virtual resource or return appropriate status if it already exists.
424
+
425
+ Args:
426
+ virtual_resource_request: The virtual resource request details
427
+
428
+ Returns:
429
+ VirtualResourceResult: Result indicating the operation status and a formatted message
430
+ """
431
+ # Build base message with resource details
432
+ base_message_parts = [
433
+ f"Resource {click.style(virtual_resource_request.name, fg='cyan')}",
434
+ f" (kind: {click.style(virtual_resource_request.kind, fg='yellow')}",
435
+ ]
436
+
437
+ if virtual_resource_request.type:
438
+ base_message_parts.append(
439
+ f", type: {click.style(virtual_resource_request.type, fg='yellow')}"
440
+ )
441
+
442
+ if virtual_resource_request.activity_name:
443
+ base_message_parts.append(
444
+ f", activity: {click.style(virtual_resource_request.activity_name, fg='yellow')}"
445
+ )
446
+
447
+ base_message_parts.append(")")
448
+ base_message = "".join(base_message_parts)
449
+
450
+ existing_resources = await self._get_existing_resources()
451
+
452
+ # Check if resource with same kind and name exists
453
+ existing_same_kind = next(
454
+ (
455
+ r
456
+ for r in existing_resources
457
+ if r["name"] == virtual_resource_request.name
458
+ and r["kind"] == virtual_resource_request.kind
459
+ ),
460
+ None,
461
+ )
462
+ if existing_same_kind:
463
+ message = f"{base_message} already exists. Skipping..."
464
+ return VirtualResourceResult(severity=Severity.ATTENTION, message=message)
465
+
466
+ # Check if resource with same name but different kind exists
467
+ existing_diff_kind = next(
468
+ (
469
+ r
470
+ for r in existing_resources
471
+ if r["name"] == virtual_resource_request.name
472
+ and r["kind"] != virtual_resource_request.kind
473
+ ),
474
+ None,
475
+ )
476
+ if existing_diff_kind:
477
+ message = (
478
+ f"Cannot create {base_message}. "
479
+ f"A resource with this name already exists with kind {click.style(existing_diff_kind['kind'], fg='yellow')}. "
480
+ f"Consider renaming the resource in code."
481
+ )
482
+ return VirtualResourceResult(severity=Severity.WARN, message=message)
483
+
484
+ # Create the virtual resource
485
+ solution_id = await self._get_solution_id()
486
+ response = await self.uipath.api_client.request_async(
487
+ "POST",
488
+ url=f"/studio_/backend/api/resourcebuilder/solutions/{solution_id}/resources/virtual",
489
+ scoped="org",
490
+ json=virtual_resource_request.model_dump(exclude_none=True),
491
+ )
492
+ resource_key = response.json()["key"]
493
+ await self._update_resource_specs(
494
+ resource_key, new_specs={"name": virtual_resource_request.name}
495
+ )
496
+
497
+ # Update cache with newly created resource
498
+ if self._resources_cache is not None:
499
+ self._resources_cache.append(
500
+ {
501
+ "name": virtual_resource_request.name,
502
+ "kind": virtual_resource_request.kind,
503
+ }
504
+ )
505
+
506
+ message = f"{base_message} created successfully."
507
+ return VirtualResourceResult(severity=Severity.SUCCESS, message=message)
508
+
509
+ async def _update_resource_specs(
510
+ self, resource_key: str, new_specs: dict[str, Any]
511
+ ):
512
+ solution_id = await self._get_solution_id()
513
+ tenant_id = os.getenv(ENV_TENANT_ID, None)
514
+
515
+ await self.uipath.api_client.request_async(
516
+ "PATCH",
517
+ url=f"/studio_/backend/api/resourcebuilder/solutions/{solution_id}/resources/{resource_key}/configuration",
518
+ scoped="org",
519
+ json=new_specs,
520
+ headers={HEADER_TENANT_ID: tenant_id},
521
+ )
297
522
 
298
523
  @traced(name="get_project_structure", run_type="uipath")
299
524
  async def get_project_structure_async(self) -> ProjectStructure:
@@ -7,6 +7,9 @@ from typing import Optional
7
7
  import click
8
8
 
9
9
  from uipath._cli._utils._debug import setup_debugging
10
+ from uipath._cli._utils._studio_project import StudioClient
11
+ from uipath._config import UiPathConfig
12
+ from uipath._utils._bindings import ResourceOverwritesContext
10
13
  from uipath.tracing import LlmOpsHttpExporter
11
14
 
12
15
  from .._utils.constants import (
@@ -121,7 +124,7 @@ def debug(
121
124
  if debug_context.job_id:
122
125
  runtime_factory.add_span_exporter(LlmOpsHttpExporter())
123
126
 
124
- async def execute():
127
+ async def execute_debug_runtime():
125
128
  async with UiPathDebugRuntime.from_debug_context(
126
129
  factory=runtime_factory,
127
130
  context=debug_context,
@@ -129,6 +132,20 @@ def debug(
129
132
  ) as debug_runtime:
130
133
  await debug_runtime.execute()
131
134
 
135
+ async def execute():
136
+ project_id = UiPathConfig.project_id
137
+
138
+ if project_id:
139
+ studio_client = StudioClient(project_id)
140
+
141
+ async with ResourceOverwritesContext(
142
+ lambda: studio_client.get_resource_overwrites()
143
+ ) as ctx:
144
+ console.info(f"Applied {ctx.overwrites_count} overwrite(s)")
145
+ await execute_debug_runtime()
146
+ else:
147
+ await execute_debug_runtime()
148
+
132
149
  asyncio.run(execute())
133
150
  except Exception as e:
134
151
  console.error(