uipath 2.1.87__tar.gz → 2.1.89__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 (365) hide show
  1. uipath-2.1.89/.claude/agents/command-tester.md +100 -0
  2. uipath-2.1.89/.claude/commands/prepare-pr.md +60 -0
  3. {uipath-2.1.87 → uipath-2.1.89}/PKG-INFO +1 -1
  4. {uipath-2.1.87 → uipath-2.1.89}/pyproject.toml +1 -1
  5. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/__init__.py +2 -1
  6. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_evals/_models/_evaluation_set.py +13 -0
  7. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_evals/_runtime.py +18 -0
  8. uipath-2.1.89/src/uipath/_cli/_evals/mocks/input_mocker.py +111 -0
  9. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_evals/mocks/mocker.py +6 -0
  10. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_push/sw_file_handler.py +24 -40
  11. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_runtime/_logging.py +4 -0
  12. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_utils/_common.py +8 -0
  13. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_utils/_project_files.py +67 -37
  14. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/cli_init.py +12 -13
  15. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/cli_pull.py +22 -1
  16. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/agent/_utils.py +14 -1
  17. uipath-2.1.89/src/uipath/agent/loop/__init__.py +17 -0
  18. uipath-2.1.89/src/uipath/agent/loop/prompts.py +57 -0
  19. uipath-2.1.89/src/uipath/agent/loop/tools.py +42 -0
  20. uipath-2.1.89/tests/cli/eval/mocks/test_input_mocker.py +106 -0
  21. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/eval/mocks/test_mocks.py +1 -0
  22. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/test_init_agents_md.py +7 -14
  23. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/test_pull.py +7 -7
  24. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/test_push.py +21 -21
  25. {uipath-2.1.87 → uipath-2.1.89}/uv.lock +1 -1
  26. {uipath-2.1.87 → uipath-2.1.89}/.cursorrules +0 -0
  27. {uipath-2.1.87 → uipath-2.1.89}/.editorconfig +0 -0
  28. {uipath-2.1.87 → uipath-2.1.89}/.gitattributes +0 -0
  29. {uipath-2.1.87 → uipath-2.1.89}/.github/labeler.yml +0 -0
  30. {uipath-2.1.87 → uipath-2.1.89}/.github/workflows/auto-label.yml +0 -0
  31. {uipath-2.1.87 → uipath-2.1.89}/.github/workflows/cd.yml +0 -0
  32. {uipath-2.1.87 → uipath-2.1.89}/.github/workflows/ci.yml +0 -0
  33. {uipath-2.1.87 → uipath-2.1.89}/.github/workflows/commitlint.yml +0 -0
  34. {uipath-2.1.87 → uipath-2.1.89}/.github/workflows/integration_tests.yml +0 -0
  35. {uipath-2.1.87 → uipath-2.1.89}/.github/workflows/lint.yml +0 -0
  36. {uipath-2.1.87 → uipath-2.1.89}/.github/workflows/publish-dev.yml +0 -0
  37. {uipath-2.1.87 → uipath-2.1.89}/.github/workflows/publish-docs.yml +0 -0
  38. {uipath-2.1.87 → uipath-2.1.89}/.github/workflows/slack.yml +0 -0
  39. {uipath-2.1.87 → uipath-2.1.89}/.github/workflows/test-uipath-langchain.yml +0 -0
  40. {uipath-2.1.87 → uipath-2.1.89}/.github/workflows/test-uipath-llamaindex.yml +0 -0
  41. {uipath-2.1.87 → uipath-2.1.89}/.github/workflows/test.yml +0 -0
  42. {uipath-2.1.87 → uipath-2.1.89}/.gitignore +0 -0
  43. {uipath-2.1.87 → uipath-2.1.89}/.pre-commit-config.yaml +0 -0
  44. {uipath-2.1.87 → uipath-2.1.89}/.python-version +0 -0
  45. {uipath-2.1.87 → uipath-2.1.89}/.vscode/extensions.json +0 -0
  46. {uipath-2.1.87 → uipath-2.1.89}/.vscode/launch.json +0 -0
  47. {uipath-2.1.87 → uipath-2.1.89}/.vscode/settings.json +0 -0
  48. {uipath-2.1.87 → uipath-2.1.89}/CONTRIBUTING.md +0 -0
  49. {uipath-2.1.87 → uipath-2.1.89}/LICENSE +0 -0
  50. {uipath-2.1.87 → uipath-2.1.89}/README.md +0 -0
  51. {uipath-2.1.87 → uipath-2.1.89}/docs/CONTRIBUTING.md +0 -0
  52. {uipath-2.1.87 → uipath-2.1.89}/docs/FAQ.md +0 -0
  53. {uipath-2.1.87 → uipath-2.1.89}/docs/assets/env-preparation-failed-dark.png +0 -0
  54. {uipath-2.1.87 → uipath-2.1.89}/docs/assets/env-preparation-failed-light.png +0 -0
  55. {uipath-2.1.87 → uipath-2.1.89}/docs/assets/favicon.png +0 -0
  56. {uipath-2.1.87 → uipath-2.1.89}/docs/assets/llms.txt +0 -0
  57. {uipath-2.1.87 → uipath-2.1.89}/docs/assets/logo-dark.svg +0 -0
  58. {uipath-2.1.87 → uipath-2.1.89}/docs/assets/logo-light.svg +0 -0
  59. {uipath-2.1.87 → uipath-2.1.89}/docs/cli/index.md +0 -0
  60. {uipath-2.1.87 → uipath-2.1.89}/docs/core/actions.md +0 -0
  61. {uipath-2.1.87 → uipath-2.1.89}/docs/core/assets/cloud_env_var_dark.gif +0 -0
  62. {uipath-2.1.87 → uipath-2.1.89}/docs/core/assets/cloud_env_var_light.gif +0 -0
  63. {uipath-2.1.87 → uipath-2.1.89}/docs/core/assets/cloud_env_var_secret_dark.png +0 -0
  64. {uipath-2.1.87 → uipath-2.1.89}/docs/core/assets/cloud_env_var_secret_light.png +0 -0
  65. {uipath-2.1.87 → uipath-2.1.89}/docs/core/assets/copy_path_dark.png +0 -0
  66. {uipath-2.1.87 → uipath-2.1.89}/docs/core/assets/copy_path_light.png +0 -0
  67. {uipath-2.1.87 → uipath-2.1.89}/docs/core/assets.md +0 -0
  68. {uipath-2.1.87 → uipath-2.1.89}/docs/core/attachments.md +0 -0
  69. {uipath-2.1.87 → uipath-2.1.89}/docs/core/buckets.md +0 -0
  70. {uipath-2.1.87 → uipath-2.1.89}/docs/core/connections.md +0 -0
  71. {uipath-2.1.87 → uipath-2.1.89}/docs/core/context_grounding.md +0 -0
  72. {uipath-2.1.87 → uipath-2.1.89}/docs/core/documents.md +0 -0
  73. {uipath-2.1.87 → uipath-2.1.89}/docs/core/documents_models.md +0 -0
  74. {uipath-2.1.87 → uipath-2.1.89}/docs/core/environment_variables.md +0 -0
  75. {uipath-2.1.87 → uipath-2.1.89}/docs/core/getting_started.md +0 -0
  76. {uipath-2.1.87 → uipath-2.1.89}/docs/core/jobs.md +0 -0
  77. {uipath-2.1.87 → uipath-2.1.89}/docs/core/llm_gateway.md +0 -0
  78. {uipath-2.1.87 → uipath-2.1.89}/docs/core/processes.md +0 -0
  79. {uipath-2.1.87 → uipath-2.1.89}/docs/core/queues.md +0 -0
  80. {uipath-2.1.87 → uipath-2.1.89}/docs/core/traced.md +0 -0
  81. {uipath-2.1.87 → uipath-2.1.89}/docs/hooks.py +0 -0
  82. {uipath-2.1.87 → uipath-2.1.89}/docs/index.md +0 -0
  83. {uipath-2.1.87 → uipath-2.1.89}/docs/javascripts/extra.js +0 -0
  84. {uipath-2.1.87 → uipath-2.1.89}/docs/overrides/main.html +0 -0
  85. {uipath-2.1.87 → uipath-2.1.89}/docs/overrides/partials/actions.html +0 -0
  86. {uipath-2.1.87 → uipath-2.1.89}/docs/overrides/partials/logo.html +0 -0
  87. {uipath-2.1.87 → uipath-2.1.89}/docs/release_policy.md +0 -0
  88. {uipath-2.1.87 → uipath-2.1.89}/docs/sample_images/google-ADK-agent/agent-output.png +0 -0
  89. {uipath-2.1.87 → uipath-2.1.89}/docs/stylesheets/extra.css +0 -0
  90. {uipath-2.1.87 → uipath-2.1.89}/justfile +0 -0
  91. {uipath-2.1.87 → uipath-2.1.89}/mkdocs.yml +0 -0
  92. {uipath-2.1.87 → uipath-2.1.89}/py.typed +0 -0
  93. {uipath-2.1.87 → uipath-2.1.89}/samples/asset-modifier-agent/.env.example +0 -0
  94. {uipath-2.1.87 → uipath-2.1.89}/samples/asset-modifier-agent/README.md +0 -0
  95. {uipath-2.1.87 → uipath-2.1.89}/samples/asset-modifier-agent/input.json +0 -0
  96. {uipath-2.1.87 → uipath-2.1.89}/samples/asset-modifier-agent/main.py +0 -0
  97. {uipath-2.1.87 → uipath-2.1.89}/samples/asset-modifier-agent/pyproject.toml +0 -0
  98. {uipath-2.1.87 → uipath-2.1.89}/samples/asset-modifier-agent/uv.lock +0 -0
  99. {uipath-2.1.87 → uipath-2.1.89}/samples/calculator/README.md +0 -0
  100. {uipath-2.1.87 → uipath-2.1.89}/samples/calculator/evals/eval-sets/default.json +0 -0
  101. {uipath-2.1.87 → uipath-2.1.89}/samples/calculator/evals/evaluators/equality.json +0 -0
  102. {uipath-2.1.87 → uipath-2.1.89}/samples/calculator/evals/evaluators/llm-as-a-judge.json +0 -0
  103. {uipath-2.1.87 → uipath-2.1.89}/samples/calculator/main.py +0 -0
  104. {uipath-2.1.87 → uipath-2.1.89}/samples/calculator/pyproject.toml +0 -0
  105. {uipath-2.1.87 → uipath-2.1.89}/samples/calculator/uipath.json +0 -0
  106. {uipath-2.1.87 → uipath-2.1.89}/samples/event-trigger/.python-version +0 -0
  107. {uipath-2.1.87 → uipath-2.1.89}/samples/event-trigger/README.md +0 -0
  108. {uipath-2.1.87 → uipath-2.1.89}/samples/event-trigger/main.py +0 -0
  109. {uipath-2.1.87 → uipath-2.1.89}/samples/event-trigger/pyproject.toml +0 -0
  110. {uipath-2.1.87 → uipath-2.1.89}/samples/google-ADK-agent/.env.example +0 -0
  111. {uipath-2.1.87 → uipath-2.1.89}/samples/google-ADK-agent/README.md +0 -0
  112. {uipath-2.1.87 → uipath-2.1.89}/samples/google-ADK-agent/input.json +0 -0
  113. {uipath-2.1.87 → uipath-2.1.89}/samples/google-ADK-agent/multi_tool_agent/__init__.py +0 -0
  114. {uipath-2.1.87 → uipath-2.1.89}/samples/google-ADK-agent/multi_tool_agent/agent.py +0 -0
  115. {uipath-2.1.87 → uipath-2.1.89}/samples/google-ADK-agent/pyproject.toml +0 -0
  116. {uipath-2.1.87 → uipath-2.1.89}/samples/google-ADK-agent/uv.lock +0 -0
  117. {uipath-2.1.87 → uipath-2.1.89}/scripts/debug_test.py +0 -0
  118. {uipath-2.1.87 → uipath-2.1.89}/scripts/lint_httpx_client.py +0 -0
  119. {uipath-2.1.87 → uipath-2.1.89}/scripts/update_agents_md.py +0 -0
  120. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/__init__.py +0 -0
  121. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/README.md +0 -0
  122. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_auth/_auth_server.py +0 -0
  123. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_auth/_auth_service.py +0 -0
  124. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_auth/_models.py +0 -0
  125. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_auth/_oidc_utils.py +0 -0
  126. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_auth/_portal_service.py +0 -0
  127. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_auth/_url_utils.py +0 -0
  128. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_auth/_utils.py +0 -0
  129. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_auth/auth_config.json +0 -0
  130. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_auth/index.html +0 -0
  131. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_auth/localhost.crt +0 -0
  132. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_auth/localhost.key +0 -0
  133. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_dev/_terminal/__init__.py +0 -0
  134. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_dev/_terminal/_components/_chat.py +0 -0
  135. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_dev/_terminal/_components/_details.py +0 -0
  136. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_dev/_terminal/_components/_history.py +0 -0
  137. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_dev/_terminal/_components/_json_input.py +0 -0
  138. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_dev/_terminal/_components/_new.py +0 -0
  139. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_dev/_terminal/_models/_execution.py +0 -0
  140. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_dev/_terminal/_models/_messages.py +0 -0
  141. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_dev/_terminal/_styles/terminal.tcss +0 -0
  142. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_dev/_terminal/_utils/_chat.py +0 -0
  143. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_dev/_terminal/_utils/_exporter.py +0 -0
  144. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_dev/_terminal/_utils/_logger.py +0 -0
  145. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_evals/_console_progress_reporter.py +0 -0
  146. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_evals/_evaluator_factory.py +0 -0
  147. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_evals/_models/_evaluator.py +0 -0
  148. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_evals/_models/_evaluator_base_params.py +0 -0
  149. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_evals/_models/_exceptions.py +0 -0
  150. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_evals/_models/_mocks.py +0 -0
  151. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_evals/_models/_output.py +0 -0
  152. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_evals/_models/_sw_reporting.py +0 -0
  153. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_evals/_progress_reporter.py +0 -0
  154. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_evals/_span_collection.py +0 -0
  155. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_evals/mocks/__init__.py +0 -0
  156. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_evals/mocks/llm_mocker.py +0 -0
  157. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_evals/mocks/mocker_factory.py +0 -0
  158. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_evals/mocks/mockito_mocker.py +0 -0
  159. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_evals/mocks/mocks.py +0 -0
  160. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_runtime/_contracts.py +0 -0
  161. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_runtime/_escalation.py +0 -0
  162. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_runtime/_hitl.py +0 -0
  163. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_runtime/_runtime.py +0 -0
  164. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_runtime/_script_executor.py +0 -0
  165. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
  166. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_templates/.rels.template +0 -0
  167. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
  168. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_templates/main.py.template +0 -0
  169. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
  170. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_utils/_console.py +0 -0
  171. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_utils/_constants.py +0 -0
  172. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_utils/_debug.py +0 -0
  173. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_utils/_eval_set.py +0 -0
  174. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_utils/_folders.py +0 -0
  175. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_utils/_input_args.py +0 -0
  176. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
  177. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_utils/_processes.py +0 -0
  178. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_utils/_studio_project.py +0 -0
  179. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_utils/_tracing.py +0 -0
  180. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/_utils/_uv_helpers.py +0 -0
  181. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/cli_auth.py +0 -0
  182. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/cli_deploy.py +0 -0
  183. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/cli_dev.py +0 -0
  184. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/cli_eval.py +0 -0
  185. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/cli_invoke.py +0 -0
  186. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/cli_new.py +0 -0
  187. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/cli_pack.py +0 -0
  188. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/cli_publish.py +0 -0
  189. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/cli_push.py +0 -0
  190. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/cli_run.py +0 -0
  191. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/middlewares.py +0 -0
  192. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_cli/spinner.py +0 -0
  193. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_config.py +0 -0
  194. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_events/__init__.py +0 -0
  195. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_events/_event_bus.py +0 -0
  196. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_events/_events.py +0 -0
  197. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_execution_context.py +0 -0
  198. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_folder_context.py +0 -0
  199. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_resources/AGENTS.md +0 -0
  200. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_resources/CLAUDE.md +0 -0
  201. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_resources/CLI_REFERENCE.md +0 -0
  202. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_resources/REQUIRED_STRUCTURE.md +0 -0
  203. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_resources/SDK_REFERENCE.md +0 -0
  204. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_services/__init__.py +0 -0
  205. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_services/_base_service.py +0 -0
  206. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_services/actions_service.py +0 -0
  207. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_services/api_client.py +0 -0
  208. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_services/assets_service.py +0 -0
  209. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_services/attachments_service.py +0 -0
  210. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_services/buckets_service.py +0 -0
  211. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_services/connections_service.py +0 -0
  212. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_services/context_grounding_service.py +0 -0
  213. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_services/documents_service.py +0 -0
  214. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_services/entities_service.py +0 -0
  215. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_services/external_application_service.py +0 -0
  216. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_services/folder_service.py +0 -0
  217. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_services/jobs_service.py +0 -0
  218. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_services/llm_gateway_service.py +0 -0
  219. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_services/processes_service.py +0 -0
  220. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_services/queues_service.py +0 -0
  221. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_uipath.py +0 -0
  222. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_utils/__init__.py +0 -0
  223. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_utils/_auth.py +0 -0
  224. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_utils/_endpoint.py +0 -0
  225. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_utils/_infer_bindings.py +0 -0
  226. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_utils/_logs.py +0 -0
  227. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_utils/_read_overwrites.py +0 -0
  228. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_utils/_request_override.py +0 -0
  229. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_utils/_request_spec.py +0 -0
  230. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_utils/_ssl_context.py +0 -0
  231. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_utils/_url.py +0 -0
  232. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_utils/_user_agent.py +0 -0
  233. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/_utils/constants.py +0 -0
  234. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/agent/conversation/__init__.py +0 -0
  235. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/agent/conversation/async_stream.py +0 -0
  236. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/agent/conversation/citation.py +0 -0
  237. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/agent/conversation/content.py +0 -0
  238. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/agent/conversation/conversation.py +0 -0
  239. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/agent/conversation/event.py +0 -0
  240. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/agent/conversation/exchange.py +0 -0
  241. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/agent/conversation/message.py +0 -0
  242. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/agent/conversation/meta.py +0 -0
  243. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/agent/conversation/tool.py +0 -0
  244. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/agent/models/agent.py +0 -0
  245. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/eval/_helpers/__init__.py +0 -0
  246. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/eval/_helpers/helpers.py +0 -0
  247. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/eval/evaluators/__init__.py +0 -0
  248. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/eval/evaluators/base_evaluator.py +0 -0
  249. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/eval/evaluators/deterministic_evaluator_base.py +0 -0
  250. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/eval/evaluators/exact_match_evaluator.py +0 -0
  251. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/eval/evaluators/json_similarity_evaluator.py +0 -0
  252. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/eval/evaluators/llm_as_judge_evaluator.py +0 -0
  253. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/eval/evaluators/trajectory_evaluator.py +0 -0
  254. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/eval/mocks/__init__.py +0 -0
  255. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/eval/mocks/mockable.py +0 -0
  256. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/eval/models/__init__.py +0 -0
  257. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/eval/models/models.py +0 -0
  258. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/models/__init__.py +0 -0
  259. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/models/action_schema.py +0 -0
  260. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/models/actions.py +0 -0
  261. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/models/assets.py +0 -0
  262. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/models/attachment.py +0 -0
  263. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/models/auth.py +0 -0
  264. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/models/buckets.py +0 -0
  265. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/models/connections.py +0 -0
  266. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/models/context_grounding.py +0 -0
  267. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/models/context_grounding_index.py +0 -0
  268. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/models/documents.py +0 -0
  269. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/models/entities.py +0 -0
  270. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/models/errors.py +0 -0
  271. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/models/exceptions.py +0 -0
  272. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/models/interrupt_models.py +0 -0
  273. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/models/job.py +0 -0
  274. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/models/llm_gateway.py +0 -0
  275. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/models/processes.py +0 -0
  276. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/models/queues.py +0 -0
  277. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/py.typed +0 -0
  278. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/telemetry/__init__.py +0 -0
  279. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/telemetry/_constants.py +0 -0
  280. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/telemetry/_track.py +0 -0
  281. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/tracing/__init__.py +0 -0
  282. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/tracing/_otel_exporters.py +0 -0
  283. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/tracing/_traced.py +0 -0
  284. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/tracing/_utils.py +0 -0
  285. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/utils/__init__.py +0 -0
  286. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/utils/_endpoints_manager.py +0 -0
  287. {uipath-2.1.87 → uipath-2.1.89}/src/uipath/utils/dynamic_schema.py +0 -0
  288. {uipath-2.1.87 → uipath-2.1.89}/testcases/apicalls-testcase/main.py +0 -0
  289. {uipath-2.1.87 → uipath-2.1.89}/testcases/apicalls-testcase/pyproject.toml +0 -0
  290. {uipath-2.1.87 → uipath-2.1.89}/testcases/apicalls-testcase/run.sh +0 -0
  291. {uipath-2.1.87 → uipath-2.1.89}/testcases/apicalls-testcase/src/assert.py +0 -0
  292. {uipath-2.1.87 → uipath-2.1.89}/testcases/basic-testcase/main.py +0 -0
  293. {uipath-2.1.87 → uipath-2.1.89}/testcases/basic-testcase/pyproject.toml +0 -0
  294. {uipath-2.1.87 → uipath-2.1.89}/testcases/basic-testcase/run.sh +0 -0
  295. {uipath-2.1.87 → uipath-2.1.89}/testcases/basic-testcase/src/assert.py +0 -0
  296. {uipath-2.1.87 → uipath-2.1.89}/testcases/common/validate_output.sh +0 -0
  297. {uipath-2.1.87 → uipath-2.1.89}/testcases/langchain-cross/agent.mermaid +0 -0
  298. {uipath-2.1.87 → uipath-2.1.89}/testcases/langchain-cross/langgraph.json +0 -0
  299. {uipath-2.1.87 → uipath-2.1.89}/testcases/langchain-cross/pyproject.toml +0 -0
  300. {uipath-2.1.87 → uipath-2.1.89}/testcases/langchain-cross/run.sh +0 -0
  301. {uipath-2.1.87 → uipath-2.1.89}/testcases/langchain-cross/src/assert.py +0 -0
  302. {uipath-2.1.87 → uipath-2.1.89}/testcases/langchain-cross/src/main.py +0 -0
  303. {uipath-2.1.87 → uipath-2.1.89}/testcases/llamaindex-cross/agent.mermaid +0 -0
  304. {uipath-2.1.87 → uipath-2.1.89}/testcases/llamaindex-cross/llama_index.json +0 -0
  305. {uipath-2.1.87 → uipath-2.1.89}/testcases/llamaindex-cross/pyproject.toml +0 -0
  306. {uipath-2.1.87 → uipath-2.1.89}/testcases/llamaindex-cross/run.sh +0 -0
  307. {uipath-2.1.87 → uipath-2.1.89}/testcases/llamaindex-cross/src/assert.py +0 -0
  308. {uipath-2.1.87 → uipath-2.1.89}/testcases/llamaindex-cross/src/main.py +0 -0
  309. {uipath-2.1.87 → uipath-2.1.89}/tests/__init__.py +0 -0
  310. {uipath-2.1.87 → uipath-2.1.89}/tests/agent/models/test_agent.py +0 -0
  311. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/conftest.py +0 -0
  312. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/evaluators/test_json_similarity_evaluator.py +0 -0
  313. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/mocks/bindings_script.py +0 -0
  314. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/mocks/pyproject.toml +0 -0
  315. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/mocks/simple_script.py +0 -0
  316. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/mocks/uipath-mock.json +0 -0
  317. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/mocks/uipath-simple-script-mock.json +0 -0
  318. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/test_auth.py +0 -0
  319. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/test_hitl.py +0 -0
  320. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/test_init.py +0 -0
  321. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/test_input_args.py +0 -0
  322. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/test_invoke.py +0 -0
  323. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/test_new.py +0 -0
  324. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/test_oidc_utils.py +0 -0
  325. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/test_pack.py +0 -0
  326. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/test_portal_service_ensure_valid_token.py +0 -0
  327. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/test_portal_service_refresh_token.py +0 -0
  328. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/test_publish.py +0 -0
  329. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/test_run.py +0 -0
  330. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/test_utils.py +0 -0
  331. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/utils/common.py +0 -0
  332. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/utils/project_details.py +0 -0
  333. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/utils/test_dynamic_schema.py +0 -0
  334. {uipath-2.1.87 → uipath-2.1.89}/tests/cli/utils/uipath_json.py +0 -0
  335. {uipath-2.1.87 → uipath-2.1.89}/tests/conftest.py +0 -0
  336. {uipath-2.1.87 → uipath-2.1.89}/tests/sdk/services/conftest.py +0 -0
  337. {uipath-2.1.87 → uipath-2.1.89}/tests/sdk/services/test_actions_service.py +0 -0
  338. {uipath-2.1.87 → uipath-2.1.89}/tests/sdk/services/test_api_client.py +0 -0
  339. {uipath-2.1.87 → uipath-2.1.89}/tests/sdk/services/test_assets_service.py +0 -0
  340. {uipath-2.1.87 → uipath-2.1.89}/tests/sdk/services/test_attachments_service.py +0 -0
  341. {uipath-2.1.87 → uipath-2.1.89}/tests/sdk/services/test_base_service.py +0 -0
  342. {uipath-2.1.87 → uipath-2.1.89}/tests/sdk/services/test_buckets_service.py +0 -0
  343. {uipath-2.1.87 → uipath-2.1.89}/tests/sdk/services/test_connections_service.py +0 -0
  344. {uipath-2.1.87 → uipath-2.1.89}/tests/sdk/services/test_context_grounding_service.py +0 -0
  345. {uipath-2.1.87 → uipath-2.1.89}/tests/sdk/services/test_documents_service.py +0 -0
  346. {uipath-2.1.87 → uipath-2.1.89}/tests/sdk/services/test_entities_service.py +0 -0
  347. {uipath-2.1.87 → uipath-2.1.89}/tests/sdk/services/test_external_application_service.py +0 -0
  348. {uipath-2.1.87 → uipath-2.1.89}/tests/sdk/services/test_folder_service.py +0 -0
  349. {uipath-2.1.87 → uipath-2.1.89}/tests/sdk/services/test_jobs_service.py +0 -0
  350. {uipath-2.1.87 → uipath-2.1.89}/tests/sdk/services/test_llm_integration.py +0 -0
  351. {uipath-2.1.87 → uipath-2.1.89}/tests/sdk/services/test_llm_schema_cleanup.py +0 -0
  352. {uipath-2.1.87 → uipath-2.1.89}/tests/sdk/services/test_llm_service.py +0 -0
  353. {uipath-2.1.87 → uipath-2.1.89}/tests/sdk/services/test_processes_service.py +0 -0
  354. {uipath-2.1.87 → uipath-2.1.89}/tests/sdk/services/test_queues_service.py +0 -0
  355. {uipath-2.1.87 → uipath-2.1.89}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
  356. {uipath-2.1.87 → uipath-2.1.89}/tests/sdk/services/tests_data/documents_service/create_validation_action_response.json +0 -0
  357. {uipath-2.1.87 → uipath-2.1.89}/tests/sdk/services/tests_data/documents_service/extraction_response.json +0 -0
  358. {uipath-2.1.87 → uipath-2.1.89}/tests/sdk/services/tests_data/documents_service/validated_result.json +0 -0
  359. {uipath-2.1.87 → uipath-2.1.89}/tests/sdk/test_bindings_inference.py +0 -0
  360. {uipath-2.1.87 → uipath-2.1.89}/tests/sdk/test_config.py +0 -0
  361. {uipath-2.1.87 → uipath-2.1.89}/tests/sdk/test_overwrites.py +0 -0
  362. {uipath-2.1.87 → uipath-2.1.89}/tests/tracing/test_otel_exporters.py +0 -0
  363. {uipath-2.1.87 → uipath-2.1.89}/tests/tracing/test_span_utils.py +0 -0
  364. {uipath-2.1.87 → uipath-2.1.89}/tests/tracing/test_traced.py +0 -0
  365. {uipath-2.1.87 → uipath-2.1.89}/tests/tracing/test_tracing_manager.py +0 -0
@@ -0,0 +1,100 @@
1
+ ---
2
+ name: command-tester
3
+ description: Actively tests UiPath Python CLI commands on sample projects during development to verify functionality and help Claude Code continue implementation confidently
4
+ tools: Bash, Read, Glob
5
+ model: sonnet
6
+ ---
7
+
8
+ # UiPath Python CLI Command Tester
9
+
10
+ You are a specialized agent that actively tests UiPath Python CLI commands on sample projects during development. Your role is to quickly verify command functionality and provide confident feedback to help Claude Code continue implementation.
11
+
12
+ ## Your Role
13
+
14
+ You automatically:
15
+ - Test CLI commands on available sample projects
16
+ - Execute commands in proper environments
17
+ - Report results clearly and concisely
18
+ - Handle setup requirements for Studio Web commands
19
+ - Verify command functionality during development
20
+ - Help Claude Code proceed confidently with implementation
21
+
22
+ ## Available Sample Projects
23
+
24
+ Automatically check and use samples in `samples/` directory:
25
+ - `samples/calculator/` - Main testing sample
26
+ - Other samples as available
27
+
28
+ ## Testing Approach
29
+
30
+ ### 1. Environment Setup
31
+ Always use the root project virtual environment for latest changes:
32
+ ```bash
33
+ cd samples/calculator/
34
+ source ../../.venv/bin/activate
35
+ ```
36
+
37
+ ### 2. Command Categories
38
+
39
+ **Studio Web Commands** (require setup):
40
+ - `uipath pull` - Requires UIPATH_PROJECT_ID and auth
41
+ - `uipath push` - Requires UIPATH_PROJECT_ID and auth
42
+ - `uipath auth` - Authentication setup
43
+
44
+ **Local Commands** (can run immediately):
45
+ - `uipath init` - Project initialization
46
+ - `uipath run` - Run agent locally
47
+ - `uipath pack` - Package project
48
+ - Build and development commands
49
+
50
+ ### 3. Execution Strategy
51
+
52
+ For **Studio Web commands**:
53
+ - Check if `.env` exists with UIPATH_PROJECT_ID
54
+ - If not configured, inform user: "Please configure one sample with Studio Web credentials to test push/pull commands"
55
+ - If configured, execute and report results
56
+
57
+ For **Local commands**:
58
+ - Execute immediately in appropriate sample directory
59
+ - Report output and success/failure
60
+ - Provide specific error details if failures occur
61
+
62
+ ## Response Format
63
+
64
+ Always provide:
65
+ 1. **Command Executed**: What was tested
66
+ 2. **Environment**: Which sample and setup used
67
+ 3. **Result**: Success/failure with key output
68
+ 4. **Confidence Level**: High/Medium/Low for Claude Code to proceed
69
+ 5. **Next Steps**: Any issues that need addressing
70
+
71
+ ## Sample Responses
72
+
73
+ **Successful Test**:
74
+ ```
75
+ ✅ **Command**: `uipath pull`
76
+ 📁 **Environment**: samples/calculator with root venv
77
+ 📊 **Result**: SUCCESS - Downloaded 3 coded-evals files with proper logging
78
+ 🎯 **Confidence**: HIGH - Command working as expected
79
+ ▶️ **Next Steps**: Claude Code can proceed confidently
80
+ ```
81
+
82
+ **Setup Required**:
83
+ ```
84
+ ⚠️ **Command**: `uipath push`
85
+ 📁 **Environment**: samples/calculator
86
+ 📊 **Result**: SETUP_REQUIRED - No UIPATH_PROJECT_ID configured
87
+ 🎯 **Confidence**: N/A - Cannot test without Studio Web setup
88
+ ▶️ **Next Steps**: Please configure one sample with Studio Web credentials for push/pull testing
89
+ ```
90
+
91
+ **Command Failure**:
92
+ ```
93
+ ❌ **Command**: `uipath pack`
94
+ 📁 **Environment**: samples/calculator with root venv
95
+ 📊 **Result**: FAILED - Missing required field in pyproject.toml
96
+ 🎯 **Confidence**: LOW - Issue needs resolution
97
+ ▶️ **Next Steps**: Fix pyproject.toml configuration before proceeding
98
+ ```
99
+
100
+ You are Claude Code's reliable testing partner - quick, accurate, and confidence-building.
@@ -0,0 +1,60 @@
1
+ ---
2
+ allowed-tools: Bash
3
+ description: Run all checks required for PR standards (lint, format, type check, build)
4
+ argument-hint: [optional-commit-message]
5
+ ---
6
+
7
+ I'll help you prepare for a PR by running all the required checks to meet project standards. This includes linting, formatting, type checking, and building.
8
+
9
+ Let me run each check step by step:
10
+
11
+ ## Step 1: Linting Check
12
+ Running lint checks to ensure code quality...
13
+
14
+ !uv run just lint
15
+
16
+ ## Step 2: Format Check
17
+ Checking code formatting...
18
+
19
+ !uv run just format
20
+
21
+ ## Step 3: Auto-format (if needed)
22
+ If formatting issues were found, I'll auto-fix them:
23
+
24
+ !uv run ruff format .
25
+
26
+ ## Step 4: Type Checking
27
+ Running mypy type checking on modified CLI files...
28
+
29
+ !uv run mypy src/uipath/_cli/
30
+
31
+ ## Step 5: Build Check
32
+ Ensuring the package builds correctly...
33
+
34
+ !uv run just build
35
+
36
+ ## Step 6: Git Status
37
+ Checking current git status...
38
+
39
+ !git status
40
+
41
+ ---
42
+
43
+ ## Summary
44
+
45
+ All checks completed! Here's what was verified:
46
+ - ✅ **Linting**: Code follows style guidelines
47
+ - ✅ **Formatting**: Code is properly formatted
48
+ - ✅ **Type Checking**: No type errors
49
+ - ✅ **Build**: Package builds successfully
50
+
51
+ If all checks passed, your code is ready for PR!
52
+
53
+ If you provided a commit message argument, I can help you create the commit. Otherwise, you can now:
54
+
55
+ 1. Stage your changes: `git add .`
56
+ 2. Create a commit with a proper message format: `git commit -m "feat: your-description"`
57
+ 3. Push your branch: `git push origin your-branch-name`
58
+ 4. Create a PR with a descriptive title and summary
59
+
60
+ **Remember**: PR titles should be concise and follow the format: `feat/fix/docs: description`
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: uipath
3
- Version: 2.1.87
3
+ Version: 2.1.89
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.87"
3
+ version = "2.1.89"
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"
@@ -3,7 +3,7 @@ import sys
3
3
 
4
4
  import click
5
5
 
6
- from ._utils._common import load_environment_variables
6
+ from ._utils._common import add_cwd_to_path, load_environment_variables
7
7
  from .cli_auth import auth as auth
8
8
  from .cli_deploy import deploy as deploy # type: ignore
9
9
  from .cli_dev import dev as dev
@@ -45,6 +45,7 @@ def _get_safe_version() -> str:
45
45
  )
46
46
  def cli(lv: bool, v: bool) -> None:
47
47
  load_environment_variables()
48
+ add_cwd_to_path()
48
49
  if lv:
49
50
  try:
50
51
  version = importlib.metadata.version("uipath-langchain")
@@ -44,6 +44,15 @@ class LLMMockingStrategy(BaseMockingStrategy):
44
44
  )
45
45
 
46
46
 
47
+ class InputMockingStrategy(BaseModel):
48
+ prompt: str = Field(..., alias="prompt")
49
+ model: Optional[ModelSettings] = Field(None, alias="model")
50
+
51
+ model_config = ConfigDict(
52
+ validate_by_name=True, validate_by_alias=True, extra="allow"
53
+ )
54
+
55
+
47
56
  class MockingArgument(BaseModel):
48
57
  args: List[Any] = Field(default_factory=lambda: [], alias="args")
49
58
  kwargs: Dict[str, Any] = Field(default_factory=lambda: {}, alias="kwargs")
@@ -110,6 +119,10 @@ class EvaluationItem(BaseModel):
110
119
  default=None,
111
120
  alias="mockingStrategy",
112
121
  )
122
+ input_mocking_strategy: Optional[InputMockingStrategy] = Field(
123
+ default=None,
124
+ alias="inputMockingStrategy",
125
+ )
113
126
 
114
127
 
115
128
  class EvaluationSet(BaseModel):
@@ -11,6 +11,10 @@ from opentelemetry import context as context_api
11
11
  from opentelemetry.sdk.trace import ReadableSpan, Span
12
12
  from opentelemetry.sdk.trace.export import SpanExporter, SpanExportResult
13
13
 
14
+ from uipath._cli._evals.mocks.input_mocker import (
15
+ generate_llm_input,
16
+ )
17
+
14
18
  from ..._events._event_bus import EventBus
15
19
  from ..._events._events import (
16
20
  EvalItemExceptionDetails,
@@ -318,6 +322,10 @@ class UiPathEvalRuntime(UiPathBaseRuntime, Generic[T, C]):
318
322
  evaluators: List[BaseEvaluator[Any]],
319
323
  event_bus: EventBus,
320
324
  ) -> EvaluationRunResult:
325
+ # Generate LLM-based input if input_mocking_strategy is defined
326
+ if eval_item.input_mocking_strategy:
327
+ eval_item = await self._generate_input_for_eval(eval_item)
328
+
321
329
  set_execution_context(eval_item, self.span_collector)
322
330
 
323
331
  await event_bus.publish(
@@ -417,6 +425,16 @@ class UiPathEvalRuntime(UiPathBaseRuntime, Generic[T, C]):
417
425
 
418
426
  return evaluation_run_results
419
427
 
428
+ async def _generate_input_for_eval(
429
+ self, eval_item: EvaluationItem
430
+ ) -> EvaluationItem:
431
+ """Use LLM to generate a mock input for an evaluation item."""
432
+ # TODO(bai): get the input schema from agent definition, once it is available there.
433
+ input_schema: dict[str, Any] = {}
434
+ generated_input = await generate_llm_input(eval_item, input_schema)
435
+ updated_eval_item = eval_item.model_copy(update={"inputs": generated_input})
436
+ return updated_eval_item
437
+
420
438
  def _get_and_clear_execution_data(
421
439
  self, execution_id: str
422
440
  ) -> tuple[List[ReadableSpan], list[logging.LogRecord]]:
@@ -0,0 +1,111 @@
1
+ """LLM Input Mocker implementation."""
2
+
3
+ import json
4
+ from datetime import datetime
5
+ from typing import Any, Dict
6
+
7
+ from uipath import UiPath
8
+ from uipath._cli._evals._models._evaluation_set import EvaluationItem
9
+ from uipath.tracing._traced import traced
10
+
11
+ from .mocker import UiPathInputMockingError
12
+
13
+
14
+ def get_input_mocking_prompt(
15
+ input_schema: str,
16
+ input_generation_instructions: str,
17
+ expected_behavior: str,
18
+ expected_output: str,
19
+ ) -> str:
20
+ """Generate the LLM input mocking prompt."""
21
+ current_datetime = datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")
22
+
23
+ return f"""You are simulating input for automated testing purposes of an Agent as part of a simulation run.
24
+ You will need to generate realistic input to a LLM agent which will call various tools to achieve a goal. This must be in the exact format of the INPUT_SCHEMA.
25
+ You may need to follow specific INPUT_GENERATION_INSTRUCTIONS. If no relevant instructions are provided pertaining to input generation, use the other provided information and your own judgement to generate input.
26
+ If the INPUT_GENERATION_INSTRUCTIONS are provided, you MUST follow them exactly. For example if the instructions say to generate a value for a field to be before a certain calendar date, you must generate a value that is before that date.
27
+
28
+ The current date and time is: {current_datetime}
29
+
30
+ #INPUT_SCHEMA: You MUST OUTPUT THIS EXACT JSON SCHEMA
31
+ {input_schema}
32
+ #END_INPUT_SCHEMA
33
+
34
+ #INPUT_GENERATION_INSTRUCTIONS
35
+ {input_generation_instructions}
36
+ #END_INPUT_GENERATION_INSTRUCTIONS
37
+
38
+ #EXPECTED_BEHAVIOR
39
+ {expected_behavior}
40
+ #END_EXPECTED_BEHAVIOR
41
+
42
+ #EXPECTED_OUTPUT
43
+ {expected_output}
44
+ #END_EXPECTED_OUTPUT
45
+
46
+ Based on the above information, provide a realistic input to the LLM agent. Your response should:
47
+ 1. Match the expected input format according to the INPUT_SCHEMA exactly
48
+ 2. Be consistent with the style and level of detail in the example inputs
49
+ 3. Consider the context of the the agent being tested
50
+ 4. Be realistic and representative of what a real user might say or ask
51
+
52
+ OUTPUT: ONLY the simulated agent input in the exact format of the INPUT_SCHEMA in valid JSON. Do not include any explanations, quotation marks, or markdown."""
53
+
54
+
55
+ @traced(name="__mocker__")
56
+ async def generate_llm_input(
57
+ evaluation_item: EvaluationItem,
58
+ input_schema: Dict[str, Any],
59
+ ) -> Dict[str, Any]:
60
+ """Generate synthetic input using an LLM based on the evaluation context."""
61
+ try:
62
+ llm = UiPath().llm
63
+
64
+ prompt = get_input_mocking_prompt(
65
+ input_schema=json.dumps(input_schema, indent=2),
66
+ input_generation_instructions=evaluation_item.input_mocking_strategy.prompt
67
+ if evaluation_item.input_mocking_strategy
68
+ else "",
69
+ expected_behavior=evaluation_item.expected_agent_behavior or "",
70
+ expected_output=json.dumps(evaluation_item.expected_output, indent=2)
71
+ if evaluation_item.expected_output
72
+ else "",
73
+ )
74
+
75
+ response_format = {
76
+ "type": "json_schema",
77
+ "json_schema": {
78
+ "name": "agent_input",
79
+ "strict": True,
80
+ "schema": input_schema,
81
+ },
82
+ }
83
+
84
+ model_parameters = (
85
+ evaluation_item.input_mocking_strategy.model
86
+ if evaluation_item.input_mocking_strategy
87
+ else None
88
+ )
89
+ completion_kwargs = (
90
+ model_parameters.model_dump(by_alias=False, exclude_none=True)
91
+ if model_parameters
92
+ else {}
93
+ )
94
+
95
+ response = await llm.chat_completions(
96
+ [{"role": "user", "content": prompt}],
97
+ response_format=response_format,
98
+ **completion_kwargs,
99
+ )
100
+
101
+ generated_input_str = response.choices[0].message.content
102
+
103
+ return json.loads(generated_input_str)
104
+ except json.JSONDecodeError as e:
105
+ raise UiPathInputMockingError(
106
+ f"Failed to parse LLM response as JSON: {str(e)}"
107
+ ) from e
108
+ except UiPathInputMockingError:
109
+ raise
110
+ except Exception as e:
111
+ raise UiPathInputMockingError(f"Failed to generate input: {str(e)}") from e
@@ -33,3 +33,9 @@ class UiPathMockResponseGenerationError(Exception):
33
33
  """Exception when a mocker is configured unable to generate a response."""
34
34
 
35
35
  pass
36
+
37
+
38
+ class UiPathInputMockingError(Exception):
39
+ """Exception when input mocking fails."""
40
+
41
+ pass
@@ -1,14 +1,12 @@
1
1
  """Studio Web File Handler for managing file operations in UiPath projects."""
2
2
 
3
3
  import json
4
+ import logging
4
5
  import os
5
6
  from datetime import datetime, timezone
6
7
  from typing import Any, Dict, Optional, Set
7
8
 
8
- import click
9
-
10
9
  from ...models.exceptions import EnrichedException
11
- from .._utils._console import ConsoleLogger
12
10
  from .._utils._constants import (
13
11
  AGENT_INITIAL_CODE_VERSION,
14
12
  AGENT_STORAGE_VERSION,
@@ -30,6 +28,8 @@ from .._utils._studio_project import (
30
28
  StudioClient,
31
29
  )
32
30
 
31
+ logger = logging.getLogger(__name__)
32
+
33
33
 
34
34
  class SwFileHandler:
35
35
  """Handler for Studio Web file operations.
@@ -58,7 +58,6 @@ class SwFileHandler:
58
58
  """
59
59
  self.directory = directory
60
60
  self.include_uv_lock = include_uv_lock
61
- self.console = ConsoleLogger()
62
61
  self._studio_client = StudioClient(project_id)
63
62
  self._project_structure: Optional[ProjectStructure] = None
64
63
 
@@ -156,9 +155,7 @@ class SwFileHandler:
156
155
 
157
156
  for local_file in local_files:
158
157
  if not os.path.exists(local_file.file_path):
159
- self.console.warning(
160
- f"File not found: {click.style(local_file.file_path, fg='cyan')}"
161
- )
158
+ logger.info(f"File not found: '{local_file.file_path}'")
162
159
  continue
163
160
 
164
161
  # Skip agent.json as it's handled separately
@@ -175,9 +172,7 @@ class SwFileHandler:
175
172
  id=remote_file.id, content_file_path=local_file.file_path
176
173
  )
177
174
  )
178
- self.console.info(
179
- f"Updating {click.style(local_file.file_name, fg='yellow')}"
180
- )
175
+ logger.info(f"Updating '{local_file.file_name}'")
181
176
  else:
182
177
  parent_path = os.path.dirname(local_file.relative_path)
183
178
  structural_migration.added_resources.append(
@@ -188,9 +183,7 @@ class SwFileHandler:
188
183
  else "source_code",
189
184
  )
190
185
  )
191
- self.console.info(
192
- f"Uploading {click.style(local_file.relative_path, fg='cyan')}"
193
- )
186
+ logger.info(f"Uploading '{local_file.relative_path}'")
194
187
 
195
188
  # identify and add deleted files
196
189
  structural_migration.deleted_resources.extend(
@@ -236,9 +229,7 @@ class SwFileHandler:
236
229
  for _, remote_file in source_code_files.items():
237
230
  if remote_file.id not in processed_source_file_paths:
238
231
  deleted_files.add(remote_file.id)
239
- self.console.info(
240
- f"Deleting {click.style(remote_file.name, fg='bright_red')}"
241
- )
232
+ logger.info(f"Deleting '{remote_file.name}'")
242
233
 
243
234
  return deleted_files
244
235
 
@@ -263,16 +254,14 @@ class SwFileHandler:
263
254
  for folder_info in empty_folder_ids:
264
255
  try:
265
256
  await self._studio_client.delete_item_async(folder_info["id"])
266
- self.console.info(
267
- f"Deleted empty folder {click.style(folder_info['name'], fg='bright_red')}"
268
- )
257
+ logger.info(f"Deleted empty folder '{folder_info['name']}'")
269
258
  except Exception as e:
270
- self.console.warning(
271
- f"Failed to delete empty folder {folder_info['name']}: {str(e)}"
259
+ logger.warning(
260
+ f"Failed to delete empty folder '{folder_info['name']}': {str(e)}"
272
261
  )
273
262
 
274
263
  except Exception as e:
275
- self.console.warning(f"Failed to cleanup empty folders: {str(e)}")
264
+ logger.warning(f"Failed to cleanup empty folders: {str(e)}")
276
265
 
277
266
  def _collect_empty_folders(self, folder: ProjectFolder) -> list[dict[str, str]]:
278
267
  """Recursively collect IDs and names of empty folders.
@@ -335,8 +324,8 @@ class SwFileHandler:
335
324
  entry_points_json["entryPoints"] = uipath_config["entryPoints"]
336
325
 
337
326
  except Exception:
338
- self.console.warning(
339
- "Could not parse existing entry-points.json file, using default version"
327
+ logger.info(
328
+ "Could not parse existing 'entry-points.json' file, using default version"
340
329
  )
341
330
  structural_migration.modified_resources.append(
342
331
  ModifiedResource(
@@ -344,12 +333,10 @@ class SwFileHandler:
344
333
  content_string=json.dumps(entry_points_json),
345
334
  )
346
335
  )
347
- self.console.info(
348
- f"Updating {click.style('entry-points.json', fg='yellow')}"
349
- )
336
+ logger.info("Updating 'entry-points.json'")
350
337
 
351
338
  else:
352
- self.console.warning(
339
+ logger.info(
353
340
  "'entry-points.json' file does not exist in Studio Web project, initializing using default version"
354
341
  )
355
342
  entry_points_json = {
@@ -363,9 +350,7 @@ class SwFileHandler:
363
350
  content_string=json.dumps(entry_points_json),
364
351
  )
365
352
  )
366
- self.console.info(
367
- f"Uploading {click.style('entry-points.json', fg='cyan')}"
368
- )
353
+ logger.info("Uploading 'entry-points.json'")
369
354
 
370
355
  async def _prepare_agent_json_migration(
371
356
  self,
@@ -400,9 +385,10 @@ class SwFileHandler:
400
385
  input_schema = uipath_config["entryPoints"][0]["input"]
401
386
  output_schema = uipath_config["entryPoints"][0]["output"]
402
387
  except (FileNotFoundError, KeyError) as e:
403
- self.console.error(
388
+ logger.error(
404
389
  f"Unable to extract entrypoints from configuration file. Please run 'uipath init' : {str(e)}",
405
390
  )
391
+ return
406
392
 
407
393
  author = get_author_from_token_or_toml()
408
394
 
@@ -444,8 +430,8 @@ class SwFileHandler:
444
430
  AGENT_INITIAL_CODE_VERSION[:-1] + "1"
445
431
  )
446
432
  except Exception:
447
- self.console.warning(
448
- "Could not parse existing agent.json file, using default version"
433
+ logger.info(
434
+ "Could not parse existing 'agent.json' file, using default version"
449
435
  )
450
436
 
451
437
  structural_migration.modified_resources.append(
@@ -454,9 +440,9 @@ class SwFileHandler:
454
440
  content_string=json.dumps(agent_json),
455
441
  )
456
442
  )
457
- self.console.info(f"Updating {click.style('agent.json', fg='yellow')}")
443
+ logger.info("Updating 'agent.json'")
458
444
  else:
459
- self.console.warning(
445
+ logger.info(
460
446
  "'agent.json' file does not exist in Studio Web project, initializing using default version"
461
447
  )
462
448
  structural_migration.added_resources.append(
@@ -465,7 +451,7 @@ class SwFileHandler:
465
451
  content_string=json.dumps(agent_json),
466
452
  )
467
453
  )
468
- self.console.info(f"Uploading {click.style('agent.json', fg='cyan')}")
454
+ logger.info("Uploading 'agent.json'")
469
455
 
470
456
  async def upload_source_files(self, config_data: dict[str, Any]) -> None:
471
457
  """Main method to upload source files to the UiPath project.
@@ -502,9 +488,7 @@ class SwFileHandler:
502
488
  if not source_code_folder:
503
489
  await self._studio_client.create_folder_async("source_code")
504
490
 
505
- self.console.success(
506
- f"Created {click.style('source_code', fg='cyan')} folder"
507
- )
491
+ logger.info("Created 'source_code' folder.")
508
492
  source_code_files = {}
509
493
 
510
494
  # Get files to upload and process them
@@ -266,6 +266,10 @@ class LogsInterceptor:
266
266
  def writable(self) -> bool:
267
267
  return True
268
268
 
269
+ def __getattr__(self, name):
270
+ # Delegate any unknown attributes to the original file
271
+ return getattr(self.sys_file, name)
272
+
269
273
  # Set up stdout and stderr loggers
270
274
  stdout_logger = logging.getLogger("stdout")
271
275
  stderr_logger = logging.getLogger("stderr")
@@ -9,6 +9,14 @@ from ..._utils.constants import DOTENV_FILE
9
9
  from ..spinner import Spinner
10
10
 
11
11
 
12
+ def add_cwd_to_path():
13
+ import sys
14
+
15
+ cwd = os.getcwd()
16
+ if cwd not in sys.path:
17
+ sys.path.insert(0, cwd)
18
+
19
+
12
20
  def environment_options(function):
13
21
  function = click.option(
14
22
  "--alpha",