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