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