uipath 2.1.88__tar.gz → 2.1.90__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.88 → uipath-2.1.90}/PKG-INFO +1 -1
- {uipath-2.1.88 → uipath-2.1.90}/pyproject.toml +1 -1
- {uipath-2.1.88 → uipath-2.1.90}/scripts/update_agents_md.py +9 -177
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_evals/_models/_evaluation_set.py +13 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_evals/_runtime.py +18 -0
- uipath-2.1.90/src/uipath/_cli/_evals/mocks/input_mocker.py +111 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_evals/mocks/mocker.py +6 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_push/sw_file_handler.py +24 -40
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_runtime/_logging.py +4 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_utils/_project_files.py +67 -37
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/cli_init.py +26 -12
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/cli_pull.py +22 -1
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_resources/AGENTS.md +2 -20
- uipath-2.1.90/src/uipath/_resources/REQUIRED_STRUCTURE.md +64 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_resources/SDK_REFERENCE.md +1 -1
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/agent/_utils.py +14 -1
- uipath-2.1.90/src/uipath/agent/loop/__init__.py +17 -0
- uipath-2.1.90/src/uipath/agent/loop/prompts.py +57 -0
- uipath-2.1.90/src/uipath/agent/loop/tools.py +42 -0
- uipath-2.1.90/tests/cli/eval/mocks/test_input_mocker.py +106 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/eval/mocks/test_mocks.py +1 -0
- uipath-2.1.90/tests/cli/test_init_agents_md.py +210 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/test_pull.py +7 -7
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/test_push.py +21 -21
- {uipath-2.1.88 → uipath-2.1.90}/uv.lock +1 -1
- uipath-2.1.88/src/uipath/_resources/REQUIRED_STRUCTURE.md +0 -93
- uipath-2.1.88/tests/cli/test_init_agents_md.py +0 -156
- {uipath-2.1.88 → uipath-2.1.90}/.claude/agents/command-tester.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/.claude/commands/prepare-pr.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/.cursorrules +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/.editorconfig +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/.gitattributes +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/.github/labeler.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/.github/workflows/auto-label.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/.github/workflows/cd.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/.github/workflows/ci.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/.github/workflows/commitlint.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/.github/workflows/integration_tests.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/.github/workflows/lint.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/.github/workflows/publish-dev.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/.github/workflows/publish-docs.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/.github/workflows/slack.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/.github/workflows/test-uipath-langchain.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/.github/workflows/test-uipath-llamaindex.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/.github/workflows/test.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/.gitignore +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/.pre-commit-config.yaml +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/.python-version +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/.vscode/extensions.json +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/.vscode/launch.json +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/.vscode/settings.json +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/CONTRIBUTING.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/LICENSE +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/README.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/CONTRIBUTING.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/FAQ.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/assets/env-preparation-failed-dark.png +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/assets/env-preparation-failed-light.png +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/assets/favicon.png +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/assets/llms.txt +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/assets/logo-dark.svg +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/assets/logo-light.svg +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/cli/index.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/core/actions.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/core/assets/cloud_env_var_dark.gif +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/core/assets/cloud_env_var_light.gif +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/core/assets/cloud_env_var_secret_dark.png +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/core/assets/cloud_env_var_secret_light.png +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/core/assets/copy_path_dark.png +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/core/assets/copy_path_light.png +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/core/assets.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/core/attachments.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/core/buckets.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/core/connections.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/core/context_grounding.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/core/documents.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/core/documents_models.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/core/environment_variables.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/core/getting_started.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/core/jobs.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/core/llm_gateway.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/core/processes.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/core/queues.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/core/traced.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/hooks.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/index.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/javascripts/extra.js +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/overrides/main.html +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/overrides/partials/actions.html +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/overrides/partials/logo.html +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/release_policy.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/sample_images/google-ADK-agent/agent-output.png +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/docs/stylesheets/extra.css +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/justfile +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/mkdocs.yml +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/py.typed +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/samples/asset-modifier-agent/.env.example +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/samples/asset-modifier-agent/README.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/samples/asset-modifier-agent/input.json +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/samples/asset-modifier-agent/main.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/samples/asset-modifier-agent/pyproject.toml +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/samples/asset-modifier-agent/uv.lock +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/samples/calculator/README.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/samples/calculator/evals/eval-sets/default.json +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/samples/calculator/evals/evaluators/equality.json +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/samples/calculator/evals/evaluators/llm-as-a-judge.json +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/samples/calculator/main.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/samples/calculator/pyproject.toml +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/samples/calculator/uipath.json +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/samples/event-trigger/.python-version +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/samples/event-trigger/README.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/samples/event-trigger/main.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/samples/event-trigger/pyproject.toml +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/samples/google-ADK-agent/.env.example +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/samples/google-ADK-agent/README.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/samples/google-ADK-agent/input.json +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/samples/google-ADK-agent/multi_tool_agent/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/samples/google-ADK-agent/multi_tool_agent/agent.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/samples/google-ADK-agent/pyproject.toml +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/samples/google-ADK-agent/uv.lock +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/scripts/debug_test.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/scripts/lint_httpx_client.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/README.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_auth/_auth_server.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_auth/_auth_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_auth/_models.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_auth/_oidc_utils.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_auth/_portal_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_auth/_url_utils.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_auth/_utils.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_auth/auth_config.json +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_auth/index.html +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_auth/localhost.crt +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_auth/localhost.key +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_dev/_terminal/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_dev/_terminal/_components/_chat.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_dev/_terminal/_components/_details.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_dev/_terminal/_components/_history.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_dev/_terminal/_components/_json_input.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_dev/_terminal/_components/_new.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_dev/_terminal/_models/_execution.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_dev/_terminal/_models/_messages.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_dev/_terminal/_styles/terminal.tcss +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_dev/_terminal/_utils/_chat.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_dev/_terminal/_utils/_exporter.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_dev/_terminal/_utils/_logger.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_evals/_console_progress_reporter.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_evals/_evaluator_factory.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_evals/_models/_evaluator.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_evals/_models/_evaluator_base_params.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_evals/_models/_exceptions.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_evals/_models/_mocks.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_evals/_models/_output.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_evals/_models/_sw_reporting.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_evals/_progress_reporter.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_evals/_span_collection.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_evals/mocks/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_evals/mocks/llm_mocker.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_evals/mocks/mocker_factory.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_evals/mocks/mockito_mocker.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_evals/mocks/mocks.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_runtime/_contracts.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_runtime/_escalation.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_runtime/_hitl.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_runtime/_runtime.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_runtime/_script_executor.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_templates/.psmdcp.template +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_templates/.rels.template +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_templates/[Content_Types].xml.template +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_templates/main.py.template +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_templates/package.nuspec.template +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_utils/_common.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_utils/_console.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_utils/_constants.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_utils/_debug.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_utils/_eval_set.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_utils/_folders.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_utils/_input_args.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_utils/_parse_ast.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_utils/_processes.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_utils/_studio_project.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_utils/_tracing.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/_utils/_uv_helpers.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/cli_auth.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/cli_deploy.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/cli_dev.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/cli_eval.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/cli_invoke.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/cli_new.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/cli_pack.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/cli_publish.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/cli_push.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/cli_run.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/middlewares.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_cli/spinner.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_config.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_events/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_events/_event_bus.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_events/_events.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_execution_context.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_folder_context.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_resources/CLAUDE.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_resources/CLI_REFERENCE.md +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_services/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_services/_base_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_services/actions_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_services/api_client.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_services/assets_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_services/attachments_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_services/buckets_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_services/connections_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_services/context_grounding_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_services/documents_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_services/entities_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_services/external_application_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_services/folder_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_services/jobs_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_services/llm_gateway_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_services/processes_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_services/queues_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_uipath.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_utils/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_utils/_auth.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_utils/_endpoint.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_utils/_infer_bindings.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_utils/_logs.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_utils/_read_overwrites.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_utils/_request_override.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_utils/_request_spec.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_utils/_ssl_context.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_utils/_url.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_utils/_user_agent.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/_utils/constants.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/agent/conversation/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/agent/conversation/async_stream.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/agent/conversation/citation.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/agent/conversation/content.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/agent/conversation/conversation.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/agent/conversation/event.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/agent/conversation/exchange.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/agent/conversation/message.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/agent/conversation/meta.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/agent/conversation/tool.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/agent/models/agent.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/eval/_helpers/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/eval/_helpers/helpers.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/eval/evaluators/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/eval/evaluators/base_evaluator.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/eval/evaluators/deterministic_evaluator_base.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/eval/evaluators/exact_match_evaluator.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/eval/evaluators/json_similarity_evaluator.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/eval/evaluators/llm_as_judge_evaluator.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/eval/evaluators/trajectory_evaluator.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/eval/mocks/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/eval/mocks/mockable.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/eval/models/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/eval/models/models.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/models/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/models/action_schema.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/models/actions.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/models/assets.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/models/attachment.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/models/auth.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/models/buckets.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/models/connections.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/models/context_grounding.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/models/context_grounding_index.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/models/documents.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/models/entities.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/models/errors.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/models/exceptions.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/models/interrupt_models.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/models/job.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/models/llm_gateway.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/models/processes.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/models/queues.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/py.typed +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/telemetry/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/telemetry/_constants.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/telemetry/_track.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/tracing/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/tracing/_otel_exporters.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/tracing/_traced.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/tracing/_utils.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/utils/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/utils/_endpoints_manager.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/src/uipath/utils/dynamic_schema.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/testcases/apicalls-testcase/main.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/testcases/apicalls-testcase/pyproject.toml +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/testcases/apicalls-testcase/run.sh +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/testcases/apicalls-testcase/src/assert.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/testcases/basic-testcase/main.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/testcases/basic-testcase/pyproject.toml +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/testcases/basic-testcase/run.sh +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/testcases/basic-testcase/src/assert.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/testcases/common/validate_output.sh +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/testcases/langchain-cross/agent.mermaid +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/testcases/langchain-cross/langgraph.json +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/testcases/langchain-cross/pyproject.toml +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/testcases/langchain-cross/run.sh +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/testcases/langchain-cross/src/assert.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/testcases/langchain-cross/src/main.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/testcases/llamaindex-cross/agent.mermaid +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/testcases/llamaindex-cross/llama_index.json +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/testcases/llamaindex-cross/pyproject.toml +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/testcases/llamaindex-cross/run.sh +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/testcases/llamaindex-cross/src/assert.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/testcases/llamaindex-cross/src/main.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/__init__.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/agent/models/test_agent.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/conftest.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/evaluators/test_json_similarity_evaluator.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/mocks/bindings_script.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/mocks/pyproject.toml +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/mocks/simple_script.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/mocks/uipath-mock.json +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/mocks/uipath-simple-script-mock.json +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/test_auth.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/test_hitl.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/test_init.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/test_input_args.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/test_invoke.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/test_new.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/test_oidc_utils.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/test_pack.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/test_portal_service_ensure_valid_token.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/test_portal_service_refresh_token.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/test_publish.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/test_run.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/test_utils.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/utils/common.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/utils/project_details.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/utils/test_dynamic_schema.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/cli/utils/uipath_json.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/conftest.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/sdk/services/conftest.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/sdk/services/test_actions_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/sdk/services/test_api_client.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/sdk/services/test_assets_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/sdk/services/test_attachments_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/sdk/services/test_base_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/sdk/services/test_buckets_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/sdk/services/test_connections_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/sdk/services/test_context_grounding_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/sdk/services/test_documents_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/sdk/services/test_entities_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/sdk/services/test_external_application_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/sdk/services/test_folder_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/sdk/services/test_jobs_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/sdk/services/test_llm_integration.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/sdk/services/test_llm_schema_cleanup.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/sdk/services/test_llm_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/sdk/services/test_processes_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/sdk/services/test_queues_service.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/sdk/services/test_uipath_llm_integration.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/sdk/services/tests_data/documents_service/create_validation_action_response.json +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/sdk/services/tests_data/documents_service/extraction_response.json +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/sdk/services/tests_data/documents_service/validated_result.json +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/sdk/test_bindings_inference.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/sdk/test_config.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/sdk/test_overwrites.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/tracing/test_otel_exporters.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/tracing/test_span_utils.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/tests/tracing/test_traced.py +0 -0
- {uipath-2.1.88 → uipath-2.1.90}/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.90
|
|
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.90"
|
|
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"
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
-
"""Script to update AGENTS.md with complete library documentation.
|
|
2
|
+
"""Script to update AGENTS.md reference files with complete library documentation.
|
|
3
3
|
|
|
4
4
|
This script extracts information from the uipath SDK and CLI commands and updates
|
|
5
|
-
the AGENTS.md
|
|
6
|
-
- SDK
|
|
7
|
-
- Quick API Reference (SDK services and methods)
|
|
5
|
+
the AGENTS.md reference files with comprehensive documentation including
|
|
6
|
+
- API Reference (SDK services and methods)
|
|
8
7
|
- CLI Commands Reference
|
|
9
8
|
"""
|
|
10
9
|
|
|
@@ -147,101 +146,8 @@ def get_service_methods(service_class: type) -> list[tuple[str, Any]]:
|
|
|
147
146
|
return methods
|
|
148
147
|
|
|
149
148
|
|
|
150
|
-
def generate_required_structure() -> str:
|
|
151
|
-
"""Generate Required Agent Structure documentation.
|
|
152
|
-
|
|
153
|
-
Returns:
|
|
154
|
-
Markdown string with required agent structure
|
|
155
|
-
"""
|
|
156
|
-
output = StringIO()
|
|
157
|
-
output.write("\n## Required Agent Structure\n\n")
|
|
158
|
-
output.write(
|
|
159
|
-
"**IMPORTANT**: All UiPath coded agents MUST follow this standard structure unless explicitly specified otherwise by the user.\n\n"
|
|
160
|
-
)
|
|
161
|
-
|
|
162
|
-
output.write("### Required Components\n\n")
|
|
163
|
-
output.write(
|
|
164
|
-
"Every agent implementation MUST include these three Pydantic models:\n\n"
|
|
165
|
-
)
|
|
166
|
-
output.write("```python\n")
|
|
167
|
-
output.write("from pydantic import BaseModel\n\n")
|
|
168
|
-
output.write("class Input(BaseModel):\n")
|
|
169
|
-
output.write(' """Define input fields that the agent accepts"""\n')
|
|
170
|
-
output.write(" # Add your input fields here\n")
|
|
171
|
-
output.write(" pass\n\n")
|
|
172
|
-
output.write("class State(BaseModel):\n")
|
|
173
|
-
output.write(
|
|
174
|
-
' """Define the agent\'s internal state that flows between nodes"""\n'
|
|
175
|
-
)
|
|
176
|
-
output.write(" # Add your state fields here\n")
|
|
177
|
-
output.write(" pass\n\n")
|
|
178
|
-
output.write("class Output(BaseModel):\n")
|
|
179
|
-
output.write(' """Define output fields that the agent returns"""\n')
|
|
180
|
-
output.write(" # Add your output fields here\n")
|
|
181
|
-
output.write(" pass\n")
|
|
182
|
-
output.write("```\n\n")
|
|
183
|
-
|
|
184
|
-
output.write("### Required LLM Initialization\n\n")
|
|
185
|
-
output.write(
|
|
186
|
-
"Unless the user explicitly requests a different LLM provider, always use `UiPathChat`:\n\n"
|
|
187
|
-
)
|
|
188
|
-
output.write("```python\n")
|
|
189
|
-
output.write("from uipath_langchain.chat import UiPathChat\n\n")
|
|
190
|
-
output.write('llm = UiPathChat(model="gpt-4o-2024-08-06", temperature=0.7)\n')
|
|
191
|
-
output.write("```\n\n")
|
|
192
|
-
output.write("**Alternative LLMs** (only use if explicitly requested):\n")
|
|
193
|
-
output.write("- `ChatOpenAI` from `langchain_openai`\n")
|
|
194
|
-
output.write("- `ChatAnthropic` from `langchain_anthropic`\n")
|
|
195
|
-
output.write("- Other LangChain-compatible LLMs\n\n")
|
|
196
|
-
|
|
197
|
-
output.write("### Standard Agent Template\n\n")
|
|
198
|
-
output.write("Every agent should follow this basic structure:\n\n")
|
|
199
|
-
output.write("```python\n")
|
|
200
|
-
output.write("from langchain_core.messages import SystemMessage, HumanMessage\n")
|
|
201
|
-
output.write("from langgraph.graph import START, StateGraph, END\n")
|
|
202
|
-
output.write("from uipath_langchain.chat import UiPathChat\n")
|
|
203
|
-
output.write("from pydantic import BaseModel\n\n")
|
|
204
|
-
output.write("# 1. Define Input, State, and Output models\n")
|
|
205
|
-
output.write("class Input(BaseModel):\n")
|
|
206
|
-
output.write(" field: str\n\n")
|
|
207
|
-
output.write("class State(BaseModel):\n")
|
|
208
|
-
output.write(" field: str\n")
|
|
209
|
-
output.write(' result: str = ""\n\n')
|
|
210
|
-
output.write("class Output(BaseModel):\n")
|
|
211
|
-
output.write(" result: str\n\n")
|
|
212
|
-
output.write("# 2. Initialize UiPathChat LLM\n")
|
|
213
|
-
output.write('llm = UiPathChat(model="gpt-4o-2024-08-06", temperature=0.7)\n\n')
|
|
214
|
-
output.write("# 3. Define agent nodes (async functions)\n")
|
|
215
|
-
output.write("async def process_node(state: State) -> State:\n")
|
|
216
|
-
output.write(" response = await llm.ainvoke([HumanMessage(state.field)])\n")
|
|
217
|
-
output.write(" return State(field=state.field, result=response.content)\n\n")
|
|
218
|
-
output.write("async def output_node(state: State) -> Output:\n")
|
|
219
|
-
output.write(" return Output(result=state.result)\n\n")
|
|
220
|
-
output.write("# 4. Build the graph\n")
|
|
221
|
-
output.write("builder = StateGraph(State, input=Input, output=Output)\n")
|
|
222
|
-
output.write('builder.add_node("process", process_node)\n')
|
|
223
|
-
output.write('builder.add_node("output", output_node)\n')
|
|
224
|
-
output.write('builder.add_edge(START, "process")\n')
|
|
225
|
-
output.write('builder.add_edge("process", "output")\n')
|
|
226
|
-
output.write('builder.add_edge("output", END)\n\n')
|
|
227
|
-
output.write("# 5. Compile the graph\n")
|
|
228
|
-
output.write("graph = builder.compile()\n")
|
|
229
|
-
output.write("```\n\n")
|
|
230
|
-
|
|
231
|
-
output.write("**Key Rules**:\n")
|
|
232
|
-
output.write("1. Always use async/await for all node functions\n")
|
|
233
|
-
output.write("2. All nodes (except output) must accept and return `State`\n")
|
|
234
|
-
output.write("3. The final output node must return `Output`\n")
|
|
235
|
-
output.write(
|
|
236
|
-
"4. Use `StateGraph(State, input=Input, output=Output)` for initialization\n"
|
|
237
|
-
)
|
|
238
|
-
output.write("5. Always compile with `graph = builder.compile()`\n\n")
|
|
239
|
-
|
|
240
|
-
return output.getvalue()
|
|
241
|
-
|
|
242
|
-
|
|
243
149
|
def generate_quick_api_docs() -> str:
|
|
244
|
-
"""Generate
|
|
150
|
+
"""Generate API Reference documentation for SDK.
|
|
245
151
|
|
|
246
152
|
Returns:
|
|
247
153
|
Markdown string with SDK API documentation
|
|
@@ -249,7 +155,7 @@ def generate_quick_api_docs() -> str:
|
|
|
249
155
|
from uipath import UiPath
|
|
250
156
|
|
|
251
157
|
output = StringIO()
|
|
252
|
-
output.write("\n##
|
|
158
|
+
output.write("\n## API Reference\n\n")
|
|
253
159
|
output.write(
|
|
254
160
|
"This section provides a comprehensive reference for all UiPath SDK services and methods. "
|
|
255
161
|
"Each service is documented with complete method signatures, including parameter types and return types.\n\n"
|
|
@@ -567,103 +473,29 @@ def generate_cli_docs() -> str:
|
|
|
567
473
|
return output.getvalue()
|
|
568
474
|
|
|
569
475
|
|
|
570
|
-
def
|
|
571
|
-
"""
|
|
476
|
+
def generate_agents_md_reference_files() -> None:
|
|
477
|
+
"""Generate separate reference files."""
|
|
572
478
|
resources_dir = Path(__file__).parent.parent / "src" / "uipath" / "_resources"
|
|
573
|
-
agents_md_path = resources_dir / "AGENTS.md"
|
|
574
479
|
|
|
575
|
-
if not agents_md_path.exists():
|
|
576
|
-
print(f"Error: AGENTS.md not found at {agents_md_path}", file=sys.stderr)
|
|
577
|
-
sys.exit(1)
|
|
578
|
-
|
|
579
|
-
with open(agents_md_path, "r", encoding="utf-8") as f:
|
|
580
|
-
content = f.read()
|
|
581
|
-
|
|
582
|
-
required_structure_marker = "## Required Agent Structure"
|
|
583
|
-
api_marker = "## Quick API Reference"
|
|
584
|
-
cli_marker = "## CLI Commands Reference"
|
|
585
|
-
reference_marker = "## Documentation Structure"
|
|
586
|
-
|
|
587
|
-
if reference_marker in content:
|
|
588
|
-
header = content.split(reference_marker)[0].rstrip()
|
|
589
|
-
elif required_structure_marker in content:
|
|
590
|
-
header = content.split(required_structure_marker)[0].rstrip()
|
|
591
|
-
elif api_marker in content:
|
|
592
|
-
header = content.split(api_marker)[0].rstrip()
|
|
593
|
-
elif cli_marker in content:
|
|
594
|
-
header = content.split(cli_marker)[0].rstrip()
|
|
595
|
-
else:
|
|
596
|
-
header = content.rstrip()
|
|
597
|
-
|
|
598
|
-
required_structure_path = resources_dir / "REQUIRED_STRUCTURE.md"
|
|
599
480
|
sdk_reference_path = resources_dir / "SDK_REFERENCE.md"
|
|
600
481
|
cli_reference_path = resources_dir / "CLI_REFERENCE.md"
|
|
601
482
|
|
|
602
|
-
required_structure = generate_required_structure()
|
|
603
483
|
api_docs = generate_quick_api_docs()
|
|
604
484
|
cli_docs = generate_cli_docs()
|
|
605
485
|
|
|
606
|
-
with open(required_structure_path, "w", encoding="utf-8") as f:
|
|
607
|
-
f.write(required_structure.lstrip("\n"))
|
|
608
|
-
|
|
609
486
|
with open(sdk_reference_path, "w", encoding="utf-8") as f:
|
|
610
487
|
f.write(api_docs.lstrip("\n"))
|
|
611
488
|
|
|
612
489
|
with open(cli_reference_path, "w", encoding="utf-8") as f:
|
|
613
490
|
f.write(cli_docs.lstrip("\n"))
|
|
614
491
|
|
|
615
|
-
updated_content = f"""{header}
|
|
616
|
-
|
|
617
|
-
## Documentation Structure
|
|
618
|
-
|
|
619
|
-
This documentation is split into multiple files for efficient context loading. Load only the files you need:
|
|
620
|
-
|
|
621
|
-
### Core Documentation Files
|
|
622
|
-
|
|
623
|
-
1. **@.agent/REQUIRED_STRUCTURE.md** - Agent structure patterns and templates
|
|
624
|
-
- **When to load:** Creating a new agent or understanding required patterns
|
|
625
|
-
- **Contains:** Required Pydantic models (Input, State, Output), LLM initialization patterns, standard agent template
|
|
626
|
-
- **Size:** ~90 lines
|
|
627
|
-
|
|
628
|
-
2. **@.agent/SDK_REFERENCE.md** - Complete SDK API reference
|
|
629
|
-
- **When to load:** Calling UiPath SDK methods, working with services (actions, assets, jobs, etc.)
|
|
630
|
-
- **Contains:** All SDK services and methods with full signatures and type annotations
|
|
631
|
-
- **Size:** ~400 lines
|
|
632
|
-
|
|
633
|
-
3. **@.agent/CLI_REFERENCE.md** - CLI commands documentation
|
|
634
|
-
- **When to load:** Working with `uipath init`, `uipath run`, or `uipath eval` commands
|
|
635
|
-
- **Contains:** Command syntax, options, usage examples, and workflows
|
|
636
|
-
- **Size:** ~200 lines
|
|
637
|
-
|
|
638
|
-
### Usage Guidelines
|
|
639
|
-
|
|
640
|
-
**For LLMs:**
|
|
641
|
-
- Read this file (AGENTS.md) first to understand the documentation structure
|
|
642
|
-
- Load .agent/REQUIRED_STRUCTURE.md when building new agents or need structure reference
|
|
643
|
-
- Load .agent/SDK_REFERENCE.md only when you need to call specific SDK methods
|
|
644
|
-
- Load .agent/CLI_REFERENCE.md only when working with CLI commands
|
|
645
|
-
|
|
646
|
-
**Benefits:**
|
|
647
|
-
- Reduced token usage by loading only relevant context
|
|
648
|
-
- Faster response times
|
|
649
|
-
- More focused context for specific tasks
|
|
650
|
-
"""
|
|
651
|
-
|
|
652
|
-
with open(agents_md_path, "w", encoding="utf-8") as f:
|
|
653
|
-
f.write(updated_content)
|
|
654
|
-
|
|
655
|
-
print(f"Successfully updated {agents_md_path}")
|
|
656
|
-
print(f"Generated {required_structure_path}")
|
|
657
|
-
print(f"Generated {sdk_reference_path}")
|
|
658
|
-
print(f"Generated {cli_reference_path}")
|
|
659
|
-
|
|
660
492
|
|
|
661
493
|
def main():
|
|
662
494
|
"""Main function."""
|
|
663
495
|
try:
|
|
664
|
-
|
|
496
|
+
generate_agents_md_reference_files()
|
|
665
497
|
except Exception as e:
|
|
666
|
-
print(f"Error updating AGENTS.md: {e}", file=sys.stderr)
|
|
498
|
+
print(f"Error updating AGENTS.md reference files: {e}", file=sys.stderr)
|
|
667
499
|
sys.exit(1)
|
|
668
500
|
|
|
669
501
|
|
|
@@ -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")
|