uipath 2.1.96__tar.gz → 2.1.98__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 (375) hide show
  1. {uipath-2.1.96 → uipath-2.1.98}/.github/workflows/integration_tests.yml +18 -1
  2. {uipath-2.1.96 → uipath-2.1.98}/PKG-INFO +1 -1
  3. {uipath-2.1.96 → uipath-2.1.98}/pyproject.toml +1 -1
  4. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/__init__.py +2 -0
  5. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_debug/_bridge.py +77 -28
  6. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_debug/_runtime.py +2 -2
  7. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_evals/_runtime.py +6 -6
  8. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_runtime/_contracts.py +19 -2
  9. uipath-2.1.98/src/uipath/_cli/_runtime/_runtime.py +145 -0
  10. uipath-2.1.98/src/uipath/_cli/_runtime/_runtime_factory.py +21 -0
  11. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/cli_debug.py +0 -2
  12. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/cli_eval.py +12 -18
  13. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/cli_init.py +21 -60
  14. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/cli_run.py +16 -22
  15. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_uipath.py +0 -2
  16. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_utils/_logs.py +0 -1
  17. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/utils/_endpoints_manager.py +2 -6
  18. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/test_init.py +1 -1
  19. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/test_init_agents_md.py +1 -0
  20. {uipath-2.1.96 → uipath-2.1.98}/uv.lock +1 -1
  21. uipath-2.1.96/src/uipath/_cli/_runtime/_runtime.py +0 -76
  22. {uipath-2.1.96 → uipath-2.1.98}/.claude/agents/command-tester.md +0 -0
  23. {uipath-2.1.96 → uipath-2.1.98}/.claude/commands/prepare-pr.md +0 -0
  24. {uipath-2.1.96 → uipath-2.1.98}/.cursorrules +0 -0
  25. {uipath-2.1.96 → uipath-2.1.98}/.editorconfig +0 -0
  26. {uipath-2.1.96 → uipath-2.1.98}/.gitattributes +0 -0
  27. {uipath-2.1.96 → uipath-2.1.98}/.github/labeler.yml +0 -0
  28. {uipath-2.1.96 → uipath-2.1.98}/.github/workflows/auto-label.yml +0 -0
  29. {uipath-2.1.96 → uipath-2.1.98}/.github/workflows/cd.yml +0 -0
  30. {uipath-2.1.96 → uipath-2.1.98}/.github/workflows/ci.yml +0 -0
  31. {uipath-2.1.96 → uipath-2.1.98}/.github/workflows/commitlint.yml +0 -0
  32. {uipath-2.1.96 → uipath-2.1.98}/.github/workflows/lint.yml +0 -0
  33. {uipath-2.1.96 → uipath-2.1.98}/.github/workflows/publish-dev.yml +0 -0
  34. {uipath-2.1.96 → uipath-2.1.98}/.github/workflows/publish-docs.yml +0 -0
  35. {uipath-2.1.96 → uipath-2.1.98}/.github/workflows/slack.yml +0 -0
  36. {uipath-2.1.96 → uipath-2.1.98}/.github/workflows/test-uipath-langchain.yml +0 -0
  37. {uipath-2.1.96 → uipath-2.1.98}/.github/workflows/test-uipath-llamaindex.yml +0 -0
  38. {uipath-2.1.96 → uipath-2.1.98}/.github/workflows/test.yml +0 -0
  39. {uipath-2.1.96 → uipath-2.1.98}/.gitignore +0 -0
  40. {uipath-2.1.96 → uipath-2.1.98}/.pre-commit-config.yaml +0 -0
  41. {uipath-2.1.96 → uipath-2.1.98}/.python-version +0 -0
  42. {uipath-2.1.96 → uipath-2.1.98}/.vscode/extensions.json +0 -0
  43. {uipath-2.1.96 → uipath-2.1.98}/.vscode/launch.json +0 -0
  44. {uipath-2.1.96 → uipath-2.1.98}/.vscode/settings.json +0 -0
  45. {uipath-2.1.96 → uipath-2.1.98}/CONTRIBUTING.md +0 -0
  46. {uipath-2.1.96 → uipath-2.1.98}/LICENSE +0 -0
  47. {uipath-2.1.96 → uipath-2.1.98}/README.md +0 -0
  48. {uipath-2.1.96 → uipath-2.1.98}/docs/CONTRIBUTING.md +0 -0
  49. {uipath-2.1.96 → uipath-2.1.98}/docs/FAQ.md +0 -0
  50. {uipath-2.1.96 → uipath-2.1.98}/docs/assets/env-preparation-failed-dark.png +0 -0
  51. {uipath-2.1.96 → uipath-2.1.98}/docs/assets/env-preparation-failed-light.png +0 -0
  52. {uipath-2.1.96 → uipath-2.1.98}/docs/assets/favicon.png +0 -0
  53. {uipath-2.1.96 → uipath-2.1.98}/docs/assets/llms.txt +0 -0
  54. {uipath-2.1.96 → uipath-2.1.98}/docs/assets/logo-dark.svg +0 -0
  55. {uipath-2.1.96 → uipath-2.1.98}/docs/assets/logo-light.svg +0 -0
  56. {uipath-2.1.96 → uipath-2.1.98}/docs/cli/index.md +0 -0
  57. {uipath-2.1.96 → uipath-2.1.98}/docs/core/actions.md +0 -0
  58. {uipath-2.1.96 → uipath-2.1.98}/docs/core/assets/cloud_env_var_dark.gif +0 -0
  59. {uipath-2.1.96 → uipath-2.1.98}/docs/core/assets/cloud_env_var_light.gif +0 -0
  60. {uipath-2.1.96 → uipath-2.1.98}/docs/core/assets/cloud_env_var_secret_dark.png +0 -0
  61. {uipath-2.1.96 → uipath-2.1.98}/docs/core/assets/cloud_env_var_secret_light.png +0 -0
  62. {uipath-2.1.96 → uipath-2.1.98}/docs/core/assets/copy_path_dark.png +0 -0
  63. {uipath-2.1.96 → uipath-2.1.98}/docs/core/assets/copy_path_light.png +0 -0
  64. {uipath-2.1.96 → uipath-2.1.98}/docs/core/assets.md +0 -0
  65. {uipath-2.1.96 → uipath-2.1.98}/docs/core/attachments.md +0 -0
  66. {uipath-2.1.96 → uipath-2.1.98}/docs/core/buckets.md +0 -0
  67. {uipath-2.1.96 → uipath-2.1.98}/docs/core/connections.md +0 -0
  68. {uipath-2.1.96 → uipath-2.1.98}/docs/core/context_grounding.md +0 -0
  69. {uipath-2.1.96 → uipath-2.1.98}/docs/core/documents.md +0 -0
  70. {uipath-2.1.96 → uipath-2.1.98}/docs/core/documents_models.md +0 -0
  71. {uipath-2.1.96 → uipath-2.1.98}/docs/core/environment_variables.md +0 -0
  72. {uipath-2.1.96 → uipath-2.1.98}/docs/core/getting_started.md +0 -0
  73. {uipath-2.1.96 → uipath-2.1.98}/docs/core/jobs.md +0 -0
  74. {uipath-2.1.96 → uipath-2.1.98}/docs/core/llm_gateway.md +0 -0
  75. {uipath-2.1.96 → uipath-2.1.98}/docs/core/processes.md +0 -0
  76. {uipath-2.1.96 → uipath-2.1.98}/docs/core/queues.md +0 -0
  77. {uipath-2.1.96 → uipath-2.1.98}/docs/core/traced.md +0 -0
  78. {uipath-2.1.96 → uipath-2.1.98}/docs/hooks.py +0 -0
  79. {uipath-2.1.96 → uipath-2.1.98}/docs/index.md +0 -0
  80. {uipath-2.1.96 → uipath-2.1.98}/docs/javascripts/extra.js +0 -0
  81. {uipath-2.1.96 → uipath-2.1.98}/docs/overrides/main.html +0 -0
  82. {uipath-2.1.96 → uipath-2.1.98}/docs/overrides/partials/actions.html +0 -0
  83. {uipath-2.1.96 → uipath-2.1.98}/docs/overrides/partials/logo.html +0 -0
  84. {uipath-2.1.96 → uipath-2.1.98}/docs/release_policy.md +0 -0
  85. {uipath-2.1.96 → uipath-2.1.98}/docs/sample_images/google-ADK-agent/agent-output.png +0 -0
  86. {uipath-2.1.96 → uipath-2.1.98}/docs/stylesheets/extra.css +0 -0
  87. {uipath-2.1.96 → uipath-2.1.98}/justfile +0 -0
  88. {uipath-2.1.96 → uipath-2.1.98}/mkdocs.yml +0 -0
  89. {uipath-2.1.96 → uipath-2.1.98}/py.typed +0 -0
  90. {uipath-2.1.96 → uipath-2.1.98}/samples/asset-modifier-agent/.env.example +0 -0
  91. {uipath-2.1.96 → uipath-2.1.98}/samples/asset-modifier-agent/README.md +0 -0
  92. {uipath-2.1.96 → uipath-2.1.98}/samples/asset-modifier-agent/input.json +0 -0
  93. {uipath-2.1.96 → uipath-2.1.98}/samples/asset-modifier-agent/main.py +0 -0
  94. {uipath-2.1.96 → uipath-2.1.98}/samples/asset-modifier-agent/pyproject.toml +0 -0
  95. {uipath-2.1.96 → uipath-2.1.98}/samples/asset-modifier-agent/uv.lock +0 -0
  96. {uipath-2.1.96 → uipath-2.1.98}/samples/calculator/README.md +0 -0
  97. {uipath-2.1.96 → uipath-2.1.98}/samples/calculator/evals/eval-sets/default.json +0 -0
  98. {uipath-2.1.96 → uipath-2.1.98}/samples/calculator/evals/evaluators/equality.json +0 -0
  99. {uipath-2.1.96 → uipath-2.1.98}/samples/calculator/evals/evaluators/llm-as-a-judge.json +0 -0
  100. {uipath-2.1.96 → uipath-2.1.98}/samples/calculator/main.py +0 -0
  101. {uipath-2.1.96 → uipath-2.1.98}/samples/calculator/pyproject.toml +0 -0
  102. {uipath-2.1.96 → uipath-2.1.98}/samples/calculator/uipath.json +0 -0
  103. {uipath-2.1.96 → uipath-2.1.98}/samples/event-trigger/.python-version +0 -0
  104. {uipath-2.1.96 → uipath-2.1.98}/samples/event-trigger/README.md +0 -0
  105. {uipath-2.1.96 → uipath-2.1.98}/samples/event-trigger/main.py +0 -0
  106. {uipath-2.1.96 → uipath-2.1.98}/samples/event-trigger/pyproject.toml +0 -0
  107. {uipath-2.1.96 → uipath-2.1.98}/samples/google-ADK-agent/.env.example +0 -0
  108. {uipath-2.1.96 → uipath-2.1.98}/samples/google-ADK-agent/README.md +0 -0
  109. {uipath-2.1.96 → uipath-2.1.98}/samples/google-ADK-agent/input.json +0 -0
  110. {uipath-2.1.96 → uipath-2.1.98}/samples/google-ADK-agent/multi_tool_agent/__init__.py +0 -0
  111. {uipath-2.1.96 → uipath-2.1.98}/samples/google-ADK-agent/multi_tool_agent/agent.py +0 -0
  112. {uipath-2.1.96 → uipath-2.1.98}/samples/google-ADK-agent/pyproject.toml +0 -0
  113. {uipath-2.1.96 → uipath-2.1.98}/samples/google-ADK-agent/uv.lock +0 -0
  114. {uipath-2.1.96 → uipath-2.1.98}/scripts/debug_test.py +0 -0
  115. {uipath-2.1.96 → uipath-2.1.98}/scripts/lint_httpx_client.py +0 -0
  116. {uipath-2.1.96 → uipath-2.1.98}/scripts/update_agents_md.py +0 -0
  117. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/__init__.py +0 -0
  118. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/README.md +0 -0
  119. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_auth/_auth_server.py +0 -0
  120. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_auth/_auth_service.py +0 -0
  121. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_auth/_models.py +0 -0
  122. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_auth/_oidc_utils.py +0 -0
  123. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_auth/_portal_service.py +0 -0
  124. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_auth/_url_utils.py +0 -0
  125. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_auth/_utils.py +0 -0
  126. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_auth/auth_config.json +0 -0
  127. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_auth/index.html +0 -0
  128. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_auth/localhost.crt +0 -0
  129. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_auth/localhost.key +0 -0
  130. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_dev/_terminal/__init__.py +0 -0
  131. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_dev/_terminal/_components/_chat.py +0 -0
  132. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_dev/_terminal/_components/_details.py +0 -0
  133. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_dev/_terminal/_components/_history.py +0 -0
  134. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_dev/_terminal/_components/_json_input.py +0 -0
  135. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_dev/_terminal/_components/_new.py +0 -0
  136. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_dev/_terminal/_models/_execution.py +0 -0
  137. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_dev/_terminal/_models/_messages.py +0 -0
  138. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_dev/_terminal/_styles/terminal.tcss +0 -0
  139. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_dev/_terminal/_utils/_chat.py +0 -0
  140. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_dev/_terminal/_utils/_exporter.py +0 -0
  141. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_dev/_terminal/_utils/_logger.py +0 -0
  142. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_evals/_console_progress_reporter.py +0 -0
  143. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_evals/_evaluator_factory.py +0 -0
  144. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_evals/_models/_evaluation_set.py +0 -0
  145. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_evals/_models/_evaluator.py +0 -0
  146. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_evals/_models/_evaluator_base_params.py +0 -0
  147. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_evals/_models/_exceptions.py +0 -0
  148. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_evals/_models/_mocks.py +0 -0
  149. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_evals/_models/_output.py +0 -0
  150. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_evals/_models/_sw_reporting.py +0 -0
  151. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_evals/_progress_reporter.py +0 -0
  152. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_evals/_span_collection.py +0 -0
  153. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_evals/mocks/__init__.py +0 -0
  154. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_evals/mocks/input_mocker.py +0 -0
  155. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_evals/mocks/llm_mocker.py +0 -0
  156. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_evals/mocks/mocker.py +0 -0
  157. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_evals/mocks/mocker_factory.py +0 -0
  158. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_evals/mocks/mockito_mocker.py +0 -0
  159. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_evals/mocks/mocks.py +0 -0
  160. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_push/sw_file_handler.py +0 -0
  161. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_runtime/_escalation.py +0 -0
  162. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_runtime/_hitl.py +0 -0
  163. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_runtime/_logging.py +0 -0
  164. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_runtime/_script_executor.py +0 -0
  165. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
  166. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_templates/.rels.template +0 -0
  167. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
  168. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_templates/main.py.template +0 -0
  169. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
  170. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_utils/_common.py +0 -0
  171. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_utils/_console.py +0 -0
  172. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_utils/_constants.py +0 -0
  173. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_utils/_debug.py +0 -0
  174. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_utils/_eval_set.py +0 -0
  175. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_utils/_folders.py +0 -0
  176. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_utils/_input_args.py +0 -0
  177. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
  178. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_utils/_processes.py +0 -0
  179. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_utils/_project_files.py +0 -0
  180. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_utils/_studio_project.py +0 -0
  181. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_utils/_tracing.py +0 -0
  182. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/_utils/_uv_helpers.py +0 -0
  183. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/cli_auth.py +0 -0
  184. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/cli_deploy.py +0 -0
  185. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/cli_dev.py +0 -0
  186. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/cli_invoke.py +0 -0
  187. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/cli_new.py +0 -0
  188. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/cli_pack.py +0 -0
  189. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/cli_publish.py +0 -0
  190. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/cli_pull.py +0 -0
  191. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/cli_push.py +0 -0
  192. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/middlewares.py +0 -0
  193. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/models/__init__.py +0 -0
  194. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/models/runtime_schema.py +0 -0
  195. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_cli/spinner.py +0 -0
  196. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_config.py +0 -0
  197. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_events/__init__.py +0 -0
  198. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_events/_event_bus.py +0 -0
  199. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_events/_events.py +0 -0
  200. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_execution_context.py +0 -0
  201. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_folder_context.py +0 -0
  202. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_resources/AGENTS.md +0 -0
  203. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_resources/CLAUDE.md +0 -0
  204. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_resources/CLI_REFERENCE.md +0 -0
  205. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_resources/REQUIRED_STRUCTURE.md +0 -0
  206. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_resources/SDK_REFERENCE.md +0 -0
  207. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_services/__init__.py +0 -0
  208. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_services/_base_service.py +0 -0
  209. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_services/actions_service.py +0 -0
  210. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_services/api_client.py +0 -0
  211. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_services/assets_service.py +0 -0
  212. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_services/attachments_service.py +0 -0
  213. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_services/buckets_service.py +0 -0
  214. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_services/connections_service.py +0 -0
  215. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_services/context_grounding_service.py +0 -0
  216. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_services/documents_service.py +0 -0
  217. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_services/entities_service.py +0 -0
  218. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_services/external_application_service.py +0 -0
  219. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_services/folder_service.py +0 -0
  220. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_services/jobs_service.py +0 -0
  221. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_services/llm_gateway_service.py +0 -0
  222. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_services/processes_service.py +0 -0
  223. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_services/queues_service.py +0 -0
  224. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_utils/__init__.py +0 -0
  225. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_utils/_auth.py +0 -0
  226. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_utils/_endpoint.py +0 -0
  227. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_utils/_infer_bindings.py +0 -0
  228. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_utils/_read_overwrites.py +0 -0
  229. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_utils/_request_override.py +0 -0
  230. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_utils/_request_spec.py +0 -0
  231. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_utils/_ssl_context.py +0 -0
  232. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_utils/_url.py +0 -0
  233. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_utils/_user_agent.py +0 -0
  234. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/_utils/constants.py +0 -0
  235. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/agent/_utils.py +0 -0
  236. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/agent/conversation/__init__.py +0 -0
  237. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/agent/conversation/async_stream.py +0 -0
  238. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/agent/conversation/citation.py +0 -0
  239. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/agent/conversation/content.py +0 -0
  240. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/agent/conversation/conversation.py +0 -0
  241. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/agent/conversation/event.py +0 -0
  242. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/agent/conversation/exchange.py +0 -0
  243. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/agent/conversation/message.py +0 -0
  244. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/agent/conversation/meta.py +0 -0
  245. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/agent/conversation/tool.py +0 -0
  246. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/agent/loop/__init__.py +0 -0
  247. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/agent/loop/prompts.py +0 -0
  248. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/agent/loop/tools.py +0 -0
  249. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/agent/models/agent.py +0 -0
  250. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/agent/models/evals.py +0 -0
  251. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/eval/_helpers/__init__.py +0 -0
  252. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/eval/_helpers/helpers.py +0 -0
  253. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/eval/evaluators/__init__.py +0 -0
  254. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/eval/evaluators/base_evaluator.py +0 -0
  255. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/eval/evaluators/deterministic_evaluator_base.py +0 -0
  256. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/eval/evaluators/exact_match_evaluator.py +0 -0
  257. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/eval/evaluators/json_similarity_evaluator.py +0 -0
  258. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/eval/evaluators/llm_as_judge_evaluator.py +0 -0
  259. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/eval/evaluators/trajectory_evaluator.py +0 -0
  260. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/eval/mocks/__init__.py +0 -0
  261. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/eval/mocks/mockable.py +0 -0
  262. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/eval/models/__init__.py +0 -0
  263. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/eval/models/models.py +0 -0
  264. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/models/__init__.py +0 -0
  265. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/models/action_schema.py +0 -0
  266. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/models/actions.py +0 -0
  267. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/models/assets.py +0 -0
  268. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/models/attachment.py +0 -0
  269. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/models/auth.py +0 -0
  270. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/models/buckets.py +0 -0
  271. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/models/connections.py +0 -0
  272. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/models/context_grounding.py +0 -0
  273. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/models/context_grounding_index.py +0 -0
  274. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/models/documents.py +0 -0
  275. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/models/entities.py +0 -0
  276. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/models/errors.py +0 -0
  277. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/models/exceptions.py +0 -0
  278. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/models/interrupt_models.py +0 -0
  279. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/models/job.py +0 -0
  280. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/models/llm_gateway.py +0 -0
  281. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/models/processes.py +0 -0
  282. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/models/queues.py +0 -0
  283. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/py.typed +0 -0
  284. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/telemetry/__init__.py +0 -0
  285. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/telemetry/_constants.py +0 -0
  286. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/telemetry/_track.py +0 -0
  287. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/tracing/__init__.py +0 -0
  288. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/tracing/_otel_exporters.py +0 -0
  289. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/tracing/_traced.py +0 -0
  290. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/tracing/_utils.py +0 -0
  291. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/utils/__init__.py +0 -0
  292. {uipath-2.1.96 → uipath-2.1.98}/src/uipath/utils/dynamic_schema.py +0 -0
  293. {uipath-2.1.96 → uipath-2.1.98}/testcases/apicalls-testcase/main.py +0 -0
  294. {uipath-2.1.96 → uipath-2.1.98}/testcases/apicalls-testcase/pyproject.toml +0 -0
  295. {uipath-2.1.96 → uipath-2.1.98}/testcases/apicalls-testcase/run.sh +0 -0
  296. {uipath-2.1.96 → uipath-2.1.98}/testcases/apicalls-testcase/src/assert.py +0 -0
  297. {uipath-2.1.96 → uipath-2.1.98}/testcases/basic-testcase/main.py +0 -0
  298. {uipath-2.1.96 → uipath-2.1.98}/testcases/basic-testcase/pyproject.toml +0 -0
  299. {uipath-2.1.96 → uipath-2.1.98}/testcases/basic-testcase/run.sh +0 -0
  300. {uipath-2.1.96 → uipath-2.1.98}/testcases/basic-testcase/src/assert.py +0 -0
  301. {uipath-2.1.96 → uipath-2.1.98}/testcases/common/validate_output.sh +0 -0
  302. {uipath-2.1.96 → uipath-2.1.98}/testcases/langchain-cross/agent.mermaid +0 -0
  303. {uipath-2.1.96 → uipath-2.1.98}/testcases/langchain-cross/langgraph.json +0 -0
  304. {uipath-2.1.96 → uipath-2.1.98}/testcases/langchain-cross/pyproject.toml +0 -0
  305. {uipath-2.1.96 → uipath-2.1.98}/testcases/langchain-cross/run.sh +0 -0
  306. {uipath-2.1.96 → uipath-2.1.98}/testcases/langchain-cross/src/assert.py +0 -0
  307. {uipath-2.1.96 → uipath-2.1.98}/testcases/langchain-cross/src/main.py +0 -0
  308. {uipath-2.1.96 → uipath-2.1.98}/testcases/llamaindex-cross/agent.mermaid +0 -0
  309. {uipath-2.1.96 → uipath-2.1.98}/testcases/llamaindex-cross/llama_index.json +0 -0
  310. {uipath-2.1.96 → uipath-2.1.98}/testcases/llamaindex-cross/pyproject.toml +0 -0
  311. {uipath-2.1.96 → uipath-2.1.98}/testcases/llamaindex-cross/run.sh +0 -0
  312. {uipath-2.1.96 → uipath-2.1.98}/testcases/llamaindex-cross/src/assert.py +0 -0
  313. {uipath-2.1.96 → uipath-2.1.98}/testcases/llamaindex-cross/src/main.py +0 -0
  314. {uipath-2.1.96 → uipath-2.1.98}/tests/__init__.py +0 -0
  315. {uipath-2.1.96 → uipath-2.1.98}/tests/agent/models/test_agent.py +0 -0
  316. {uipath-2.1.96 → uipath-2.1.98}/tests/agent/models/test_evals.py +0 -0
  317. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/conftest.py +0 -0
  318. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/eval/mocks/test_input_mocker.py +0 -0
  319. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/eval/mocks/test_mocks.py +0 -0
  320. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/evaluators/test_json_similarity_evaluator.py +0 -0
  321. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/mocks/bindings_script.py +0 -0
  322. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/mocks/pyproject.toml +0 -0
  323. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/mocks/simple_script.py +0 -0
  324. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/mocks/uipath-mock.json +0 -0
  325. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/mocks/uipath-simple-script-mock.json +0 -0
  326. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/models/test_runtime_schema.py +0 -0
  327. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/test_auth.py +0 -0
  328. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/test_hitl.py +0 -0
  329. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/test_input_args.py +0 -0
  330. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/test_invoke.py +0 -0
  331. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/test_new.py +0 -0
  332. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/test_oidc_utils.py +0 -0
  333. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/test_pack.py +0 -0
  334. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/test_portal_service_ensure_valid_token.py +0 -0
  335. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/test_portal_service_refresh_token.py +0 -0
  336. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/test_publish.py +0 -0
  337. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/test_pull.py +0 -0
  338. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/test_push.py +0 -0
  339. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/test_run.py +0 -0
  340. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/test_utils.py +0 -0
  341. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/utils/common.py +0 -0
  342. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/utils/project_details.py +0 -0
  343. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/utils/test_dynamic_schema.py +0 -0
  344. {uipath-2.1.96 → uipath-2.1.98}/tests/cli/utils/uipath_json.py +0 -0
  345. {uipath-2.1.96 → uipath-2.1.98}/tests/conftest.py +0 -0
  346. {uipath-2.1.96 → uipath-2.1.98}/tests/sdk/services/conftest.py +0 -0
  347. {uipath-2.1.96 → uipath-2.1.98}/tests/sdk/services/test_actions_service.py +0 -0
  348. {uipath-2.1.96 → uipath-2.1.98}/tests/sdk/services/test_api_client.py +0 -0
  349. {uipath-2.1.96 → uipath-2.1.98}/tests/sdk/services/test_assets_service.py +0 -0
  350. {uipath-2.1.96 → uipath-2.1.98}/tests/sdk/services/test_attachments_service.py +0 -0
  351. {uipath-2.1.96 → uipath-2.1.98}/tests/sdk/services/test_base_service.py +0 -0
  352. {uipath-2.1.96 → uipath-2.1.98}/tests/sdk/services/test_buckets_service.py +0 -0
  353. {uipath-2.1.96 → uipath-2.1.98}/tests/sdk/services/test_connections_service.py +0 -0
  354. {uipath-2.1.96 → uipath-2.1.98}/tests/sdk/services/test_context_grounding_service.py +0 -0
  355. {uipath-2.1.96 → uipath-2.1.98}/tests/sdk/services/test_documents_service.py +0 -0
  356. {uipath-2.1.96 → uipath-2.1.98}/tests/sdk/services/test_entities_service.py +0 -0
  357. {uipath-2.1.96 → uipath-2.1.98}/tests/sdk/services/test_external_application_service.py +0 -0
  358. {uipath-2.1.96 → uipath-2.1.98}/tests/sdk/services/test_folder_service.py +0 -0
  359. {uipath-2.1.96 → uipath-2.1.98}/tests/sdk/services/test_jobs_service.py +0 -0
  360. {uipath-2.1.96 → uipath-2.1.98}/tests/sdk/services/test_llm_integration.py +0 -0
  361. {uipath-2.1.96 → uipath-2.1.98}/tests/sdk/services/test_llm_schema_cleanup.py +0 -0
  362. {uipath-2.1.96 → uipath-2.1.98}/tests/sdk/services/test_llm_service.py +0 -0
  363. {uipath-2.1.96 → uipath-2.1.98}/tests/sdk/services/test_processes_service.py +0 -0
  364. {uipath-2.1.96 → uipath-2.1.98}/tests/sdk/services/test_queues_service.py +0 -0
  365. {uipath-2.1.96 → uipath-2.1.98}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
  366. {uipath-2.1.96 → uipath-2.1.98}/tests/sdk/services/tests_data/documents_service/create_validation_action_response.json +0 -0
  367. {uipath-2.1.96 → uipath-2.1.98}/tests/sdk/services/tests_data/documents_service/extraction_response.json +0 -0
  368. {uipath-2.1.96 → uipath-2.1.98}/tests/sdk/services/tests_data/documents_service/validated_result.json +0 -0
  369. {uipath-2.1.96 → uipath-2.1.98}/tests/sdk/test_bindings_inference.py +0 -0
  370. {uipath-2.1.96 → uipath-2.1.98}/tests/sdk/test_config.py +0 -0
  371. {uipath-2.1.96 → uipath-2.1.98}/tests/sdk/test_overwrites.py +0 -0
  372. {uipath-2.1.96 → uipath-2.1.98}/tests/tracing/test_otel_exporters.py +0 -0
  373. {uipath-2.1.96 → uipath-2.1.98}/tests/tracing/test_span_utils.py +0 -0
  374. {uipath-2.1.96 → uipath-2.1.98}/tests/tracing/test_traced.py +0 -0
  375. {uipath-2.1.96 → uipath-2.1.98}/tests/tracing/test_tracing_manager.py +0 -0
@@ -63,10 +63,27 @@ jobs:
63
63
  USE_AZURE_CHAT: ${{ matrix.use_azure_chat }}
64
64
  working-directory: testcases/${{ matrix.testcase }}
65
65
  run: |
66
+ # If any errors occur execution will stop with exit code
67
+ set -e
68
+
66
69
  echo "Running testcase: ${{ matrix.testcase }}"
67
70
  echo "Environment: ${{ matrix.environment }}"
68
71
  echo "Working directory: $(pwd)"
69
72
 
70
73
  # Execute the testcase run script directly
71
74
  bash run.sh
72
- bash ../common/validate_output.sh
75
+ bash ../common/validate_output.sh
76
+
77
+ summarize-results:
78
+ needs: [integration-tests]
79
+ runs-on: ubuntu-latest
80
+ if: always() # This ensures the job runs even if the tests fail
81
+ steps:
82
+ - name: Check integration tests status
83
+ run: |
84
+ if [[ "${{ needs.integration-tests.result }}" == "success" ]]; then
85
+ echo "All integration tests passed"
86
+ else
87
+ echo "Some integration tests failed"
88
+ exit 1
89
+ fi
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: uipath
3
- Version: 2.1.96
3
+ Version: 2.1.98
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.96"
3
+ version = "2.1.98"
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,6 +3,7 @@ import sys
3
3
 
4
4
  import click
5
5
 
6
+ from .._utils._logs import setup_logging
6
7
  from ._utils._common import add_cwd_to_path, load_environment_variables
7
8
  from .cli_auth import auth as auth
8
9
  from .cli_debug import debug as debug # type: ignore
@@ -47,6 +48,7 @@ def _get_safe_version() -> str:
47
48
  def cli(lv: bool, v: bool) -> None:
48
49
  load_environment_variables()
49
50
  add_cwd_to_path()
51
+ setup_logging()
50
52
  if lv:
51
53
  try:
52
54
  version = importlib.metadata.version("uipath-langchain")
@@ -5,9 +5,11 @@ import os
5
5
  from abc import ABC, abstractmethod
6
6
  from typing import Any, Dict, Optional
7
7
 
8
+ from pydantic import BaseModel
8
9
  from pysignalr.client import SignalRClient
9
10
  from rich.console import Console
10
11
  from rich.syntax import Syntax
12
+ from rich.tree import Tree
11
13
 
12
14
  from uipath._cli._runtime._contracts import (
13
15
  UiPathBreakpointResult,
@@ -115,7 +117,7 @@ class ConsoleDebugBridge(UiPathDebugBridge):
115
117
 
116
118
  self.console.print(f"[yellow]●[/yellow] [bold]{state_event.node_name}[/bold]")
117
119
  if state_event.payload:
118
- self._print_json(state_event.payload, label="State")
120
+ self._print_json(state_event.payload, label="state")
119
121
 
120
122
  async def emit_breakpoint_hit(
121
123
  self, breakpoint_result: UiPathBreakpointResult
@@ -135,7 +137,7 @@ class ConsoleDebugBridge(UiPathDebugBridge):
135
137
 
136
138
  # Display current state
137
139
  if breakpoint_result.current_state:
138
- self._print_json(breakpoint_result.current_state, label="State")
140
+ self._print_json(breakpoint_result.current_state, label="state")
139
141
 
140
142
  async def emit_execution_completed(
141
143
  self,
@@ -157,7 +159,7 @@ class ConsoleDebugBridge(UiPathDebugBridge):
157
159
 
158
160
  self.console.print(f"[{color}]{symbol} END[/{color}]")
159
161
  if runtime_result.output:
160
- self._print_json(runtime_result.output, label="Output")
162
+ self._print_json(runtime_result.output, label="output")
161
163
 
162
164
  async def emit_execution_error(
163
165
  self,
@@ -193,36 +195,83 @@ class ConsoleDebugBridge(UiPathDebugBridge):
193
195
  self.console.print()
194
196
  return user_input
195
197
 
196
- def _print_json(self, data: Dict[str, Any], label: str = "Data") -> None:
197
- """Print JSON data in a readable format."""
198
+ def _print_json(self, data: Dict[str, Any], label: str = "data") -> None:
199
+ """Print JSON data with enhanced hierarchy."""
198
200
  try:
199
- json_str = json.dumps(data, indent=2, default=str)
200
-
201
- # Limit output if too large
202
- is_truncated = False
203
- if len(json_str) > 2000:
204
- json_str = json_str[:2000] + "\n..."
205
- is_truncated = True
206
-
207
- syntax = Syntax(
208
- json_str,
209
- "json",
210
- theme="monokai",
211
- line_numbers=False,
212
- background_color="default",
213
- )
201
+ # Create a tree for nested structure
202
+ tree = Tree(f"[bold cyan]{label}[/bold cyan]")
203
+
204
+ def process_value(
205
+ node: Tree, value: Any, key_label: str, depth: int
206
+ ) -> None:
207
+ """Process a single value and add it to the tree."""
208
+ if isinstance(value, BaseModel):
209
+ branch = node.add(
210
+ f"{key_label} [dim]({type(value).__name__})[/dim]"
211
+ )
212
+ add_to_tree(branch, value, depth + 1)
213
+ elif isinstance(value, dict):
214
+ branch = node.add(f"{key_label} [dim](dict)[/dim]")
215
+ add_to_tree(branch, value, depth + 1)
216
+ elif isinstance(value, list):
217
+ branch = node.add(
218
+ f"{key_label} [dim](list, {len(value)} items)[/dim]"
219
+ )
220
+ add_to_tree(branch, value, depth + 1)
221
+ else:
222
+ val_str = str(value)
223
+ if len(val_str) > 250:
224
+ val_str = val_str[:250] + "..."
225
+ node.add(f"{key_label}: [green]{val_str}[/green]")
226
+
227
+ def add_to_tree(node: Tree, payload: Any, depth: int = 0):
228
+ if depth > 10:
229
+ node.add("[dim]...[/dim]")
230
+ return
231
+
232
+ if isinstance(payload, BaseModel):
233
+ try:
234
+ payload = payload.model_dump() # Pydantic v2
235
+ except AttributeError:
236
+ payload = payload.dict() # Pydantic v1
237
+ add_to_tree(node, payload, depth)
238
+
239
+ elif isinstance(payload, dict):
240
+ for key, value in payload.items():
241
+ process_value(node, value, f"[yellow]{key}[/yellow]", depth)
242
+
243
+ elif isinstance(payload, list):
244
+ for i, item in enumerate(payload):
245
+ process_value(node, item, f"[cyan]#{i}[/cyan]", depth)
246
+
247
+ else:
248
+ val_str = str(payload)
249
+ if len(val_str) > 250:
250
+ val_str = val_str[:250] + "..."
251
+ node.add(f"[green]{val_str}[/green]")
252
+
253
+ add_to_tree(tree, data)
214
254
 
215
255
  self.console.print()
216
- truncated_text = " (truncated)" if is_truncated else ""
217
- self.console.print(f"[dim]{label}{truncated_text}:")
218
- self.console.print(syntax)
256
+ self.console.print(tree)
219
257
  self.console.print()
258
+
220
259
  except Exception:
221
- # Fallback to simple print
222
- self.console.print()
223
- self.console.print(f"[dim]{label}:")
224
- self.console.print(str(data))
225
- self.console.print()
260
+ try:
261
+ json_str = json.dumps(data, indent=2, default=str)
262
+ if len(json_str) > 10000:
263
+ json_str = json_str[:10000] + "\n..."
264
+
265
+ syntax = Syntax(json_str, "json", theme="monokai", line_numbers=False)
266
+ self.console.print(f"\n[dim]{label}:")
267
+ self.console.print(syntax)
268
+ self.console.print()
269
+ except Exception:
270
+ # Fallback to simple print
271
+ self.console.print()
272
+ self.console.print(f"[dim]{label}:")
273
+ self.console.print(str(data))
274
+ self.console.print()
226
275
 
227
276
 
228
277
  class SignalRDebugBridge(UiPathDebugBridge):
@@ -56,7 +56,7 @@ class UiPathDebugRuntime(UiPathBaseRuntime, Generic[T, C]):
56
56
  raise RuntimeError("Failed to create inner runtime")
57
57
 
58
58
  await self.debug_bridge.emit_execution_started(
59
- execution_id=self.context.execution_id or "default"
59
+ execution_id=self.context.job_id or "default"
60
60
  )
61
61
 
62
62
  # Try to stream events from inner runtime
@@ -78,7 +78,7 @@ class UiPathDebugRuntime(UiPathBaseRuntime, Generic[T, C]):
78
78
  except Exception as e:
79
79
  # Emit execution error
80
80
  await self.debug_bridge.emit_execution_error(
81
- execution_id=self.context.execution_id or "default",
81
+ execution_id=self.context.job_id or "default",
82
82
  error=str(e),
83
83
  )
84
84
  raise
@@ -451,12 +451,12 @@ class UiPathEvalRuntime(UiPathBaseRuntime, Generic[T, C]):
451
451
  async def execute_runtime(
452
452
  self, eval_item: EvaluationItem, execution_id: str
453
453
  ) -> UiPathEvalRunExecutionOutput:
454
- runtime_context: C = self.factory.new_context(
455
- execution_id=execution_id,
456
- input_json=eval_item.inputs,
457
- is_eval_run=True,
458
- log_handler=self._setup_execution_logging(execution_id),
459
- )
454
+ context_args = self.context.model_dump()
455
+ context_args["execution_id"] = execution_id
456
+ context_args["input_json"] = eval_item.inputs
457
+ context_args["is_eval_run"] = True
458
+ context_args["log_handler"] = self._setup_execution_logging(execution_id)
459
+ runtime_context: C = self.factory.new_context(**context_args)
460
460
  if runtime_context.execution_id is None:
461
461
  raise ValueError("execution_id must be set for eval runs")
462
462
 
@@ -39,6 +39,7 @@ from uipath._events._events import UiPathRuntimeEvent
39
39
  from uipath.agent.conversation import UiPathConversationEvent, UiPathConversationMessage
40
40
  from uipath.tracing import TracingManager
41
41
 
42
+ from ..models.runtime_schema import BindingResource, Entrypoint
42
43
  from ._logging import LogsInterceptor
43
44
 
44
45
  logger = logging.getLogger(__name__)
@@ -516,6 +517,22 @@ class UiPathBaseRuntime(ABC):
516
517
  runtime = cls(context)
517
518
  return runtime
518
519
 
520
+ @property
521
+ def get_binding_resources(self) -> List[BindingResource]:
522
+ """Get binding resources for this runtime.
523
+
524
+ Returns: A list of binding resources.
525
+ """
526
+ raise NotImplementedError()
527
+
528
+ @property
529
+ def get_entrypoint(self) -> Entrypoint:
530
+ """Get entrypoint for this runtime.
531
+
532
+ Returns: A entrypoint for this runtime.
533
+ """
534
+ raise NotImplementedError()
535
+
519
536
  async def __aenter__(self):
520
537
  """Async enter method called when entering the 'async with' block.
521
538
 
@@ -806,9 +823,9 @@ class UiPathRuntimeFactory(Generic[T, C]):
806
823
  return self.context_generator(**kwargs)
807
824
  return self.context_class(**kwargs)
808
825
 
809
- def new_runtime(self) -> T:
826
+ def new_runtime(self, **kwargs) -> T:
810
827
  """Create a new runtime instance."""
811
- context = self.new_context()
828
+ context = self.new_context(**kwargs)
812
829
  if self.runtime_generator:
813
830
  return self.runtime_generator(context)
814
831
  return self.runtime_class.from_context(context)
@@ -0,0 +1,145 @@
1
+ """Python script runtime implementation for executing and managing python scripts."""
2
+
3
+ import logging
4
+ import os
5
+ import uuid
6
+ from functools import cached_property
7
+ from pathlib import Path
8
+ from typing import Any, Awaitable, Callable, List, Optional, TypeVar
9
+
10
+ from typing_extensions import override
11
+
12
+ from .._utils._console import ConsoleLogger
13
+ from .._utils._input_args import generate_args
14
+ from .._utils._parse_ast import generate_bindings # type: ignore[attr-defined]
15
+ from ..models.runtime_schema import BindingResource, Entrypoint
16
+ from ._contracts import (
17
+ UiPathBaseRuntime,
18
+ UiPathErrorCategory,
19
+ UiPathRuntimeContext,
20
+ UiPathRuntimeError,
21
+ UiPathRuntimeResult,
22
+ UiPathRuntimeStatus,
23
+ )
24
+ from ._script_executor import ScriptExecutor
25
+
26
+ logger = logging.getLogger(__name__)
27
+
28
+ T = TypeVar("T")
29
+ R = TypeVar("R")
30
+ AsyncFunc = Callable[[T], Awaitable[R]]
31
+
32
+
33
+ class UiPathRuntime(UiPathBaseRuntime):
34
+ def __init__(self, context: UiPathRuntimeContext, executor: AsyncFunc[Any, Any]):
35
+ self.context = context
36
+ self.executor = executor
37
+
38
+ async def cleanup(self) -> None:
39
+ """Cleanup runtime resources."""
40
+ pass
41
+
42
+ async def validate(self):
43
+ """Validate runtime context."""
44
+ pass
45
+
46
+ async def execute(self) -> Optional[UiPathRuntimeResult]:
47
+ """Execute the Python script with the provided input and configuration.
48
+
49
+ Returns:
50
+ Dictionary with execution results
51
+
52
+ Raises:
53
+ UiPathRuntimeError: If execution fails
54
+ """
55
+ try:
56
+ script_result = await self.executor(self.context.input_json)
57
+
58
+ self.context.result = UiPathRuntimeResult(
59
+ output=script_result, status=UiPathRuntimeStatus.SUCCESSFUL
60
+ )
61
+
62
+ return self.context.result
63
+
64
+ except Exception as e:
65
+ if isinstance(e, UiPathRuntimeError):
66
+ raise
67
+
68
+ raise UiPathRuntimeError(
69
+ "EXECUTION_ERROR",
70
+ "Python script execution failed",
71
+ f"Error: {str(e)}",
72
+ UiPathErrorCategory.SYSTEM,
73
+ ) from e
74
+
75
+
76
+ console = ConsoleLogger()
77
+
78
+
79
+ def get_user_script(directory: str, entrypoint: Optional[str] = None) -> Optional[str]:
80
+ """Find the Python script to process."""
81
+ if entrypoint:
82
+ script_path = os.path.join(directory, entrypoint)
83
+ if not os.path.isfile(script_path):
84
+ console.error(
85
+ f"The {entrypoint} file does not exist in the current directory."
86
+ )
87
+ return None
88
+ return script_path
89
+
90
+ python_files = [f for f in os.listdir(directory) if f.endswith(".py")]
91
+
92
+ if not python_files:
93
+ console.error(
94
+ "No python files found in the current directory.\nPlease specify the entrypoint: `uipath init <entrypoint_path>`"
95
+ )
96
+ return None
97
+ elif len(python_files) == 1:
98
+ return os.path.join(directory, python_files[0])
99
+ else:
100
+ console.error(
101
+ "Multiple python files found in the current directory.\nPlease specify the entrypoint: `uipath init <entrypoint_path>`"
102
+ )
103
+ return None
104
+
105
+
106
+ class UiPathScriptRuntime(UiPathRuntime):
107
+ """Runtime for executing Python scripts."""
108
+
109
+ def __init__(self, context: UiPathRuntimeContext, entrypoint: str):
110
+ executor = ScriptExecutor(entrypoint)
111
+ super().__init__(context, executor)
112
+
113
+ @classmethod
114
+ def from_context(cls, context: UiPathRuntimeContext):
115
+ """Create runtime instance from context."""
116
+ return UiPathScriptRuntime(context, context.entrypoint or "")
117
+
118
+ @cached_property
119
+ @override
120
+ def get_binding_resources(self) -> List[BindingResource]:
121
+ """Get binding resources for script runtime.
122
+
123
+ Returns: A list of binding resources.
124
+ """
125
+ working_dir = self.context.runtime_dir or os.getcwd()
126
+ script_path = get_user_script(working_dir, entrypoint=self.context.entrypoint)
127
+ bindings = generate_bindings(script_path)
128
+ return bindings.resources
129
+
130
+ @cached_property
131
+ @override
132
+ def get_entrypoint(self) -> Entrypoint:
133
+ working_dir = self.context.runtime_dir or os.getcwd()
134
+ script_path = get_user_script(working_dir, entrypoint=self.context.entrypoint)
135
+ if not script_path:
136
+ raise ValueError("Entrypoint not found.")
137
+ relative_path = Path(script_path).relative_to(working_dir).as_posix()
138
+ args = generate_args(script_path)
139
+ return Entrypoint(
140
+ file_path=relative_path, # type: ignore[call-arg] # This exists
141
+ unique_id=str(uuid.uuid4()),
142
+ type="agent",
143
+ input=args["input"],
144
+ output=args["output"],
145
+ )
@@ -0,0 +1,21 @@
1
+ from uipath._cli._runtime._contracts import (
2
+ UiPathBaseRuntime,
3
+ UiPathRuntimeContext,
4
+ UiPathRuntimeFactory,
5
+ )
6
+ from uipath._cli._runtime._runtime import UiPathScriptRuntime
7
+
8
+
9
+ def generate_runtime_factory() -> UiPathRuntimeFactory[
10
+ UiPathBaseRuntime, UiPathRuntimeContext
11
+ ]:
12
+ runtime_factory: UiPathRuntimeFactory[UiPathBaseRuntime, UiPathRuntimeContext] = (
13
+ UiPathRuntimeFactory(
14
+ UiPathScriptRuntime,
15
+ UiPathRuntimeContext,
16
+ context_generator=lambda **kwargs: UiPathRuntimeContext.with_defaults(
17
+ **kwargs
18
+ ),
19
+ )
20
+ )
21
+ return runtime_factory
@@ -1,7 +1,6 @@
1
1
  # type: ignore
2
2
  import asyncio
3
3
  import os
4
- import uuid
5
4
  from os import environ as env
6
5
  from typing import Optional
7
6
 
@@ -110,7 +109,6 @@ def debug(
110
109
  execution_output_file=output_file,
111
110
  debug=debug,
112
111
  )
113
- debug_context.execution_id = debug_context.job_id or str(uuid.uuid4())
114
112
 
115
113
  runtime_factory = UiPathRuntimeFactory(
116
114
  UiPathScriptRuntime,
@@ -12,11 +12,7 @@ from uipath._cli._evals._runtime import (
12
12
  UiPathEvalContext,
13
13
  UiPathEvalRuntime,
14
14
  )
15
- from uipath._cli._runtime._contracts import (
16
- UiPathRuntimeContext,
17
- UiPathRuntimeFactory,
18
- )
19
- from uipath._cli._runtime._runtime import UiPathScriptRuntime
15
+ from uipath._cli._runtime._runtime_factory import generate_runtime_factory
20
16
  from uipath._cli._utils._constants import UIPATH_PROJECT_ID
21
17
  from uipath._cli._utils._folders import get_personal_workspace_key_async
22
18
  from uipath._cli.middlewares import Middlewares
@@ -96,6 +92,15 @@ def eval(
96
92
  workers: Number of parallel workers for running evaluations
97
93
  no_report: Do not report the evaluation results
98
94
  """
95
+ context_args = {
96
+ "entrypoint": entrypoint or auto_discover_entrypoint(),
97
+ "eval_set": eval_set,
98
+ "eval_ids": eval_ids,
99
+ "workers": workers,
100
+ "no_report": no_report,
101
+ "output_file": output_file,
102
+ }
103
+
99
104
  should_register_progress_reporter = setup_reporting_prereq(no_report)
100
105
 
101
106
  result = Middlewares.next(
@@ -119,16 +124,9 @@ def eval(
119
124
  progress_reporter = StudioWebProgressReporter(LlmOpsHttpExporter())
120
125
  asyncio.run(progress_reporter.subscribe_to_eval_runtime_events(event_bus))
121
126
 
122
- def generate_runtime_context(**context_kwargs) -> UiPathRuntimeContext:
123
- runtime_context = UiPathRuntimeContext.with_defaults(**context_kwargs)
124
- runtime_context.entrypoint = runtime_entrypoint
125
- return runtime_context
126
-
127
- runtime_entrypoint = entrypoint or auto_discover_entrypoint()
128
-
129
127
  eval_context = UiPathEvalContext.with_defaults(
130
128
  execution_output_file=output_file,
131
- entrypoint=runtime_entrypoint,
129
+ entrypoint=context_args["entrypoint"],
132
130
  )
133
131
 
134
132
  eval_context.no_report = no_report
@@ -140,11 +138,7 @@ def eval(
140
138
  asyncio.run(console_reporter.subscribe_to_eval_runtime_events(event_bus))
141
139
 
142
140
  try:
143
- runtime_factory = UiPathRuntimeFactory(
144
- UiPathScriptRuntime,
145
- UiPathRuntimeContext,
146
- context_generator=generate_runtime_context,
147
- )
141
+ runtime_factory = generate_runtime_factory()
148
142
  if eval_context.job_id:
149
143
  runtime_factory.add_span_exporter(LlmOpsHttpExporter())
150
144
 
@@ -5,7 +5,6 @@ import logging
5
5
  import os
6
6
  import shutil
7
7
  import uuid
8
- from pathlib import Path
9
8
  from typing import Any, Dict, Optional
10
9
 
11
10
  import click
@@ -13,11 +12,11 @@ import click
13
12
  from .._utils.constants import ENV_TELEMETRY_ENABLED
14
13
  from ..telemetry import track
15
14
  from ..telemetry._constants import _PROJECT_KEY, _TELEMETRY_CONFIG_FILE
15
+ from ._runtime._runtime import get_user_script
16
+ from ._runtime._runtime_factory import generate_runtime_factory
16
17
  from ._utils._console import ConsoleLogger
17
- from ._utils._input_args import generate_args
18
- from ._utils._parse_ast import generate_bindings
19
18
  from .middlewares import Middlewares
20
- from .models.runtime_schema import Bindings, Entrypoint, RuntimeSchema
19
+ from .models.runtime_schema import Bindings, RuntimeSchema
21
20
 
22
21
  console = ConsoleLogger()
23
22
  logger = logging.getLogger(__name__)
@@ -126,33 +125,6 @@ def get_existing_settings(config_path: str) -> Optional[Dict[str, Any]]:
126
125
  return None
127
126
 
128
127
 
129
- def get_user_script(directory: str, entrypoint: Optional[str] = None) -> Optional[str]:
130
- """Find the Python script to process."""
131
- if entrypoint:
132
- script_path = os.path.join(directory, entrypoint)
133
- if not os.path.isfile(script_path):
134
- console.error(
135
- f"The {entrypoint} file does not exist in the current directory."
136
- )
137
- return None
138
- return script_path
139
-
140
- python_files = [f for f in os.listdir(directory) if f.endswith(".py")]
141
-
142
- if not python_files:
143
- console.error(
144
- "No python files found in the current directory.\nPlease specify the entrypoint: `uipath init <entrypoint_path>`"
145
- )
146
- return None
147
- elif len(python_files) == 1:
148
- return os.path.join(directory, python_files[0])
149
- else:
150
- console.error(
151
- "Multiple python files found in the current directory.\nPlease specify the entrypoint: `uipath init <entrypoint_path>`"
152
- )
153
- return None
154
-
155
-
156
128
  def write_config_file(config_data: Dict[str, Any] | RuntimeSchema) -> None:
157
129
  existing_settings = get_existing_settings(CONFIG_PATH)
158
130
  if existing_settings is not None:
@@ -205,39 +177,28 @@ def init(entrypoint: str, infer_bindings: bool) -> None:
205
177
 
206
178
  generate_agent_md_files(current_directory)
207
179
  script_path = get_user_script(current_directory, entrypoint=entrypoint)
208
-
209
180
  if not script_path:
210
181
  return
211
182
 
212
- try:
213
- args = generate_args(script_path)
214
-
215
- relative_path = Path(script_path).relative_to(current_directory).as_posix()
216
- bindings = None
217
- if infer_bindings:
218
- try:
219
- bindings = generate_bindings(script_path)
220
- except Exception as e:
221
- console.warning(f"Warning: Could not generate bindings: {str(e)}")
222
- if bindings is None:
183
+ context_args = {
184
+ "runtime_dir": os.getcwd(),
185
+ "entrypoint": script_path,
186
+ }
187
+
188
+ def initialize() -> None:
189
+ try:
190
+ runtime = generate_runtime_factory().new_runtime(**context_args)
223
191
  bindings = Bindings(
224
192
  version="2.0",
225
- resources=[],
193
+ resources=runtime.get_binding_resources,
226
194
  )
227
- config_data = RuntimeSchema(
228
- entrypoints=[
229
- Entrypoint(
230
- file_path=relative_path,
231
- unique_id=str(uuid.uuid4()),
232
- type="agent",
233
- input=args["input"],
234
- output=args["output"],
235
- )
236
- ],
237
- bindings=bindings,
238
- )
195
+ config_data = RuntimeSchema(
196
+ entryPoints=[runtime.get_entrypoint],
197
+ bindings=bindings,
198
+ )
199
+ config_path = write_config_file(config_data)
200
+ console.success(f"Created '{config_path}' file.")
201
+ except Exception as e:
202
+ console.error(f"Error creating configuration file:\n {str(e)}")
239
203
 
240
- config_path = write_config_file(config_data)
241
- console.success(f"Created '{config_path}' file.")
242
- except Exception as e:
243
- console.error(f"Error creating configuration file:\n {str(e)}")
204
+ initialize()