uipath 2.1.117__tar.gz → 2.1.118__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.117 → uipath-2.1.118}/PKG-INFO +1 -1
- {uipath-2.1.117 → uipath-2.1.118}/pyproject.toml +1 -1
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_auth/_auth_service.py +1 -1
- uipath-2.1.118/src/uipath/_cli/_auth/_oidc_utils.py +196 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_auth/_portal_service.py +1 -1
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_auth/_url_utils.py +10 -10
- uipath-2.1.118/src/uipath/_cli/_auth/auth_config_cloud.json +6 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_resources/CLI_REFERENCE.md +5 -5
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/agent/models/agent.py +30 -4
- uipath-2.1.118/tests/cli/test_oidc_utils.py +233 -0
- {uipath-2.1.117 → uipath-2.1.118}/uv.lock +1023 -799
- uipath-2.1.117/src/uipath/_cli/_auth/_oidc_utils.py +0 -100
- uipath-2.1.117/tests/cli/test_oidc_utils.py +0 -96
- {uipath-2.1.117 → uipath-2.1.118}/.claude/agents/command-tester.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/.claude/agents/test-reporter.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/.claude/commands/prepare-pr.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/.cursorrules +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/.editorconfig +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/.gitattributes +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/.github/labeler.yml +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/.github/workflows/auto-label.yml +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/.github/workflows/cd.yml +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/.github/workflows/ci.yml +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/.github/workflows/commitlint.yml +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/.github/workflows/integration_tests.yml +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/.github/workflows/lint.yml +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/.github/workflows/publish-dev.yml +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/.github/workflows/publish-docs.yml +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/.github/workflows/slack.yml +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/.github/workflows/test-uipath-langchain.yml +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/.github/workflows/test-uipath-llamaindex.yml +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/.github/workflows/test.yml +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/.gitignore +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/.pre-commit-config.yaml +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/.python-version +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/.vscode/extensions.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/.vscode/launch.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/.vscode/settings.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/CONTRIBUTING.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/LICENSE +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/README.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/AutomationSuite.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/CONTRIBUTING.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/FAQ.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/assets/env-preparation-failed-dark.png +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/assets/env-preparation-failed-light.png +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/assets/favicon.png +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/assets/llms.txt +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/assets/logo-dark.svg +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/assets/logo-light.svg +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/cli/index.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/core/actions.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/core/assets/cloud_env_var_dark.gif +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/core/assets/cloud_env_var_light.gif +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/core/assets/cloud_env_var_secret_dark.png +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/core/assets/cloud_env_var_secret_light.png +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/core/assets/copy_path_dark.png +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/core/assets/copy_path_light.png +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/core/assets.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/core/attachments.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/core/buckets.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/core/connections.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/core/context_grounding.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/core/documents.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/core/documents_models.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/core/environment_variables.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/core/getting_started.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/core/jobs.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/core/llm_gateway.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/core/processes.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/core/queues.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/core/traced.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/hooks.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/index.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/javascripts/extra.js +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/overrides/main.html +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/overrides/partials/actions.html +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/overrides/partials/logo.html +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/release_policy.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/sample_images/google-ADK-agent/agent-output.png +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/docs/stylesheets/extra.css +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/justfile +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/mkdocs.yml +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/py.typed +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/asset-modifier-agent/.env.example +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/asset-modifier-agent/README.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/asset-modifier-agent/input.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/asset-modifier-agent/main.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/asset-modifier-agent/pyproject.toml +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/asset-modifier-agent/uv.lock +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/calculator/README.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/calculator/evals/eval-sets/default.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/calculator/evals/eval-sets/legacy.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/calculator/evals/evaluators/contains.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/calculator/evals/evaluators/correct-operator-evaluator.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/calculator/evals/evaluators/custom/correct_operator.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/calculator/evals/evaluators/custom/types/correct-operator-evaluator-types.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/calculator/evals/evaluators/exact-match.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/calculator/evals/evaluators/json-similarity.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/calculator/evals/evaluators/legacy-equality.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/calculator/evals/evaluators/legacy-json-similarity.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/calculator/evals/evaluators/legacy-llm-as-a-judge.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/calculator/evals/evaluators/legacy-trajectory.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/calculator/evals/evaluators/llm-judge-semantic-similarity.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/calculator/evals/evaluators/llm-judge-strict-json-similarity.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/calculator/evals/evaluators/trajectory.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/calculator/main.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/calculator/pyproject.toml +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/calculator/uipath.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/event-trigger/.python-version +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/event-trigger/README.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/event-trigger/main.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/event-trigger/pyproject.toml +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/google-ADK-agent/.env.example +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/google-ADK-agent/README.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/google-ADK-agent/input.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/google-ADK-agent/multi_tool_agent/__init__.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/google-ADK-agent/multi_tool_agent/agent.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/google-ADK-agent/pyproject.toml +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/google-ADK-agent/uv.lock +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/weather_tools/README.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/weather_tools/TOOL_EVALUATORS.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/weather_tools/evals/eval-sets/default.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/weather_tools/evals/evaluators/tool-call-args.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/weather_tools/evals/evaluators/tool-call-count.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/weather_tools/evals/evaluators/tool-call-order.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/weather_tools/evals/evaluators/tool-call-output.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/weather_tools/evals/evaluators/trajectory.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/samples/weather_tools/main.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/scripts/debug_test.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/scripts/lint_httpx_client.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/scripts/update_agents_md.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/__init__.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/README.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/__init__.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_auth/_auth_server.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_auth/_models.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_auth/_utils.py +0 -0
- /uipath-2.1.117/src/uipath/_cli/_auth/auth_config.json → /uipath-2.1.118/src/uipath/_cli/_auth/auth_config_25_10.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_auth/index.html +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_auth/localhost.crt +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_auth/localhost.key +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_debug/_bridge.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_debug/_runtime.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_dev/_terminal/__init__.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_dev/_terminal/_components/_chat.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_dev/_terminal/_components/_details.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_dev/_terminal/_components/_history.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_dev/_terminal/_components/_json_input.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_dev/_terminal/_components/_new.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_dev/_terminal/_models/_execution.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_dev/_terminal/_models/_messages.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_dev/_terminal/_styles/terminal.tcss +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_dev/_terminal/_utils/_chat.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_dev/_terminal/_utils/_exporter.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_dev/_terminal/_utils/_logger.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_evals/__init__.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_evals/_console_progress_reporter.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_evals/_evaluate.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_evals/_evaluator_factory.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_evals/_helpers.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_evals/_models/_evaluation_set.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_evals/_models/_evaluator.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_evals/_models/_evaluator_base_params.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_evals/_models/_exceptions.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_evals/_models/_mocks.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_evals/_models/_output.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_evals/_models/_sw_reporting.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_evals/_progress_reporter.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_evals/_runtime.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_evals/_span_collection.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_evals/mocks/__init__.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_evals/mocks/input_mocker.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_evals/mocks/llm_mocker.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_evals/mocks/mocker.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_evals/mocks/mocker_factory.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_evals/mocks/mockito_mocker.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_evals/mocks/mocks.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_push/models.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_push/sw_file_handler.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_runtime/_contracts.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_runtime/_escalation.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_runtime/_hitl.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_runtime/_logging.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_runtime/_runtime.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_runtime/_runtime_factory.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_runtime/_script_executor.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_templates/.rels.template +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_templates/custom_evaluator.py.template +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_templates/main.py.template +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_utils/_common.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_utils/_console.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_utils/_constants.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_utils/_debug.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_utils/_eval_set.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_utils/_folders.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_utils/_input_args.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_utils/_processes.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_utils/_project_files.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_utils/_resources.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_utils/_studio_project.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_utils/_tracing.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/_utils/_uv_helpers.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/cli_add.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/cli_auth.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/cli_debug.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/cli_deploy.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/cli_dev.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/cli_eval.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/cli_init.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/cli_invoke.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/cli_new.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/cli_pack.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/cli_publish.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/cli_pull.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/cli_push.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/cli_register.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/cli_run.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/middlewares.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/models/__init__.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/models/runtime_schema.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_cli/spinner.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_config.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_events/__init__.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_events/_event_bus.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_events/_events.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_execution_context.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_folder_context.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_resources/AGENTS.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_resources/CLAUDE.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_resources/REQUIRED_STRUCTURE.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_resources/SDK_REFERENCE.md +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_services/__init__.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_services/_base_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_services/actions_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_services/api_client.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_services/assets_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_services/attachments_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_services/buckets_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_services/connections_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_services/context_grounding_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_services/documents_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_services/entities_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_services/external_application_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_services/folder_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_services/guardrails_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_services/jobs_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_services/llm_gateway_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_services/processes_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_services/queues_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_uipath.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_utils/__init__.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_utils/_auth.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_utils/_endpoint.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_utils/_infer_bindings.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_utils/_logs.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_utils/_read_overwrites.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_utils/_request_override.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_utils/_request_spec.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_utils/_ssl_context.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_utils/_url.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_utils/_user_agent.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/_utils/constants.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/agent/_utils.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/agent/conversation/__init__.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/agent/conversation/async_stream.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/agent/conversation/citation.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/agent/conversation/content.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/agent/conversation/conversation.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/agent/conversation/event.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/agent/conversation/exchange.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/agent/conversation/message.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/agent/conversation/meta.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/agent/conversation/tool.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/agent/models/evals.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/agent/react/__init__.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/agent/react/prompts.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/agent/react/tools.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/_helpers/__init__.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/_helpers/evaluators_helpers.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/_helpers/helpers.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators/__init__.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators/base_evaluator.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators/contains_evaluator.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators/exact_match_evaluator.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators/json_similarity_evaluator.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators/legacy_base_evaluator.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators/legacy_deterministic_evaluator_base.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators/legacy_exact_match_evaluator.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators/legacy_json_similarity_evaluator.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators/legacy_llm_as_judge_evaluator.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators/legacy_trajectory_evaluator.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators/llm_as_judge_evaluator.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators/llm_judge_output_evaluator.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators/llm_judge_trajectory_evaluator.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators/output_evaluator.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators/tool_call_args_evaluator.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators/tool_call_count_evaluator.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators/tool_call_order_evaluator.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators/tool_call_output_evaluator.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators_types/ContainsEvaluator.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators_types/ExactMatchEvaluator.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators_types/JsonSimilarityEvaluator.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators_types/LLMJudgeOutputEvaluator.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators_types/LLMJudgeSimulationTrajectoryEvaluator.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators_types/LLMJudgeStrictJSONSimilarityOutputEvaluator.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators_types/LLMJudgeTrajectoryEvaluator.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators_types/ToolCallArgsEvaluator.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators_types/ToolCallCountEvaluator.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators_types/ToolCallOrderEvaluator.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators_types/ToolCallOutputEvaluator.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/evaluators_types/generate_types.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/mocks/__init__.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/mocks/mockable.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/models/__init__.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/models/llm_judge_types.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/eval/models/models.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/models/__init__.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/models/action_schema.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/models/actions.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/models/assets.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/models/attachment.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/models/auth.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/models/buckets.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/models/connections.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/models/context_grounding.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/models/context_grounding_index.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/models/documents.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/models/entities.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/models/errors.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/models/exceptions.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/models/guardrails.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/models/interrupt_models.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/models/job.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/models/llm_gateway.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/models/processes.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/models/queues.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/py.typed +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/telemetry/__init__.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/telemetry/_constants.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/telemetry/_track.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/tracing/__init__.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/tracing/_otel_exporters.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/tracing/_traced.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/tracing/_utils.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/utils/__init__.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/utils/_endpoints_manager.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/src/uipath/utils/dynamic_schema.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/testcases/apicalls-testcase/main.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/testcases/apicalls-testcase/pyproject.toml +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/testcases/apicalls-testcase/run.sh +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/testcases/apicalls-testcase/src/assert.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/testcases/basic-testcase/main.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/testcases/basic-testcase/pyproject.toml +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/testcases/basic-testcase/run.sh +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/testcases/basic-testcase/src/assert.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/testcases/common/validate_output.sh +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/testcases/langchain-cross/agent.mermaid +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/testcases/langchain-cross/langgraph.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/testcases/langchain-cross/pyproject.toml +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/testcases/langchain-cross/run.sh +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/testcases/langchain-cross/src/assert.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/testcases/langchain-cross/src/main.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/testcases/llamaindex-cross/agent.mermaid +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/testcases/llamaindex-cross/llama_index.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/testcases/llamaindex-cross/pyproject.toml +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/testcases/llamaindex-cross/run.sh +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/testcases/llamaindex-cross/src/assert.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/testcases/llamaindex-cross/src/main.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/testcases/tools-evals/pyproject.toml +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/testcases/tools-evals/run.sh +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/testcases/tools-evals/src/assert.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/__init__.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/agent/models/test_agent.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/agent/models/test_evals.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/conftest.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/eval/evals/eval-sets/default.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/eval/evals/evaluators/equality.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/eval/mocks/test_input_mocker.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/eval/mocks/test_mocks.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/eval/test_evaluate.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/eval/test_progress_reporter.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/evaluators/test_json_similarity_evaluator.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/mocks/bindings_script.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/mocks/pyproject.toml +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/mocks/simple_script.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/mocks/uipath-mock.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/mocks/uipath-simple-script-mock.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/models/test_runtime_schema.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/test_auth.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/test_hitl.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/test_init.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/test_init_agents_md.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/test_input_args.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/test_invoke.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/test_new.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/test_pack.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/test_portal_service_ensure_valid_token.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/test_portal_service_refresh_token.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/test_publish.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/test_pull.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/test_push.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/test_run.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/test_utils.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/utils/common.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/utils/project_details.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/utils/test_dynamic_schema.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/cli/utils/uipath_json.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/conftest.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/evaluators/__init__.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/evaluators/test_evaluator_aggregation.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/evaluators/test_evaluator_helpers.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/evaluators/test_evaluator_methods.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/evaluators/test_evaluator_schemas.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/services/conftest.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/services/test_actions_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/services/test_api_client.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/services/test_assets_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/services/test_attachments_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/services/test_base_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/services/test_buckets_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/services/test_connections_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/services/test_context_grounding_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/services/test_documents_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/services/test_entities_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/services/test_external_application_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/services/test_folder_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/services/test_guardrails_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/services/test_jobs_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/services/test_llm_integration.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/services/test_llm_schema_cleanup.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/services/test_llm_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/services/test_processes_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/services/test_queues_service.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/services/tests_data/documents_service/create_validation_action_response.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/services/tests_data/documents_service/ixp_extraction_response.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/services/tests_data/documents_service/modern_extraction_response.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/services/tests_data/documents_service/validated_result.json +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/test_bindings_inference.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/test_config.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/test_overwrites.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/sdk/test_uipath_caching.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/tracing/test_otel_exporters.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/tracing/test_span_utils.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/tracing/test_traced.py +0 -0
- {uipath-2.1.117 → uipath-2.1.118}/tests/tracing/test_tracing_manager.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: uipath
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.118
|
|
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.118"
|
|
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"
|
|
@@ -121,7 +121,7 @@ class AuthService:
|
|
|
121
121
|
return False
|
|
122
122
|
|
|
123
123
|
def _perform_oauth_flow(self) -> TokenData:
|
|
124
|
-
auth_config = OidcUtils.get_auth_config()
|
|
124
|
+
auth_config = OidcUtils.get_auth_config(self._domain)
|
|
125
125
|
auth_url, code_verifier, state = OidcUtils.get_auth_url(
|
|
126
126
|
self._domain, auth_config
|
|
127
127
|
)
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import base64
|
|
2
|
+
import hashlib
|
|
3
|
+
import json
|
|
4
|
+
import os
|
|
5
|
+
from typing import Optional
|
|
6
|
+
from urllib.parse import urlencode, urlparse
|
|
7
|
+
|
|
8
|
+
import httpx
|
|
9
|
+
|
|
10
|
+
from ..._utils._ssl_context import get_httpx_client_kwargs
|
|
11
|
+
from .._utils._console import ConsoleLogger
|
|
12
|
+
from ._models import AuthConfig
|
|
13
|
+
from ._url_utils import build_service_url
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def generate_code_verifier_and_challenge():
|
|
17
|
+
"""Generate PKCE code verifier and challenge."""
|
|
18
|
+
code_verifier = base64.urlsafe_b64encode(os.urandom(32)).decode("utf-8").rstrip("=")
|
|
19
|
+
|
|
20
|
+
code_challenge_bytes = hashlib.sha256(code_verifier.encode("utf-8")).digest()
|
|
21
|
+
code_challenge = (
|
|
22
|
+
base64.urlsafe_b64encode(code_challenge_bytes).decode("utf-8").rstrip("=")
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
return code_verifier, code_challenge
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def get_state_param() -> str:
|
|
29
|
+
return base64.urlsafe_b64encode(os.urandom(32)).decode("utf-8").rstrip("=")
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def _get_version_from_api(domain: str) -> Optional[str]:
|
|
33
|
+
"""Fetch the version from the UiPath orchestrator API.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
domain: The UiPath domain (e.g., 'https://alpha.uipath.com')
|
|
37
|
+
|
|
38
|
+
Returns:
|
|
39
|
+
The version string (e.g., '25.10.0-beta.415') or None if unable to fetch
|
|
40
|
+
"""
|
|
41
|
+
try:
|
|
42
|
+
version_url = build_service_url(domain, "/orchestrator_/api/status/version")
|
|
43
|
+
client_kwargs = get_httpx_client_kwargs()
|
|
44
|
+
# Override timeout for version check
|
|
45
|
+
client_kwargs["timeout"] = 5.0
|
|
46
|
+
|
|
47
|
+
with httpx.Client(**client_kwargs) as client:
|
|
48
|
+
response = client.get(version_url)
|
|
49
|
+
response.raise_for_status()
|
|
50
|
+
data = response.json()
|
|
51
|
+
return data.get("version")
|
|
52
|
+
except Exception:
|
|
53
|
+
# Silently fail and return None if we can't fetch the version
|
|
54
|
+
return None
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def _is_cloud_domain(domain: str) -> bool:
|
|
58
|
+
"""Check if the domain is a cloud domain (alpha, staging, or cloud.uipath.com).
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
domain: The domain string (e.g., 'https://alpha.uipath.com')
|
|
62
|
+
|
|
63
|
+
Returns:
|
|
64
|
+
True if it's a cloud domain, False otherwise
|
|
65
|
+
"""
|
|
66
|
+
parsed = urlparse(domain)
|
|
67
|
+
netloc = parsed.netloc.lower()
|
|
68
|
+
return netloc in [
|
|
69
|
+
"alpha.uipath.com",
|
|
70
|
+
"staging.uipath.com",
|
|
71
|
+
"cloud.uipath.com",
|
|
72
|
+
]
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def _select_config_file(domain: str) -> str:
|
|
76
|
+
"""Select the appropriate auth config file based on domain and version.
|
|
77
|
+
|
|
78
|
+
Logic:
|
|
79
|
+
1. If domain is alpha/staging/cloud.uipath.com -> use auth_config_cloud.json
|
|
80
|
+
2. Otherwise, try to get version from API
|
|
81
|
+
3. If version starts with '25.10' -> use auth_config_25_10.json
|
|
82
|
+
4. If version can't be determined -> fallback to auth_config_cloud.json
|
|
83
|
+
5. Otherwise -> fallback to auth_config_cloud.json
|
|
84
|
+
|
|
85
|
+
Args:
|
|
86
|
+
domain: The UiPath domain
|
|
87
|
+
|
|
88
|
+
Returns:
|
|
89
|
+
The filename of the config to use
|
|
90
|
+
"""
|
|
91
|
+
# Check if it's a known cloud domain
|
|
92
|
+
if _is_cloud_domain(domain):
|
|
93
|
+
return "auth_config_cloud.json"
|
|
94
|
+
|
|
95
|
+
# Try to get version from API
|
|
96
|
+
version = _get_version_from_api(domain)
|
|
97
|
+
|
|
98
|
+
# If we can't determine version, fallback to cloud config
|
|
99
|
+
if version is None:
|
|
100
|
+
return "auth_config_cloud.json"
|
|
101
|
+
|
|
102
|
+
# Check if version is 25.10.*
|
|
103
|
+
if version.startswith("25.10"):
|
|
104
|
+
return "auth_config_25_10.json"
|
|
105
|
+
|
|
106
|
+
# Default fallback to cloud config
|
|
107
|
+
return "auth_config_cloud.json"
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
class OidcUtils:
|
|
111
|
+
_console = ConsoleLogger()
|
|
112
|
+
|
|
113
|
+
@classmethod
|
|
114
|
+
def _find_free_port(cls, candidates: list[int]):
|
|
115
|
+
from socket import AF_INET, SOCK_STREAM, error, socket
|
|
116
|
+
|
|
117
|
+
def is_free(port: int) -> bool:
|
|
118
|
+
with socket(AF_INET, SOCK_STREAM) as s:
|
|
119
|
+
try:
|
|
120
|
+
s.bind(("localhost", port))
|
|
121
|
+
return True
|
|
122
|
+
except error:
|
|
123
|
+
return False
|
|
124
|
+
|
|
125
|
+
return next((p for p in candidates if is_free(p)), None)
|
|
126
|
+
|
|
127
|
+
@classmethod
|
|
128
|
+
def get_auth_config(cls, domain: Optional[str] = None) -> AuthConfig:
|
|
129
|
+
"""Get the appropriate auth configuration based on domain.
|
|
130
|
+
|
|
131
|
+
Args:
|
|
132
|
+
domain: The UiPath domain (e.g., 'https://cloud.uipath.com').
|
|
133
|
+
If None, uses default auth_config_cloud.json
|
|
134
|
+
|
|
135
|
+
Returns:
|
|
136
|
+
AuthConfig with the appropriate configuration
|
|
137
|
+
"""
|
|
138
|
+
# Select the appropriate config file based on domain
|
|
139
|
+
if domain:
|
|
140
|
+
config_file = _select_config_file(domain)
|
|
141
|
+
else:
|
|
142
|
+
config_file = "auth_config_cloud.json"
|
|
143
|
+
|
|
144
|
+
config_path = os.path.join(os.path.dirname(__file__), config_file)
|
|
145
|
+
with open(config_path, "r") as f:
|
|
146
|
+
auth_config = json.load(f)
|
|
147
|
+
|
|
148
|
+
custom_port = os.getenv("UIPATH_AUTH_PORT")
|
|
149
|
+
candidates = [int(custom_port)] if custom_port else [8104, 8055, 42042]
|
|
150
|
+
|
|
151
|
+
port = cls._find_free_port(candidates)
|
|
152
|
+
if port is None:
|
|
153
|
+
ports_str = ", ".join(str(p) for p in candidates)
|
|
154
|
+
cls._console.error(
|
|
155
|
+
f"All configured ports ({ports_str}) are in use. Please close applications using these ports or configure different ports."
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
redirect_uri = auth_config["redirect_uri"].replace(
|
|
159
|
+
"__PY_REPLACE_PORT__", str(port)
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
return AuthConfig(
|
|
163
|
+
client_id=auth_config["client_id"],
|
|
164
|
+
redirect_uri=redirect_uri,
|
|
165
|
+
scope=auth_config["scope"],
|
|
166
|
+
port=port,
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
@classmethod
|
|
170
|
+
def get_auth_url(cls, domain: str, auth_config: AuthConfig) -> tuple[str, str, str]:
|
|
171
|
+
"""Get the authorization URL for OAuth2 PKCE flow.
|
|
172
|
+
|
|
173
|
+
Args:
|
|
174
|
+
domain (str): The UiPath domain to authenticate against (e.g. 'alpha', 'cloud')
|
|
175
|
+
auth_config (AuthConfig): The authentication configuration to use
|
|
176
|
+
|
|
177
|
+
Returns:
|
|
178
|
+
tuple[str, str]: A tuple containing:
|
|
179
|
+
- The authorization URL with query parameters
|
|
180
|
+
- The code verifier for PKCE flow
|
|
181
|
+
"""
|
|
182
|
+
code_verifier, code_challenge = generate_code_verifier_and_challenge()
|
|
183
|
+
state = get_state_param()
|
|
184
|
+
query_params = {
|
|
185
|
+
"client_id": auth_config["client_id"],
|
|
186
|
+
"redirect_uri": auth_config["redirect_uri"],
|
|
187
|
+
"response_type": "code",
|
|
188
|
+
"scope": auth_config["scope"],
|
|
189
|
+
"state": state,
|
|
190
|
+
"code_challenge": code_challenge,
|
|
191
|
+
"code_challenge_method": "S256",
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
query_string = urlencode(query_params)
|
|
195
|
+
url = build_service_url(domain, f"/identity_/connect/authorize?{query_string}")
|
|
196
|
+
return url, code_verifier, state
|
|
@@ -94,7 +94,7 @@ class PortalService:
|
|
|
94
94
|
|
|
95
95
|
def refresh_access_token(self, refresh_token: str) -> TokenData: # type: ignore
|
|
96
96
|
url = build_service_url(self.domain, "/identity_/connect/token")
|
|
97
|
-
client_id = OidcUtils.get_auth_config().get("client_id")
|
|
97
|
+
client_id = OidcUtils.get_auth_config(self.domain).get("client_id")
|
|
98
98
|
|
|
99
99
|
data = {
|
|
100
100
|
"grant_type": "refresh_token",
|
|
@@ -15,13 +15,20 @@ def resolve_domain(
|
|
|
15
15
|
Args:
|
|
16
16
|
base_url: The base URL explicitly provided.
|
|
17
17
|
environment: The environment name (e.g., 'alpha', 'staging', 'cloud').
|
|
18
|
-
force: Whether to ignore UIPATH_URL from environment variables.
|
|
18
|
+
force: Whether to ignore UIPATH_URL from environment variables when base_url is set.
|
|
19
19
|
|
|
20
20
|
Returns:
|
|
21
21
|
A valid base URL for UiPath services.
|
|
22
22
|
"""
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
# If base_url is a real URL, prefer it
|
|
24
|
+
if base_url and base_url.startswith("http"):
|
|
25
|
+
parsed = urlparse(base_url)
|
|
26
|
+
domain = f"{parsed.scheme}://{parsed.netloc}"
|
|
27
|
+
if domain:
|
|
28
|
+
return domain
|
|
29
|
+
|
|
30
|
+
# If base_url is not set (or force is False), check UIPATH_URL
|
|
31
|
+
if not base_url or not force:
|
|
25
32
|
uipath_url = os.getenv("UIPATH_URL")
|
|
26
33
|
if uipath_url and environment == "cloud":
|
|
27
34
|
parsed = urlparse(uipath_url)
|
|
@@ -34,13 +41,6 @@ def resolve_domain(
|
|
|
34
41
|
"Please ensure it includes scheme and netloc (e.g., 'https://cloud.uipath.com')."
|
|
35
42
|
)
|
|
36
43
|
|
|
37
|
-
# If base_url is a real URL, prefer it
|
|
38
|
-
if base_url and base_url.startswith("http"):
|
|
39
|
-
parsed = urlparse(base_url)
|
|
40
|
-
domain = f"{parsed.scheme}://{parsed.netloc}"
|
|
41
|
-
if domain:
|
|
42
|
-
return domain
|
|
43
|
-
|
|
44
44
|
# Otherwise, fall back to environment
|
|
45
45
|
return f"https://{environment or 'cloud'}.uipath.com"
|
|
46
46
|
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"client_id": "36dea5b8-e8bb-423d-8e7b-c808df8f1c00",
|
|
3
|
+
"redirect_uri": "http://localhost:__PY_REPLACE_PORT__/oidc/login",
|
|
4
|
+
"scope": "offline_access ProcessMining OrchestratorApiUserAccess StudioWebBackend IdentityServerApi ConnectionService DataService DocumentUnderstanding Du.Digitization.Api Du.Classification.Api Du.Extraction.Api Du.Validation.Api EnterpriseContextService Directory JamJamApi LLMGateway LLMOps OMS RCS.FolderAuthorization TM.Projects TM.TestCases TM.Requirements TM.TestSets",
|
|
5
|
+
"port": 8104
|
|
6
|
+
}
|
|
@@ -62,10 +62,10 @@ uv run uipath init --infer-bindings
|
|
|
62
62
|
| Option | Type | Default | Description |
|
|
63
63
|
|--------|------|---------|-------------|
|
|
64
64
|
| `--resume` | flag | false | Resume execution from a previous state |
|
|
65
|
-
| `-f`, `--file` | value |
|
|
66
|
-
| `--input-file` | value |
|
|
67
|
-
| `--output-file` | value |
|
|
68
|
-
| `--trace-file` | value |
|
|
65
|
+
| `-f`, `--file` | value | `Sentinel.UNSET` | File path for the .json input |
|
|
66
|
+
| `--input-file` | value | `Sentinel.UNSET` | Alias for '-f/--file' arguments |
|
|
67
|
+
| `--output-file` | value | `Sentinel.UNSET` | File path where the output will be written |
|
|
68
|
+
| `--trace-file` | value | `Sentinel.UNSET` | File path where the trace spans will be written (JSON Lines format) |
|
|
69
69
|
| `--debug` | flag | false | Enable debugging with debugpy. The process will wait for a debugger to attach. |
|
|
70
70
|
| `--debug-port` | value | `5678` | Port for the debug server (default: 5678) |
|
|
71
71
|
|
|
@@ -117,7 +117,7 @@ uv run uipath run --resume
|
|
|
117
117
|
|--------|------|---------|-------------|
|
|
118
118
|
| `--no-report` | flag | false | Do not report the evaluation results |
|
|
119
119
|
| `--workers` | value | `1` | Number of parallel workers for running evaluations (default: 1) |
|
|
120
|
-
| `--output-file` | value |
|
|
120
|
+
| `--output-file` | value | `Sentinel.UNSET` | File path where the output will be written |
|
|
121
121
|
|
|
122
122
|
**Usage Examples:**
|
|
123
123
|
|
|
@@ -278,13 +278,25 @@ class AgentContextOutputColumn(BaseModel):
|
|
|
278
278
|
)
|
|
279
279
|
|
|
280
280
|
|
|
281
|
+
class AgentContextRetrievalMode(str, Enum):
|
|
282
|
+
"""Enum for retrieval modes."""
|
|
283
|
+
|
|
284
|
+
SEMANTIC = "Semantic"
|
|
285
|
+
STRUCTURED = "Structured"
|
|
286
|
+
DEEP_RAG = "DeepRAG"
|
|
287
|
+
BATCH_TRANSFORM = "BatchTransform"
|
|
288
|
+
|
|
289
|
+
|
|
281
290
|
class AgentContextSettings(BaseModel):
|
|
282
291
|
"""Settings for context."""
|
|
283
292
|
|
|
284
293
|
result_count: int = Field(alias="resultCount")
|
|
285
|
-
retrieval_mode: Literal[
|
|
286
|
-
|
|
287
|
-
|
|
294
|
+
retrieval_mode: Literal[
|
|
295
|
+
AgentContextRetrievalMode.SEMANTIC,
|
|
296
|
+
AgentContextRetrievalMode.STRUCTURED,
|
|
297
|
+
AgentContextRetrievalMode.DEEP_RAG,
|
|
298
|
+
AgentContextRetrievalMode.BATCH_TRANSFORM,
|
|
299
|
+
] = Field(alias="retrievalMode")
|
|
288
300
|
threshold: float = Field(default=0)
|
|
289
301
|
query: Optional[AgentContextQuerySetting] = Field(None)
|
|
290
302
|
folder_path_prefix: Optional[Union[Dict[str, Any], AgentContextValueSetting]] = (
|
|
@@ -303,6 +315,20 @@ class AgentContextSettings(BaseModel):
|
|
|
303
315
|
None, alias="outputColumns"
|
|
304
316
|
)
|
|
305
317
|
|
|
318
|
+
@field_validator("retrieval_mode", mode="before")
|
|
319
|
+
@classmethod
|
|
320
|
+
def normalize_retrieval_mode(cls, v: Any) -> str:
|
|
321
|
+
"""Normalize context retrieval mode."""
|
|
322
|
+
if isinstance(v, str):
|
|
323
|
+
lowercase_mapping = {
|
|
324
|
+
"semantic": AgentContextRetrievalMode.SEMANTIC,
|
|
325
|
+
"structured": AgentContextRetrievalMode.STRUCTURED,
|
|
326
|
+
"deeprag": AgentContextRetrievalMode.DEEP_RAG,
|
|
327
|
+
"batchtransform": AgentContextRetrievalMode.BATCH_TRANSFORM,
|
|
328
|
+
}
|
|
329
|
+
return lowercase_mapping.get(v.lower(), v)
|
|
330
|
+
return v
|
|
331
|
+
|
|
306
332
|
model_config = ConfigDict(
|
|
307
333
|
validate_by_name=True, validate_by_alias=True, extra="allow"
|
|
308
334
|
)
|
|
@@ -553,7 +579,7 @@ class AgentGuardrailLogAction(BaseModel):
|
|
|
553
579
|
"""Log action model."""
|
|
554
580
|
|
|
555
581
|
action_type: Literal["log"] = Field(alias="$actionType")
|
|
556
|
-
message: str = Field(
|
|
582
|
+
message: Optional[str] = Field(None, alias="message")
|
|
557
583
|
severity_level: AgentGuardrailSeverityLevel = Field(alias="severityLevel")
|
|
558
584
|
|
|
559
585
|
model_config = ConfigDict(populate_by_name=True, extra="allow")
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Unit tests for OidcUtils.get_auth_config() method.
|
|
3
|
+
|
|
4
|
+
IMPORTANT: Backwards Compatibility Notice
|
|
5
|
+
=========================================
|
|
6
|
+
If any values in auth_config.json are changed, we MUST maintain backwards
|
|
7
|
+
compatibility with release/2025.10 branches or later.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import json
|
|
11
|
+
import os
|
|
12
|
+
from unittest.mock import MagicMock, patch
|
|
13
|
+
|
|
14
|
+
import pytest
|
|
15
|
+
|
|
16
|
+
from uipath._cli._auth._oidc_utils import (
|
|
17
|
+
OidcUtils,
|
|
18
|
+
_get_version_from_api,
|
|
19
|
+
_is_cloud_domain,
|
|
20
|
+
_select_config_file,
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class TestOidcUtils:
|
|
25
|
+
"""Test suite for OidcUtils class."""
|
|
26
|
+
|
|
27
|
+
def test_auth_config_backwards_compatibility_v2025_10(self):
|
|
28
|
+
"""
|
|
29
|
+
Test that auth_config_25_10.json maintains backwards compatibility with release/v2025.10.
|
|
30
|
+
|
|
31
|
+
This test validates that the authentication configuration values remain
|
|
32
|
+
unchanged to ensure compatibility with release/v2025.10 and later branches.
|
|
33
|
+
|
|
34
|
+
CRITICAL: Any failure indicates a breaking change that requires coordination
|
|
35
|
+
across all supported release branches.
|
|
36
|
+
"""
|
|
37
|
+
# Read the actual auth_config_25_10.json file
|
|
38
|
+
config_path = os.path.join(
|
|
39
|
+
os.path.dirname(__file__),
|
|
40
|
+
"..",
|
|
41
|
+
"..",
|
|
42
|
+
"src",
|
|
43
|
+
"uipath",
|
|
44
|
+
"_cli",
|
|
45
|
+
"_auth",
|
|
46
|
+
"auth_config_25_10.json",
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
with open(config_path, "r") as f:
|
|
50
|
+
actual_config = json.load(f)
|
|
51
|
+
|
|
52
|
+
# Assert exact values for non-scope fields
|
|
53
|
+
assert actual_config["client_id"] == "36dea5b8-e8bb-423d-8e7b-c808df8f1c00", (
|
|
54
|
+
f"BACKWARDS COMPATIBILITY VIOLATION: client_id has changed! "
|
|
55
|
+
f"Expected: 36dea5b8-e8bb-423d-8e7b-c808df8f1c00, Got: {actual_config['client_id']}"
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
assert (
|
|
59
|
+
actual_config["redirect_uri"]
|
|
60
|
+
== "http://localhost:__PY_REPLACE_PORT__/oidc/login"
|
|
61
|
+
), (
|
|
62
|
+
f"BACKWARDS COMPATIBILITY VIOLATION: redirect_uri has changed! "
|
|
63
|
+
f"Expected: http://localhost:__PY_REPLACE_PORT__/oidc/login, Got: {actual_config['redirect_uri']}"
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
assert actual_config["port"] == 8104, (
|
|
67
|
+
f"BACKWARDS COMPATIBILITY VIOLATION: port has changed! "
|
|
68
|
+
f"Expected: 8104, Got: {actual_config['port']}"
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
# For scopes, ensure actual scopes are a subset of the allowed scopes (no new scopes allowed)
|
|
72
|
+
allowed_scopes = set(
|
|
73
|
+
[
|
|
74
|
+
"offline_access",
|
|
75
|
+
"ProcessMining",
|
|
76
|
+
"OrchestratorApiUserAccess",
|
|
77
|
+
"StudioWebBackend",
|
|
78
|
+
"IdentityServerApi",
|
|
79
|
+
"ConnectionService",
|
|
80
|
+
"DataService",
|
|
81
|
+
"DocumentUnderstanding",
|
|
82
|
+
"Du.Digitization.Api",
|
|
83
|
+
"Du.Classification.Api",
|
|
84
|
+
"Du.Extraction.Api",
|
|
85
|
+
"Du.Validation.Api",
|
|
86
|
+
"EnterpriseContextService",
|
|
87
|
+
"Directory",
|
|
88
|
+
"JamJamApi",
|
|
89
|
+
"LLMGateway",
|
|
90
|
+
"LLMOps",
|
|
91
|
+
"OMS",
|
|
92
|
+
"RCS.FolderAuthorization",
|
|
93
|
+
"TM.Projects",
|
|
94
|
+
"TM.TestCases",
|
|
95
|
+
"TM.Requirements",
|
|
96
|
+
"TM.TestSets",
|
|
97
|
+
]
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
actual_scopes = set(actual_config["scope"].split())
|
|
101
|
+
|
|
102
|
+
assert actual_scopes.issubset(allowed_scopes), (
|
|
103
|
+
f"BACKWARDS COMPATIBILITY VIOLATION: New scopes detected that are not allowed on v2025.10! "
|
|
104
|
+
f"New scopes: {actual_scopes - allowed_scopes}. "
|
|
105
|
+
f"Only subsets of the following scopes are permitted: {sorted(allowed_scopes)}"
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
@pytest.mark.parametrize(
|
|
109
|
+
"domain,expected",
|
|
110
|
+
[
|
|
111
|
+
("https://alpha.uipath.com", True),
|
|
112
|
+
("https://staging.uipath.com", True),
|
|
113
|
+
("https://cloud.uipath.com", True),
|
|
114
|
+
("https://ALPHA.UIPATH.COM", True), # Test case insensitivity
|
|
115
|
+
("https://custom.domain.com", False),
|
|
116
|
+
("https://cloud.uipath.dev", False),
|
|
117
|
+
("https://alpha-test.uipath.com", False),
|
|
118
|
+
],
|
|
119
|
+
)
|
|
120
|
+
def test_is_cloud_domain(self, domain, expected):
|
|
121
|
+
"""Test _is_cloud_domain correctly identifies cloud domains."""
|
|
122
|
+
assert _is_cloud_domain(domain) == expected
|
|
123
|
+
|
|
124
|
+
def test_get_version_from_api_success(self):
|
|
125
|
+
"""Test _get_version_from_api successfully fetches version."""
|
|
126
|
+
mock_response = MagicMock()
|
|
127
|
+
mock_response.json.return_value = {
|
|
128
|
+
"version": "25.10.0-beta.415",
|
|
129
|
+
"timestamp": "2025-10-23T19:08:22Z",
|
|
130
|
+
"deployment": "ServiceFabric",
|
|
131
|
+
}
|
|
132
|
+
mock_response.raise_for_status = MagicMock()
|
|
133
|
+
|
|
134
|
+
mock_client = MagicMock()
|
|
135
|
+
mock_client.get.return_value = mock_response
|
|
136
|
+
mock_client.__enter__.return_value = mock_client
|
|
137
|
+
mock_client.__exit__ = MagicMock()
|
|
138
|
+
|
|
139
|
+
with patch("httpx.Client", return_value=mock_client):
|
|
140
|
+
version = _get_version_from_api("https://custom.domain.com")
|
|
141
|
+
assert version == "25.10.0-beta.415"
|
|
142
|
+
|
|
143
|
+
def test_get_version_from_api_timeout(self):
|
|
144
|
+
"""Test _get_version_from_api handles timeouts gracefully."""
|
|
145
|
+
mock_client = MagicMock()
|
|
146
|
+
mock_client.get.side_effect = TimeoutError
|
|
147
|
+
mock_client.__enter__.return_value = mock_client
|
|
148
|
+
mock_client.__exit__ = MagicMock()
|
|
149
|
+
|
|
150
|
+
with patch("httpx.Client", return_value=mock_client):
|
|
151
|
+
version = _get_version_from_api("https://custom.domain.com")
|
|
152
|
+
assert version is None
|
|
153
|
+
|
|
154
|
+
def test_get_version_from_api_network_error(self):
|
|
155
|
+
"""Test _get_version_from_api handles network errors gracefully."""
|
|
156
|
+
mock_client = MagicMock()
|
|
157
|
+
mock_client.get.side_effect = Exception("Network error")
|
|
158
|
+
mock_client.__enter__.return_value = mock_client
|
|
159
|
+
mock_client.__exit__ = MagicMock()
|
|
160
|
+
|
|
161
|
+
with patch("httpx.Client", return_value=mock_client):
|
|
162
|
+
version = _get_version_from_api("https://custom.domain.com")
|
|
163
|
+
assert version is None
|
|
164
|
+
|
|
165
|
+
@pytest.mark.parametrize(
|
|
166
|
+
"domain,mock_version,expected_config",
|
|
167
|
+
[
|
|
168
|
+
# Cloud domains should always use auth_config_cloud.json
|
|
169
|
+
("https://alpha.uipath.com", None, "auth_config_cloud.json"),
|
|
170
|
+
("https://staging.uipath.com", None, "auth_config_cloud.json"),
|
|
171
|
+
("https://cloud.uipath.com", None, "auth_config_cloud.json"),
|
|
172
|
+
# Version 25.10.* should use auth_config_25_10.json
|
|
173
|
+
(
|
|
174
|
+
"https://custom.domain.com",
|
|
175
|
+
"25.10.0-beta.415",
|
|
176
|
+
"auth_config_25_10.json",
|
|
177
|
+
),
|
|
178
|
+
("https://custom.domain.com", "25.10.1", "auth_config_25_10.json"),
|
|
179
|
+
# Other versions should fallback to cloud config
|
|
180
|
+
("https://custom.domain.com", "24.10.0", "auth_config_cloud.json"),
|
|
181
|
+
("https://custom.domain.com", "26.1.0", "auth_config_cloud.json"),
|
|
182
|
+
# Unable to determine version should fallback to cloud config
|
|
183
|
+
("https://custom.domain.com", None, "auth_config_cloud.json"),
|
|
184
|
+
],
|
|
185
|
+
)
|
|
186
|
+
def test_select_config_file(self, domain, mock_version, expected_config):
|
|
187
|
+
"""Test _select_config_file selects the correct config based on domain and version."""
|
|
188
|
+
with patch(
|
|
189
|
+
"uipath._cli._auth._oidc_utils._get_version_from_api",
|
|
190
|
+
return_value=mock_version,
|
|
191
|
+
):
|
|
192
|
+
config_file = _select_config_file(domain)
|
|
193
|
+
assert config_file == expected_config
|
|
194
|
+
|
|
195
|
+
def test_get_auth_config_without_domain(self):
|
|
196
|
+
"""Test get_auth_config without domain parameter uses default config."""
|
|
197
|
+
with patch(
|
|
198
|
+
"uipath._cli._auth._oidc_utils.OidcUtils._find_free_port", return_value=8104
|
|
199
|
+
):
|
|
200
|
+
config = OidcUtils.get_auth_config()
|
|
201
|
+
assert config["client_id"] == "36dea5b8-e8bb-423d-8e7b-c808df8f1c00"
|
|
202
|
+
assert config["port"] == 8104
|
|
203
|
+
|
|
204
|
+
def test_get_auth_config_with_cloud_domain(self):
|
|
205
|
+
"""Test get_auth_config with cloud domain uses auth_config_cloud.json."""
|
|
206
|
+
with patch(
|
|
207
|
+
"uipath._cli._auth._oidc_utils.OidcUtils._find_free_port", return_value=8104
|
|
208
|
+
):
|
|
209
|
+
config = OidcUtils.get_auth_config("https://alpha.uipath.com")
|
|
210
|
+
assert config["client_id"] == "36dea5b8-e8bb-423d-8e7b-c808df8f1c00"
|
|
211
|
+
assert config["port"] == 8104
|
|
212
|
+
|
|
213
|
+
def test_get_auth_config_with_25_10_version(self):
|
|
214
|
+
"""Test get_auth_config with version 25.10 uses auth_config_25_10.json."""
|
|
215
|
+
mock_response = MagicMock()
|
|
216
|
+
mock_response.json.return_value = {"version": "25.10.0-beta.415"}
|
|
217
|
+
mock_response.raise_for_status = MagicMock()
|
|
218
|
+
|
|
219
|
+
mock_client = MagicMock()
|
|
220
|
+
mock_client.get.return_value = mock_response
|
|
221
|
+
mock_client.__enter__.return_value = mock_client
|
|
222
|
+
mock_client.__exit__ = MagicMock()
|
|
223
|
+
|
|
224
|
+
with (
|
|
225
|
+
patch("httpx.Client", return_value=mock_client),
|
|
226
|
+
patch(
|
|
227
|
+
"uipath._cli._auth._oidc_utils.OidcUtils._find_free_port",
|
|
228
|
+
return_value=8104,
|
|
229
|
+
),
|
|
230
|
+
):
|
|
231
|
+
config = OidcUtils.get_auth_config("https://custom.domain.com")
|
|
232
|
+
assert config["client_id"] == "36dea5b8-e8bb-423d-8e7b-c808df8f1c00"
|
|
233
|
+
assert config["port"] == 8104
|